World Action Model · progress update

Making a 3D-aware World Action Model

  1. 1How a TI2V model became a WAM (2D)
  2. 2Lifting the WAM to 3D: depth + cameras
  3. 3Testing it on a Franka FR3 in MuJoCo
  4. 4Discussion
  5. 5Next steps

Won · Ontic Labs · 20 Oct 2026

1
1 · TI2V → WAM

One model for video and actions

first frame video · 85 frames 384×512 hand skeleton video · 192×256 Wan VAE one VAE for all video tokens action tokens … … frame 0 own embedding, positions match video Wan2.2-TI2V-5B frozen + LoRA r128 full attention over all tokens each token has its own timestep instruction “Pick up the red toy car…” T5 cross-attention video action video VAE decode given (clean) generated (noisy) Actions are just another video in the same latent space.

The hand skeleton is drawn as a second video and goes through the same VAE as the RGB, so the frozen Wan2.2-TI2V-5B (plus LoRA) attends over video and action tokens in one sequence.

2
1 · TI2V → WAM

Captions: Claude writes robot-style instructions

HO-Cap mocap + video 559 windows 5.4 s @ 15 fps Motion facts grasp lift ↑ hold from mocap, exact Qwen3.5 VLM, 35B watches video, reads facts Claude reviews or writes it checks the frames measure facts draft “Pick up the red toy car and hold it above the table” Independent check (Codex): caption correct Qwen alone 57 % Final set 93 %

Measured mocap facts keep the VLM honest, and Claude's review turns its draft into a robot-style instruction: 93 % correct in an independent Codex check, against 57 % for Qwen alone.

3
1 · TI2V → WAM

A training sample: first frame, instruction, hands as a video

“Pick up the red toy car and hold it above the table” · HO-Cap · hand skeleton rendered as RGB video
4
1 · TI2V → WAM

Two ways to condition the same model

Joint the WAM plans image text video … action … video actions both generated together Conditional world model: renders the given actions image text actions video … action video actions given clean (t = 0) given (clean) generated (noisy) Same model · trained 50 / 50 · text dropped 10 % for CFG

The same weights plan (image + text -> video + actions) or act as a world model (image + text + given actions -> video), chosen only by which tokens are noisy.

5
1 · TI2V → WAM

Generate the hands, or follow given ones

Joint: image + instruction → video + hands (held-out scene)
Conditional: image + instruction + given hands → video
6
1 · TI2V → WAM

Text and hands both steer the video

Same first frame, three instructions
Same instruction, hands moved or swapped
7
2 · Lift to 3D

Lifting the WAM to 3D

4 datasets, trained together HO-Cap RealSense third-person, hands HO-Cap HoloLens egocentric HOT3D Aria, moving head DROID robot gripper streams, each drawn as a video RGB video as before 2.5D action skeleton or gripper + grey depth halo depth video log depth, frame 0 from sensor or MoGe-2 camera rays “Rothko” map, static = identity same VAE one DiT result decent, not perfect Async: depth + action lead RGB depth then fed clean action then fed clean RGB lead: k = 8 20 denoising steps → area = noise left to remove

Depth, camera rays and 2.5D actions join the RGB as extra videos through the same VAE, trained on four datasets, with depth and action denoised 8 steps ahead of the RGB: decent, not perfect.

8
2 · Lift to 3D

Hands and grippers share one action latent space

Hands (HO-Cap): 2D skeleton vs 2.5D with a depth halo
Gripper (DROID): forward-kinematics glyph vs 2.5D

Both are drawn as 2.5D action videos and encoded by the same VAE. Next: transfer human hand poses to robot grippers.

9
2 · Lift to 3D

HO-Cap: video, hands, depth and camera together

GT | generated · rows: RGB, hands, depth, camera
Generated depth lifted to 3D points
10
2 · Lift to 3D

DROID: a real robot arm

“Pick up the red cup and start tipping it over the white bowl”
“Reach down towards the green can next to the clear bowl”

Held-out clips · image + instruction → video + gripper action + depth · checkpoint 100k

11
2 · Lift to 3D

HoloLens: egocentric hands

“Pick up the red Hills Bros tin and pass it to the other hand”
“Pick up the Boss Baby DVD case”

Held-out clips · image + instruction → video + 2.5D hands + depth · checkpoint 100k

12
2 · Lift to 3D

HOT3D: a moving head camera

“Pick up the wooden bowl of fruit with both hands”

Decent, not perfect

Works

  • Hands and objects keep their identity
  • Depth follows the hands and the arm
  • Same model on 4 camera setups

Breaks

  • Fast hand motion smears
  • Objects drift near the end
  • Instructions half-followed: the cup is lifted, not tipped
13
3 · FR3 in MuJoCo

Do generated plans work on a robot? Test in simulation first

“Pick up the teal cylinder.” wrist exo wrist cam sees the object up close one training frame = 320 × 576 canvas glyph exo 320×384 wrist 160×192 2nd arm (later) RGB exo + wrist Depth + full-res wrist Gripper glyph 2.5D, in exo tile Camera wrist pose by FK ~2,100 scripted demos 85 frames @ 15 fps 3 : 1 with real DROID clips

MuJoCo Franka FR3 + Robotiq 2F-85 with exo + wrist cameras, like our lab cell. Fine-tune the WAM on ~2,100 scripted picks, then execute its plans on the simulated robot.

14
3 · FR3 in MuJoCo

Is the wrist camera really useful for this task?

Same object in the exo tile (16 px wide) and in the wrist tile (42 px wide)

With the WAM: 100 held-out scenes

Exo onlyExo + wrist
Plan alone (open loop)5 %6 %
Plan grasp xy error (median)72 mm50 mm
Plan + wrist look (oracle mask)At 15 cm above the grasp, MuJoCo's segmentation mask picks the exact target pixels in the wrist RGB-D frame (not available on a real robot); the grasp is re-planned from those 3D points74 %93 %
Plan + wrist depth, 2 looks (no mask)No segmentation: keep the above-table depth cluster nearest the WAM grasp point. Look 1 at 15 cm, re-plan, move down, look 2 at 7 cm where the object fills the view, re-plan again (1 look: 79 %)60 %88 %

Without a WAM: grasp from head-camera depth with added error (200 trials)

Added depth errorHead camera only+ wrist re-measure
0 %98.5 %100 %
2 %78 %100 %
4 %57 %100 %
8 %31 %100 %

Yes, near contact: a grasp needs ~1 cm, exo plans are 5–7 cm off, and the wrist look closes the gap. Not yet for the plan itself (open loop 5–6 %). Both wrist rows: the WAM plan brings the arm close, then a scripted look re-aims, descends, closes and lifts.

15
3 · FR3 in MuJoCo

The wrist camera sees the object up close

Training data: exo view + wrist tile
WAM output: generated video, gripper action and depth, exo + wrist

Note: the wrist camera scaling in these clips is wrong (older data); the newer data fixes the wrist depth scale.

16
3 · FR3 in MuJoCo

From generated video to robot motion

once per episode every sim tick “Pick up …” Inputs text + current frame WAM Generate Wan2.2 TI2V-5B 85 frames video + glyph + depth Decode glyph pinch, yaw, close frame 3D path lift with depth + camera IK 7 joint targets MuJoCo FR3 + 2F-85 gripper closes at the decoded frame

The WAM generates 85 frames once per episode; the gripper glyph is decoded into pinch point, yaw and close frame, lifted to a 3D path with depth and camera, and tracked every sim tick by IK on the MuJoCo FR3, with the gripper closing at the decoded frame.

17
3 · FR3 in MuJoCo

IK: from a gripper target to joint angles

Gripper binary, closes at the decoded frame Target pose pinch point xyz top-down + yaw 15 Hz, interpolated Damped LS IK 7 FR3 joints 40 iterations / tick null space → home Joint servos position control + gravity comp + 0.1 s target lead MuJoCo q Measured pose q, pinch point next tick 1.4 mm IK error 3.9 mm robot vs plan (median) 13 mm before gravity comp + lead

Each tick, damped least-squares IK turns the glyph's target pose into 7 joint targets for position servos with gravity compensation and a 0.1 s lead; IK error is 1.4 mm and the robot tracks the plan to 3.9 mm median, down from 13 mm.

18
3 · FR3 in MuJoCo

The robot follows the plan to 3.9 mm

WAM output vs what MuJoCo executed
19
3 · FR3 in MuJoCo

Plan alone: the WAM gets close but does not grasp

Executed in MuJoCo | WAM generated video + plan | generated depth

Typical miss: the plan closes ~5 cm away from the object centre (median), so the fingers miss or hit the object.

20
3 · FR3 in MuJoCo

A “programmed” policy: WAM plan + scripted wrist correction

① WAM plan drives the approach which object · grasp point · closing axis plan's grasp ② stop ~15 cm above ③ wrist look ④ re-aim, close, lift 2nd look 7 cm picks / 100 scenes WAM plan alone 6 + wrist look (oracle seg) 93 + wrist depth only, 2 looks 88

The WAM plan only drives the approach and picks the object, grasp point and closing axis; a scripted wrist-camera look 15 cm above re-aims the grasp, taking picks from 6/100 to 93/100 (oracle segmentation) or 88/100 (wrist depth only, two looks).

21
3 · FR3 in MuJoCo

First deployment: 6 → 93 out of 100

WAM checkpointPlan alone (open loop)+ wrist look, oracle mask+ wrist depth, 2 looks (no mask)
Exo camera only, 10k steps5 %74 %60 %
Exo + wrist tiled, 4k4 %91 %–
Exo + wrist tiled, 8k6 %93 %88 %
Exo + wrist tiled, 10k2 %84 %–
Ground-truth demo plans (ceiling)82 %98 %97 %

100 held-out sim scenes. “Programmed” = the WAM plan drives the approach, then a scripted wrist-camera look re-aims, descends, closes and lifts.

WAM plan + wrist-depth correction (success)
22
3 · FR3 in MuJoCo

Wrist actions: the grasp goal drawn in the wrist view

wrist view, action stream own fingers fingertip goal at grasp shade = ln(zgoal / ztip) after close: dots = own fingertips Decode goal wrist intrinsics + forward kinematics no world frame executor goal at frame 0 ① hover 5 cm above ② descend, close ③ lift oracle goal + noise → picks / 100 0–3 mm 100 6 mm 97 10 mm 92 median of the last 3 goals WAM open loop 4 % → 12 % 100 scenes

The action stream now also draws the fingertip grasp goal in the wrist view, decodable with only the wrist intrinsics and kinematics; an executor fed noisy oracle goals picks 100/100 at 0–3 mm noise, 97 at 6 mm and 92 at 10 mm; WAM open loop goes from 4 % to 12 % after fine-tuning with wrist actions.

23
3 · FR3 in MuJoCo

Wrist actions in the training data

Goal fingertips (dots) in the wrist view, and what survives the VAE
Goal noiseSingle goalMedian of last 3 goals
0–3 mm100 %100 %
6 mm88 %97 %
10 mm64 %92 %

Servo executor: read the goal fingertips in the wrist view → hover 5 cm → descend → close → lift.

Success: WAM open loop, follow the plan
Failure: WAM open loop, follow the plan

WAM open loop (same setting, 100 scenes): 4 % → 12 % after fine-tuning with wrist actions.

24
3 · FR3 in MuJoCo

π0.5 on the same task: 87 out of 100

π0.5 fine-tuned on sim + DROID, closed loop · 8 of the 100 scenes
PolicyHow it runsSuccess
WAM tiled 8k, plan aloneone shot, open loop6 %
WAM + wrist action, plan aloneone shot, open loop12 %
WAM tiled 8k + programmed wrist correctionplan + script93 %
π0.5 not fine-tuned (pi05_droid)chunk 16, execute 80 %
π0.5 fine-tuned, sim + DROID (A)chunk 16, execute 887 %
π0.5 fine-tuned (sim only), open looponly frame 0 seen0 %
X-WAM not fine-tuned Guo et al. 2026, arXiv 2604.26694closed loop, execute 80 %

π0.5 re-plans every 8 steps from fresh images; the WAM generates the whole 85-frame episode at once.

25
3 · FR3 in MuJoCo

π0.5 vs Ours

π0.5 closed loop new exo + wrist images + robot state every 8 steps predict 16 steps, run 8 · ~80 ms per call 87/100 X-WAM closed loop Guo et al. 2026 arXiv 2604.26694 new images every 8 steps generate 9 frames + 32 actions run 8, observe, repeat · ~6.7 s per call WAM one shot frame 0 only generate all 85 frames executed open loop, no new images ~40–60 s per plan re-plan mid-way fails: every training clip starts at the demo start 12/100 Next Autoregressive WAM conditioned on what was executed Use the camera pose between exo and wrist

π0.5 re-observes exo, wrist and robot state every 8 steps and reaches 87/100, while the WAM generates the whole episode once from frame 0 and executes it open loop for 12/100, so the next steps are an autoregressive WAM and using the exo–wrist camera pose.

26
3 · FR3 in MuJoCo

WAM + wrist action, open loop: 12 out of 100

WAM generated video + plan | our execution of that plan (one shot, open loop) | π0.5 execution (closed loop). Our successes first, then our failures.

27
4 · Discussion

Closed loop: autoregressively predict the next few actions and frames, not the whole episode

  • Now: bidirectional and open loop. 85 frames are planned at once from frame 0.
  • Idea: an autoregressive WAM that generates the next few action latents and the next few video frames from what we already have:
  • Shorter horizon and grounded inputs should make acting easier.
video so fargenerated depth mapscamera poses from FK
↓
WAM
↓
next few action latents + next few video frames
↓
execute, observe, repeat ↻
28
4 · Discussion

Agent: the WAM brings the gripper close, a programmed action grasps

  • The WAM moves the gripper to ~15 cm from the object; a programmed action does the grasp (93 / 100).
  • Contact needs high-fidelity accuracy, so change the coordinate system:
  • exo view cm – m scale → wrist view mm – cm scale
  • Which leads to the next question: how should actions be represented?
WAM plan for the approach + wrist correction for the grasp
29
4 · Discussion

Representing actions in latent space

Exo view, cm – m scale: generated depth within 6 mm (median)
Wrist view, mm – cm scale: generated depth within 0.9 mm (median)
  • Visualize action latents as 3D point clouds and show how they move in 3D.
  • Would other modalities help, such as tactile?
  • Can we add action particles on top?
30
4 · Discussion

How we differ from other approaches

Other WAMs and VLAs

Decode a 7-DoF gripper action

Assume a gripper and output how much it moves: Δx, Δy, Δz, Δrotation, open / close.

Our WAM

Actions live in latent space

Hands and grippers are encoded with the video, by the same VAE. With depth and camera they can be converted into 3D when we need it.

31
4 · Discussion

Can we just rely on the robot to do inverse kinematics?

  • Today we do IK ourselves (slides 17–18): decode the gripper drawing, back-project it with depth, then damped least-squares IK every tick with a pull to a home posture.
  • The WAM only has to say where the gripper goes: 3D pinch point, yaw, open / close. The robot’s own IK (Cartesian controller) could turn that into joint commands, so the WAM never needs joint angles.
  • Our IK is not the bottleneck (1.4 mm IK error, 3.9 mm tracking); misses come from contact.
  • Trade-off: no say in arm posture, and unreachable poses on very different robots (Dream-1 makes the same choice).
WAM: gripper pose in 3D
↓
robot’s IK / Cartesian controller
↓
joint commands
↓
any arm with a parallel gripper
32
4 · Discussion

Related work

Our WAMDreamZero (NVIDIA)
building block of Dream Labs’ Dream-1
X-WAM (Tsinghua + Xiaomi)
arXiv 2604.26694
SA-WAM (Inria / ENS)
arXiv 2609.02531
π0.5 (Physical Intelligence)
Predictsvideo + actions + depth + cameravideo + actionsmulti-view video + depth + EEF states + actionsactions + future RGB + depthactions only
BackboneWan2.2-TI2V-5B + LoRAWan2.1-I2V-14B, full fine-tuneWan2.2-TI2V-5B, full fine-tuneCosmos-Predict2 2B + Wan2.1 VAEPaliGemma VLM + action expert
Actionsdrawn as video: hands and grippersaction tokens (joint positions)Δ end-effector tokens (MLP in/out)8-D end-effector waypoints written into latent slotsaction tokens
Loopone shot: 85 frames at 15 Hz (5.7 s), open loopclosed: 1.6 s chunks, ~7 Hzclosed: ~2 s chunks, run 1 s, 15 Hzchunk of 32, run 16closed: re-plan every 8 steps
Camerasexo + wristwrist + 2 exteriormain + 2 wristswrist + 2 exteriorexo + wrist
3Ddepth + camera rays–depth branch; wrist pose from EEFdepth as log-scaled image through the VAE–
Datahuman hands (HO-Cap, HOT3D) + DROID + sim~500 h AgiBot, or DROID5,874 h robot (AgiBot, DROID, sim)RoboCasa, LIBERO demospretrained robot mix + our sim + DROID
Resultsim pick 12 % open loop (93 % with wrist script)AgiBot seen tasks 62 % progress (π0.5: 27 %)RoboCasa 79 % (DreamZero 62 %, π0 63 %)RoboCasa 77 % (Cosmos-Policy 67 %)sim pick 87 %

Closest is SA-WAM: actions, future RGB and depth in one video model with one loss, depth through the VAE as an image; but its actions are numbers (8-D end-effector pose) in latent slots, ours are drawn as video. DreamZero: arXiv 2602.15922. X-WAM: arXiv 2604.26694. SA-WAM: arXiv 2609.02531. Our and π0.5 numbers: same 100 sim scenes; others on their own benchmarks.

33
5 · Next

Next steps

  1. Closed-loop testGenerate a short chunk, execute it, feed the real frames back, generate the next (like π0.5 and DreamZero). Train from mid-episode starts so re-planning works; then test on the real FR3.
  2. Scale up the data, including failuresMore robot and human clips; failed grasps show the model what not to do.
  3. Near the object, switch to 3D-grounded actionsOnce the gripper is close, predict the grasp in 3D, e.g. with action particles.
34