wikillm

Paper · 2025-12-07 · cs.RO, cs.AI, cs.CV

VideoVLA: Video Generators Can Be Generalizable Robot Manipulators

VideoVLA starts from the pretrained CogVideoX-5B video diffusion transformer and denoises future video latents and a 6-step, 7-D action chunk jointly, conditioned on an instruction and the current image. Author-reported SIMPLER average over 12 tasks: 63.0 vs 62.6 for CogACT. Novel-object and new-skill generalisation: 65.2 and 48.6 vs 42.4 and 20.4.

Vision-language-action modelVideo generationDiffusion modelsAction chunkingrobot-manipulationvideo-generationdiffusion-transformervision-language-action

arXivPDFCodeMarkdown14 min read

AI-compiled by claude-haiku-5-5 on 2026-10-25, not yet reviewed by a human. Every claim cites its source; check it when a detail matters.

In plain words

Most robot policies that read a camera image and a sentence, then output motor commands, start from a model trained to understand pictures and text. VideoVLA starts from a different kind of model: one trained to generate video, which has already learned how scenes change over time.

The model is trained to predict two things at once. One is the next few robot actions. The other is a short video of what the scene should look like after those actions. Both come out of the same step-by-step denoising process, so each prediction can inform the other. The authors report that imagined futures that look right tend to go with successful actions, and that the model handles objects and skills it saw little of in training.

The main cost is speed. A large video model is slow to run, and the authors report about 3 Hz control on their real-robot setup.

TL;DR

  • Adapts a pretrained video diffusion transformer (CogVideoX-5B) into a vision-language-action policy §3.2 §4.1.
  • One denoising model jointly outputs future video latents and a 6-step action chunk; the first 3 actions are executed §3.4 §4.1.
  • Author-reported gains on SIMPLER (Google and WidowX), on novel objects and on cross-embodiment skills, with small trial counts per task tab. 1 tab. 2 tab. 3 app. A.
  • The official MIT-licensed repository holds only the inference script and the model/loss code; training code and optimizer settings are not in it.

Problem

Generalisation in robot manipulation to new tasks, objects and settings is limited when the policy is built on large pretrained image-and-text understanding models [abstract]. The authors argue that pretrained video generators, which model how the world evolves, are a better starting point §1. The method needs a video backbone that can be conditioned on the current image and on text §3.2.

Method

Problem formulation §3.1

Inputs are a text instruction and the current observation. Outputs are:

  1. an action chunk of K actions, each a 7-D vector: three wrist-rotation dimensions, three wrist-translation dimensions, and a binary gripper value (0 closed, 1 open) §3.1;
  2. a video clip of N future frames, predicted in latent form §3.1.

The action chunk and the video may run at different frequencies, so one action can cover several frames. After the chunk runs, the model is queried again on the new observation until the task ends §3.1.

Encoders §3.3

  • Text. A T5 encoder maps the instruction to a fixed 226-token sequence §3.3.
  • Video. The 3D causal VAE from CogVideoX encodes the clip. Because of the causal design, the first latent encodes only the first frame, which is the current observation. At inference only the observation is encoded; in training the whole clip is encoded §3.3.

Joint denoising backbone §3.2 §3.4

  • A DiT-style network (Diffusion Transformer) takes one token sequence built by concatenating the text tokens, the flattened current-observation latent, the flattened future latents and the action tokens. Each latent is flattened in raster order §3.4.
  • The backbone is initialised from pretrained CogVideoX §3.4.
  • Future latents and actions get Gaussian noise under the DDPM schedule. The model is trained to denoise both with the DDPM diffusion loss §3.4.
  • The diffusion timestep enters through adaptive LayerNorm, as in DiT §3.4.
  • Attention is bidirectional by default: action tokens and video tokens can attend to each other app. B.

The method section contains no numbered equations and no algorithm box. The objective is stated in words §3.4. The paper's DDPM and DiT references are cited there; the exact loss form is taken from the code (see Paper vs code).

Pseudocode
# VideoVLA training step  [§3.3] [§3.4] [code: loss.py#L136-L212]
# Input:  clip frames (B, N, 3, H, W), action chunk (B, K, 7), instruction
# Output: scalar loss

def training_step(frames, actions, instruction):
    # Encode the clip with the causal 3D VAE  [§3.3]
    latents = vae_encode(frames)                 # (B, n, C, h, w), C = 16
    # Encode the instruction with T5, 226 tokens  [§3.3]
    text_tokens = t5_encode(instruction)         # (B, 226, 4096)
    # Draw one diffusion step per sample, shared by video and actions  [§4.3]
    step = sample_timestep(batch_size)           # 1000 discrete steps
    # Noise both the video latents and the actions  [§3.4]
    video_noise = randn_like(latents)
    action_noise = randn_like(actions)
    noisy_video = add_noise(latents, video_noise, step)
    noisy_actions = add_noise(actions, action_noise, step)
    # Code keeps latent 1 as a clean conditioning input (channel concat)
    # and denoises all n latents; the paper says j >= 2 only  [§3.4]
    video_pred, action_pred = dit(
        text_tokens, noisy_video, noisy_actions, latents[:, :1], step
    )
    # Denoising loss on both modalities, each with weight 1
    # [code: config_use/action_config/videovla_config.yaml#L144-L145]
    video_loss = denoise_loss(video_pred, latents)
    action_loss = denoise_loss(action_pred, actions)
    return video_loss + action_loss
Pseudocode
# VideoVLA inference: one action chunk per call  [§3.1] [§3.3] [§4.1]
# Input:  current observation image, instruction
# Output: the first 3 of 6 predicted actions

def act(observation, instruction):
    # Encode only the current observation  [§3.3]
    first_latent = vae_encode(observation)[:1]
    text_tokens = t5_encode(instruction)
    # Start video latents and actions from Gaussian noise
    # [code: sample_video_action.py#L165-L167]
    video_noise = randn(n, C, h, w)
    action_noise = randn(6, 7)
    # Denoise video and actions jointly; the repo config uses 50 steps
    # [code: config_use/action_config/videovla_config.yaml#L160]
    video, actions = joint_sampler(
        text_tokens, first_latent, video_noise, action_noise
    )
    # The repo script saves only the video; the action output is unused
    # [code: sample_video_action.py#L251-L255]
    # Only the first 3 actions are executed, then the model is queried again
    # [§4.1]
    return actions[:3]

Hyperparameters

NameValueWhereNotes
BackboneCogVideoX-5B, pretrained§4.1Config: 42 layers, hidden 3072, 48 heads videovla_config.yaml
Text encoderT5, 226 tokens§3.3Config loads t5-v1_1-xxl, width 4096 videovla_config.yaml videovla_config.yaml
Video VAE3D causal VAE from CogVideoX, 16 latent channels§3.3videovla_config.yaml
Temporal compression4 frames per latent§4.3Config value 4 videovla_config.yaml
Predicted frames, simulation13 latents = 49 frames§4.1Config num_frames: 49 videovla_config.yaml
Predicted frames, real robot4 latents = 13 frames§4.1 app. DInference config sets 13 inference.yaml
Action chunk length K6§4.1 app. DConfig action_length: 6 videovla_config.yaml
Executed actionsfirst 3 of 6§4.1Not in repo; execution loop is not released
Action dimension7§3.1Config action_hidden_size: 7 videovla_config.yaml
Image resolution256 × 256not stated in paperInference script resizes to 256 × 256 sample_video_action.py
Latent grid32 × 32 per framenot stated in paperConfig values videovla_config.yaml; patch size 2 videovla_config.yaml
Diffusion steps (training)1000 discrete levels, zero-terminal-SNR DDPM discretisation§3.4 (DDPM only)videovla_config.yaml videovla_config.yaml
Training step samplinguniformnot stated in papervideovla_config.yaml
Video loss weight1not stated in papervideovla_config.yaml
Action loss weight1not stated in papervideovla_config.yaml
OptimizerAdamW§4.1Training script not in repo
Learning rate1e-5§4.1Training script not in repo
Weight decay1e-4§4.1Training script not in repo
Pretraining length100K iterations, batch 256§4.132 AMD MI300X GPUs §4.1
Fine-tuning length15K iterations§4.1Real-robot fine-tuning §4.1
Pretraining data22.5M frames from an OXE subset§4OXE has 1M+ trajectories, 60 datasets, 22 embodiments §4
Real-robot data5,824 samples, 3 tasks§4Teleoperated Realman, 7-DoF arm and gripper §4
Inference sampler50 denoising steps, "DDIM"§4.1Config: DPM-Solver++ (2M)-style update, 50 steps sampling.py videovla_config.yaml
Inference speed~1.1 s per chunk, 10 steps, H100app. DAuthor-reported; ~3 Hz effective control
GuidanceDynamicCFG, scale 6, exp 5not stated in papervideovla_config.yaml
Text dropout for guidance0.1not stated in papervideovla_config.yaml
First-frame noise augmentationlog-normal σ, mean −3, std 0.5not stated in paperdiffusion_video.py
Conditioning-image dropout0.05not stated in papervideovla_config.yaml diffusion_video.py
Robot-ID embeddingadded to action tokensnot stated in paperdit_video_concat_withact.py dit_video_concat_withact.py

Results

Author-reported throughout. Averages are over the tasks listed in each table. Each cell is a success rate in %. Where a cell has two values, it is "Visual Matching / Variant Aggregation" (VM / VA) tab. 1.

Table 1. SIMPLER in-domain evaluation tab. 1. Setup: trained on OXE only; WidowX (VM, 4 tasks, 24 trials each) and Google robot (VM and VA, 4 tasks) app. A. Bold and underline from the paper are omitted.

MethodPut SpoonPut CarrotStack BlockPut EggplantWidowX avgCoke CanMove NearOpen/Close DrawerOpen & PlaceGoogle avg (VM/VA)All 12
RT-1-X0.04.20.00.01.156.7 / 49.031.7 / 32.359.7 / 29.422.2 / 11.142.7 / 30.524.8
RT-2-X-----78.7 / 82.377.9 / 79.225.0 / 35.33.7 / 20.646.3 / 54.4-
Octo-Base15.812.50.041.717.517.0 / 0.64.2 / 3.122.7 / 1.10.0 / 0.011.0 / 1.29.9
Octo-Small41.78.20.056.726.7------
OpenVLA4.20.00.012.54.218.0 / 60.856.3 / 67.763.0 / 28.80.0 / 0.534.3 / 39.426.0
SpatialVLA20.820.825.070.834.481.0 / 89.569.6 / 71.759.3 / 36.28.3 / 12.254.6 / 52.447.1
π029.262.529.291.653.184.0 / 71.455.8 / 57.934.3 / 26.531.5 / 18.053.5 / 43.450.0
CogACT71.750.815.067.551.391.3 / 89.685.0 / 80.871.8 / 28.352.7 / 47.175.2 / 61.462.6
VideoVLA (this paper)75.020.845.870.853.192.3 / 89.882.9 / 73.366.2 / 28.850.9 / 59.373.1 / 62.863.0

The paper reports the highest overall average, 63.0 vs 62.6 for CogACT. On WidowX Put Carrot, VideoVLA scores 20.8 against 62.5 for π0 and 50.8 for CogACT tab. 1.

Table 2. Novel objects, SIMPLER, Google robot (Pick Up, 10 objects) tab. 2 §4.1. Trials: 25 per object app. A.

MethodGreen CubeCarrotEggplantWrenchStrawberryPlumTennis BallCleaner BottleToy AirplaneFlashlightAvg.
OpenVLA12.024.012.00.00.04.00.04.04.04.06.4
SpatialVLA76.052.084.032.060.056.032.056.032.028.050.8
π048.060.044.016.012.044.024.016.00.024.028.8
CogACT84.072.064.016.032.044.020.032.020.040.042.4
VideoVLA (this paper)96.084.088.040.072.080.068.044.028.052.065.2

Table 3. New skills, SIMPLER, Google robot tab. 3 §4.1. Skills come from the WidowX training data and are absent from the Google robot data. Trials: 20 per skill app. A.

MethodPut Spoon on TowelPut Carrot on PlateStack Green on YellowTake Out of AppleFlip CupPour Coke CanSlide to {L,R,U,B}Avg.
OpenVLA0.012.50.026.70.04.00.06.2
SpatialVLA6.331.30.031.320.040.04.018.9
π018.818.80.066.78.012.04.018.3
CogACT20.841.75.043.84.020.08.020.4
VideoVLA (this paper)56.358.320.093.820.052.040.048.6

The text reports 28.2 points over CogACT on average §4.1.

Table 4. Real-world in-domain, Realman robot tab. 4. All models are pretrained on OXE and fine-tuned on the authors' 5,824-sample dataset. Place reports both stages tab. 4 caption. Trials: Pick Up 24, Stack 48, Place 24 app. A.

MethodBananaLemonAvocadoPick avgCupBowlStack avgPick UpPlacePlace avgTask avg
OpenVLA12.50.012.58.312.50.06.329.20.014.69.7
SpatialVLA37.525.050.037.525.016.720.820.80.010.422.9
π062.562.575.066.758.350.054.245.816.731.350.7
CogACT75.062.587.575.083.345.864.654.216.735.558.4
VideoVLA (this paper)62.575.075.070.875.058.366.787.525.056.364.6

Table 5. Real-world novel objects, Realman robot tab. 5. Task: pick up the novel object and place it on a coloured plate; colours White, Blue and Yellow. Trials: 12 per object app. A.

MethodBlue BallClear TapeToy DuckEraserScrewdriverMangoCableMousePeachPenB-1B-2B-3Avg.
OpenVLA50.00.08.325.00.00.00.00.08.38.30.08.316.79.6
SpatialVLA58.30.08.333.30.00.00.00.016.78.38.325.025.014.1
π066.70.00.016.733.30.025.00.08.316.741.750.025.021.8
CogACT91.70.016.758.350.08.316.70.00.08.38.358.333.326.9
VideoVLA (this paper)83.375.075.058.358.341.741.733.325.016.741.766.741.750.6

Table 6. Real-world cross-embodiment skills, Realman robot tab. 6. Skills seen only on the WidowX robot. Trials: 16 per skill app. A.

MethodMove BlockMove FruitGrab FruitTopple BottleTake Out BlockWipe TableAvg.
OpenVLA18.812.518.80.00.00.08.3
SpatialVLA18.825.031.36.30.00.013.5
π043.831.362.512.512.58.328.5
CogACT56.350.068.818.80.016.735.1
VideoVLA (this paper)81.368.875.043.837.541.758.0

Ablations (SIMPLER, Google robot, Visual Matching; 3 tasks unless noted).

SettingCoke CanMove NearOpen/CloseAvg.Source
Backbone: OpenSora-1.167.757.125.950.2tab. 7
Backbone: CogVideoX-5B from scratch18.610.89.212.6tab. 7
Backbone: CogVideoX-5B (default)92.382.966.280.4tab. 7
Future frames: 1388.775.461.675.2tab. 8
Future frames: 2590.079.263.077.4tab. 8
Future frames: 49 (default)92.382.966.280.4tab. 8
Dual prediction: default92.382.966.280.4tab. 9
Dual prediction: no video loss35.629.116.227.0tab. 9
Dual prediction: action only33.325.817.625.5tab. 9
Attention: causal mask89.376.261.175.5tab. 13 app. B
Schedule: async training, sync inference87.374.160.273.8tab. 14 app. B
Schedule: async training, async inference84.770.857.471.0tab. 14 app. B

The generalisation columns of the dual-prediction ablation are 65.2 / 48.6 for the default, 12.7 / 4.4 for no video loss, and 11.3 / 2.1 for action only tab. 9.

Imagination vs execution tab. 10 §4.4. Visual imagination is judged by humans. Success requires following the instruction and having no salient geometric distortion. Novel objects: 84.0 imagined, 65.2 executed. New skills: 63.4 imagined, 48.6 executed.

Motion similarity §4.4 fig. 2. The authors compare SIFT and SAM-PT trajectories of the imagined and executed videos with Hungarian matching and cosine similarity. The paper reports that higher similarity goes with higher success. Plot values are not tabulated in the text.

Trials per task app. A, tables 11 and 12. SIMPLER Google VM: 300, 240, 216, 108 trials; VA: 825, 600, 378, 189. WidowX: 24 per task. Real robot: Pick Up 24, Stack 48, Place 24. At 24 trials, one success is 4.2 points, so the small gaps in the tables (for example 63.0 vs 62.6) are within noise.

Paper vs code

Checked at commit 05b5cca7d4ec32e786b7e10dcbfbf5926637b293 of VideoVLA-Project/VideoVLA (MIT), linked from the project page [https://videovla-nips2025.github.io/]. The repo has no training script, so training settings can only be checked against the config and loss.

  • Sampler and steps. Paper: "DDIM sampling with 50 denoising steps" §4.1. Code: the sampler class is VPSDEDPMPP2MSampler_withact, a DPM-Solver++ (2M) style multistep update, with 50 steps sampling.py videovla_config.yaml. The limitations section says 10 DDIM steps give ~1.1 s per chunk app. D. The repo ships no 10-step setting.
  • Guidance. The paper does not mention classifier-free guidance. The config uses DynamicCFG with scale 6 and a 10% text-dropout rate videovla_config.yaml videovla_config.yaml guiders.py.
  • First latent. Paper: the current-observation latent V1 is a clean conditioning token and only future latents j ≥ 2 are denoised §3.4. Code: the first-frame image is noised with a log-normal sigma before encoding diffusion_video.py diffusion_video.py, channel-concatenated to the noisy video (in_channels 32 = 16 + 16) dit_video_concat_withact.py, dropped to zeros with 5% probability diffusion_video.py, and the loss covers all latents because fixed_frames: 0 and the loss has no masking loss.py videovla_config.yaml.
  • Loss form. Paper: "DDPM's diffusion loss" §3.4. Code: the sgm denoiser with zero-terminal-SNR DDPM discretisation; the loss compares denoiser output to the clean target with weight 1/(1 − ᾱ), for video and actions alike loss.py videovla_config.yaml.
  • Robot-ID embedding. Not in the paper. The DiT adds a learned robot-ID embedding to the action tokens dit_video_concat_withact.py dit_video_concat_withact.py. The inference script sets robot_ids to action_dim, i.e. 7 sample_video_action.py. The robot_ids: 1 value in the inference config is not read by the code inference.yaml.
  • Action output. The paper says the model predicts the 6-step chunk and that the first 3 are executed §4.1. The inference script computes the action samples but saves only the video sample_video_action.py sample_video_action.py. No action decoding, de-normalisation, gripper thresholding or execution loop is in the repo.
  • Optimizer and schedule. Paper: AdamW, lr 1e-5, weight decay 1e-4, 100K pretraining and 15K fine-tuning iterations, batch 256 §4.1. Code: no training script; the learning rate and weight decay are CLI arguments arguments_withact.py. Not verifiable from the repo.
  • Consistent. Action chunk length 6 and action dimension 7 videovla_config.yaml videovla_config.yaml; T5 with 226 tokens videovla_config.yaml; 13 frames for real-robot inference inference.yaml; bidirectional, non-decoder transformer videovla_config.yaml (attention masks not traced line by line); synchronous shared timestep for video and actions loss.py.

Pitfalls

  • Sampler default. Using the repo's 50-step default is not the 10-step setting behind the reported 1.1 s per chunk app. D. Expect higher latency with the default (not measured here).
  • Latent 1 handling. The paper treats latent 1 as a clean observation token §3.4. The code denoises it and conditions through channel concatenation of a noised first frame. An implementation that follows the paper will not match the code's behaviour.
  • Undocumented noise augmentation. The first-frame noise (log-normal sigma, mean −3, std 0.5) and the 5% conditioning dropout are not in the paper diffusion_video.py videovla_config.yaml.
  • Action outputs. No gripper binarisation, normalisation or decoding is in the repo, so the binary gripper dimension §3.1 has to be implemented by you.
  • Robot-ID. The inference script's robot_ids value differs from the config value, and the config field is ignored sample_video_action.py.
  • Trial counts. The real-world novel-object table has 13 columns (10 named objects plus B-1 to B-3) while the text says 12 objects §4.2 tab. 5. Treat the table headers and text as ambiguous. Small trial counts (12 to 48) make differences of a few points unreliable app. A.
  • Human-judged imagination. Visual imagination success is human-rated, not automated §4.4.
  • Speed. The authors report ~3 Hz effective control on an H100 app. D. Training used 32 AMD MI300X GPUs with batch 256 §4.1. Inference memory for a 5B backbone is not stated.
  • Backbone quality matters. Training from scratch drops to 12.6 average tab. 7. The pretrained video prior is load-bearing.
  • Frame vs action frequency. Frames and actions may run at different rates §3.1. The paper gives no mapping between them beyond the frame counts §4.1.
  • Table and figure numbers follow source order in the LaTeX. Floats may shift them in the rendered PDF.

Lineage

  • Builds on: CogVideoX-5B video generator and its 3D causal VAE and T5 text encoder §3.3 §4.1. The DiT architecture §3.4. DDPM §3.4. Open X-Embodiment pretraining data, card at [/papers/2310.08864] §4. SIMPLER evaluation environment §4.1.
  • Compared against: OpenVLA [/papers/2406.09246], SpatialVLA, π0, CogACT, Octo, RT-1-X and RT-2-X tab. 1.
  • Superseded by: not known from the paper or the repo.

Source and license

Adapted from “VideoVLA: Video Generators Can Be Generalizable Robot Manipulators” by Yichao Shen, Fangyun Wei, Zhiying Du, Yaobo Liang, Yan Lu, Jiaolong Yang, Nanning Zheng, Baining Guo (arXiv:2512.06963), used under CC BY 4.0. Changes: condensed and restructured for implementation, with tables, equations and algorithms taken from the paper and its code, each cited to its source. Not affiliated with or endorsed by the authors. Code citations refer to https://github.com/VideoVLA-Project/VideoVLA at commit 05b5cca7d4ec (MIT). Any quoted code is shown under that license.