// Docs

Metadata, tasks, and stats

LeRobot metadata, task labels, feature stats, and when they change

LeRobot datasets carry metadata beside episode and frame data. Refiner reads and writes that metadata so downstream training code can understand the dataset.

Metadata

row = mdr.read_lerobot("hf://datasets/acme/pick-cubes").take(1)[0]

print(row.metadata.info.fps)
print(row.metadata.info.robot_type)
print(row.metadata.info.features)

Metadata includes dataset-level information such as fps, robot type, feature definitions, paths, and video encoding information.

Tasks

LeRobot stores task text in a task table and references tasks by task_index.

print(row.tasks)
print(row.task)

row.task is a convenience alias for the first item in row.tasks.

When reading multiple LeRobot roots, Refiner merges task tables and remaps indices so task text stays stable.

Stats

Feature stats describe distributions used by training and normalization code.

if "action" in row.stats:
    print(row.stats["action"].mean)

Stats are preserved when they are still valid. Operations that change a feature should drop stale stats for that feature. For example, motion trimming drops video stats for clipped videos so the writer recomputes them.

Writer behavior

write_lerobot writes:

OutputSource
meta/info.jsonmerged feature metadata and output paths
meta/tasks.parquetmerged task table
meta/stats.jsoncomputed or reused feature stats
meta/episodes/...episode rows
data/...frame parquet files
videos/...video files

See Writing LeRobot.