CoolFace
Datasetpublic

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.

sourceHugging Faceotherupdated 4mo agoView on Hugging Face
0likes376downloads
Dataset Card

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.md

Sample counts per task

task_indexdigitteleop epego_ref ep
0zero8090
1one8090
2two4889
3three4090
4four4789
5five3589
6six3189
7seven4590
8eight2990
9nine5290
total487896

teleop/

  • Format: LeRobot v2.1, fps 30
  • Episodes: 487 (continuous episode_index 0..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_left
  • observation.images.stereo_right
  • observation.images.cam_left_wrist
  • observation.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

python
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:

python
import json
info = json.load(open("teleop/meta/info.json"))
episodes = [json.loads(l) for l in open("teleop/meta/episodes.jsonl")]

Provenance

filemeaning
<subset>/meta/info.jsonLeRobot info (features, fps, totals, codec)
<subset>/meta/episodes.jsonlper-episode entry (episode_index, tasks, length)
<subset>/meta/tasks.jsonlthe 10 task strings (one per digit)
<subset>/meta/source_provenance.jsonlmerged-episode → source subset/episode mapping
<subset>/data/chunk-000/episode_NNNNNN.parquetper-frame state, action, timestamp, indices
<subset>/videos/chunk-000/<cam_key>/episode_NNNNNN.mp4per-camera video

Limitations

  • teleop episodes are imbalanced across digits (29–80 per digit); upsample if needed.
  • ego_ref state/action columns are zero-filled placeholders — only the head video carries information.
  • teleop and ego_ref episodes 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.