World Action Model · progress update
Making a 3D-aware World Action Model
- 1How a TI2V model became a WAM (2D)
- 2Lifting the WAM to 3D: depth + cameras
- 3Testing it on a Franka FR3 in MuJoCo
- 4Discussion
- 5Next steps
Won · Ontic Labs · 20 Oct 2026
One model for video and actions
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.
2Captions: Claude writes robot-style instructions
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.
3A training sample: first frame, instruction, hands as a video
Two ways to condition the same model
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.
5Generate the hands, or follow given ones
Text and hands both steer the video
Lifting the WAM to 3D
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.
8Hands and grippers share one action latent space
Both are drawn as 2.5D action videos and encoded by the same VAE. Next: transfer human hand poses to robot grippers.
9HO-Cap: video, hands, depth and camera together
DROID: a real robot arm
Held-out clips · image + instruction → video + gripper action + depth · checkpoint 100k
11HoloLens: egocentric hands
Held-out clips · image + instruction → video + 2.5D hands + depth · checkpoint 100k
12HOT3D: a moving head camera
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
Do generated plans work on a robot? Test in simulation first
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.
14Is the wrist camera really useful for this task?

With the WAM: 100 held-out scenes
| Exo only | Exo + wrist | |
|---|---|---|
| Plan alone (open loop) | 5 % | 6 % |
| Plan grasp xy error (median) | 72 mm | 50 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 points | 74 % | 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 error | Head 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.
15The wrist camera sees the object up close
Note: the wrist camera scaling in these clips is wrong (older data); the newer data fixes the wrist depth scale.
16From generated video to robot motion
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.
17IK: from a gripper target to joint angles
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.
18The robot follows the plan to 3.9 mm
Plan alone: the WAM gets close but does not grasp
Typical miss: the plan closes ~5 cm away from the object centre (median), so the fingers miss or hit the object.
20A “programmed” policy: WAM plan + scripted wrist correction
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).
21First deployment: 6 → 93 out of 100
| WAM checkpoint | Plan alone (open loop) | + wrist look, oracle mask | + wrist depth, 2 looks (no mask) |
|---|---|---|---|
| Exo camera only, 10k steps | 5 % | 74 % | 60 % |
| Exo + wrist tiled, 4k | 4 % | 91 % | – |
| Exo + wrist tiled, 8k | 6 % | 93 % | 88 % |
| Exo + wrist tiled, 10k | 2 % | 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.
Wrist actions: the grasp goal drawn in the wrist view
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.
23Wrist actions in the training data
| Goal noise | Single goal | Median of last 3 goals |
|---|---|---|
| 0–3 mm | 100 % | 100 % |
| 6 mm | 88 % | 97 % |
| 10 mm | 64 % | 92 % |
Servo executor: read the goal fingertips in the wrist view → hover 5 cm → descend → close → lift.
WAM open loop (same setting, 100 scenes): 4 % → 12 % after fine-tuning with wrist actions.
24π0.5 on the same task: 87 out of 100
| Policy | How it runs | Success |
|---|---|---|
| WAM tiled 8k, plan alone | one shot, open loop | 6 % |
| WAM + wrist action, plan alone | one shot, open loop | 12 % |
| WAM tiled 8k + programmed wrist correction | plan + script | 93 % |
| π0.5 not fine-tuned (pi05_droid) | chunk 16, execute 8 | 0 % |
| π0.5 fine-tuned, sim + DROID (A) | chunk 16, execute 8 | 87 % |
| π0.5 fine-tuned (sim only), open loop | only frame 0 seen | 0 % |
| X-WAM not fine-tuned Guo et al. 2026, arXiv 2604.26694 | closed loop, execute 8 | 0 % |
π0.5 re-plans every 8 steps from fresh images; the WAM generates the whole 85-frame episode at once.
π0.5 vs Ours
π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.
26WAM + 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.
27Closed 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.
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?
Representing actions in latent space
- 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?
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.
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).
Related work
| Our WAM | DreamZero (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) | |
|---|---|---|---|---|---|
| Predicts | video + actions + depth + camera | video + actions | multi-view video + depth + EEF states + actions | actions + future RGB + depth | actions only |
| Backbone | Wan2.2-TI2V-5B + LoRA | Wan2.1-I2V-14B, full fine-tune | Wan2.2-TI2V-5B, full fine-tune | Cosmos-Predict2 2B + Wan2.1 VAE | PaliGemma VLM + action expert |
| Actions | drawn as video: hands and grippers | action tokens (joint positions) | Δ end-effector tokens (MLP in/out) | 8-D end-effector waypoints written into latent slots | action tokens |
| Loop | one shot: 85 frames at 15 Hz (5.7 s), open loop | closed: 1.6 s chunks, ~7 Hz | closed: ~2 s chunks, run 1 s, 15 Hz | chunk of 32, run 16 | closed: re-plan every 8 steps |
| Cameras | exo + wrist | wrist + 2 exterior | main + 2 wrists | wrist + 2 exterior | exo + wrist |
| 3D | depth + camera rays | – | depth branch; wrist pose from EEF | depth as log-scaled image through the VAE | – |
| Data | human hands (HO-Cap, HOT3D) + DROID + sim | ~500 h AgiBot, or DROID | 5,874 h robot (AgiBot, DROID, sim) | RoboCasa, LIBERO demos | pretrained robot mix + our sim + DROID |
| Result | sim 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.
33Next steps
- 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.
- Scale up the data, including failuresMore robot and human clips; failed grasps show the model what not to do.
- Near the object, switch to 3D-grounded actionsOnce the gripper is close, predict the grasp in 3D, e.g. with action particles.