yeeeiii111/wuji-writing
Wuji Writing Bundle A paired human demonstration ↔ robot teleoperation dataset for the task of brush-writing digits 0–9 on grid paper. Built to train human-to-robot transfer policies (e.g. VAM-style action diffusion with human reference video). Both subsets are in LeRobot v2.1 format and share the same 10 tasks (task_index ∈ {0..9} corresponds to the written digit). They live as separate sub-directories under the repo root because the camera layout and resolution differ. . ├──… See the full description on the dataset page: https://huggingface.co/datasets/yeeeiii111/wuji-writing.
Wuji Writing Bundle
A paired human demonstration ↔ robot teleoperation dataset for the task of brush-writing digits 0–9 on grid paper. Built to train human-to-robot transfer policies (e.g. VAM-style action diffusion with human reference video).
Both subsets are in LeRobot v2.1 format and share the same 10 tasks (task_index ∈ {0..9} corresponds to the written digit). They live as separate sub-directories under the repo root because the camera layout and resolution differ.
.
├── teleop/ 1 LeRobot v2.1 dataset — 487 ep, robot bimanual, 4 cameras, 480×640
├── ego_ref/ 1 LeRobot v2.1 dataset — 896 ep, human egocentric, 1 head camera, 1280×720
└── README.mdSample counts per task
teleop/
- Format: LeRobot v2.1, fps 30
- Episodes: 487 (continuous
episode_index0..486, sorted by digit) - Frames: 438,986
- Robot: bimanual Tianji arms + Wuji dexterous hands (54-D state/action)
- Cameras (480×640, av1+yuv420p):
observation.images.stereo_leftobservation.images.stereo_rightobservation.images.cam_left_wristobservation.images.cam_right_wrist- State / Action: 54-D float32. Layout: left arm joint 7 + right arm joint 7 + left hand joint 20 + right hand joint 20.
- Task prompt template:
"the robot writes digit {word}"(e.g."the robot writes digit four")
Data quality note: digits 0/1/2 come from the original March 2026 capture; digits 3–9 come from the May 2026 re-capture (which fixed a black-frame flickering bug present in the original 3–9 recordings — verified at 0% black frames after ffmpeg blackdetect scan). source_provenance.jsonl in meta/ records which source subset each merged episode came from.
ego_ref/
- Format: LeRobot v2.1, fps 30
- Episodes: 896 (continuous, 89–90 per digit)
- Frames: 357,427
- Camera:
observation.images.head(1280×720, h264+yuv420p) — egocentric head-mounted view of a human writing with a brush on the same grid paper - State / Action: 54-D zero-vector placeholders (this subset is reference video only; no robot action is recorded for the human demonstrations).
- Task prompt template:
"the human writes digit {word}"
This subset is intended to be used as paired reference video when training a robot policy on teleop/; pair by task_index. Each teleop episode can be conditioned on a randomly chosen ego_ref episode of the same task.
Loading
from lerobot.common.datasets.lerobot_dataset import LeRobotDataset
teleop = LeRobotDataset("USER/wuji-writing-bundle", root="./data", subset="teleop")
ego = LeRobotDataset("USER/wuji-writing-bundle", root="./data", subset="ego_ref")Or read meta directly:
import json
info = json.load(open("teleop/meta/info.json"))
episodes = [json.loads(l) for l in open("teleop/meta/episodes.jsonl")]Provenance
Limitations
teleopepisodes are imbalanced across digits (29–80 per digit); upsample if needed.ego_refstate/action columns are zero-filled placeholders — only the head video carries information.teleopandego_refepisodes are not 1-to-1 aligned in time; they are independent recordings of the same task.- No language description beyond the digit-template prompt; if richer instructions are needed, use a VLM to re-caption the head videos.
