Skip to content

[python] Import LeRobot video datasets - #9494

Draft
XiaoHongbo-Hope wants to merge 5 commits into
apache:masterfrom
XiaoHongbo-Hope:codex/lerobot-video-import
Draft

[python] Import LeRobot video datasets#9494
XiaoHongbo-Hope wants to merge 5 commits into
apache:masterfrom
XiaoHongbo-Hope:codex/lerobot-video-import

Conversation

@XiaoHongbo-Hope

@XiaoHongbo-Hope XiaoHongbo-Hope commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Purpose

Extend load_from_lerobot to import LeRobot Dataset v3 video features into packed Paimon video fields, on top of the aligned multi-video file groups from #9480.

Changes

  • infer all video features from info.json and configure video-frame-field
  • map each Episode frame through the official from_timestamp + timestamp semantics
  • keep every Episode in one aligned file group
  • when the normal file or any camera sidecar needs to roll, close all active writers together at the next Episode boundary
  • support nested source-camera MP4 boundaries without decoding or transcoding video
  • read local, Hugging Face, and FileIO URI sources
  • require an unpartitioned, bucket-unaware target so one Episode is handled by one writer
  • keep source FileIO credentials isolated from the target Catalog

Encoded MP4 payloads are copied into packed video files and referenced by frame ordinal; they are not repeated once per frame. Payload deduplication is file-local, so a source MP4 shared across an aligned output-file boundary may be copied once into each output group. Per-Episode remux can remove that amplification in a follow-up.

Tests

  • 233 related Python tests passed, 5 skipped, with 76 parameterized subtests
  • official LeRobot 0.4.4 local Dataset integration: 20 passed
  • shared-MP4 Episode rolling and oversized Episodes
  • aligned group rolling triggered by one camera sidecar
  • local and FileIO multi-video import with two Episodes and nested camera boundaries
  • partitioned and fixed-bucket targets are rejected
  • real lerobot/droid_100 metadata smoke: 3 cameras, Episodes 0 and 1 mapped to frame ordinals 0-165 and 166-403
  • flake8, py_compile, and git diff --check passed

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant