Human-hand WAM datasets
Training data for the World Action Model: videos of hands moving objects, with the depth, cameras, hand images and outcome for every frame.
See the data
Each video: rgb, depth, and two hand images below, with the caption bar at the bottom. Synthetic = all sim. Real-paired = real video with sim replays.
| group | kind | short | failure | success | val | long | failure | success |
|---|---|---|---|---|---|---|---|---|
hot3d_synth_h | synthetic | 15,036 | 5,230 | 9,806 | 426 | 12,736 | 5,065 | 7,671 |
graspxl_synth_h | synthetic | 6,557 | 2,823 | 3,734 | 124 | 6,557 | 2,823 | 3,734 |
hocap_synth_h | synthetic | 2,351 | 812 | 1,539 | 36 | 2,020 | 792 | 1,228 |
hot3d_real_h | real-paired | 1,339 | 0 | 1,339 | 33 | 640 | 0 | 640 |
hocap_real_h | real-paired | 490 | 0 | 490 | 11 | 164 | 0 | 164 |
| total | 25,773 | 8,865 | 16,908 | 630 | 22,117 | 8,680 | 13,437 |
hot3d_synth_h
synthetic15,036 short (5,230 failure / 9,806 success) · 12,736 long (5,065 / 7,671)
6,392 success replay · 4,990 failure · 2,801 still success · 853 recovery
graspxl_synth_h
synthetic6,557 short (2,823 failure / 3,734 success) · 6,557 long (2,823 / 3,734)
3,734 success replay · 2,823 failure
hocap_synth_h
synthetic2,351 short (812 failure / 1,539 success) · 2,020 long (792 / 1,228)
852 success replay · 746 failure · 401 still success · 352 recovery
hot3d_real_h
real-paired1,339 short (0 failure / 1,339 success) · 640 long (0 / 640)
1,339 success replay
hocap_real_h
real-paired490 short (0 failure / 490 success) · 164 long (0 / 164)
490 success replay
How it was made
Code: onticlabs/real2sim, branch human-wam/prod. The README there maps each step to its code.
- 1
Replay the recording in MuJoCo
Real hands (MANO) and objects become a physics twin. Below: real video beside sim replays. Preview round.
preview HO-Cap: real and two sim looks preview HOT3D Aria: real and two sim looks - 2
Make failures through physics
Same start, same instruction. Friction, grip or mass changes make it fail. Left: failure. Right: the success it branched from.
failure HO-Cap failure vs its success failure HOT3D failure vs its success failure GraspXL failure vs its success - 3
Recover from the failure
Some failures continue: the hand re-grasps and finishes the task.
success HO-Cap recovery success HOT3D recovery - 4
Render a synthetic room
Random room and light; the frame-0 scene matches the success twin. Preview round.
preview HO-Cap synthetic room preview HOT3D synthetic room - 5
Draw the action images
act= hands + intended target.act_fk= hands only. Bottom panels.failure act vs act_fk, GraspXL failure act vs act_fk, GraspXL ego - 6
Depth for real-paired video
The sim has no arm or body. Sim depth where it matches, MoGe-2 on person and room. Green panel = loss weight.
success Aria: composite depth + weight success HO-Cap: composite depth + weight - 7
Encode short and long
Wan2.2 VAE latents. Shorts are 81-frame windows. Long points follow a whole episode (10 s shown).
success Long: recovery story failure Long: failure success Long: success
Then five independent validators checked the frozen data: all PASS, two after fixes, 133 items dropped. After the depth fix, all 2,633 real-paired items changed only in depth and its weight.
Pointmaps
A pointmap stores the 3D position of every pixel, so a model can read geometry directly instead of combining depth and camera.
Human hands: pilot only
170 items tested, so this is not a downloadable dataset yet. Full production would take about 12 h and 22 GB, and is waiting on a decision.
Robots: full dataset
c16_pts_v7: 6,565 windows from the 4 sim groups, job f4fd5d37. c16_pts_long3: 4,094 long points, on Chaos only.
Drag to orbit, scroll to zoom. Exact sim depth lifted to 3D, coloured by the decoded video, every 2nd frame. Shown in world coordinates so the scene stays still; the pointmap stream stores XYZ per camera.
Pilot result: after the VAE round trip, pointmaps are about 2× worse than depth + camera on hand pixels in synthetic groups (median 4–37 mm vs 2–17 mm). Real-paired groups are about equal. Details in docs/PTS_PILOT_REPORT.md on the code branch.
Which to use
| You want to | Use | Note |
|---|---|---|
| Train a bidirectional WAM on hands | human_ship_v1, all 5 groups | The current run uses this. |
| Train an autoregressive or long-rollout model | human_long_v1 | No trainer uses it yet. |
| Teach real video from sim (config c2) | hocap_real_h, hot3d_real_h | Only these have sim replays. |
| Learn failures and recovery | The three *_synth_h groups | Real-paired groups are all success. |
| Work on hand pose | mano_sim, mano_rec side arrays | GraspXL has no mano_rec. |
| Use the original recordings or labels | See other human data | |
| Use pointmaps | Robots: c16_pts_v7 | Humans: pilot only. |
Use it
# Project world-models, tag human-wam. On Prometheus, prefix ontic with
# PYTHON_KEYRING_BACKEND=keyring.backends.fail.Keyring or it hangs.
J=de0238f4-cc54-493f-9517-6c212c2ece45 # human_ship_v1, 74.7 GiB
ontic pull $J --path data/_index # the index (107 MB)
ontic pull $J --path data/FLAGS.txt # trainer flags for this tree
ontic pull $J --path data/<group>/<episode>/<file>.npz # one window
ontic pull $J --path data/_text # 6.2 GB caption embeddings, for training only
git clone -b won/wam-mix5-v7-human git@github.com:onticlabs/experiments.git
# python snippet.py (needs numpy + torch; run where you pulled the files)
import json, os, sys
sys.path.insert(0, "experiments/projects/world-models/2026-11-09_wam-mix5-v7-human/wam_src/mix5")
import data_mix5 as D
root = "output-pulls/de0238f4-cc54-493f-9517-6c212c2ece45/data"
rows = [json.loads(l) for l in open(f"{root}/_index/index.jsonl")]
for r in rows:
files = [f"{root}/{r['group']}/{s['file']}" for s in r["slots"].values()]
if not all(os.path.exists(f) for f in files):
continue # only the windows you pulled
w = D.load_window(root, r) # picks sim_rand0 or sim_rand1 at random
lat = w["lat"][next(iter(w["lat"]))] # slot "single" (static exo) or "moving" (ego)
print(r["group"], r["kind"], r["outcome"], r["view"], r["captions_plain"][0])
print({k: tuple(v.shape) for k, v in lat.items()})
# real-paired: {'rgb': (48, 21, 24, 32), 'sim': (48, 21, 12, 16), 'depth': (48, 21, 12, 16),
# 'act': ..., 'cam': (48, 21, 6, 8), 'act_fk': ..., 'depth_w': (1, 21, 12, 16)}
Run on five windows, one per group, pulled from the store on 2026-11-09. In a launch, add {job: de0238f4-cc54-493f-9517-6c212c2ece45, source: output/data} to r3.yaml. Names human-ship-v1 and human-long-v1 work once PR #390 merges.
Files and streams
Short window: one npz per camera. Long point: <group>/<episode>/<slot>__<stream>.npy plus flags.npy and meta.json. _index/index.jsonl is the only list to trust. Split by sequence: no root is in both train and val. Video is 15 fps. Latent j covers frames 4j−3 to 4j.
| stream | latent shape (exo) | meaning | in |
|---|---|---|---|
rgb | (48, F, 24, 32) | video; real frames in real-paired groups | all |
depth | (48, F, 12, 16) | metric depth, 0.15–3 m; sim, or sim + MoGe-2 composite | all |
depth_w | (F, 12, 16), uint8 | depth loss weight per cell: 1 sim, 0.5 person, 0.25 room, 0 bad frame | real-paired |
act | (48, F, 12, 16) | hands + intended target and place | all |
act_fk | (48, F, 12, 16) | hands only | all |
cam | (48, F, 6, 8) | camera map | all |
sim_rand0/1 | (48, F, 12, 16) | sim replay in two random looks | real-paired |
mano_sim | (T, 2, 7+n) | hand after physics; side array, trainer does not read it | all |
mano_rec | (T, 2, 51 or 22) | recorded MANO; NaN after a story's slip | HO-Cap, HOT3D |
proprio, proprio_mask | (T, 18), (18,) | zeros and False: humans have no proprio | all |
| captions | index + _text/ | three plain, three with outcome; umT5 embeddings in _text | all |
Latents: Wan2.2 VAE, 48 channels, int16 storing bfloat16 bits. FLAGS.txt holds the build path: the trainer swaps it for your data root (see run.py). Long points: format c16_long/1; loader code pipeline/ar_data_code on the branch.
See it in the dataset viewer
Viewer support for human_ship_v1 is PR #27, open and unmerged. It shows id rasters and false-colour latent previews, not decoded video. The long set has no viewer card.
Train
| config | given (with text + frame 0) | generated | note |
|---|---|---|---|
| c1 | nothing | rgb, depth, act, cam | |
| c2 | sim clip | rgb, depth, act, cam | real-paired only: synth rgb is already the sim, so --no-sim-groups removes c2 |
| c3 | act | rgb, depth, cam | no proprio for humans, so c3 always gives hand images |
| c4 | depth + cam | rgb, act | |
| c5 | rgb video | depth, act, cam |
- Synth groups draw c1, c3, c4 and c5 at 25 % each. Real-paired groups draw all five at 20 %.
actvsact_fk: the current run (issue #387) uses hands only with--act-fk-groups, both given and generated.depth_w: applied per cell for real-paired groups; no extra real-depth factor (real_depth_w: 1.0).- Start: full state of v7-wan step 15,000.
emb5grows one row forhuman hands, starting at zero.
Limits
- About 40 % of HOT3D real frames count as bad, so person and room depth has weight 0 there. The values are correct; the loss ignores them. Mean
depth_w: HOT3D 0.33, HO-Cap 0.68. - Short windows that reuse a long point match it in every stream except
act, by design: each window draws only its own captioned moves. - 20 reuse shorts, all
hot3d_real_h, have their long point in_dropped(jobb2b153a9). - Thin depth specks at the sim / MoGe seam on some real-paired samples (right).
- The long set is 2.49 M frames in 261,266 small files, so reads are slow. Pull only the points you need.
- No human pointmap dataset yet: pilot only. Robots have one.

Licences
Commercial use is unresolved. MANO applies to all five groups and is non-commercial. Ask Won before any use beyond internal research.
| source | licence stated upstream | effect here |
|---|---|---|
| MANO model | Non-commercial scientific research only; no sharing with third parties | All five groups. Hand renders are derived from it; the licence does not say whether that counts. |
| GraspXL | CC BY-NC 4.0 (data) | Non-commercial |
| HOT3D | Sequences CC BY-SA 4.0; hand annotations CC BY-NC-SA 4.0; object models CC BY-SA, no sale | Non-commercial through hand annotations |
| HO-Cap | CC BY 4.0 (data) | The store description groups it with non-commercial sources. The data is CC BY; MANO is what restricts it. |
| Room textures | robosuite, LIBERO: MIT | None |
| MoGe-2 weights | MIT, from the Hugging Face tag only | Used for real-paired depth |
| SAM 3; Wan2.2 VAE | SAM License; Apache-2.0 | Used as tools. No non-commercial clause found. |
| Objaverse / PartNet (GraspXL assets) | Per object, not checked | Unverified |
Sources read 2026-11-09; this is not legal advice.
Other human data
| Data | Where | Status |
|---|---|---|
| HO-Cap originals | store hocap (410fadfb), hocap-color-labels; raw non-front frames on Chaos datasets/hocap_raw | Source of this set |
| HOT3D (Aria, Quest) | store point-clouds-hot3d; twins 29487cfc; VRS on Chaos datasets/hot3d | Source. VRS is on Chaos only. |
| GraspXL | store point-clouds-graspxl, tracking-graspxl, loader 50cf9815 | Source |
| About 25 hand-object releases (TACO, DexYCB, ARCTIC, GRAB, ...) | Leonardo scratch hoi_data/ | Purgeable, not in the store. Read each MANIFEST.tsv; avoid find and du. Scratch files untouched for 40 days are deleted. |
| MuJoCo twins for DexYCB, TACO, GRAB, ARCTIC, OakInk | store 58b1bd06, 45335ea8, 4dbf15f1, dc193fff, d4aeb0f8 | Body variants not used here |
| Dropped items | store b2b153a9, 164,681 files | Old or rejected versions |
| Pointmaps | Human pilot in the viewer above; pts_pilot/REPORT.md | Pilot only; robot set is c16_pts_v7 |
Gerard's hand-sim-data | onticlabs/hand-tabletop | Rejected for v1: capsule hand, states only |