Release v0.7.02026-11-05
Release Blog
https://huggingface.co/blog/lerobot/lerobot-release-v070
https://github.com/user-attachments/assets/baafd00b-7f3e-48ee-bafb-619c3a0ecb44
⚠️ Breaking changes (v0.6.1 -> v0.7.0)
v0.7.0 rebuilds installation, training, inference and the hardware layer. A few changes need your attention when upgrading:
Installation
- On Linux, torch and torchvision now come from PyPI as CUDA 13 builds (NVIDIA driver 580.65 or newer); the cu128 index is gone. For older drivers, install torch from a CUDA 12 index first (see the installation guide). macOS needs 14+ (15+ for MPS).
- Pins moved: transformers 5.22, huggingface-hub>=1.31,<3, motorbridge 0.5, datasets<6, Pillow<14, torchcodec<0.18.
Training
- Weights & Biases is replaced by Trackio (the training extra installs trackio): --wandb. is now --trackio., entity/mode have no equivalent, remote jobs with tracking need --trackio.space_id, and checkpoints are no longer uploaded as artifacts by default.
- FSDP1 is replaced by FSDP2/HSDP (--parallelism.dpshard, --parallelism.dpreplicate, --accelerator.); mixed precision is set with --accelerator.mixedprecision. FSDP checkpoints saved with lerobot ≤ 0.6.x cannot be resumed (their model.safetensors still loads), and Accelerate YAML/env configuration is rejected unless LEROBOTALLOWACCELERATE_ENV=1.
- --policy.use_peft=true alone now trains LoRA instead of silently fully fine-tuning.
- Image transforms are batched: GaussianNoise, MotionBlur, GaussianPatchBrightness, RandomShadow, CoarseDropout, GammaCorrection and PlanckianJitter were silent no-ops on uint8 frames and now apply. ImageTransforms takes tensors only; the per-sample classes are deprecated.
Inference & rollout
- lerobot.async_inference and lerobot[async] are removed: use lerobot[remote], lerobot-policy-server and lerobot-rollout --inference.type=remote. lerobot.rollout.inference moved to lerobot.inference.
- selectaction / predictactionchunk may return a PolicyOutput ({"action", "prediction"}) instead of a bare tensor; use policyoutputtotransition when calling them directly.
- With --interpolation_multiplier>1, rollout strategies record one frame per policy action instead of one per tick.
Simulation & environments
- lerobot.envs.<sim> moved to lerobot.sim.integrations.<sim>, env configs are named EnvConfig (LiberoEnv -> LiberoEnvConfig), and in-process envs return canonical observations (HWC uint8 images, flat float32 state; map camera names with --renamemap). --env.type is unchanged.
- Removed env fields: Aloha/PushT observationheight/observationwidth, MetaWorld episodelength/multitaskeval, RoboTwin obstype/rendermode. MetaWorld's default task is metaworld-push-v3.
- EnvHub makeenv is called without cfg and must return an unwrapped SyncVectorEnv/AsyncVectorEnv unless --env.usenative_batch=true.
Policies
- dtype is the single precision key of every policy config; torchdtype, vlmdtype, modelparamsfp32 and model_dtype are ignored or removed. In Python pass torch.bfloat16, not a string.
- MolmoAct2: enableloravlm, enableloraactionexpert and trainactionexpertonly are replaced by --policy.trainmodevlm={fft,lora,freeze}; action_mode defaults to continuous.
- EO1: chunksize and naction_steps default to 16.
- VLA-JEPA: checkpoints trained before the RoPE fix need --policy.worldmodelropelegacy=true; binarizegripperaction and presnapgripperaction default to false.
Datasets
- --dataset.streaming=true uses a new disk-less episode-pool reader with --dataset.streaming_* options; Backtrackable is removed.
Hardware
- Feetech and Dynamixel run on one rustypot-backed SerialMotorsBus (lerobot[feetech]/[dynamixel] install rustypot instead of the vendor SDKs). FeetechMotorsBus/DynamixelMotorsBus are deprecated aliases, OperatingMode/TorqueMode give way to bus.setoperatingmode("position"), and the control tables, encodingutils and the SDK-level helpers (broadcastping, scan_port, ...) are removed. Calibration files are unchanged.
- reBot B601: the config is driven by motorfamily (dm, rs); grippermitkp/grippermit_kd are removed and per-joint gains take a dict instead of a list.
What's Changed
* chore(dependencies): Bump lerobot to 0.6.2 by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/4313
* add third party hardware section by @NikodemBartnik in https://github.com/huggingface/lerobot/pull/4308
* fix(lekiwi): relative target keyerror by @zuoxingdong in https://github.com/huggingface/lerobot/pull/4281
* feat(data): add recipe-driven language supervision by @pkooij in https://github.com/huggingface/lerobot/pull/4182
* feat(train): parallel training framework — FSDP2, HSDP, gradient accumulation, and DCP checkpoints by @HaomingSong in https://github.com/huggingface/lerobot/pull/4010
* feat(train): split phase timing metrics by @pkooij in https://github.com/huggingface/lerobot/pull/4344
* fix(dataset): use conservative bounds for quantile aggregation instead of incorrect weighted mean by @aHiroakiIshikawa in https://github.com/huggingface/lerobot/pull/3804
* fix(train): repair the two CI failures introduced by #4010 by @HaomingSong in https://github.com/huggingface/lerobot/pull/4347
* feat(train): add opt-in EMA of the policy weights (--ema.enable=true) by @alejodosr in https://github.com/huggingface/lerobot/pull/4323
* test(ema): Rename test that trips TruffleHog's Lob detector by @pkooij in https://github.com/huggingface/lerobot/pull/4371
* fix(tests): port the multi-GPU FSDP test off the superseded accelerate YAML flow by @pkooij in https://github.com/huggingface/lerobot/pull/4370
* docs: add API documentation infrastructure by @pkooij in https://github.com/huggingface/lerobot/pull/4348
chore: sort imports in vlajepa tests by @pkooij in https://github.com/huggingface/lerobot/pull/4354
* fix(datasets): resolve only recipe-referenced bindings by @pkooij in https://github.com/huggingface/lerobot/pull/4382
* fix(ci): benchmark jobs skipped for forks by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/4411
* fix(rollout): align state order with checkpoint by @pkooij in https://github.com/huggingface/lerobot/pull/4416
* feat(pi05): add optional visual and proprioceptive MEM by @pkooij in https://github.com/huggingface/lerobot/pull/4076
perf(policies): move image normalization to device in prepareobservationforinference by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/4433
* fix(legacy depth markers): unifying legacy depth markers across the codebase by @CarolinePascal in https://github.com/huggingface/lerobot/pull/4428
* Warn when freezing VLA-JEPA Qwen conditioning by @WOLIKIMCHENG in https://github.com/huggingface/lerobot/pull/4421
* fix(control): unify control-loop pacing and cadence reporting by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/4423
fix: use <= instead of < for timestamp tolerance comparison in videoutils by @walle250ai in https://github.com/huggingface/lerobot/pull/3423
fix(vlajepa): add opt-in causal world-model context to stop future-frame leakage by @ravediamond in https://github.com/huggingface/lerobot/pull/4381
* feat(rollout): interactive sessions — chat-style CLI and programmatic rollout control by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/4380
* (add) SONIC decoder by @nepyope in https://github.com/huggingface/lerobot/pull/4090
* feat(policies): vla-jepa refactoring by @Maximellerbach in https://github.com/huggingface/lerobot/pull/4425
* feat(pi05): add optional training-time RTC by @pkooij in https://github.com/huggingface/lerobot/pull/4056
* fix(molmoact2): align continuous training with official recipe by @hq-fang in https://github.com/hu