lerobot
The manipulation-vertical core tool skill for robium: the LeRobotDataset
format, loading and recording episodes, training imitation-learning and
VLA policies (ACT, Diffusion, Pi0/Pi0.5/SmolVLA and others), evaluating in
simulation, and teleoperation. LeRobot (huggingface/lerobot, PyPI package
lerobot, version 0.6.1 as of this session, requires-python >=3.12)
is HuggingFace's end-to-end robot-learning library — this skill embeds the
robotics-specific glue (dataset shape, training/eval CLI, sim envs,
teleoperation) and delegates hub mechanics (auth, upload/download, model
cards) to the huggingface skill's territory. LeRobot moves fast; every
command below is either a direct upstream docstring/doc example fetched
this session or marked with how it was verified — re-check before relying
on exact flags in a real project.
When to use this skill
- Any manipulation/imitation-learning task: loading or recording a
LeRobotDataset, training a policy (ACT, Diffusion, Pi0-family, SmolVLA,
...), evaluating a policy in simulation, teleoperating a robot arm.
- The trigger phrases in the description: 'lerobot', 'manipulation policy',
'imitation learning', 'train a robot arm policy', 'ACT', 'diffusion
policy'.
- Cross-references — go to the sibling skill instead when the question is:
- Hub auth, dataset/model upload-download, model cards, repo management →
the
huggingface skill's territory; LeRobot's own hf auth login/
hf upload commands are shown here only where a lerobot workflow
requires them inline.
- Whether to use uv or Docker, GPU passthrough, headless/remote display →
environments (load first if not already decided; see Key directives).
- Deciding which dataset(s) to source or combine for a task → the
data umbrella skill's territory.
- Rendering/inspecting recorded episodes in depth → the
rerun skill;
LeRobot's own --viz extra and lerobot-dataset-viz script wrap Rerun
directly — cross-referenced here by name, not re-taught.
- Classical motion planning (no learned policy) → out of scope repo-wide;
this skill and the manipulation vertical are learning-based only.
- The NVIDIA Isaac Lab RL stack (GPU-parallel RL/IL training environments,
prebuilt tasks, policy export) →
isaac-lab.
- The whole-stack decision this feeds into →
architect (routes here).
Key directives
- Delegation posture: embed + links. The manipulation-specific glue
(LeRobotDataset shape, training/eval CLI, which policies exist, sim envs
shipped) lives in this skill and its references, because no single
upstream page ties it together for a new robium project — but hub
mechanics (auth, push/pull, model cards) are explicitly not
re-explained here; they belong to the
huggingface skill once it
exists, and LeRobot's own hf auth login/hf upload invocations are
shown inline only as far as a lerobot workflow needs them.
- uv-first, per
environments. LeRobot is a pure-Python ML package —
environments' decision tree routes it to uv, not Docker, unless the
project also needs ROS 2 or another system dependency. LeRobot's own
installation docs default to conda but explicitly document a uv path
(uv python install 3.12, uv venv --python 3.12, PyTorch >= 2.10
only) — this skill's Quick start uses environments' uv add/uv run
pattern instead, since a robium project depends on lerobot as a
package rather than developing it from source. See Quick start and
the environments skill's uv-patterns reference.
- Start from a pretrained/hub policy or an official example config
before training from scratch. Evaluate an existing hub checkpoint
(e.g.
lerobot/diffusion_pusht) in sim first to validate the eval
pipeline end to end with zero training risk, and when you do train, start
from --policy.type=act (or another shipped policy type) against an
existing dataset — an official example config — rather than hand-rolling
a new policy config. Only reach for --policy.path=<hub-id> to fine-tune
an existing checkpoint, or a fully custom config, once the standard path
has been verified working. See Quick start and
references/policies-and-training.md.
- Small-scale fine-tune before a long run. Run a short
--steps smoke
training (low thousands, not tens of thousands) against the target
dataset/policy combination first, confirm the loss curve and an eval
pass both look sane, then scale --steps up for the real run. See
examples/train-act-command.md and references/policies-and-training.md
for the compute-hardware guide this scales against.
- Never write LeRobot CLI flags, dataset schema fields, or the shipped
policy/env list from memory. LeRobot ships new policies, environments,
and CLI scripts frequently, and its own docs note the dataset format
itself has changed major versions (v2.1 to v3.0) — flags and script names
that were correct in an older tutorial or a training run's memory are not
a safe default. Every command and claim in this skill is marked with
how it was verified this session (direct fetch of the
huggingface/lerobot
GitHub repo's README/docs/source/src/lerobot at the main branch, or
the HF Hub API for dataset/model existence) — re-verify against
github.com/huggingface/lerobot or huggingface.co/docs/lerobot before
repeating a claim in a real project.
Quick start
This walks through the manipulation-vertical trial-run backbone: a uv
environment, evaluating a pretrained baseline in sim, then a small-scale
fine-tune and re-evaluation — all against the same dataset/env pair
(lerobot/pusht dataset, pusht sim env) so every step is internally
consistent. Source: huggingface/lerobot's README, docs/source/installation.mdx,
and src/lerobot/scripts/lerobot_eval.py's own docstring example, fetched
directly this session.
1. Set up a uv environment (see the environments skill's uv-patterns
reference for the general pattern):
uv python pin 3.12 # LeRobot requires Python >=3.12
uv add "lerobot[core_scripts,training,pusht]"
core_scripts pulls the dataset/hardware/viz extras lerobot-record,
lerobot-replay, and lerobot-calibrate need; training adds accelerate
and wandb; pusht adds the gym-pusht sim environment used below. Install
ffmpeg for video decoding — sudo apt install ffmpeg (Linux) or
brew install ffmpeg (Apple Silicon) if on PyTorch >= 2.10, otherwise
conda install ffmpeg -c conda-forge. See references/datasets.md and the
environments skill's GPU guidance for the CUDA-wheel variant if training on
an NVIDIA GPU.
2. Sanity-check the install:
uv run lerobot-info
3. Evaluate an existing pretrained policy in sim first (validates the
eval pipeline before any training — the "start from pretrained" directive).
This is lerobot_eval.py's own docstring example, fetched directly:
uv run lerobot-eval \
--policy.path=lerobot/diffusion_pusht \
--env.type=pusht \
--eval.batch_size=10 \
--eval.n_episodes=10 \
--policy.device=cuda # or mps / cpu — see Platform gotchas
4. Small-scale fine-tune an ACT policy on the same dataset — see
examples/train-act-command.md for the full command (a short --steps
smoke run before scaling up).
5. Re-run step 3's eval command with --policy.path pointed at your new
checkpoint's outputs/train/.../checkpoints/last/pretrained_model directory
to confirm the trained policy improves on the baseline.
For loading/recording datasets, see the Usage patterns below and
references/datasets.md; for the full policy/training picture, see
references/policies-and-training.md; for sim envs beyond pusht, see
references/eval-and-sim.md.
Usage patterns
Browse/load a hub dataset. LeRobotDataset(repo_id) downloads and
caches a dataset from the Hub (~/.cache/huggingface/lerobot/{repo_id});
StreamingLeRobotDataset(repo_id) iterates it directly from the Hub with no
local copy. Browse candidate datasets via the hub's LeRobot tag or the
hosted dataset visualizer
before committing to one — actually pulling/searching the Hub beyond that is
the huggingface skill's territory. See references/datasets.md and
examples/load-dataset-snippet.py.
Visualize episodes. lerobot-dataset-viz --repo-id=<id> --episode-index=0
renders a recorded/loaded episode through Rerun, locally or streamed from a
headless machine (--mode distant) — the visualization mechanics themselves
belong to the rerun skill; this skill only owns invoking the LeRobot-side
command. See references/datasets.md and Platform gotchas.
Train a policy on an existing dataset. lerobot-train --dataset.repo_id=<id> --policy.type=act --output_dir=<dir> --policy.device=<cuda|mps|cpu> --policy.repo_id=<hub-id> trains a fresh policy shaped to the dataset's own
state/action/camera features; swap --policy.type for another shipped
policy or --policy.path=<hub-id> to fine-tune an existing checkpoint
instead. See examples/train-act-command.md and
references/policies-and-training.md.
Evaluate in a sim env. lerobot-eval --policy.path=<id-or-dir> --env.type=<pusht|aloha|libero|...> --eval.n_episodes=<n> runs rollouts in
a gym-vectorized sim env and reports success/reward metrics; multi-task
suites like LIBERO accept a comma-separated --env.task list. See
references/eval-and-sim.md.
Record new episodes. lerobot-record --robot.type=<id> --teleop.type=<id> --dataset.repo_id=<id> --dataset.num_episodes=<n> --dataset.single_task=<desc>
drives a real robot via teleoperation, saves a LeRobotDataset locally, and
pushes it to the Hub on completion (dataset.finalize() must run first —
the CLI does this for you; hand-rolled recording loops must call it
explicitly). See references/datasets.md.
Platform gotchas
- GPU vs Apple Silicon (MPS) vs CPU training expectations differ by an
order of magnitude.
--policy.device (cuda/mps/cpu, usually
auto-detected) selects the accelerator. Per LeRobot's own compute-hardware
guide (fetched directly this session): ACT on a single RTX 4090 does ~5
epochs over a ~50-episode/45k-frame dataset in ~30-60 min; the same run on
Apple Silicon (M1/M2/M3 Max, MPS) takes ~6-14 h. CPU-only is not a training
target — use it only for a tiny smoke test (a few dozen steps) to confirm
the pipeline runs, then move to a GPU (local, or --job.target=<flavor>
on Hugging Face Jobs — see references/policies-and-training.md) for
anything real. See the environments skill's GPU-and-remote reference for
the general CUDA-driver/host-parity checklist; the CUDA-wheel variant itself
(which torch/torchvision build LeRobot pulls) is covered in
references/datasets.md's install notes.
- Headless eval/training on a remote server needs no display, but sim
rendering backends do.
lerobot-eval and lerobot-train write videos
to disk (render_mode="rgb_array") and need no $DISPLAY at all — but
MuJoCo-based sim suites (LIBERO) need an explicit headless rendering
backend: export MUJOCO_GL=egl before evaluating on a server with no GPU
display attached. lerobot-dataset-viz supports a --mode distant --grpc-port=<port> streaming mode so a local machine can rerun rerun+http://<remote-ip>:<port>/proxy against a dataset that never left
the remote box — the general remote-visualization strategy (as opposed to
X11 forwarding) is environments' territory; this is the LeRobot-specific
invocation of it. See references/eval-and-sim.md.
- Recording's keyboard control flow is more portable than teleoperation
itself.
lerobot-record's episode-boundary keys (→/n next, ←/r
re-record, Esc/q stop) work over X11, Wayland, and headless/SSH
sessions as long as it runs in an interactive terminal — but keyboard
teleoperation (driving the robot itself with the keyboard) needs a
global key backend and only works on X11, a Windows desktop, or macOS with
Accessibility permission granted, not Wayland or headless. Don't assume a
working lerobot-record session implies keyboard teleop will also work
remotely.
Customization
- Different sim env or dataset: swap
--env.type/--env.task and
--dataset.repo_id together, keeping them paired — a policy's
input_features/output_features are inferred from the dataset it
trains on, and lerobot-eval's env must expose matching observation/
action shapes (LIBERO's .images.*-prefixed keys are a good example of
this coupling). See references/eval-and-sim.md.
- Different policy family:
--policy.type=<act|diffusion|smolvla|pi05|...>
swaps the architecture; VLA-family policies (Pi0/Pi0.5/SmolVLA) need
substantially more VRAM and their own pip extra (e.g. lerobot[pi],
lerobot[smolvla]) — see the compute table in
references/policies-and-training.md before picking one for constrained
hardware.
- Real robot instead of sim: the
--robot.type/--teleop.type surface
(lerobot-teleoperate, lerobot-record, lerobot-rollout) is the same
CLI family used throughout this skill, but hardware bring-up (ports,
calibration, camera indices) is robot-specific and only lightly touched
here — see LeRobot's own hardware docs (linked in References) for a
specific arm.
- No local GPU: add
--job.target=<flavor> (e.g. a10g-small) to a
lerobot-train command to run it on Hugging Face Jobs instead of locally;
list current flavors/pricing with hf jobs hardware. See
references/policies-and-training.md.
References
references/datasets.md — the LeRobotDataset v3.0 format (directory
layout, Parquet+MP4 storage), loading/streaming, recording and
finalize(), dataset editing tools, visualization, v2.1→v3.0 migration.
references/policies-and-training.md — the shipped policy families (ACT,
Diffusion, VQ-BeT, Pi0-family, SmolVLA, GR00T, and others), the
lerobot-train CLI, compute/VRAM sizing, multi-GPU and Hugging Face Jobs.
references/eval-and-sim.md — the lerobot-eval CLI, sim envs shipped
(pusht, aloha, LIBERO and its suites, MetaWorld, RoboCasa, and others via
EnvHub), headless rendering, and lerobot-rollout for real-hardware
deployment.
examples/train-act-command.md — a small-scale ACT training smoke-run
command against lerobot/pusht (status: unverified — file header states
the exact source and how it was checked).
examples/load-dataset-snippet.py — loads and inspects lerobot/pusht
with LeRobotDataset, matching the dataset the training example uses
(status: unverified — file header states the exact source).
- Upstream: huggingface/lerobot
(primary source for this skill, README +
docs/source/ +
src/lerobot/scripts/ fetched directly via raw GitHub URLs and the
GitHub Contents API this session), LeRobot
documentation (mirrors
docs/source/), Hugging Face Hub API (used
to confirm dataset/model repo IDs referenced in this skill actually exist).
Sibling skills: huggingface (hub mechanics), environments (uv-first
install, GPU/remote), data (dataset sourcing), rerun (episode
visualization), isaac-lab (NVIDIA RL stack), architect (routes here).
Changelog
1---2name: lerobot-23description: HuggingFace LeRobot for physical-AI manipulation: the LeRobotDataset format, loading and recording episodes, training policies (ACT, diffusion, pi0), evaluating in simulation, and teleoperation. Use when: 'lerobot', 'manipulation policy', 'imitation learning', 'train a robot arm policy', 'ACT', 'diffusion policy', physical-AI dataset/training/eval tasks. Core skill of the manipulation vertical; pairs with huggingface (hub mechanics), environments (uv-first install), and data (sourcing strategy). Not for: classical motion planning or the NVIDIA RL stack (isaac-lab).4---56# lerobot78The manipulation-vertical core tool skill for robium: the LeRobotDataset9format, loading and recording episodes, training imitation-learning and10VLA policies (ACT, Diffusion, Pi0/Pi0.5/SmolVLA and others), evaluating in11simulation, and teleoperation. LeRobot (`huggingface/lerobot`, PyPI package12`lerobot`, version **0.6.1** as of this session, `requires-python >=3.12`)13is HuggingFace's end-to-end robot-learning library — this skill embeds the14robotics-specific glue (dataset shape, training/eval CLI, sim envs,15teleoperation) and delegates hub mechanics (auth, upload/download, model16cards) to the `huggingface` skill's territory. LeRobot moves fast; every17command below is either a direct upstream docstring/doc example fetched18this session or marked with how it was verified — re-check before relying19on exact flags in a real project.2021## When to use this skill2223- Any manipulation/imitation-learning task: loading or recording a24 LeRobotDataset, training a policy (ACT, Diffusion, Pi0-family, SmolVLA,25 ...), evaluating a policy in simulation, teleoperating a robot arm.26- The trigger phrases in the description: 'lerobot', 'manipulation policy',27 'imitation learning', 'train a robot arm policy', 'ACT', 'diffusion28 policy'.29- Cross-references — go to the sibling skill instead when the question is:30 - Hub auth, dataset/model upload-download, model cards, repo management →31 the `huggingface` skill's territory; LeRobot's own `hf auth login`/32 `hf upload` commands are shown here only where a lerobot workflow33 requires them inline.34 - Whether to use uv or Docker, GPU passthrough, headless/remote display →35 `environments` (load first if not already decided; see Key directives).36 - Deciding *which* dataset(s) to source or combine for a task → the37 `data` umbrella skill's territory.38 - Rendering/inspecting recorded episodes in depth → the `rerun` skill;39 LeRobot's own `--viz` extra and `lerobot-dataset-viz` script wrap Rerun40 directly — cross-referenced here by name, not re-taught.41 - Classical motion planning (no learned policy) → out of scope repo-wide;42 this skill and the manipulation vertical are learning-based only.43 - The NVIDIA Isaac Lab RL stack (GPU-parallel RL/IL training environments,44 prebuilt tasks, policy export) → `isaac-lab`.45 - The whole-stack decision this feeds into → `architect` (routes here).4647## Key directives4849- **Delegation posture: embed + links.** The manipulation-specific glue50 (LeRobotDataset shape, training/eval CLI, which policies exist, sim envs51 shipped) lives in this skill and its references, because no single52 upstream page ties it together for a new robium project — but hub53 mechanics (auth, push/pull, model cards) are explicitly *not*54 re-explained here; they belong to the `huggingface` skill once it55 exists, and LeRobot's own `hf auth login`/`hf upload` invocations are56 shown inline only as far as a lerobot workflow needs them.57- **uv-first, per `environments`.** LeRobot is a pure-Python ML package —58 `environments`' decision tree routes it to uv, not Docker, unless the59 project also needs ROS 2 or another system dependency. LeRobot's own60 installation docs default to conda but explicitly document a uv path61 (`uv python install 3.12`, `uv venv --python 3.12`, PyTorch >= 2.1062 only) — this skill's Quick start uses `environments`' `uv add`/`uv run`63 pattern instead, since a robium project depends on `lerobot` as a64 package rather than developing it from source. See Quick start and65 the `environments` skill's uv-patterns reference.66- **Start from a pretrained/hub policy or an official example config67 before training from scratch.** Evaluate an existing hub checkpoint68 (e.g. `lerobot/diffusion_pusht`) in sim first to validate the eval69 pipeline end to end with zero training risk, and when you do train, start70 from `--policy.type=act` (or another shipped policy type) against an71 existing dataset — an official example config — rather than hand-rolling72 a new policy config. Only reach for `--policy.path=<hub-id>` to fine-tune73 an existing checkpoint, or a fully custom config, once the standard path74 has been verified working. See Quick start and75 `references/policies-and-training.md`.76- **Small-scale fine-tune before a long run.** Run a short `--steps` smoke77 training (low thousands, not tens of thousands) against the target78 dataset/policy combination first, confirm the loss curve and an eval79 pass both look sane, *then* scale `--steps` up for the real run. See80 `examples/train-act-command.md` and `references/policies-and-training.md`81 for the compute-hardware guide this scales against.82- **Never write LeRobot CLI flags, dataset schema fields, or the shipped83 policy/env list from memory.** LeRobot ships new policies, environments,84 and CLI scripts frequently, and its own docs note the dataset format85 itself has changed major versions (v2.1 to v3.0) — flags and script names86 that were correct in an older tutorial or a training run's memory are not87 a safe default. Every command and claim in this skill is marked with88 how it was verified this session (direct fetch of the `huggingface/lerobot`89 GitHub repo's README/`docs/source`/`src/lerobot` at the `main` branch, or90 the HF Hub API for dataset/model existence) — re-verify against91 `github.com/huggingface/lerobot` or `huggingface.co/docs/lerobot` before92 repeating a claim in a real project.9394## Quick start9596This walks through the manipulation-vertical trial-run backbone: a uv97environment, evaluating a pretrained baseline in sim, then a small-scale98fine-tune and re-evaluation — all against the same dataset/env pair99(`lerobot/pusht` dataset, `pusht` sim env) so every step is internally100consistent. Source: `huggingface/lerobot`'s README, `docs/source/installation.mdx`,101and `src/lerobot/scripts/lerobot_eval.py`'s own docstring example, fetched102directly this session.103104**1. Set up a uv environment** (see the `environments` skill's uv-patterns105reference for the general pattern):106107```bash108uv python pin 3.12 # LeRobot requires Python >=3.12109uv add "lerobot[core_scripts,training,pusht]"110```111112`core_scripts` pulls the dataset/hardware/viz extras `lerobot-record`,113`lerobot-replay`, and `lerobot-calibrate` need; `training` adds `accelerate`114and `wandb`; `pusht` adds the `gym-pusht` sim environment used below. Install115`ffmpeg` for video decoding — `sudo apt install ffmpeg` (Linux) or116`brew install ffmpeg` (Apple Silicon) if on PyTorch >= 2.10, otherwise117`conda install ffmpeg -c conda-forge`. See `references/datasets.md` and the118`environments` skill's GPU guidance for the CUDA-wheel variant if training on119an NVIDIA GPU.120121**2. Sanity-check the install:**122123```bash124uv run lerobot-info125```126127**3. Evaluate an existing pretrained policy in sim first** (validates the128eval pipeline before any training — the "start from pretrained" directive).129This is `lerobot_eval.py`'s own docstring example, fetched directly:130131```bash132uv run lerobot-eval \133 --policy.path=lerobot/diffusion_pusht \134 --env.type=pusht \135 --eval.batch_size=10 \136 --eval.n_episodes=10 \137 --policy.device=cuda # or mps / cpu — see Platform gotchas138```139140**4. Small-scale fine-tune** an ACT policy on the same dataset — see141`examples/train-act-command.md` for the full command (a short `--steps`142smoke run before scaling up).143144**5. Re-run step 3's eval command** with `--policy.path` pointed at your new145checkpoint's `outputs/train/.../checkpoints/last/pretrained_model` directory146to confirm the trained policy improves on the baseline.147148For loading/recording datasets, see the Usage patterns below and149`references/datasets.md`; for the full policy/training picture, see150`references/policies-and-training.md`; for sim envs beyond `pusht`, see151`references/eval-and-sim.md`.152153## Usage patterns154155**Browse/load a hub dataset.** `LeRobotDataset(repo_id)` downloads and156caches a dataset from the Hub (`~/.cache/huggingface/lerobot/{repo_id}`);157`StreamingLeRobotDataset(repo_id)` iterates it directly from the Hub with no158local copy. Browse candidate datasets via the hub's `LeRobot` tag or the159hosted [dataset visualizer](https://huggingface.co/spaces/lerobot/visualize_dataset)160before committing to one — actually pulling/searching the Hub beyond that is161the `huggingface` skill's territory. See `references/datasets.md` and162`examples/load-dataset-snippet.py`.163164**Visualize episodes.** `lerobot-dataset-viz --repo-id=<id> --episode-index=0`165renders a recorded/loaded episode through Rerun, locally or streamed from a166headless machine (`--mode distant`) — the visualization mechanics themselves167belong to the `rerun` skill; this skill only owns invoking the LeRobot-side168command. See `references/datasets.md` and Platform gotchas.169170**Train a policy on an existing dataset.** `lerobot-train --dataset.repo_id=<id>171--policy.type=act --output_dir=<dir> --policy.device=<cuda|mps|cpu>172--policy.repo_id=<hub-id>` trains a fresh policy shaped to the dataset's own173state/action/camera features; swap `--policy.type` for another shipped174policy or `--policy.path=<hub-id>` to fine-tune an existing checkpoint175instead. See `examples/train-act-command.md` and176`references/policies-and-training.md`.177178**Evaluate in a sim env.** `lerobot-eval --policy.path=<id-or-dir>179--env.type=<pusht|aloha|libero|...> --eval.n_episodes=<n>` runs rollouts in180a gym-vectorized sim env and reports success/reward metrics; multi-task181suites like LIBERO accept a comma-separated `--env.task` list. See182`references/eval-and-sim.md`.183184**Record new episodes.** `lerobot-record --robot.type=<id> --teleop.type=<id>185--dataset.repo_id=<id> --dataset.num_episodes=<n> --dataset.single_task=<desc>`186drives a real robot via teleoperation, saves a LeRobotDataset locally, and187pushes it to the Hub on completion (`dataset.finalize()` must run first —188the CLI does this for you; hand-rolled recording loops must call it189explicitly). See `references/datasets.md`.190191## Platform gotchas192193- **GPU vs Apple Silicon (MPS) vs CPU training expectations differ by an194 order of magnitude.** `--policy.device` (`cuda`/`mps`/`cpu`, usually195 auto-detected) selects the accelerator. Per LeRobot's own compute-hardware196 guide (fetched directly this session): ACT on a single RTX 4090 does ~5197 epochs over a ~50-episode/45k-frame dataset in ~30-60 min; the same run on198 Apple Silicon (M1/M2/M3 Max, MPS) takes ~6-14 h. CPU-only is not a training199 target — use it only for a tiny smoke test (a few dozen steps) to confirm200 the pipeline runs, then move to a GPU (local, or `--job.target=<flavor>`201 on Hugging Face Jobs — see `references/policies-and-training.md`) for202 anything real. See the `environments` skill's GPU-and-remote reference for203 the general CUDA-driver/host-parity checklist; the CUDA-wheel variant itself204 (which `torch`/`torchvision` build LeRobot pulls) is covered in205 `references/datasets.md`'s install notes.206- **Headless eval/training on a remote server needs no display, but sim207 rendering backends do.** `lerobot-eval` and `lerobot-train` write videos208 to disk (`render_mode="rgb_array"`) and need no `$DISPLAY` at all — but209 MuJoCo-based sim suites (LIBERO) need an explicit headless rendering210 backend: `export MUJOCO_GL=egl` before evaluating on a server with no GPU211 display attached. `lerobot-dataset-viz` supports a `--mode distant212 --grpc-port=<port>` streaming mode so a local machine can `rerun213 rerun+http://<remote-ip>:<port>/proxy` against a dataset that never left214 the remote box — the general remote-visualization strategy (as opposed to215 X11 forwarding) is `environments`' territory; this is the LeRobot-specific216 invocation of it. See `references/eval-and-sim.md`.217- **Recording's keyboard control flow is more portable than teleoperation218 itself.** `lerobot-record`'s episode-boundary keys (`→`/`n` next, `←`/`r`219 re-record, `Esc`/`q` stop) work over X11, Wayland, and headless/SSH220 sessions as long as it runs in an interactive terminal — but keyboard221 *teleoperation* (driving the robot itself with the keyboard) needs a222 global key backend and only works on X11, a Windows desktop, or macOS with223 Accessibility permission granted, not Wayland or headless. Don't assume a224 working `lerobot-record` session implies keyboard teleop will also work225 remotely.226227## Customization228229- **Different sim env or dataset:** swap `--env.type`/`--env.task` and230 `--dataset.repo_id` together, keeping them paired — a policy's231 `input_features`/`output_features` are inferred from the dataset it232 trains on, and `lerobot-eval`'s env must expose matching observation/233 action shapes (LIBERO's `.images.*`-prefixed keys are a good example of234 this coupling). See `references/eval-and-sim.md`.235- **Different policy family:** `--policy.type=<act|diffusion|smolvla|pi05|...>`236 swaps the architecture; VLA-family policies (Pi0/Pi0.5/SmolVLA) need237 substantially more VRAM and their own pip extra (e.g. `lerobot[pi]`,238 `lerobot[smolvla]`) — see the compute table in239 `references/policies-and-training.md` before picking one for constrained240 hardware.241- **Real robot instead of sim:** the `--robot.type`/`--teleop.type` surface242 (`lerobot-teleoperate`, `lerobot-record`, `lerobot-rollout`) is the same243 CLI family used throughout this skill, but hardware bring-up (ports,244 calibration, camera indices) is robot-specific and only lightly touched245 here — see LeRobot's own hardware docs (linked in References) for a246 specific arm.247- **No local GPU:** add `--job.target=<flavor>` (e.g. `a10g-small`) to a248 `lerobot-train` command to run it on Hugging Face Jobs instead of locally;249 list current flavors/pricing with `hf jobs hardware`. See250 `references/policies-and-training.md`.251252## References253254- `references/datasets.md` — the LeRobotDataset v3.0 format (directory255 layout, Parquet+MP4 storage), loading/streaming, recording and256 `finalize()`, dataset editing tools, visualization, v2.1→v3.0 migration.257- `references/policies-and-training.md` — the shipped policy families (ACT,258 Diffusion, VQ-BeT, Pi0-family, SmolVLA, GR00T, and others), the259 `lerobot-train` CLI, compute/VRAM sizing, multi-GPU and Hugging Face Jobs.260- `references/eval-and-sim.md` — the `lerobot-eval` CLI, sim envs shipped261 (pusht, aloha, LIBERO and its suites, MetaWorld, RoboCasa, and others via262 EnvHub), headless rendering, and `lerobot-rollout` for real-hardware263 deployment.264- `examples/train-act-command.md` — a small-scale ACT training smoke-run265 command against `lerobot/pusht` (status: unverified — file header states266 the exact source and how it was checked).267- `examples/load-dataset-snippet.py` — loads and inspects `lerobot/pusht`268 with `LeRobotDataset`, matching the dataset the training example uses269 (status: unverified — file header states the exact source).270- Upstream: [huggingface/lerobot](https://github.com/huggingface/lerobot)271 (primary source for this skill, README + `docs/source/` +272 `src/lerobot/scripts/` fetched directly via raw GitHub URLs and the273 GitHub Contents API this session), [LeRobot274 documentation](https://huggingface.co/docs/lerobot/index) (mirrors275 `docs/source/`), [Hugging Face Hub API](https://huggingface.co/api/) (used276 to confirm dataset/model repo IDs referenced in this skill actually exist).277 Sibling skills: `huggingface` (hub mechanics), `environments` (uv-first278 install, GPU/remote), `data` (dataset sourcing), `rerun` (episode279 visualization), `isaac-lab` (NVIDIA RL stack), `architect` (routes here).280281## Changelog282283<!-- One dated line per battle-tested change, added by skill-author hardening sessions. -->