Bidirectional converter and validator for AgiBot World ↔ LeRobot v3 datasets.
Status: maintenance mode (since 2026-05-02). See MAINTENANCE.md for what this means for issues / PRs / future features.
- Bidirectional conversion between AgiBot World (DigitalWorld sim + Beta/Alpha real hardware) and LeRobot v3.
- Schema-detect dispatcher — point
convertat any AgiBot root and the right reader fires automatically. - Five-check validator — schema conformance, fps consistency, timestamp monotonicity, action-dim consistency, frame ↔ video alignment.
- Batch + resume —
--max-episodesfor parallel conversion,meta/uuid_map.parquetfor restartable jobs. - Stdlib-first — h5py + pyarrow + av; no PyTorch dependency in the data path.
LeRobot's pusht is the fastest end-to-end check (no HuggingFace gating, ~30 s):
pip install --upgrade embodied-data
huggingface-cli download lerobot/pusht --repo-type dataset --local-dir ./pusht
embodied-data preview ./pusht
embodied-data validate ./pushtpreview prints a per-episode stats table; validate runs all five checks and exits non-zero on failure.
💡 New on
main(unreleased):convert --dry-runto preview a conversion plan without writing files,convert --verifyto auto-validate the output, andinspect <dataset_dir> --summaryfor a high-level dataset overview.
AgiBot World Beta and Alpha live on HuggingFace under a gated license. Request access on the AgiBotWorld-Beta page first, then:
huggingface-cli login
huggingface-cli download agibot-world/AgiBotWorld-Beta \
--repo-type dataset \
--include "task_info_675.json" "observations/675/936938/**" "proprio_stats/675/936938.h5" \
--local-dir ./agibot_beta_root
embodied-data convert \
./agibot_beta_root/675/936938 \
/tmp/beta_v3 \
--from agibot --to lerobot-v3
embodied-data validate /tmp/beta_v3For batch conversion of a whole task, point convert at the task root and pass --max-episodes N. Streaming-extraction tips for partial Beta downloads are in docs/schema/beta.md.
Robotics researchers spend days rewriting the same dataset conversion scripts. AgiBot World's official convert_to_lerobot.py has carried unresolved issues for months; LeRobot's v2.0 / v2.1 / v3.0 versions break each other; every lab writes its own timestamp alignment check. This tool is the layer that stops.
Concrete upstream issues this project addresses or works around:
- AgiBot-World #18 —
task_info_*.jsonlookup ambiguity for sub-roots - AgiBot-World #124 — Beta vs Alpha schema divergence
- AgiBot-World #149 — proprio HDF5 key drift across batches
- lerobot #2158 — v2 ↔ v3 episode-index incompatibility
- lerobot #2689 — fps/timestamp validation gap
5 PyPI releases shipped — v0.1.0 (sim DigitalWorld → LeRobot v3 + reverse + 5-check validate) → v0.1.1 (sim/real-Beta filename compat) → v0.2.0 (real Beta + Alpha forward conversion + schema-detect dispatcher) → v0.3.0 (head_color video for Beta) → v0.3.1 (CLI quality-of-life flags + Beta task-name fix + repo hygiene + pusht validate fix).
The project is now in maintenance mode. Bug-fix patch releases (0.3.x) continue when reported; the items below are listed for community/contributor reference, not on the maintainer roadmap.
These items were previously on the v0.3.x / v0.4 roadmap. They are well-scoped and welcome as PRs (see CONTRIBUTING.md) but are not being actively implemented by the maintainer:
- Multi-camera support (fisheye / hand_left/right / back_left/right) — Beta upstream packages 7 cameras per episode; v0.3.0 ships
head_coloronly. - Sparse
action/*/indexmasks — surface upstream "controller-active" masks asauxiliary.<group>.maskfeatures. state/end/*end-pose flattening — 32-dim Cartesian end-effector observation feature.- Reverse
lerobot-v3 → agibot-beta— symmetric completion of the v0.3 forward path (reverse currently only supports sim DigitalWorld). - ALOHA HDF5 ingest, RLDS export, OpenX Embodiment alignment — broader format pair coverage.
Cross-embodiment action-space retargeting and Chinese prompt embedding remain explicit non-goals.
Roadmap input still welcome on Discussions / Ideas — items with multiple users asking move from this list onto an actual milestone.
docs/schema/overview.md— AgiBot variant matrixdocs/schema/digitalworld.md— DigitalWorld (sim) layoutdocs/schema/beta.md— Beta / Alpha (real hardware) layoutdocs/schema-lerobot-v3.md— LeRobot v3 target schema
pip install embodied-data
embodied-data --helpPython 3.12+ required.
git clone https://github.com/allenwu-blip/embodied-data.git
cd embodied-data
uv sync
uv run pytestembodied-data is and stays free and open source. The CLI is all you need:
pip install embodied-data
embodied-data convert ./agibot_root /tmp/out --from agibot --to lerobot-v3
embodied-data validate /tmp/outIf you'd rather not run and maintain the pipeline yourself — browser upload→convert→download, per-team storage, auth, and output validated against the LeRobot v3 spec before you train on it — there's a hosted build: agibridge.
It wraps this exact library (same conversion core, same version) behind:
- a web UI (drop a tarball, get the converted dataset back — no local setup),
- accounts + per-organization isolation,
- persistent object storage for inputs/outputs,
- spec-validated output (you don't discover a malformed dataset 3 hours into training).
Free tier for trying it; paid tiers for teams who need the storage/seats. The library itself has no paywall and never will — the hosted layer is purely the "don't want to own the ops" option.
- 65+ commits, 4 PyPI releases (0.1.0 / 0.1.1 / 0.2.0 / 0.3.0)
- 115 passing tests + 1 skipped (gated dataset)
- 4 upstream issue threads engaged
- 4 HuggingFace datasets exercised end-to-end (lerobot/pusht, AgiBotWorld-Beta, AgiBotWorld-Alpha, agibot-world/agibot_digital_world)
- HuggingFace LeRobot team for the v3 schema and reference datasets
- OpenDriveLab AgiBot World team for releasing Beta and Alpha under HF gating
MIT — see LICENSE.
Bug reports and feature requests: GitHub Issues.