Repository navigation
v0.1.0
embodied-data v0.1.0 — first public release. Bidirectional converter and validator for AgiBot World ↔ LeRobot v3 datasets.
Install:
pip install embodied-dataQuick start:
embodied-data --help
# Try it on a public LeRobot v3 dataset (e.g. lerobot/pusht, ~8MB head)
huggingface-cli download lerobot/pusht --repo-type dataset --local-dir ./pusht
embodied-data preview ./pusht # quick stats table
embodied-data validate ./pusht # 5 schema/data checksRepo: https://github.com/allenwu-blip/embodied-data
Full docs: see README
0.1.0 — 2026-04-30
First public release. Bidirectional converter and validator for AgiBot World ↔
LeRobot v3 datasets.
Added
convertcommandagibot → lerobot-v3, single episode: 22-dim joint subselect (head + body + dual arms + effectors), first-difference action, recomputedtimestamp = frame_index / 30, head camera re-encoded to h264 withbf=0 g=2to dodge LeRobot v3 footgun F1 (mp4 muxer DTS reorder).agibot → lerobot-v3, multi-episode batch with--max-episodes,--resume(UUID-keyed, idempotent on rerun),--workers(ProcessPoolExecutorfor h5 reads; video encode stays main-process to avoid PyAV pickle + chunk-dir filename races). OOM-safe streaming,rich.ProgressUI.lerobot-v3 → agibot, reverse converter, single episode. Zero-fills the 12 dropped passive joints; round-trip preserves the 22 forwarded joints withinrtol=1e-5 atol=1e-6and timestamps exactly.
validatecommand — five checks against a LeRobot v3 directory:- schema conformance —
codebase_version == "v3.0", non-nullchunks_size/data_files_size_in_mb/video_files_size_in_mb, requiredtaskscolumn in episode metadata,tasks.parquetcolumn-or-index format. - fps consistency —
info.fpsvs. every video stream'saverage_rate. - timestamp monotonicity — strict per-episode monotone, surfaces LeRobot #2689 spike footgun.
- action-dim consistency — parquet
actionandobservation.statewidths matchinfo.features. - frame-video alignment — episode
length / fpsvs. mp4 duration within ±1 frame (catches AgiBot-World #149).
AgiBot mode also raises aWARNon the upstream 60Hz/timestampbug.
- schema conformance —
previewcommand — Rich-formatted stats table (frames, fps, state/action dims, camera list, task names) for either format.inspectcommand — schema dump for a single HDF5 (groups + datasets + dtypes + attrs) or parquet (columns + row count + first 3 rows) file. Dev tool.- Top-level
--jsonflag — machine-readable JSON on stdout for any command. - Top-level
--versionflag — prints version, git short SHA, and build date. - Actionable error suggestions on every failure path ("expected
meta/info.json(lerobot-v3) orproprio_states.h5(agibot) in path", etc.). - Schema reference docs authored from
huggingface/lerobot @ cb0a944and the AgiBotconvert_to_lerobot.pysource:docs/schema-lerobot-v3.md,docs/schema-agibot.md,docs/schema-mapping.md. - HF dataset survey (
docs/hf-dataset-findings.md) — three real public v3 datasets validated end-to-end (2 PASS, 1 FAIL with reproducible cause). - Upstream issue triage (
docs/issues-coverage.md) — 10 issues triaged; 5 in-scope addressed by this release.
Coverage
In-scope upstream issues addressed by v0.1.0:
| Issue | Title | Resolution |
|---|---|---|
OpenDriveLab/AgiBot-World#18 |
convert script ValueError + visualizer TypeError | convert + validate |
OpenDriveLab/AgiBot-World#124 |
KeyError: Column 'actions' (v2.1) |
convert (flat action column) |
OpenDriveLab/AgiBot-World#149 |
frame/video misalignment in 9 tasks | convert + validate (frame-video alignment check) |
huggingface/lerobot#2158 |
local v3 conversion (cache + invalid-timestamp) | convert (single-shot v3 write, monotonic PTS) + validate (timestamp monotonicity check) |
huggingface/lerobot#2689 |
ALOHA sim v2.1→v3.0 spark joint actions (partial) | validate flags action-dim drift / timestamp non-monotonicity on the converted dataset; ALOHA HDF5 ingest itself is out of scope |
5 explicitly out-of-scope issues remain documented and politely declined in docs/issue-comments-drafts.md.
Known limitations
- AgiBot side, head camera only. The 7 fisheye/hand cameras and the depth stream (uint16 mm PNG) are documented but not yet implemented.
- Reverse converter is single-episode. Multi-episode reverse is v0.2.
- One-episode-per-parquet in batch mode. True size-based multi-episode-per-parquet rollover is v0.2.
- Frame/video alignment uses an episode-metadata proxy (length/fps × duration). Per-frame PTS drift inside a video file would not be caught by v0.1.
Verified on
- Python 3.12, macOS arm64
- 50 tests passing
- Real data: paired episode from open
agibot-world/AgiBotDigitalWorld(375 frames, 1 task, 1 head camera) + 3 HF community v3 datasets validated end-to-end (2 PASS, 1 FAIL with reproducible cause documented indocs/hf-dataset-findings.md).
Acknowledgments
Built on top of the schemas published by the HuggingFace LeRobot team and the
OpenDriveLab AgiBot team.