N1.5 removal is now explicit and actionable:
- Legacy N1.5 checkpoint configs (tokenizer_assets_repo) parse and fail
with a single clear error pointing to lerobot==0.5.1 instead of a
cryptic draccus DecodingError
- Removed N1.5 processor registry names (groot_pack_inputs_v3,
groot_eagle_encode_v3, groot_eagle_collate_v3) are stubbed to raise the
same guidance; groot_action_unpack_unnormalize_v1 changed semantics, so
the step is re-registered as _v2 and _v1 is stubbed
- N1.5 detection also recognizes checkpoint config.json content
(model_type/architectures/eagle backbone), not just path names; every
rejection surface includes the migration guidance
- groot.mdx documents the breaking change and migration path
Runtime fixes:
- use_bf16=False no longer crashes (compute_dtype only set when used)
- GrootN17ActionDecodeStep handles the 2-D (B, D) actions delivered by
sync select_action (relative eef/non-eef decode was broken in
lerobot-eval/record flows)
- Postprocessor falls back to dataset stats when a raw checkpoint lacks
the configured embodiment tag instead of silently emitting normalized
[-1, 1] actions
- Hub-hosted finetuned N1.7 checkpoints load: the processor config is
resolved via hf_hub_download for non-local paths, with a tolerant
retry when inspection fails
- Raw-checkpoint processor branch honors caller overrides (device,
rename_map) instead of dropping them
- Relative-action raw-state cache is per-instance instead of
process-global (cross-instance contamination)
- Camera/modality-key mismatches warn, including the zero-match
fallback; checkpoint revision is no longer forwarded into backbone
loading; deprecated Qwen2VLImageProcessorFast replaced with
Qwen2VLImageProcessor
Config/UX:
- GrootConfig defaults are the N1.7 values; explicitly passed legacy
N1.5-era values (chunk_size=50, max_state_dim=64, ...) are remapped
with a warning instead of silently
- Explicit action_decode_transform='none' wins over the libero_sim
default (new 'auto' sentinel) and survives save/load round-trips
Tests/CI:
- pytest.importorskip guards so fast_tests tiers pass without
transformers (was 10 failures, now 0)
- Regression tests for every fix; from_pretrained rejection tests now
actually exercise from_pretrained
- Parity test reads the artifact seed, fails on shape mismatch instead
of silently truncating, and a new case runs LeRobot's real Qwen3-VL
preprocessing on raw observations dumped by the producer
- docs: dead huggingface-cli download replaced with hf download
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Fixed broken API examples in Lerobot Imitation Learning Documentation
- Teleoperation with cameras improved by adding a fixed frequency in the loop (without it the cameras feed gets very slow)
- Wrapped record example script in main() to avoid problems on Mac
- Previously teleoperation example was using SO-ARM and teleoperation with cameras was using Koch. I changed it to use SO-ARM in all of the examples.
- Added section on how to train with HF Jobs - CLI and Python examples
- Replaced lerobot-record with lerobot-rollout in policies examples
* chore(video backend): renaming codec into video_backend in get_safe_default_video_backend()
* feat(pyav utils): adding suport for PyAV encoding parameters validation
* feat(VideoEncoderConfig): creating a VideoEncoderConfig to encapsulate encoding parameters
* feat(VideoEncoderConfig): propagating the VideoEncoderConfig in the codebase
* chore(docs): updating the docs
* feat(metadata): adding encoding parameters in dataset metadata
* fix(concatenation compatibility): adding compatibility check when concatenating video files
* feat(VideoEncoderConfig init): making VideoEncoderConfig more robust and adaptable to multiple backends
* feat(pyav checks): making pyav parameters checks more robust
* chore(duplicate): removing duplicate get_codec_options definition
* test(existing): adapting existing tests
* test(new): adding new tests for encoding related features
* chore(format): fixing formatting issues
* chore(PyAV): cleaning up PyAV utils and encoding parameters checks to stick to the minimun required tooling.
* chore(format): formatting code
* chore(doctrings): updating docstrings
* fix(camera_encoder_config): Removing camera_encoder_config from LeRobotDataset, as it's only required in LeRobotDatasetWriter.
* feat(default values): applying a consistent naming convention for default RGB cameras video encoder parameters
* fix(rollout): propagating VideoEncoderConfig to the latest recording modes
* chore(format): formatting code, fixing error messages and variable names
* fix(arguments order): reverting changes in arguments order in StreamingVideoEncoder
* chore(relative imports): switching to relative local imports within lerobot.datasets
* test(artifacts): cleaning up artifacts for the video encoding tests
* chore(docs): updating docs
* chore(fromat): formatting code
* fix(imports): refactoring the file architecture to avoid circular imports. VideoEncoderConfig is now defined in lerobot.configs and lazily imports av at runtime.
* fix(typos): fixing typos and small mistakes
* test(factories): updating factories
* feat(aggregate): updating dataset aggregation procedure. Encoding tuning paramters (crf, g,...) are ignored for validation and changed to None in the aggregated dataset if incompatible.
* docs(typos): fixing typos
* fix(deletion): reverting unwanted deletion
* fix(typos): fixing multiple typos
* feat(codec options): passing codec options to lerobot_edit_dataset episode deletion tool
* typo(typo): typo
* fix(typos): fixing remaining typos
* chore(rename): renaming camera_encoder_config to camera_encoder
* docs(clean): cleaning and formating docs
* docs(dataset): addind details about datasets
* chore(format): formatting code
* docs(warning): adding warning regarding encoding parameters modification
* fix(re-encoding): removing inconsistent re-encoding option in lerobot_edit_dataset
* typos(typos): typos
* chore(format): resolving prettier issues
* fix(h264_nvenc): fixing crf handling for h264_nvenc
* docs(clean): removing too technical parts of the docs
* fix(imports): fixing imports at the __init__ level
* fix(imports): fixing not very pretty imports in video config file
* feat(robots): consolidates bi SO setups
* fix(robots): solve circular dependecy
* fix(robots): teleop & record working
* feat(robots): only one SO
* fix(utils): rename bi so
* fix(scripts): bi so import
* fix(rl): remove imports