A session produces two things: motion now, and a dataset later. The two want opposite things, so recording happens away from the control path.

How to record

Give the follower a path and it records while you drive.
That attaches a recorder when the session starts and closes it when the session stops. To turn it on and off yourself, leave record= out and call the methods directly. Both sides can record. Everything above works the same on a Leader, which is useful when the person driving is not on the same machine as the arm.
Recording never blocks the control path. Control keeps only what it needs and discards the rest, which is right for moving a robot and wrong for a dataset. If the disk cannot keep up, rows are dropped rather than allowed to stall the loop, and every drop is counted into episode.json. See Recording format.

Episodes

An episode is one demonstration. By default the deadman marks the boundary: squeeze to start, release to end.
success is True, False, or None for not judged, so you can decide later whether failures are noise or negative examples.

Where it is kept

On the robot. The path you passed. The follower already holds the commanded value, the value read back and the camera frames, so nothing is lost and every timestamp comes from one machine. In cloud storage. Pass cloud_recording=True and the same episodes are uploaded as well, paired with the local copy by episode id. They go to the storage configured for your VideoSDK account, set up on the API keys page. See Cloud recording.

Export

A recorded session becomes a LeRobot dataset with videosdk_teleop.export for the join and a writer script from the examples repo.

Exporting datasets

The functions, the commands, and the correlation quality to check first.

Recording format

The files a session writes, and the counters to check before training.

Sync

Matching video to joint readings.

Types

Every id and what creates it.

Cloud recording

Uploading episodes to your own storage alongside the local copy.