Release Blog
https://huggingface.co/blog/lerobot-release-v040
What's Changed
- chore: Bump to 0.3.4 by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/1691
- chore(docs): prioritize use of entry points in docs + fix nightly badge by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/1692
- fix(busy_wait): fix busy_wait implementation for Windows platforms by @CarolinePascal in https://github.com/huggingface/lerobot/pull/1695
- fix(ci): inverted names by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/1705
- fix(ci): rename libegl1-mesa in deb13 trixie by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/1735
- fix: Add missing dynamixel encoding table entries by @jackvial in https://github.com/huggingface/lerobot/pull/1534
- fix(dataset): Correctly use episode_data parameter in save_episode by @lxk-221 in https://github.com/huggingface/lerobot/pull/1740
- Removed dupicate lines of code by @mgiac-hexagon in https://github.com/huggingface/lerobot/pull/1709
- Add feetech firmware update docs by @pkooij in https://github.com/huggingface/lerobot/pull/1793
- Lower limits by 50% for current and torque for gripper motor by @pkooij in https://github.com/huggingface/lerobot/pull/1809
- Allow max_relative_target to be a float by @jstnhuang in https://github.com/huggingface/lerobot/pull/1837
- 2 add reachy 2 to updated lerobot by @glannuzel in https://github.com/huggingface/lerobot/pull/1767
- fix (koch): Disable motor torque before applying calibration logic by @Gongsta in https://github.com/huggingface/lerobot/pull/1889
- fix(scripts): revert deletion of rs cam config import introduced by #1767 by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/1876
- Dataset v3 by @michel-aractingi in https://github.com/huggingface/lerobot/pull/1412
- Add Streaming Dataset by @fracapuano in https://github.com/huggingface/lerobot/pull/1613
- Update dataset card by default by @michel-aractingi in https://github.com/huggingface/lerobot/pull/1936
- docs(dataset): add dataset v3 documentation by @jadechoghari in https://github.com/huggingface/lerobot/pull/1956
- feat(processors): use pipelines across the codebase by @AdilZouitine in https://github.com/huggingface/lerobot/pull/1452
- small tiny nit by @fracapuano in https://github.com/huggingface/lerobot/pull/1975
- fix (docs): image link for phone by @pkooij in https://github.com/huggingface/lerobot/pull/1977
- bump gym-hil version to be pipeline compatible by @michel-aractingi in https://github.com/huggingface/lerobot/pull/1983
- Add docs for LeRobot Image transforms by @pkooij in https://github.com/huggingface/lerobot/pull/1972
- fix formatting readme by @pkooij in https://github.com/huggingface/lerobot/pull/1987
- bump datasets to 4.0.0 by @michel-aractingi in https://github.com/huggingface/lerobot/pull/1990
- fix(trainer): overrides device to the target device, for the device processor on the preprocessor by @AdilZouitine in https://github.com/huggingface/lerobot/pull/1993
- feat(sim): Add Libero Env by @jadechoghari in https://github.com/huggingface/lerobot/pull/1984
- feat(ci): add stale GH action bot for stalled issues & PRs by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/1996
- chore(ci): update time for stale issue/pr by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/1997
- Updated Readme removed broken link by @complete-dope in https://github.com/huggingface/lerobot/pull/1989
- Fix: Resolve PermissionError and UnicodeDecodeError in Python scripts by @JivinDotL in https://github.com/huggingface/lerobot/pull/1980
- fix(dataset): cast fps to int instead of float by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2001
- chore(rl): move rl related code to its directory at top level by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2002
- docs(rl): fix path by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2004
- refactor(scripts): update system info script by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2005
- feat(script): add entry point for dataset viz by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2006
- feat(script): add entry point for image transform viz by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2007
- chore: move constants to utils by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2016
- chore: move errors to utils by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2017
- chore(scripts): move find_cameras to scripts by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2018
- feat(script): add entry point for find joints limits by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2010
- chore(scripts): move find_port to scripts by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2019
- chore(scripts): move teleop to scripts by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2023
- chore(scripts): move record to scripts by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2022
- chore(scripts): move calibrate to scripts by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2024
- chore(scripts): move setup_motors to scripts by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2020
- chore(scripts): move replay to scripts by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2021
- chore(async): move async related code to its directory at top level by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2003
- chore(ci): update stale message by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2027
- fix(docs): update outdated links by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2026
- chore(utils): move benchmark and buffer to their respective modules by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2028
- chore(utils): move encoding utils and process to their respective modules by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2029
- chore(utils): remove unused utils legacy functions + rename init_rerun by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2031
- chore(utils): move queue utils and wandb_utils to their respective modules by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2030
- (docs): small change in dataset name by @jadechoghari in https://github.com/huggingface/lerobot/pull/2032
- chore(scripts): rename eval and train scripts by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2033
- chore: replace hard-coded obs values with constants throughout all the source code by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2037
- chore(mypy): add mypy configuration and module overrides for gradual type checking by @AdilZouitine in https://github.com/huggingface/lerobot/pull/2052
- chore: replace hard-coded action values with constants throughout all the source code by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2055
- Bug in conversion from v2.1 script by @michel-aractingi in https://github.com/huggingface/lerobot/pull/2057
- chore: replace hard-coded next values with constants throughout all the source code by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2056
- chore(utils): remove unused code by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2059
- Fix(train): add processor overrides with normalizer and unnormalizer stats by @AdilZouitine in https://github.com/huggingface/lerobot/pull/2038
- docs(fix): libero example command by @jadechoghari in https://github.com/huggingface/lerobot/pull/2060
- Save Cropped Dataset to Hub by @fracapuano in https://github.com/huggingface/lerobot/pull/2071
- Fix video concat path by @Tavish9 in https://github.com/huggingface/lerobot/pull/2076
- chore: remove unused code by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2062
- Improve V3 aggregate implementation by @Tavish9 in https://github.com/huggingface/lerobot/pull/2077
- chore: enable pyugrade ruff lint by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2084
- chore: enable simplify in ruff lint by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2085
- feat(normalization): add validation for empty features in NormalizerProcessorStep and UnnormalizerProcessorStep by @AdilZouitine in https://github.com/huggingface/lerobot/pull/2087
- Revert feat(normalization): add validation for empty features in NormalizerProcessorStep and UnnormalizerProcessorStep (#2087) by @AdilZouitine in https://github.com/huggingface/lerobot/pull/2089
- feat(policies): add noise parameter to action prediction methods by @AdilZouitine in https://github.com/huggingface/lerobot/pull/2063
- feat(train): include input and output features in processor overrides for normalization by @AdilZouitine in https://github.com/huggingface/lerobot/pull/2090
- fix(video_path): setting video_path to None during conversion for images datasets by @CarolinePascal in https://github.com/huggingface/lerobot/pull/2095
- feat(mypy): enable type checking for envs module and configure mypy settings in pyproject.toml by @AdilZouitine in https://github.com/huggingface/lerobot/pull/2099
- feat(mypy): configure mypy settings and add module overrides for gradual typing by @AdilZouitine in https://github.com/huggingface/lerobot/pull/2101
- Making Envs module pass MyPy checks by @iakhil in https://github.com/huggingface/lerobot/pull/2048
- Add OpenPi, Pi0 and Pi0.5 by @pkooij in https://github.com/huggingface/lerobot/pull/1910
- (chore) improve v3 message, allow converting local datasets to V3 by @michel-aractingi in https://github.com/huggingface/lerobot/pull/1948
- fix bug in
augment_dataset_quantile_stats.pythat was not detecting… by @michel-aractingi in https://github.com/huggingface/lerobot/pull/2106 - Improve docs pi by @pkooij in https://github.com/huggingface/lerobot/pull/2110
- feat(deps): ceil dependency versions by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2091
- Update README.md to fix broken link to example notebook for visuals by @iuliaferoli in https://github.com/huggingface/lerobot/pull/2117
- Fix pyav time_base error by @michel-aractingi in https://github.com/huggingface/lerobot/pull/2133
- fix(async): Add pre and post processing to async inference and update docs by @pkooij in https://github.com/huggingface/lerobot/pull/2132
- feat(devices): add lazy loading for 3rd party robots cameras and teleoperators by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2123
- chore(docs): add missing license headers by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2140
- refactor(datasets): add compress_level parameter to write_image() and set it to 1 by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2135
- Add act documentation by @pkooij in https://github.com/huggingface/lerobot/pull/2139
- fix(docs): local docs links by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2149
- Remove validate_robot_cameras_for_policy by @pkooij in https://github.com/huggingface/lerobot/pull/2150
- Dataset tools by @michel-aractingi in https://github.com/huggingface/lerobot/pull/2100
- refactor(envs): add custom-observation-size by @jadechoghari in https://github.com/huggingface/lerobot/pull/2167
- [HIL-SERL] use TeleopEvents.RERECORD_EPISODE in gym_manipulator by @jpizarrom in https://github.com/huggingface/lerobot/pull/2165
- Incremental parquet writing by @michel-aractingi in https://github.com/huggingface/lerobot/pull/1903
- Add missing finalize calls in example by @michel-aractingi in https://github.com/huggingface/lerobot/pull/2175
- fix(pi0): Minor minor minor thing in the warning by @fracapuano in https://github.com/huggingface/lerobot/pull/2168
- fix outdated example in docs by @fracapuano in https://github.com/huggingface/lerobot/pull/2182
- feat(deps): add setuptools dependency by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2187
- fix(datasets): conversion script function naming by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2199
- feat(scripts): Introduce
build_inference_frame/make_robot_actionutil to easily allow API-based Inference by @fracapuano in https://github.com/huggingface/lerobot/pull/2143 - chore(policies): deprecate pi0fast by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2203
- Feat/expand add features by @michel-aractingi in https://github.com/huggingface/lerobot/pull/2202
- feat(sim): add metaworld env by @jadechoghari in https://github.com/huggingface/lerobot/pull/2088
- chore(deps): libero dep pointing to main by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2201
- Fix homunculus teleoperator serial input lag by @ryanpennings in https://github.com/huggingface/lerobot/pull/2196
- feat(train): add accelerate for multi gpu training by @pkooij in https://github.com/huggingface/lerobot/pull/2154
- chore(ci): relax stale bot for PRs by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2222
- fix(scripts): warmup in find cameras script by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2229
- fix(dependencies): bound wandb < 0.22.0 due to protobuf version by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2230
- fix(docs): eval-related doc errors by @Infinity4B in https://github.com/huggingface/lerobot/pull/2183
- Fix incorrect sign-magnitude handling for STS/SMS series encodings by @nahakiole in https://github.com/huggingface/lerobot/pull/2223
- Optimized episode cache verification by @antoinedandi in https://github.com/huggingface/lerobot/pull/2166
- chore(deps): bump pypa/gh-action-pypi-publish from 1.12.4 to 1.13.0 by @dependabot[bot] in https://github.com/huggingface/lerobot/pull/1870
- chore(robots): deprecate strech, vipex and widowx robots by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2205
- Docs(fix): corrects minor mix-ups encoder/decoder by @jadechoghari in https://github.com/huggingface/lerobot/pull/2231
- docs: change video file path format in conversion script by @edgarriba in https://github.com/huggingface/lerobot/pull/2113
- Fix: debug policy load pretrained model failure problem by @yfynb1111 in https://github.com/huggingface/lerobot/pull/2073
- fix(docs): markdown formatting in integrate_hardware.mdx by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2232
- doc: fix deprecated hugginface-cli whoami by @azaracla in https://github.com/huggingface/lerobot/pull/1884
- Fixed wrist flex incorrect calibration for LeKiwi by @IliaLarchenko in https://github.com/huggingface/lerobot/pull/1787
- feat(utils): add support for Intel XPU backend by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2233
- Fixes: Overriding input and output features from a config (🐛 Bug) by @LiXiling in https://github.com/huggingface/lerobot/pull/1771
- fix(docs): update eval example by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2236
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in https://github.com/huggingface/lerobot/pull/1563
- fix(docs): update example flags for lerobot-dataset-viz by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2238
- chore(dependencies): upgrade rerun by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2237
- Fixes failed to delete images because the timing of gc is uncertain by @lycoris1129 in https://github.com/huggingface/lerobot/pull/1710
- feat(tests): Add MockMotorBus to MockRobot by @fracapuano in https://github.com/huggingface/lerobot/pull/2081
- chore(pyproject): cleaning no longer existing files/folders in pyproject exclude_dirs by @CarolinePascal in https://github.com/huggingface/lerobot/pull/2240
- docs(install): use miniforge instead of miniconda by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2249
- Feat: Support CLI for Launching LeKiwiHost by @zuoxingdong in https://github.com/huggingface/lerobot/pull/1614
- refactor(env): introduce explicit gym ID handling in EnvConfig/factory by @jadechoghari in https://github.com/huggingface/lerobot/pull/2234
- Add affine transforms to dataset augmentations by @brysonjones in https://github.com/huggingface/lerobot/pull/2145
- chore(mypy-compliant): Ensure the model module passes MyPy type checks by @quanghuynt14 in https://github.com/huggingface/lerobot/pull/1782
- Fixed mypy issues (with the exception of import issues) for lerobot cameras module (#1724) by @Jaisree25 in https://github.com/huggingface/lerobot/pull/1788
- Fix typehint and address the mypy errors of src/lerobot/configs by @tetsugo02 in https://github.com/huggingface/lerobot/pull/1746
- Enhance OpenCVCamera with FOURCC for MJPEG support and validation by @forgetwhatuwant in https://github.com/huggingface/lerobot/pull/1558
- chore(style): update mypy config by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2257
- Bugfix: Handle non-version revision strings in LeRobotDataset by @antoinedandi in https://github.com/huggingface/lerobot/pull/2260
- fix: support cuda:0, cuda:1 in string selection by @jadechoghari in https://github.com/huggingface/lerobot/pull/2256
- fix(scripts): add missing observation overwrite in eval and async by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2265
- Fix camera FPS set issue by @xuaner233 in https://github.com/huggingface/lerobot/pull/2275
- fix(ci): exclude motor tests in multi-gpu setup by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2276
- chore(dependencies): bump & ceil gymnasium version + pin metaworld version + bump gym-hil by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2267
- fix(bug): Device Error on SmolVLA Multi-GPU Training by @nijkah in https://github.com/huggingface/lerobot/pull/2270
- fix(bug): Fix policy renaming ValueError during training by @jadechoghari in https://github.com/huggingface/lerobot/pull/2278
- Fix: Correct
frames_in_current_filecalculation for multi-episode files by @michel-aractingi in https://github.com/huggingface/lerobot/pull/2280 - fix(cameras): opencv camera index casting by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2286
- feat(policies): add Nvidia Gr00t N1.5 model by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2292
- Add API Examples by @fracapuano in https://github.com/huggingface/lerobot/pull/2289
- docs(policies): GR00T updates by @liorbenhorin in https://github.com/huggingface/lerobot/pull/2293
- Fix:
check_cached_episodesdoesn't check if the requested episode video were downloaded by @michel-aractingi in https://github.com/huggingface/lerobot/pull/2296 - chore(deps): update requirements file by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2297
- patch(ci): remove pi & libero tags from PyPi release temporary due to their reliance on git dependencies by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2300
- fix(ci): add fastapi dep + bump to 0.3.5 by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2301
- chore(dependencies): Bump lerobot to 0.4.0 by @imstevenpmwork in https://github.com/huggingface/lerobot/pull/2298
New Contributors
- @lxk-221 made their first contribution in https://github.com/huggingface/lerobot/pull/1740
- @mgiac-hexagon made their first contribution in https://github.com/huggingface/lerobot/pull/1709
- @jstnhuang made their first contribution in https://github.com/huggingface/lerobot/pull/1837
- @glannuzel made their first contribution in https://github.com/huggingface/lerobot/pull/1767
- @Gongsta made their first contribution in https://github.com/huggingface/lerobot/pull/1889
- @complete-dope made their first contribution in https://github.com/huggingface/lerobot/pull/1989
- @JivinDotL made their first contribution in https://github.com/huggingface/lerobot/pull/1980
- @iakhil made their first contribution in https://github.com/huggingface/lerobot/pull/2048
- @iuliaferoli made their first contribution in https://github.com/huggingface/lerobot/pull/2117
- @ryanpennings made their first contribution in https://github.com/huggingface/lerobot/pull/2196
- @Infinity4B made their first contribution in https://github.com/huggingface/lerobot/pull/2183
- @nahakiole made their first contribution in https://github.com/huggingface/lerobot/pull/2223
- @antoinedandi made their first contribution in https://github.com/huggingface/lerobot/pull/2166
- @dependabot[bot] made their first contribution in https://github.com/huggingface/lerobot/pull/1870
- @edgarriba made their first contribution in https://github.com/huggingface/lerobot/pull/2113
- @yfynb1111 made their first contribution in https://github.com/huggingface/lerobot/pull/2073
- @azaracla made their first contribution in https://github.com/huggingface/lerobot/pull/1884
- @LiXiling made their first contribution in https://github.com/huggingface/lerobot/pull/1771
- @lycoris1129 made their first contribution in https://github.com/huggingface/lerobot/pull/1710
- @brysonjones made their first contribution in https://github.com/huggingface/lerobot/pull/2145
- @quanghuynt14 made their first contribution in https://github.com/huggingface/lerobot/pull/1782
- @Jaisree25 made their first contribution in https://github.com/huggingface/lerobot/pull/1788
- @tetsugo02 made their first contribution in https://github.com/huggingface/lerobot/pull/1746
- @forgetwhatuwant made their first contribution in https://github.com/huggingface/lerobot/pull/1558
- @xuaner233 made their first contribution in https://github.com/huggingface/lerobot/pull/2275
- @nijkah made their first contribution in https://github.com/huggingface/lerobot/pull/2270
- @liorbenhorin made their first contribution in https://github.com/huggingface/lerobot/pull/2293
Full Changelog: https://github.com/huggingface/lerobot/compare/v0.3.3...v0.4.0
Fetched April 7, 2026

