
Leader arm ergonomics, episode pacing, resets between episodes and what operator fatigue does to a LeRobot dataset. Real lerobot-record flags, real defaults, real numbers.
What you need to know
- •A recording session does not capture the task. It captures one human doing the task, at whatever precision that human still has in hour three.
- •lerobot-record ships with fps 30, episode_time_s 60, reset_time_s 60 and num_episodes 50. The reset window is exactly as long as the episode window, and that is not an accident.
- •The SO-101 leader uses three gear ratios so it holds its own weight and still moves with little force. On the SO-100 you physically remove the leader gears. Both are ergonomic fixes.
- •In the 54-user RoboTurk real-robot study, completion times dropped steadily as users gained experience. Your first episodes are your worst episodes.
- •robomimic's Multi-Human sets (6 operators, 300 trajectories) score lower than its single-operator Proficient-Human sets (200), despite containing 100 more demonstrations.
- •Record in short blocks, mark bad episodes as you go, and prune afterwards with lerobot-edit-dataset delete_episodes. Pruning is cheaper than retraining.
The dataset does not record the task, it records you
Every frame in a LeRobot dataset has an action column, and that column is the position your hand put the leader arm in at that instant. There is no filter between your wrist and the training target. Overshoot a grasp and correct back, and the correction is in the data. Pause because you lost track of which cube is next, and those sixty frames of stillness are in the data. Approach from a slightly higher arc than you did an hour ago, and the policy sees two approach distributions for what you call one task.
This is the whole premise of imitation learning: the model fits actions given observations, and it cannot know which parts of your behaviour were the task and which were you. The ACT paper notes that all human demonstrations are inherently stochastic even when a single person collects all of them. That stochasticity is why action chunking exists at all. Chunking absorbs some of it. It does not absorb a fatigued operator.
| What tiredness changes in the operator | What it becomes in the dataset | What the policy learns |
|---|---|---|
| Slower reaction to a misgrasp | Longer correction segments near the object | Hesitation as a normal part of approach |
| Larger holding tremor | High-frequency noise on wrist_flex and wrist_roll | A jittery action head, or noise averaged into a blurred target |
| Shoulder drifts higher over the session | Approach trajectory distribution splits in two | A bimodal approach that resolves to neither mode |
| Gripper squeezed less consistently | Narrower, inconsistent gripper span | Grasps that close too early or never fully close |
| Attention drops, restarts get missed | Episodes containing two attempts instead of one | Retry behaviour triggered at random |
| Reset done sloppily | Object start pose spreads without labels | Apparent generalisation that is really unlabelled variance |
That table lists mechanisms, not measured effects on your arm. The direction is the part that is well supported: in the RoboTurk real-robot study covered further down, task completion times dropped steadily as users gained experience. Operators change over a session, and the dataset is the integral of that change.
The leader arm is ergonomic hardware, and it shows
A leader-follower rig is the cheapest good teleoperation interface there is, because the mapping is joint to joint and your proprioception does the inverse kinematics for free. The catch is that you hold the leader up against gravity for the whole episode. Every design in this space has spent effort on that one problem.
On the SO-101, the follower uses six STS3215 motors with 1/345 gearing, but the leader uses three different gear ratios. The LeRobot docs state the reason directly: the leader uses differently geared motors to make sure it can both sustain its own weight and be moved without requiring much force. On the older SO-100 the fix is cruder. The assembly guide has you remove the gears from all six leader motors, so that you only use the position encoding of the motor and reduce friction to more easily operate the leader arm.
| Leader joint | Motor id | SO-101 gear ratio | SO-100 leader |
|---|---|---|---|
| Base / shoulder pan | 1 | 1 / 191 | gears removed, encoder only |
| Shoulder lift | 2 | 1 / 345 | gears removed, encoder only |
| Elbow flex | 3 | 1 / 191 | gears removed, encoder only |
| Wrist flex | 4 | 1 / 147 | gears removed, encoder only |
| Wrist roll | 5 | 1 / 147 | gears removed, encoder only |
| Gripper | 6 | 1 / 147 | gears removed, encoder only |
The shoulder lift keeps the high 1/345 ratio on the SO-101 because it carries the most static load. The wrist joints drop to 1/147 because you move them constantly and the friction there is what wears your hand out. If you expect to record hundreds of episodes, read the SO-100 versus SO-101 comparison with that in mind, and the full SO-100 guide for the build itself. The parts cost difference is around 20 EUR. The difference in how your forearm feels after ninety minutes is larger than that.
Feetech STS3215 bus servos on the SO-100 and SO-101 run at 7.4 V. A 12 V supply destroys them. Koch v1.1 uses Dynamixel motors on 5 V and 12 V rails, LeKiwi uses 7.4 V for the arm and 12 V for the base, so a bench with several arms carries several supplies that look interchangeable and are not. Label the bricks before you label anything else. If an arm misbehaves after a swap, start at servo not responding.
The bimanual ALOHA setups went the same way. The original design added a 3D-printed handle and scissor mechanism to the leader specifically to reduce the force required from the operator to backdrive the motor, plus a rubber band mechanism to partially counteract gravity on the leader side. ALOHA 2 replaced the scissor gripper with a low-friction rail design and swapped the rubber bands for passive gravity compensation built from off-the-shelf parts. Two hardware generations, both spent on operator effort.
Bench setup before the first episode
Everything fiddly should be fiddly before you record, not between episodes. Ports first, because they change when you replug. Cameras second, because they change when you reboot. Calibration third, because it is the one step that silently poisons every later episode if you rush it.
- 1Find and pin the serial ports
Run this once per arm, unplugging when prompted. Write the two paths on tape and stick it on the USB hub. On Linux you may also need to relax permissions on the tty device.
bashlerobot-find-port # example output # ['/dev/ttyACM0', '/dev/ttyACM1'] # Remove the USB cable from your MotorsBus and press Enter when done. # The port of this MotorsBus is /dev/ttyACM1 sudo chmod 666 /dev/ttyACM0 sudo chmod 666 /dev/ttyACM1 - 2Enumerate the cameras and note their real profile
The identifiers can change after a reboot or a replug, and the default stream profile is often not what you want. A camera advertising 1920x1080 at 15 fps will not feed a 30 fps recording loop.
bashlerobot-find-cameras opencv # --- Detected Cameras --- # Camera #0: # Name: OpenCV Camera @ 0 # Id: 0 # Default stream profile: # Width: 1920 # Height: 1080 # Fps: 15.0 - 3Calibrate both arms in the same session
Move every joint to the middle of its range, press Enter, then sweep each joint through its full range. Do the leader and the follower back to back so the two calibration files describe the same physical geometry. The id you pass here is the id you must reuse when recording.
bashlerobot-calibrate \ --robot.type=so101_follower \ --robot.port=/dev/ttyACM0 \ --robot.id=my_follower_arm lerobot-calibrate \ --teleop.type=so101_leader \ --teleop.port=/dev/ttyACM1 \ --teleop.id=my_leader_arm - 4Drive it for five minutes with the visualiser on
This is the dry run. Watch the camera feeds while you drive, not the arm. If you cannot do the task looking only at the camera images, the policy cannot either, and no amount of episodes will fix a view that does not show the contact.
bashlerobot-teleoperate \ --robot.type=so101_follower --robot.port=/dev/ttyACM0 \ --robot.id=my_follower_arm \ --robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 1, width: 640, height: 480, fps: 30} }" \ --teleop.type=so101_leader --teleop.port=/dev/ttyACM1 \ --teleop.id=my_leader_arm \ --display_data=true - 5Set the bench so you are not reaching
The leader base, your elbow and the work surface should let you drive with your upper arm close to your body. If you are recording standing with the leader at chest height, the shoulder lift joint carries your arm weight as well as the leader's, and that is the joint that decides how your approach trajectories drift.
The LeRobot dataset guidance is explicit: only the follower arm and the manipulated objects should move in frame, and the leader arm should not appear. If your hand or the leader drifts into the front camera view halfway through a session, the model gets a shortcut feature that will not exist at inference time. That failure has its own page: policy only works in one setup.
What lerobot-record actually assumes about you
The defaults below are read from lerobot's own recording config, src/lerobot/configs/dataset.py on the main branch, on 23 August 2026. They are worth reading as a statement about pacing, because that is what they are. For how the format itself is laid out on disk, see the dataset documentation and the LeRobot dataset glossary entry.
| Field | Default | What it implies about the session |
|---|---|---|
| fps | 30 | 30 action rows per second. A 60 s episode is 1800 rows. |
| episode_time_s | 60 | One minute is the assumed upper bound for a single attempt. |
| reset_time_s | 60 | You get as long to reset the scene as you had to do the task. |
| num_episodes | 50 | The default session is 50 episodes, roughly 100 minutes of wall clock at the other defaults. |
| video | true | Frames are encoded to MP4 rather than kept as PNG. |
| push_to_hub | true | The dataset uploads when the session ends unless you disable it. |
| num_image_writer_threads_per_camera | 4 | Four writer threads per camera. Too many blocks the main loop, too few starves the cameras. |
| num_image_writer_processes | 0 | Threads only by default. Raise it if fps is unstable. |
| streaming_encoding | false | Off by default. Turning it on makes save_episode near-instant. |
| no_stamp | false | A datetime tag is appended to repo_id at creation, so each session gets a unique name. |
Fifty episodes at one minute each plus a minute of reset is a hundred minutes of continuous fine motor work with no break structure at all. The defaults describe a budget; the protocol is yours to add. Fifty does line up with the minimum episode counts the trainers here want: 50 for ACT, GR00T N1.7 and Pi0.5, 30 for SmolVLA. That is a floor, not a target.
lerobot-record \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_follower_arm \
--robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 1, width: 640, height: 480, fps: 30} }" \
--teleop.type=so101_leader \
--teleop.port=/dev/ttyACM1 \
--teleop.id=my_leader_arm \
--display_data=true \
--dataset.repo_id=${HF_USER}/cube_to_bin \
--dataset.single_task="Pick the red cube and drop it in the bin" \
--dataset.num_episodes=12 \
--dataset.episode_time_s=25 \
--dataset.reset_time_s=15 \
--dataset.fps=30 \
--dataset.push_to_hub=falseTwo flags do the pacing work. episode_time_s=25 is roughly twice the time the task actually takes you, so a clean run finishes early and a fumbled one gets cut off instead of becoming a two-attempt episode. num_episodes=12 ends the block while you are still sharp. Resuming into the same dataset later is supported, and the flag semantics are easy to get wrong.
When you re-run the same command with --resume=true, --dataset.num_episodes must be set to the number of additional episodes to record, not the target total. You also have to pass --dataset.root pointing at the local path. Get this wrong and you either stop 12 episodes short or record 50 more than you meant to. To start over from scratch you must delete the dataset directory by hand; the recorder will not do it for you.
Pacing: the three keys that make a session survivable
Three keys control the flow during recording, and they are the difference between a session you can prune afterwards and one you cannot. On Linux they work on X11, Wayland and headless or SSH sessions with no $DISPLAY setup: when no global keyboard backend is available, lerobot-record reads the same keys from the terminal, so it has to run in an interactive TTY that has focus. That fallback covers the recording control flow only. Keyboard teleoperation, where the keyboard replaces the leader arm, still needs a global key backend.
- Right arrow or n: end the current episode or reset phase early and move to the next. This is your main tool. A clean run at 12 seconds should not sit there burning the remaining 13 seconds of episode_time_s with the arm parked.
- Left arrow or r: cancel the current episode and re-record it. The episode buffer is cleared and nothing is written. Use it the moment you know the attempt is bad, not at the end.
- Escape or q: stop the session, encode the videos and upload. This is the honest exit when you notice your hand is shaking.
The re-record key deserves a habit, not just knowledge. When an episode goes wrong at second 3 the instinct is to recover and finish, because finishing feels productive. That instinct is what fills a dataset with recovery behaviour. Press r; it costs ten seconds. Leaving the episode in costs a retraining run at 4 to 12 USD on the A100 tier or 1 to 3 USD on the 4090 tier, plus the hours.

ALOHA is the useful reference for session structure. Teleoperation and recording both run at 50 Hz there, episodes last 8 to 14 seconds depending on task complexity, which is 400 to 700 timesteps, and they recorded 50 demonstrations per task except Thread Velcro, which got 100. Short episodes, moderate counts. Five blocks of 12 episodes at a 25 s cap is about 8 minutes of recording each:
| Block | After the block |
|---|---|
| 1 | Stand up, replay episode 0, check the wrist view |
| 2 | Break, 5 min, hands off the leader |
| 3 | Move the object start zone, note the change |
| 4 | Break, review any episode you flagged |
| 5 | Stop for the day at 60 episodes |
That schedule is assembled from the pieces above, not a measured protocol. What is not negotiable: a short episode cap, real breaks, and reviewing something between blocks. Five blocks of twelve clears the 50-episode floor for ACT on the SO-100 with a margin for the ones you will delete.
The reset is part of the data, even when it is not recorded
In lerobot-record the reset phase calls the same control loop as the episode, with the teleoperator live and the dataset argument left out. The arm still follows your leader; nothing is written. That is deliberate. You drive the follower back to its start pose with the same interface you just used, so the arm never gets yanked by hand and the servos never get back-driven against their gearing. The recorder also skips the reset after the last episode of a run, which is why a block that ends cleanly ends faster than the arithmetic suggests.
The effect on the dataset is indirect but strong. The object start pose at frame 0 of the next episode is entirely determined by how you reset. Place the cube by eye, let your eye drift over the session, and you have added a variable the dataset does not label. The LeRobot guidance is roughly 10 episodes per object location, and to avoid adding too much variation too quickly. That only works if the locations are actual locations.
- The start pose distribution is discrete and countable, so 10 episodes per location is a real claim
- You can tell a training failure from a coverage gap, because you know exactly which locations were covered
- Resets get faster over the session instead of slower, which protects the tail episodes
- A second operator can reproduce your session next week
- Variation is limited to the marks you drew, so the policy may cling to those exact poses
- The marks are visible in the camera frames and become a feature the policy can use
- Slower to set up, and you have to redo it if the camera moves
- Free placement covers more of the workspace per episode, if you can keep it honest
At episode 40 the temptation is to hammer the right arrow through every reset and keep the arm moving. Resist it. The reset is the only structured pause the recording loop gives you, and reset_time_s defaults to a full 60 seconds for that reason. Cutting it to 15 seconds is reasonable. Cutting it to zero means your last twenty episodes are recorded by a more tired operator than your first twenty.
What the evidence says about operator variance
The clearest experiment here is robomimic's dataset design. The Proficient-Human sets came from 1 operator on the RoboTurk platform, 200 successful trajectories each. The Multi-Human sets came from 6 operators, 50 trajectories each for 300 total, rated 2 worse, 2 okay, 2 better. The result worth carrying around: success rates are lower on the Multi-Human sets than on the Proficient-Human sets even though the Multi-Human sets contain 100 more demonstrations. The study attributes that to suboptimal and multimodal data, and separately reports that batch reinforcement learning methods are proficient on machine-generated data but poor on human data, while history-dependent models do markedly better on it.
That is usually read as a statement about multiple people. It is equally a statement about one person across a long session: the operator at episode 45 is not the one from episode 5. RoboTurk's real-robot deployment, which extended the platform from simulation onto three Sawyer arms, saw the drift in the other direction: 54 users in one week produced 2144 demonstrations and 111.25 hours across three tasks at a mean task length of 186 seconds, completion times dropping steadily with experience. There is a warm-up curve and a fatigue curve, and your dataset sits on both. The RoboTurk write-up covers that platform in more detail.
| Source | Collection design | Number that matters here |
|---|---|---|
| robomimic (CoRL 2021) | PH: 1 operator, 200 trajectories. MH: 6 operators, 50 each, 300 total | MH scores lower than PH despite 100 more demonstrations |
| RoboTurk real robot (IROS 2019) | 54 users, 1 week, 3 tasks, 3 Sawyer arms | 2144 demonstrations, 111.25 hours, mean task length 186 s |
| ALOHA (2023) | Single-operator bimanual leader-follower at 50 Hz | 50 demonstrations per task, 100 for Thread Velcro, 8 to 14 s per episode |
| DemInf (2025) | Mutual-information based quality scoring and filtering | 5 to 10 percent improvement on RoboMimic from curating the dataset |
| DQAF (2026) | Episode-level quality feedback during collection, 3-operator pilot | The operator given automated post-episode feedback improved faster; no effect size reported |
The DemInf result is the practical one: filtering a dataset by an automatic quality score, rather than collecting more of it, bought a 5 to 10 percent improvement on RoboMimic tasks plus better performance on real ALOHA and Franka setups. A 2026 framework called DQAF closes the loop during collection instead, scoring each episode on sub-task progress, motion smoothness, stalls and kinematic limits and turning that into natural-language feedback right after the episode. Read that one at its actual size: in a pilot with three novice operators, the one who got the automated feedback improved faster than those who did not, with no effect size reported. Neither tool ships with LeRobot today, so the manual equivalent is you, a notebook and the data quality checklist.
Two ways to run the session
Everything runs on the machine the arms are plugged into. Install LeRobot with the Feetech extra, calibrate, then record in blocks. Commands verified against the LeRobot main branch docs and source on 23 August 2026.
pip install -e ".[feetech]"
# one block of 12 short episodes, stays local
lerobot-record \
--robot.type=so101_follower --robot.port=/dev/ttyACM0 \
--robot.id=my_follower_arm \
--robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 1, width: 640, height: 480, fps: 30} }" \
--teleop.type=so101_leader --teleop.port=/dev/ttyACM1 \
--teleop.id=my_leader_arm \
--dataset.repo_id=${HF_USER}/cube_to_bin \
--dataset.root=./data/cube_to_bin \
--dataset.single_task="Pick the red cube and drop it in the bin" \
--dataset.num_episodes=12 \
--dataset.episode_time_s=25 \
--dataset.reset_time_s=15 \
--dataset.push_to_hub=false \
--display_data=true
# next block, same dataset: num_episodes is ADDITIONAL episodes
lerobot-record \
... same flags ... \
--dataset.root=./data/cube_to_bin \
--dataset.num_episodes=12 \
--resume=true
# review a specific episode before you trust the block
lerobot-dataset-viz --repo-id ${HF_USER}/cube_to_bin \
--root ./data --mode local --episode-index 7You own the pacing, the marks on the table and the pruning. You also own the ffmpeg install, the USB bandwidth budget across two cameras and the fact that identifiers change on reboot. Budget an evening for the first setup and treat the first block of 12 as throwaway warm-up.
The desktop client records LeRobot-format datasets straight from a teleoperation session: episodes, camera streams and joint states, no flag archaeology. Get it from the download page and follow the client docs. The recorded dataset then feeds the training form directly.
- The dataset lands in LeRobot format, so it is accepted by the trainers without conversion. Note that a v3.0 dataset crashes the GR00T loader and has to be converted down to v2.1, which is its own failure page.
- Recorded datasets can be published to the public dataset directory, or kept private. You can also point the trainer at a Hugging Face repo id or at a dataset on your own machine.
- If you do not own an arm yet, /live streams a physical SO-100 with no signup, queue-based, which is enough to find out whether leader-follower driving suits you before you buy servos.
- Paid operator work runs through the operator programme, with the practical side documented in the operator guide.
What the platform does not do is watch your posture or count your breaks. It removes the plumbing around the session. The session itself is still a physical task performed by a person, and the pacing decisions in this article stay yours. See record your first dataset for the guided path.
Prune the episodes fatigue ruined
Pressing r during the session catches the obvious failures. It misses the slow ones, where the task succeeded but the trajectory wandered. Those you find afterwards: open the visualiser, step through the episodes you flagged, and delete the ones that are technically successful and behaviourally wrong.
# look at one episode: camera streams, joint states and actions on a timeline
lerobot-dataset-viz \
--repo-id ${HF_USER}/cube_to_bin \
--root ./data --mode local \
--episode-index 41
# how many episodes and frames do I actually have
lerobot-edit-dataset \
--repo_id ${HF_USER}/cube_to_bin \
--operation.type info
# drop the bad ones into a NEW dataset, keeping the original intact
lerobot-edit-dataset \
--repo_id ${HF_USER}/cube_to_bin \
--new_repo_id ${HF_USER}/cube_to_bin_pruned \
--operation.type delete_episodes \
--operation.episode_indices "[7, 41, 42, 55]"Two habits make this cheap. Keep a text file open with one line per episode index and a two-word note, because at review time you will not remember why episode 41 felt wrong. And keep one task string for the whole session: the guidance is 25 to 50 characters clearly describing the objective. To fix wording later, modify_tasks can rewrite it, but that operation edits in place and ignores new_repo_id.

If the recording loop cannot keep up, LeRobot logs: Control loop is running slower (X Hz) than the target FPS (30 Hz). Dataset frames might be dropped and robot control might be unstable. It lists the causes as camera FPS not keeping up, policy inference taking too long, and CPU starvation. Do not record through this. Frames dropped unevenly mean the timestamps in your dataset no longer describe the motion you performed, and every episode recorded after the warning appeared is suspect. Stop, fix the camera resolution or the writer thread count, restart the block.
Where none of this helps
Three honest limits. First, no amount of pacing discipline fixes a camera that cannot see the contact. The LeRobot rule of thumb is that you should be able to do the task yourself looking only at the camera images. If you cannot, stop recording and move a camera. Camera problems are cheaper to fix than dataset problems.

Second, this platform does not measure your fatigue. There is no posture check, no break timer, no per-episode smoothness score. The prototypes that score episodes on smoothness and stalls exist in papers, not in the tooling you have today. Your substitute is a short block, a notebook and the discipline to stop.
Third, distance. Driving an arm over the public internet works, and the no-hardware entry points exist for exactly that. But every round trip you add sits between your hand and the follower, and the same physics governs the return path at inference time. The control loop runs at 20 ms per action step for ACT, 152 ms for GR00T N1.7, 165 ms for GR00T N1.5, 245 ms for SmolVLA and 485 ms for Pi0.5. Adding public-internet round trips on top of inference latency turns a working policy into a hesitant one. Remote inference is viable for slow pick-and-place, not for fast reactive motion, and the same applies to remote recording of fast tasks.
Short episodes, real resets, deliberate breaks, and a habit of pressing r the moment an attempt goes wrong. That combination costs you an hour of session time and saves you a training run.
Get paid to record clean episodes
Operators drive real SO-100 arms and record LeRobot datasets from anywhere. The pacing habits in this article are the job.
Become an operatorHow long should a single episode be?▾
Set episode_time_s to roughly twice the time the task takes you when it goes well, then end each clean run early with the right arrow. The LeRobot default is 60 seconds; ALOHA episodes ran 8 to 14 seconds at 50 Hz, or 400 to 700 timesteps. A cap that is too generous turns a fumbled attempt into a two-attempt episode, which is worse than a discarded one.
Should one person record the whole dataset, or several?▾
For a first working policy, one person. robomimic built its Proficient-Human sets from 1 operator with 200 trajectories and its Multi-Human sets from 6 operators with 50 each, rated 2 worse, 2 okay, 2 better, and the Multi-Human sets scored lower despite holding 100 more demonstrations. Add operators once the single-operator policy works, and record their episodes as separate datasets so you can drop one without redoing everything.
How many episodes do I need before training is worth it?▾
The minimums here are 50 episodes for ACT, GR00T N1.7 and Pi0.5, and 30 for SmolVLA. Those are floors for the trainer to accept the job, not targets for a policy that works. Record past the floor so you can delete the ones you spoil. A run costs 4 to 12 USD on the A100 or H100 tier and 1 to 3 USD on the RTX 4090 tier.
Is the reset between episodes recorded?▾
No. lerobot-record runs the same control loop for the reset but without passing the dataset, so the arm still follows your leader and nothing is written; the reset after the final episode is skipped entirely. Drive the follower back rather than pushing it by hand. The object start pose you set during the reset silently determines the first frame of the next episode.
What is the difference between the SO-100 and SO-101 leader arm for long sessions?▾
The SO-101 leader uses three gear ratios across its six joints: 1/191 on base and elbow, 1/345 on the shoulder lift, 1/147 on the three wrist and gripper joints, so it holds its own weight while still moving with little force. On the SO-100 you remove the gears from all six leader motors, so only the position encoder is used and friction drops. Both target the same problem: how much force your hand supplies for an hour.
I recorded 60 episodes and 8 of them are bad. Do I retrain or re-record?▾
Neither immediately. Delete them with lerobot-edit-dataset delete_episodes, writing to a new repo id so the original survives. Curating an existing dataset bought a 5 to 10 percent improvement on RoboMimic tasks in the DemInf work, which is cheaper than another session and much cheaper than training on data you know is wrong.
Sources
- LeRobot, Imitation Learning on Real-World Robots: lerobot-teleoperate, lerobot-record, keyboard controls and tips for gathering data, read 23 Aug 2026
- lerobot DatasetRecordConfig, main branch: fps 30, episode_time_s 60, reset_time_s 60, num_episodes 50, read 23 Aug 2026
- lerobot CycleTimer, main branch: the slow control loop warning and its listed causes, read 23 Aug 2026
- LeRobot SO-101 guide: leader arm gear ratios per joint and calibration procedure
- LeRobot SO-100 guide: removing the gears from the six leader motors to reduce friction
- LeRobot Cameras: lerobot-find-cameras, OpenCVCameraConfig and default stream profiles
- LeRobot Using the Dataset Tools: lerobot-edit-dataset delete_episodes, info, modify_tasks and lerobot-dataset-viz
- Hugging Face, What makes a good dataset: two camera views, 30 fps, leader arm out of frame, 25 to 50 character task strings
- Learning Fine-Grained Bimanual Manipulation with Low-Cost Hardware (ALOHA / ACT), Zhao et al., arXiv 23 Apr 2023
- ALOHA 2: low-friction rail leader grippers and passive gravity compensation replacing the rubber band system
- Scaling Robot Supervision to Hundreds of Hours with RoboTurk, Mandlekar et al., IROS 2019: 54 users, 2144 demonstrations, 111.25 hours, 186 s mean task length, 3 Sawyer arms
- robomimic v0.1 datasets: Proficient-Human 1 operator 200 trajectories, Multi-Human 6 operators rated worse / okay / better
- What Matters in Learning from Offline Human Demonstrations for Robot Manipulation, Mandlekar et al., CoRL 2021: MH below PH despite 100 more demos, batch RL weak on human data
- Robot Data Curation with Mutual Information Estimators (DemInf), 5 to 10 percent improvement on RoboMimic from filtering
- Closing the Loop in Teleoperation: Episode-Level Data Quality Assessment and Feedback, Narayanan et al., arXiv 25 May 2026: sub-task progress, smoothness, stalls, kinematic limits, 3-operator pilot
Sources
- LeRobot, Imitation Learning on Real-World Robots: lerobot-teleoperate, lerobot-record, keyboard controls and tips for gathering data, read 23 Aug 2026
- lerobot DatasetRecordConfig, main branch: fps 30, episode_time_s 60, reset_time_s 60, num_episodes 50, read 23 Aug 2026
- lerobot CycleTimer, main branch: the slow control loop warning and its listed causes, read 23 Aug 2026
- LeRobot SO-101 guide: leader arm gear ratios per joint and calibration procedure
- LeRobot SO-100 guide: removing the gears from the six leader motors to reduce friction
- LeRobot Cameras: lerobot-find-cameras, OpenCVCameraConfig and default stream profiles
- LeRobot Using the Dataset Tools: lerobot-edit-dataset delete_episodes, info, modify_tasks and lerobot-dataset-viz
- Hugging Face, What makes a good dataset: two camera views, 30 fps, leader arm out of frame, 25 to 50 character task strings
- Learning Fine-Grained Bimanual Manipulation with Low-Cost Hardware (ALOHA / ACT), Zhao et al., arXiv 23 Apr 2023
- ALOHA 2: low-friction rail leader grippers and passive gravity compensation replacing the rubber band system
- Scaling Robot Supervision to Hundreds of Hours with RoboTurk, Mandlekar et al., IROS 2019: 54 users, 2144 demonstrations, 111.25 hours, 186 s mean task length, 3 Sawyer arms
- robomimic v0.1 datasets: Proficient-Human 1 operator 200 trajectories, Multi-Human 6 operators rated worse / okay / better
- What Matters in Learning from Offline Human Demonstrations for Robot Manipulation, Mandlekar et al., CoRL 2021: MH below PH despite 100 more demos, batch RL weak on human data
- Robot Data Curation with Mutual Information Estimators (DemInf), 5 to 10 percent improvement on RoboMimic from filtering
- Closing the Loop in Teleoperation: Episode-Level Data Quality Assessment and Feedback, Narayanan et al., arXiv 25 May 2026: sub-task progress, smoothness, stalls, kinematic limits, 3-operator pilot
Ready for high-quality robotics data?
AY-Robots connects your robots to skilled operators worldwide.
Get Started