Video-As-Prompt: Unified Semantic Control for Video Generation

Paper: arXiv:2510.20888
Project: Video-As-Prompt
Code: bytedance/Video-As-Prompt
Code reference: main @ 0f30aedf (2026-02-08) — pseudocode and code mapping below are based on this commit.

1. Motivation (研究动机)

这篇论文要解决的是视频生成里的“统一语义控制”问题:给定一个目标主体或目标首帧,希望生成的视频能够继承另一个参考视频里的抽象语义,例如概念变化、风格、运动模式或镜头运动,而不是复制参考视频的像素布局。这个问题和 depth、pose、mask、optical flow 这类结构控制不同。结构条件和目标视频通常存在明确的像素级对应关系,因此模型可以把条件当成空间对齐的控制图;但语义控制里的 reference video 与 target video 只共享语义,不共享主体、外观、布局和逐帧位置。如果仍然把它当作 pixel-aligned condition,就会把不该复制的形状、姿态、背景或布局带到输出里。

论文把已有方法的问题归纳成三类。第一类是把统一结构控制方法直接迁移到语义控制,例如用 VACE 这类模型吃 reference video、depth 或 optical flow。它们的 inductive bias 是“条件和输出逐像素对应”,所以在语义控制下容易出现 copy-and-paste artifacts:比如参考视频是狗的姿态,输出主体就被迫站得像狗;参考视频里的羊或青蛙的布局也会被错误映射到 Statue of Liberty 等目标上。第二类是 condition-specific overfit,也就是每种语义单独微调一个 backbone 或 LoRA,例如为 Ghibli style、Hitchcock zoom、某个 VFX 效果分别训练模型。这能提高某些已见语义的对齐,但成本高、模型数量随语义类型增长,且对 unseen reference 的泛化弱。第三类是 task-specific design,针对 style、camera、motion 等任务分别设计编码器、控制模块或推理策略。它们可以在单个任务上有效,但不能形成“一个模型处理多种语义控制”的统一范式。

更深层的瓶颈是:语义本身很难只靠文本精确表达。文本可以说“liquid metal covers the face”或“Hitchcock dolly zoom”,但很难描述参考视频里持续变化的时序、局部变形、风格过渡和相机运动曲线。很多视觉特效和 motion pattern 是动态的、隐式的,粗粒度 caption 会丢掉细节。论文因此提出一个很直接的设问:如果文本 prompt 不足以承载语义,为什么不直接把“想模仿的参考视频”作为 prompt?这就是 Video-As-Prompt (VAP) 的出发点。

Figure 1 解读:teaser 展示了 VAP 在 concept、style、motion、camera 等不同语义维度上的统一控制。关键不是让目标视频复制 reference video 的空间布局,而是把 reference video 中的“想要的语义”抽出来,再迁移到新的 reference image / target subject 上。最后一行的 zero-shot 例子强调:模型并不只是在训练集中记住固定模板,而是在学习“视频可以作为语义提示”的通用 in-context 行为。

这篇工作的价值在于把可控视频生成从“为每种控制信号设计一种接口”推进到“用同一种 reference-video prompt 接口控制多种非像素对齐语义”。如果成立,它会给视觉特效、视频风格化、motion imitation、camera control 和用户自定义模板带来更统一的生产流程:创作者只需要给一个展示期望语义的短视频,再给目标主体或首帧,模型就应当生成符合该语义的新视频。

2. Idea (核心思想)

VAP 的核心思想可以概括为:把 reference video 当作 in-context prompt,而不是当作 pixel-wise condition;用一个 trainable Mixture-of-Transformers expert 解释 reference prompt,同时冻结原始 Video DiT 以保留生成能力;再用 temporally biased RoPE 取消虚假的空间/时间逐像素映射先验。它的新意不在于提出单一的 style encoder 或 motion adapter,而在于把不同语义控制都重写成同一种条件分布学习问题。

Figure 2 解读:论文把 controllable video generation 的范式分成四类。结构控制假设 condition 与 output pixel-aligned;condition-specific overfit 为每个语义微调;task-specific design 为每类任务设计模块;VAP 则把“与目标共享语义但不共享像素位置”的 reference video 放进上下文,让模型通过 in-context attention 读取语义。这一改写直接避开了结构控制的错误先验,也避免了每个语义一个模型的维护成本。

形式上,论文将语义控制集合写成多个 condition type 的并集 。旧方法通常要么对每个 task type 训练 个模型,要么对每个具体 condition 训练最多 个模型;VAP 训练一个统一模型 学习 ,其中 可以来自 concept、style、motion、camera 等语义集合。它还同时输入参考视频 caption 与目标视频 caption ,使模型更容易定位双方共享的语义短语,例如“cover liquid metal”。

VAP 的三点核心设计如下:

  1. Reference videos as task-agnostic prompts:参考视频不是控制图,而是“展示语义的上下文示例”。它和 target video 共享 semantics,但允许主体、场景、布局、颜色、镜头位置不同。因此模型需要检索抽象动态语义,而不是学习像素对应。
  2. Plug-and-play MoT expert:直接把 reference tokens、target tokens 拼接后全量 fine-tune DiT 会导致 catastrophic forgetting,因为 Video DiT 原本是为 generation 预训练的,不是为 semantic in-context conditioning 预训练的。VAP 使用 frozen Video DiT 加一个 trainable parallel expert:expert 处理 reference tokens,frozen DiT 处理 target tokens,每层通过 full attention 交换信息,从而既保留基础生成能力,又注入 reference guidance。
  3. Temporally Biased RoPE:如果 reference video 和 noisy target video 共享完全相同的位置编码,模型会误以为二者存在逐像素时空对应。VAP 将 reference prompt 的 temporal indices 用固定偏移 放到 target tokens 之前,同时保持 spatial indices 不变;这样模型读到的是“时间上在前的上下文示例”,而不是“和目标同一位置的控制图”。

Figure 3 解读:VAP-Data 是支撑这个范式的关键,因为 unified in-context semantic control 需要大量“不同主体、相同语义”的 paired videos。论文构建了超过 100K 个样本、覆盖 100 个 semantic conditions,四大类包括 concept、style、motion、camera。数据不是简单爬取真实成对视频,而是用约 2K 高质量 reference images 结合商业视觉特效模板(VIDU、Kling)和 community LoRAs 自动生成配对样本。

这个 idea 最重要的直觉是:reference video 提供了比文本更密集的动态语义证据,但必须通过合适的结构消除像素对齐误导。MoT 解决“怎么把 reference prompt 接入现有 DiT 且不破坏原始生成能力”;temporal-biased RoPE 解决“怎么让模型把 reference 当上下文而不是当控制图”;VAP-Data 解决“怎么让一个模型看到足够多异质语义,从而学习统一原则”。

3. Method (方法)

3.1 Diffusion/flow-matching 预备

论文用 Flow Matching 说明 video diffusion model 学习条件分布 的方式。给定噪声样本 与真实视频 ,路径为: 速度目标为: 模型 最小化: 这个公式本身不是 VAP 的创新,但它说明 VAP 仍然是在标准 Video DiT 的 denoising / velocity prediction 框架里工作。创新点在于条件 不再只是 text、image 或 pixel-aligned structure,而是包含 reference video、reference caption、target caption 与 target first frame 的 in-context 条件组合。

3.2 输入组织:reference video 作为语义 prompt

VAP 的一次训练或推理主要包含四类输入:reference video、reference image / first frame、captions,以及 noisy target video 或 inference noise。参考视频 与目标视频 经 VAE 编码为 latent ;文本 caption 经 text encoder 得到 。论文把 in-context sequence 写成: 同时,reference video 的 first frame token 会和 video tokens 拼接,用来继承 Image-to-Video backbone 的首帧条件能力。直觉上,reference video 负责“语义是什么、如何变化”,reference image / target image 负责“主体初始外观是什么”,target caption 负责“当前生成内容应该如何描述”。

Figure 4 解读:方法图上半部分是 tokenization:reference caption、reference video、target caption、noisy target video 都被编码成 token,并加上 RoPE;下半部分是 MoT:reference 侧进入 trainable DiT Expert,target 侧进入 frozen Video DiT。二者不是简单串联后全量更新,而是在每个 MoT block 里通过 full attention 做双向信息融合。

3.3 Plug-and-play Mixture-of-Transformers

最朴素的做法是把 拼到同一个 DiT 中 fine-tune。但论文发现这在有限数据下容易 catastrophic forgetting:Video DiT 原本学的是从噪声生成视频,不是读取 reference/target pair 做 in-context semantic retrieval;同时 reference-target pair 又没有像素对齐关系,导致学习难度比结构控制更高。

VAP 因此采用 Mixture-of-Transformers (MoT):保留一个 frozen Video DiT 处理 target generation,再复制或初始化一个 trainable expert transformer 处理 reference prompt。expert 消费 ,frozen DiT 消费 。每层各自保留 query/key/value projections、feed-forward layers 和 norms;在 attention 阶段拼接 Q/K/V,执行 full attention,实现 reference 与 target 的双向信息交换。这样 reference representation 会随 target tokens 同步调整,而 frozen backbone 的生成能力不会被全量 fine-tuning 破坏。

一个简化的算法流程如下:

def video_as_prompt_step(ref_video, ref_caption, target_image, target_caption, noisy_target, t):
    ref_latent = vae.encode(ref_video)
    target_latent = vae.encode(noisy_target)
    ref_text = text_encoder(ref_caption)
    target_text = text_encoder(target_caption)

    ref_tokens = concat(ref_text, ref_latent, first_frame_tokens(ref_video))
    target_tokens = concat(target_text, target_latent, first_frame_tokens(target_image))

    ref_pos = rope_with_temporal_bias(ref_tokens, delta=-Delta)
    target_pos = rope(target_tokens)

    for layer in transformer_layers:
        ref_tokens = expert_ffn_and_norm(ref_tokens)
        target_tokens = frozen_dit_ffn_and_norm(target_tokens)
        qkv = concat_qkv(ref_tokens, target_tokens, pos=(ref_pos, target_pos))
        ref_tokens, target_tokens = full_attention_exchange(qkv)

    return predict_velocity(target_tokens, t)

这里的 pseudocode 强调的是 paper-to-code 的结构对应:reference 分支不是最终要单独生成视频,而是作为 prompt representation 被 target 分支读取;MoT 的价值是让 reference side 与 target side 在每一层都能交换信息,同时不更新 frozen DiT 的核心生成路径。

3.4 Temporally Biased RoPE

RoPE 的问题在语义控制里很关键。若 reference token 与 target token 使用相同的空间/时间坐标,模型会沿用 structure control 中的“同坐标对应”假设,误以为 reference 第 帧第 个 patch 应该映射到 target 的同一位置。这对 depth/pose 可能合理,但对“把一只鞋变气球的动态语义迁移到一匹马”完全不合理。

VAP 的处理是:保持 reference prompt 的 spatial indices 不变,但将 temporal indices 做固定偏移 ,把 reference 放在 target video 之前。这样 reference 被表示为“时间轴上先出现的上下文示例”,而不是“和当前 target frame 对齐的控制图”。论文报告 identical RoPE 会让模型输出 Fig. 5(c) 那样的 artifacts;Temporal-biased RoPE 在 Tab. 2 中带来更高的 alignment score。

Figure 5 解读:这组可视化说明了为什么 residual addition、concat-and-finetune、shared RoPE 都不够。Residual addition 仍然像结构控制那样依赖刚性 pixel-to-pixel mapping;concat-and-finetune 容易破坏 backbone;shared RoPE 则让 reference 和 target 被错误地理解为同一时空坐标系。VAP 的设计相当于同时消除三种失败源:错误空间先验、灾难遗忘、上下文检索不稳。

3.5 Code-to-paper mapping

Code reference: main @ 0f30aedf (2026-02-08) — pseudocode and mapping based on this commit.

Paper ConceptSource FileKey Class/Function
CogVideoX 版本的最小推理入口:加载 VAE、MOT Transformer、Pipeline,并传入 reference video / captioninfer/cog_vap.pyAutoencoderKLCogVideoX.from_pretrained, CogVideoXTransformer3DMOTModel.from_pretrained, CogVideoXImageToVideoMOTPipeline.from_pretrained, pipeline call with ref_videos, prompt_mot_ref, frames_selection="evenly"
Wan2.1 版本推理入口infer/wan_vap.pyAutoencoderKLWan, WanTransformer3DMOTModel, WanImageToVideoMOTPipeline
Pipeline 中的 reference prompt 编码与 frame samplingdiffusers/src/diffusers/pipelines/cogvideo/pipeline_cogvideox_image2video_mot.py__call__, prompt_mot_ref, negative_prompt_mot_ref, ref_videos, frames_selection, _prepare_rotary_positional_embeddings
MoT Transformer 主体diffusers/src/diffusers/models/transformers/cogvideox_transformer_3d_mot.pyCogVideoXTransformer3DMOTModel, CogVideoXBlock3DMOT, patch_embed_mot_ref, time_embedding_mot_ref, attn1_mot_ref, ff_mot_ref
Temporal-biased reference position handlingpipeline_cogvideox_image2video_mot.py and cogvideox_transformer_3d_mot.pyimage_rotary_emb_mot_ref, mot_num, num_mot_ref, timestep_list_mot_ref, ref_type
VAP training entrytrain.pyTrainingType.VIDEO_AS_PROMPT_MOT, VideoAsPromptMOTConfig, SFTTrainer
VAP-Data loading with multiple candidate reference videos and reference captionsfinetrainers/data/dataset.pyref_video_paths, caption_mot_ref, sample_ref_videos_num, mask_caption_ratio, training_dataset_kind

代码和论文的对应关系比较直接。infer/cog_vap.py 中最小 demo 先从 ckpts/Video-As-Prompt-CogVideoX-5B 加载 vaetransformer,再构造 CogVideoXImageToVideoMOTPipeline。推理时传入 imageref_videos=[ref_frames]、target promptprompt_mot_ref=[...],并设定 height=480width=720num_frames=49frames_selection="evenly"

这对应论文中的 reference video + reference caption + target image/caption 的输入组织。Pipeline 里会对 prompt_mot_ref 列表逐项 encode_prompt,拼接 reference prompt embeddings,并对 ref_videosfirst/evenly/random 抽帧。

Transformer 文件里则出现了 MoT reference 分支的专用 patch embedding、time embedding、attention 和 FFN 路径,并把 image_rotary_embimage_rotary_emb_mot_ref 拼接后用于 attention。

训练入口 train.pyVIDEO_AS_PROMPT_MOT 交给 SFTTrainer,配置类暴露 ref_videos_numsample_ref_videos_nummask_caption_ratiomodel_structure_configrandom_refer_noiseref_type 等选项,说明开源实现不仅给推理,也保留了 VAP/MoT 训练路径。

4. Experimental Setup (实验设置)

论文在两个 Video DiT backbone 上验证 VAP:CogVideoX-I2V-5B 与 Wan2.1-I2V-14B。为了公平,CogVideoX 版本的 in-context DiT expert 是原模型的完整拷贝;Wan2.1 版本只在 14 个层位置插入分布式拷贝,使新增 expert 规模约为 5B。主文结果主要报告 CogVideoX,因为 Wan2.1 资源成本更高。

训练设置为:视频 resize 到 480p(CogVideoX 侧主文写 480×720/832),采样 49 frames at 16 fps;AdamW,learning rate ,约 20K steps,在 48 张 NVIDIA A100 上训练。推理时 CogVideoX 版本使用 50 denoising steps、CFG scale 6.0;Wan2.1 版本使用 30 sample steps、guide scale 5.0。附录 Tab. 3 还给出:batch size / GPU 对 CogVideoX 为 1/1、Wan2.1 为 1/2;weight decay 0.0001;warmup 1000 steps;训练策略为 FSDP / DDP / BFloat16;单 A100 生成速度约为 CogVideoX 540s、Wan2.1 420s。需要注意,这里的速度意味着 VAP 并不是轻量 adapter;它通过新增 MoT expert 换取统一语义控制能力。

数据方面,VAP-Data 来自约 2K 高质量 reference images,覆盖男人、女人、儿童、动物、物体、风景、多主体等目标,再结合 VIDU、Kling 的 Image-to-Video visual-effects templates 与 community LoRAs 生成 paired videos。总规模超过 100K samples、100 semantic conditions,四大类别为 concept、style、motion、camera。测试集从四大类中均匀采样 24 个 semantic conditions,每个 condition 2 个样本,共 48 test samples。这种设置的目标不是证明某一个模板效果最好,而是验证单个模型能否跨多种语义类型统一泛化。

评估基线包括三类:结构控制方法 VACE,分别使用 original reference video、depth、optical flow;基础 DiT 与 condition-specific 方法,即 CogVideoX-I2V 以及对每个 semantic condition 单独 fine-tune LoRA 后取平均;闭源商业模型 Kling / Vidu,它们有针对不同 semantic condition 的专用接口,因此被视为 condition-specific commercial baselines。

评价指标分为三个方面。文本对齐用 CLIP Score;整体视频质量用 Motion Smoothness、Dynamic Degree、Aesthetic Quality;语义对齐用作者提出的 Semantic Alignment Score。这个 semantic score 通过把 reference-generation pair 和详细评估规则提交给 Gemini-2.5-Pro 打分,附录又用 GPT-5 重复验证趋势与人类偏好接近。人类评估由 20 名视频生成研究者完成,比较不同方法输出在 semantic alignment 和 overall quality 上的偏好,最终报告所有比较中被选择的 normalized preference rate。

5. Experimental Results (实验结果)

主表结果:VAP 与开源/闭源模型对比

主结果表明,VAP 在开源方法中整体最强,并且在人类偏好上接近闭源商业模型。Tab. 1 中,VACE (Original) 的 CLIP Score 只有 5.88,Semantic Alignment 35.38,Preference 0.6%;用 depth 和 optical flow 替换原始 reference 后,alignment 分别提升到 43.35 和 46.71,说明去掉外观细节后 pixel-wise artifact 变弱,但仍不能解决语义控制。

CogVideoX-I2V 的 Motion Smoothness 很高(98.48),但 Semantic Alignment 只有 26.04,说明单靠 target caption 难以表达参考视频里的抽象语义。CogVideoX-I2V (LoRA) 的 Alignment Score 达到 68.60,但 Preference 只有 13.1%,因为它每个 condition 都要过拟合式 fine-tune,且整体质量和泛化受损。Kling / Vidu 的 Alignment Score 为 74.02、Preference 为 38.2%。

VAP 的数值为 CLIP 24.13、Motion Smoothness 98.59、Dynamic Degree 77.08、Aesthetic Quality 57.71、Alignment Score 70.44、Preference 38.7%。这说明 VAP 虽然不是每个自动指标都超过商业系统,但作为统一模型已经达到相近的人类偏好,并明显优于开源 baselines。

定性比较:结构控制 vs 语义控制

Figure 6 解读:定性比较中,VACE 的失败很符合论文动机:它把 reference video 当作结构控制,导致外观、姿态或布局被复制。Depth / optical flow 版本减少外观泄漏,但也丢掉了很多语义细节。LoRA 能学某个 condition,但需要单独模型。VAP 的输出更像是在目标主体上复现 reference video 的动态语义,而不是把 reference 主体搬过来。

Zero-shot semantic condition 迁移

Zero-shot 结果是这篇论文最能体现“prompt”概念的一部分。Fig. 7 中,给定 VAP-Data 未见过的 semantic conditions,例如 Crumble、Dissolve、Levitate、Melt,VAP 仍能将抽象变化模式迁移到 reference image 上。这里的关键不是“生成效果一定完美”,而是模型没有为这些语义单独训练 LoRA;它依靠在 VAP-Data 中学到的 video-as-prompt in-context 行为进行新参考的语义检索。

Figure 7 解读:zero-shot 图展示了 unseen semantic 的迁移能力。它验证的是统一模型的边界:如果一个 semantic pattern 能在 reference video 中被视觉地呈现,VAP 不需要为该 pattern 重新训练一个 condition-specific model,就能尝试在目标图像上执行相似变化。

消融:MoT、RoPE、数据规模与 backbone

消融实验支持三个设计判断。第一,MoT 优于 single-branch / unidirectional designs。Tab. 2 中,Unidir-Addition 的 Alignment Score 只有 55.99,说明 residual addition 仍然过度依赖 rigid pixel-to-pixel mapping;Unidir-Cross-Attn 为 67.16;Single-Branch-LoRA 为 69.08;最终 VAP 为 70.44。作者解释为:LoRA 保留 backbone 能力但容量不足,unidirectional injection 缺少同步双向交互,而 MoT 的 layer-wise bidirectional information exchange 能让 reference prompt representation 随 target tokens 调整。

消融 2:Temporal-biased RoPE

第二,Temporal-biased RoPE 是必要的。Identical PE 的 Alignment Score 为 68.98;加入 temporal shift 但额外 width shift 的版本为 69.05;最终 VAP 为 70.44。论文认为 width shift 会增加空间 referencing 难度,而 identical PE 会强行施加不真实的 pixel-wise alignment prior。换言之,reference 应在 temporal axis 上作为上下文出现在 target 之前,但不应在 spatial axis 上被放到另一个“图像拼接位置”里。

消融 3:数据规模与 backbone

第三,数据规模和 backbone 都有影响。训练 pairs 从 1K、10K、50K 到 100K,指标整体上升:1K 的 Alignment Score 为 63.91,10K 为 66.28,50K 为 68.23,最终 100K 为 70.44,说明统一语义 prompt 的能力依赖足够异质的数据。Wan2.1-I2V-14B 版本在 Dynamic Degree 79.17、Aesthetic Quality 58.09 上较强,但 Alignment Score 70.23 略低于 CogVideoX 版 70.44;作者认为 Wan2.1 由于资源限制只在 14 个层位置做 in-context interaction,reference alignment 略弱。

应用方式:reference video 作为 reusable template

Figure 12 解读:应用图体现了 VAP 的实际使用方式:给定一个 reference video,换不同 reference images,模型应保持同一个语义模式并适配不同主体。这和传统“为每个主体训练特效”不同,更接近用户把一个短视频当作 reusable semantic template。

局限:synthetic data、caption 与多 reference

论文也明确讨论了限制。第一,VAP-Data 是 synthetic dataset,由商业模型模板和 community LoRAs 生成,因此会继承源模型的风格偏差、artifact 和概念盲区;如果源模型手部生成差,VAP 也可能学不到良好的手部变化。第二,caption quality 和 subject similarity 会影响 reference retrieval。作者举例:如果 caption 把 liquid metal 误写成 rose-gold water,或者 reference subject 与 target subject 结构差异很大,模型更难定位正确语义。第三,多 reference videos 并不总是更好;当多个 reference 在结构和语义实现上差异大时,模型可能把参考 1 的语义、参考 2 的外观、参考 3 的轮廓混合到输出里。第四,效率成本明显:MoT expert 带来更高显存和更长推理时间,平均推理时间大约翻倍,主要来自额外 expert computation 和 in-context full attention。

Multi-reference failure case

Figure 15 解读:multi-reference failure case 展示了一个重要边界:reference videos 的语义不一定能被模型自动“求交集”。如果 captions 没有明确指出要取哪个 referent,模型可能把多个视频的外观细节也当作语义提示读入,导致 dog 输出中出现 spider legs 或 fish shape。这说明未来可能需要 instruction-style captions、multi-reference-specific RoPE 或显式语义选择机制。

总体结论

总体来看,VAP 的贡献不是某个单点指标刷新,而是提出了一个可复用范式:用 reference video 作为统一语义 prompt,通过 MoT 保留 Video DiT 的生成能力,通过 temporal-biased RoPE 让 reference 成为上下文示例,通过 VAP-Data 提供足够多异质 paired samples。它的短板也很清楚:数据合成偏差、caption/ref quality 敏感、多 reference 混合、推理成本高。若后续工作能把 reference selection、instruction grounding 和 efficient attention 做好,Video-As-Prompt 有潜力成为视频生成中比“文本 prompt + 控制图”更自然的语义控制接口。