Repository navigation
v0.3.0
embodied-data v0.3.0 — minor release. Closes the largest user-facing gap from v0.2.0's Known Limitations: Beta / Alpha LeRobot v3 datasets emitted by embodied-data convert now contain re-encoded observation.images.head_color video alongside proprio.
v0.2.0 → v0.3.0 differential: v0.3.0 datasets are usable for VLA fine-tuning end-to-end. info.json.video_path is no longer null; videos/observation.images.head_color/chunk-NNN/file-NNN.mp4 actually contains a frame-aligned h264 video that downstream LeRobot v3 readers can decode. CLI surface unchanged — convert auto-detects whether the source has video and routes accordingly.
Install (or upgrade):
pip install --upgrade embodied-dataQuick start (works without any AgiBot access — uses a public LeRobot v3 dataset):
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 checks → Result: PASSTry the v0.3 AgiBot Beta path with real head_color video (requires HF access — request on the dataset card first):
# 1. Request access at https://huggingface.co/datasets/agibot-world/AgiBotWorld-Beta
# 2. Log in:
huggingface-cli login
# 3. Pull one task's task_info JSON (cheap, ~1 MB):
huggingface-cli download agibot-world/AgiBotWorld-Beta \
--repo-type dataset \
--include "task_info_675.json" \
--local-dir ./agibot_beta_root
# 4. Beta proprio + per-camera mp4s ship inside multi-GB tars upstream.
# To get one episode's proprio_stats.h5 + videos/head_color.mp4 in
# ~10 MB without downloading the full tars, use the stream-extract
# pattern in docs/schema/beta.md §1 (or run the reproducible script
# scripts/fetch_beta_video_fixture.py for episode 882736 directly).
# The episode dir layout consumed by `convert` is:
# ./agibot_beta_root/675/882736/proprio_stats.h5
# ./agibot_beta_root/675/882736/videos/head_color.mp4
# 5. Convert one episode (now emits real video, not video_path: null):
embodied-data convert \
./agibot_beta_root/675/882736 \
/tmp/beta_v3 \
--from agibot --to lerobot-v3
embodied-data validate /tmp/beta_v3 # frame-video alignment now actually checks → Result: PASS
# Or batch a whole task (auto-detected when src is a task root). Episodes
# without upstream head_color.mp4 are logged to .beta_batch_errors.jsonl
# and skipped — the surviving dataset still emits a clean v3 with video.
embodied-data convert ./agibot_beta_root /tmp/beta_v3_batch \
--from agibot --to lerobot-v3AgiBotWorld-Alpha works via the same commands — the dispatcher auto-routes Alpha-named paths through the Beta converter (schemas verified equivalent on 2026-04-30).
validate got stricter for v0.3. When info.features declares any dtype: video, frame-video alignment now hard-fails on missing mp4 files, missing episode-meta video columns, codec decode errors, or video-frame-count vs episode-length divergence >1 frame (was SKIP / silent PASS pre-v0.3). Proprio-only datasets still SKIP cleanly — no false-positive FAILs.
Repo: https://github.com/allenwu-blip/embodied-data
Schema docs: overview · DigitalWorld (sim) · Beta + Alpha · LeRobot v3 target
[0.3.0] — 2026-05-01
Minor release. Closes the largest user-facing gap from v0.2.0's Known
Limitations: Beta / Alpha LeRobot v3 datasets emitted by embodied-data convert now contain re-encoded observation.images.head_color video
alongside proprio. v0.3.0 datasets are usable for VLA fine-tuning
end-to-end — videos are no longer null.
Added
observation.images.head_colorfor Beta / Alpha.convert_agibot_beta_to_lerobot_v3
(single-episode) andconvert_agibot_beta_batch(multi-episode) now
re-encode<src>/videos/head_color.mp4through the LeRobot v3 video
contract — h264,bf=0,g=2,yuv420p, monotonic PTS. Output lives
atvideos/observation.images.head_color/chunk-{i:03d}/file-{j:03d}.mp4,
info.jsondeclares the video feature, and per-episode video columns
(videos/<key>/chunk_index,file_index,from_timestamp,
to_timestamp) are emitted alongside proprio. End-to-end:
embodied-data convert <beta_episode_dir> <dst> --from agibot --to lerobot-v3
now produces a v3 dataset directly consumable by VLA fine-tuning
pipelines.- Shared
_video.pyhelpers.reencode_videoandprobe_videofactor
out the v0.1 sim re-encode path so both pipelines share a single
enforcement of the LeRobot v3 video constraints. - Hard-fail on
validatefor declared-but-missing video. When
info.featuresdeclaresdtype: video,frame-video alignment
now FAILs (was SKIP) on missing mp4 files, missing episode-meta video
columns, codec decode errors, or frame-count divergence >1 frame.
Proprio-only datasets (nodtype: videoin features) still SKIP
cleanly.
Changed
- Beta batch all-or-nothing video. If any pending or already-committed
episode in a batch hasvideos/head_color.mp4, the dataset declares
the head_color feature; episodes lacking the upstream mp4 are logged
to.beta_batch_errors.jsonland skipped (preserving v0.2's
per-episode error model). If no episode has video, output is
proprio-only (legacy v0.2 behavior unchanged). _commit_beta_episodere-encodes video before writing data. A
missing/broken upstream mp4 fails the commit before any state-laden
parquets land, keepingdata/,meta/episodes/, anduuid_map.parquet
in sync even on partial-failure batches.
Known limitations (still v0.3.x)
- Multi-camera support (
fisheye,hand_left/right,back_left/right).
v0.3.0 ships head_color only — other cameras land in v0.3.1. - Sparse
action/*/indexcompanions still dropped silently — v0.3.2
candidate. state/end/*end-pose flattening (32-dim) — v0.3.3 candidate.- Reverse
lerobot-v3 → agibot-betastill not implemented.