MotionStream: Real-Time Video Generation with Interactive Motion Controls
Paper: arXiv:2511.01266 Project: MotionStream project page Code: alex4727/MotionStream(README/asset-only;官方实现仍在公司开源审查中) Code reference:
main@beebfb38(2026-03-01; no implementation files)
1. Metadata / 这篇论文在解决什么问题
一句话定位:MotionStream 把“先提交整段轨迹、等几分钟出一段视频”的运动可控视频生成,改造成一个可以边画轨迹、边看到结果的流式因果生成系统;核心不是单纯减少扩散步数,而是把高质量双向 teacher 蒸馏成带固定上下文、attention sink 和 rolling KV cache 的 causal student,使 480P/720P 视频在单张 H100 上达到交互级吞吐与亚秒级延迟。
基本信息:论文 arXiv 初版提交于 2025-11-03,当前 arXiv 页面显示 v5 修订于 2026-03-05;项目页标注 ICLR 2026 Oral。作者来自 Seoul National University、Adobe Research、Carnegie Mellon University 与 Morpheus AI。论文和项目页都强调:系统支持实时 streaming demo、camera control、motion transfer、long video extrapolation 和 drag-style object control。项目页给出的在线 demo 注释还说明,展示视频是 raw screen capture,没有后处理;1.3B 模型在 480P 可达到约 29 FPS,5B 模型在 720P 可达到约 24 FPS,均在单张 H100 上以 sub-second latency 运行。
要解决的痛点有三个。第一,已有 motion-conditioned video generation 通常把整段轨迹和文本 prompt 一次性输入给双向扩散模型,生成一个 5 秒 clip 可能需要数分钟,例如论文提到 Motion Prompting 生成 5 秒视频约需 12 分钟;这类系统不能给用户“操作—反馈—再操作”的闭环。第二,非因果处理意味着模型必须看到完整轨迹后才生成完整视频,用户无法在中途看到局部结果,也无法在生成过程中修改未来轨迹。第三,长视频或无限流式生成会遇到训练长度有限、误差随时间累积、上下文窗口不断增长导致成本上升等问题;简单把短视频模型循环调用,会在质量、身份保持、轨迹一致性和速度上同时失稳。
输入输出形态:MotionStream 从初始图像、文本描述和 2D motion tracks 出发。tracks 可以来自用户实时拖拽、预画路径、静态锚点、CoTracker3 提取的密集轨迹、或者由单目深度和相机参数投影得到的 camera motion。系统按 latent chunks 自回归地生成未来视频块,生成时只保留固定数量的初始 sink chunks 与局部 recent window,因此理论上可无限延伸,同时保持近似常数的吞吐和延迟。这个定位把它放在“多模态生成的加速/蒸馏”类别下:虽然应用是 interactive video/world simulation,但主要技术贡献是如何蒸馏和改造视频扩散模型以满足实时流式约束。
2. Idea / 核心思想
核心洞察:实时交互视频生成不能只靠更快采样器;它需要模型在训练时就暴露给“自己生成的历史 + 固定长度缓存 + 长期初始锚点”的推理分布。MotionStream 因此先训练一个高质量、双向注意力的 motion-controlled teacher,再把 teacher 的 joint text-motion guidance 行为蒸馏进 causal student;student 在训练和推理中都使用 attention sink 与 rolling KV cache,让长时 extrapolation 的分布尽量一致。
和传统可控视频方法相比,MotionStream 的根本差异在于它把“运动控制”与“因果流式化”拆成两个阶段处理。Go-With-The-Flow、Diffusion-As-Shader、ATI、Motion Prompting 等方法关注如何让最终视频遵循轨迹,但默认仍以离线 clip 生成形式工作;MotionStream 的问题定义更苛刻:用户画一点、模型就要马上生成一点,并且未来轨迹可以继续改变。为了做到这一点,teacher 负责保证质量和运动遵循,student 负责把 teacher 的分布压缩到少步、因果、自回归、固定缓存的执行方式。
另一个关键想法是 attention sink。作者观察到长视频生成中的注意力模式并不是均匀依赖全部历史,而是同时依赖“初始帧/初始 chunk 的稳定锚点”和“最近局部上下文”。这类似 StreamingLLM 中的 sink token 现象:保留极早位置的干净 token 可以稳定全局身份与场景,而局部窗口负责最近运动连续性。MotionStream 把这个结构显式化为 S 个 sink chunks 加 W 个 rolling local chunks,并在训练自回归 rollout 时就按同样规则构造 attention mask 与 KV cache;这样 student 不会在训练时看到完整历史、推理时却被迫只看局部历史。
这篇论文还有一个实际工程判断:运动轨迹不应通过重型 ControlNet 或 RGB-VAE 画布编码注入。作者使用轻量 sinusoidal positional embedding + learnable track head,把每条 track 的 ID 与位置放到 VAE 下采样后的 latent grid 上,再与 noisy video latent、image latent、text embedding 结合。这样能保留 track identity,避免 VAE 编码轨迹画布的额外开销,也让在线拖拽输入更适合实时系统。
3. Method / 方法细节
3.1 Motion-controlled teacher:高质量但非实时的运动教师模型
teacher 建在 Wan DiT 系列 I2V 模型之上,并借助 VideoXFun 的 Wan variants 初始化额外控制通道。给定 N 条 2D tracks {(x_t^n, y_t^n)},每条 track 被分配一个随机 ID,再通过 sinusoidal positional encoding 得到 d=64 维 embedding phi_n。在每个时间帧 t,如果第 n 条 track 可见,就把 phi_n 放到 VAE spatial downsampling 后的 grid 位置 floor(y/s), floor(x/s);不可见或未指定位置为零。这个 track-conditioning tensor 经过 learnable track head 后,与 image/noisy-video/text 条件一起送入双向 diffusion transformer。
直观上,这个表示有两个好处。第一,track identity 不再依赖 RGB 颜色或像素画布,模型可以知道“这是同一个被拖拽点在移动”,而不仅是看到一堆颜色点。第二,它绕开了把轨迹画布再过一次 CausalVAE 的瓶颈;论文 Table 3 说明 sinusoidal PE + learnable track head 相比 RGB-VAE 编码在质量和效率上都更好,编码速度约快 40 倍,这对低延迟输入链路很关键。
teacher 用 rectified flow / flow matching 训练。前向过程把数据 latent z0 与高斯噪声 z1 线性插值为 z_t=(1-t)z0+t z1,模型预测 velocity field。一个细节是“零 track”有歧义:用户松开鼠标、不指定某点,和点被遮挡不可见,在张量中都可能是 0。为减轻这类歧义,作者在 fine-tuning 阶段引入 stochastic mid-frame masking,概率 p_mask=0.2,随机把中间某些 chunk 的 motion condition 置零,让模型学习输入轨迹间歇消失时仍保持连贯。
3.2 Joint text-motion guidance:把自然动态和轨迹精度同时蒸馏进去
单独 text guidance 会让视频更自然,能产生彩虹、天气、次级运动等文本驱动效果,但轨迹误差可能变大;单独 motion guidance 会严格贴轨迹,却容易把动作变成刚性 2D 平移,缺少真实物理和细节变化。因此 MotionStream 使用 joint guidance:
v_hat = v_base
+ w_t * (v(c_t, c_m) - v(∅, c_m))
+ w_m * (v(c_t, c_m) - v(c_t, ∅))
v_base = α * v(∅, c_m) + (1-α) * v(c_t, ∅), α = w_t / (w_t + w_m)其中 c_t 是文本条件,c_m 是 motion condition。论文经验设置 w_t=3.0, w_m=1.5,作为 teacher 生成 causal adaptation / distillation 样本时的目标。这个设计很像把“文本的自然性”和“轨迹的约束力”拆成两个 residual,再以一个混合 base 保持平衡;项目页的 guidance ablation 也展示了 motion-only 过于僵硬、prompt-only 轨迹较差、joint guidance 在两者之间取得平衡。
3.3 Causal student:从双向 teacher 到可流式的少步自回归模型
teacher 虽然质量高,但仍是 bidirectional、离线、慢速模型。MotionStream 的第二阶段把 teacher 权重初始化到 causal architecture,并通过 CausVid 风格的 ODE solution pair regression 做 causal adaptation,使模型从双向注意力转成 few-step causal trajectory。随后采用 Self Forcing-style distillation:模型按时间 chunk 自回归 rollout,每个新 chunk 条件不是 ground-truth 历史,而是学生自己已经生成的 clean chunks;DMD critic/score function 则推动 student 的生成分布接近 teacher/joint-guided 分布。
关键的上下文集合可写为:
C_i = { z_i^t } ∪ { z_j^0 | j ≤ S } ∪ { z_j^0 | max(1, i-W) ≤ j < i }其中 z_i^t 是当前 noisy chunk,S 是 attention sink chunks 数量,W 是局部窗口大小。若把上下文设成所有历史 {j<i},就是 full causal Self Forcing;MotionStream 则固定为“初始 sink + 最近窗口”,从而推理成本不随生成长度增长。论文和项目页都强调,训练时也使用 rolling KV cache 和 attention sink,目的是模拟推理时无限 extrapolation 的真实分布,而不是只在推理阶段临时截断缓存。
训练上的另一个省显存技巧是 gradient truncation。Self-rollout 时随机采样 denoising step k∈[1,K],只让当前 block 的选定 denoising step 回传梯度;前面已生成 frames 的 cached KV 被 detach 作为 stop-gradient context。这样可以在保持自回归分布暴露的同时,避免把所有历史 chunk 的计算图保留下来。
3.4 Streaming inference:固定缓存、滚动窗口、在线交互
推理时,系统维护两类 KV:一类是最初 S 个 chunks 的 sink KV,用来稳定身份、场景布局和视觉风格;另一类是最近 W 个 chunks 的 local KV,用来保证短期运动连续性。每生成一个新 chunk,local window 向前滚动,旧 chunk 被丢弃,但 sink 保留。位置编码也需要以流式方式处理,避免无限位置 extrapolation 带来的漂移。由于上下文大小固定,模型在理论上可以以常数吞吐生成任意长视频;项目页展示的 long video example 可到 5,000 frames。
下面是论文方法的复现导向伪代码。注意:官方实现未开源,以下代码不是官方源码,而是根据论文 Sec. 3、公式与项目页描述写出的结构化伪代码,用于理解模块之间的数据流。
import torch
import torch.nn.functional as F
def build_track_tensor(tracks, visible, track_ids, height, width, stride, dim=64):
"""tracks: [T, N, 2], visible: [T, N]; returns [T, H/s, W/s, d]."""
T, N, _ = tracks.shape
grid = torch.zeros(T, height // stride, width // stride, dim, device=tracks.device)
phi = sinusoidal_id_embedding(track_ids, dim=dim) # [N, d]
for t in range(T):
xy = torch.div(tracks[t], stride, rounding_mode="floor").long()
for n in range(N):
if visible[t, n]:
x, y = xy[n]
grid[t, y.clamp(0, grid.size(1) - 1), x.clamp(0, grid.size(2) - 1)] = phi[n]
return grid
def joint_text_motion_guidance(model, z_t, text_cond, motion_cond, w_t=3.0, w_m=1.5):
v_tm = model(z_t, text=text_cond, motion=motion_cond)
v_no_text = model(z_t, text=None, motion=motion_cond)
v_no_motion = model(z_t, text=text_cond, motion=None)
alpha = w_t / (w_t + w_m)
v_base = alpha * v_no_text + (1.0 - alpha) * v_no_motion
return v_base + w_t * (v_tm - v_no_text) + w_m * (v_tm - v_no_motion)class StreamingContext:
def __init__(self, sink_size: int, window_size: int):
self.sink_size = sink_size
self.window_size = window_size
self.sink_kv = []
self.local_kv = []
def update(self, new_clean_chunk, new_kv):
if len(self.sink_kv) < self.sink_size:
self.sink_kv.append((new_clean_chunk.detach(), detach_kv(new_kv)))
else:
self.local_kv.append((new_clean_chunk.detach(), detach_kv(new_kv)))
self.local_kv = self.local_kv[-self.window_size:]
def attention_cache(self):
return self.sink_kv + self.local_kv
def self_forcing_distill_step(student, teacher, critic, batch, ctx: StreamingContext, optimizer_g):
image, text, tracks = batch["image"], batch["text"], batch["tracks"]
clean_chunks = []
for i, motion_chunk in enumerate(chunk_tracks(tracks, size=3)):
z_noise = torch.randn_like(init_latent_chunk(image, motion_chunk))
cache = ctx.attention_cache()
fake_chunk, kv = student.sample_chunk(z_noise, image=image, text=text,
motion=motion_chunk, kv_cache=cache,
causal_mask="sink_plus_local")
with torch.no_grad():
target_score = teacher_or_dmd_target(teacher, critic, fake_chunk, image, text, motion_chunk)
loss = distribution_matching_loss(fake_chunk, target_score)
loss.backward()
ctx.update(fake_chunk, kv)
clean_chunks.append(fake_chunk.detach())
optimizer_g.step(); optimizer_g.zero_grad()
return torch.cat(clean_chunks, dim=1)4. Experiments / 实验与结果
Motion transfer reconstruction:主表在 DAVIS validation set 与 Sora demo subset 上比较 PSNR、SSIM、LPIPS、EPE 和 FPS。480P 的 1.3B teacher 只有 0.79 FPS,但 joint CFG 下 Sora EPE 可到 2.71;蒸馏后的 1.3B causal student 达到 16.7 FPS,Sora EPE 为 4.21,质量略降但速度提升超过一个数量级。720P 的 5B teacher 约 0.74 FPS,causal distilled 5B 达到 10.4 FPS,Sora LPIPS 0.343、EPE 4.30。与 ATI、DAS、GWTF 等 baseline 相比,MotionStream 的 causal 版本在速度上优势最明显,同时保持相当或更好的 motion adherence。
Tiny VAE 与实时吞吐:论文主文把基础 streaming 性能概括为 480P 约 17 FPS、720P 约 10 FPS,均为单张 H100 上的 sub-second latency;随后指出 full CausalVAE 成为 streaming pipeline 的瓶颈。附录 Table A2 在同一 distilled student 上替换 Tiny VAE:Wan 2.1 full VAE 为 16.7 FPS / 0.69s latency,Tiny VAE 提升到 29.5 FPS / 0.39s;Wan 2.2 5B full VAE 为 10.4 FPS / 1.14s,Tiny VAE 提升到 23.9 FPS / 0.49s。PSNR/SSIM/LPIPS 只小幅变化,因此项目页才可报告单 H100 上 480P 约 29 FPS、720P 约 24 FPS 的交互结果。
Camera control / novel view synthesis:MotionStream 本质上是 2D track-conditioned video model,但可通过单目深度估计、COLMAP 对齐和相机参数插值,把 camera motion 转成 2D tracks。在 LLFF novel view synthesis 上,Ours Causal 1.3B 以 480P 达到 16.7 FPS,PSNR 15.7、SSIM 0.38、LPIPS 0.23;相比 DepthSplat、ViewCrafter、SEVA 等 3D/NVS baseline,速度显著更高,质量也有竞争力。这里的意义不是宣称替代 3D 重建,而是说明 motion track interface 足够通用,既能控制对象,也能控制相机。
Ablation:track representation、attention sink、chunk/window。track representation 实验证明 sinusoidal PE + track head 比 RGB-VAE 编码更适合实时 streaming。attention ablation 更关键:在长视频 extrapolation 中,没有 sink 的模型会随时间漂移;至少保留一个 sink chunk 对稳定质量至关重要。更大的 local window 并不必然更好,反而可能让历史错误继续进入上下文、加速误差累积。项目页总结最佳配置为 chunk size 3、sink size 1、window size 1;这个配置在质量、latency 和 throughput 之间取得平衡。
User study 和 qualitative results:附录 user study 使用 Sora subset 的 20 个样本做 pairwise comparison。teacher 与 distilled models 在视频质量上总体能胜过 DAS、GWTF 等 baseline;ATI 因使用更大的 Wan 2.1-14B backbone,在纯视觉偏好上仍有优势。VBench-I2V 结果则显示,分数很大程度受 backbone 影响;MotionStream 的贡献更应从 motion following、latency、流式可交互性和长时稳定性综合判断,而不是只看单帧或短 clip 的静态画质。
应用展示包括实时拖拽物体、添加静态点、预画多点路径、camera dolly/arc/zoom、pose/facial keypoint tracker 触发的在线 motion transfer,以及 5,000 frames 的 long video example。项目页还说明 tracks 的颜色约定:绿色表示在线用户拖拽,红色表示静态点,蓝色表示预画轨迹。这个交互设计把模型从“生成一个成品视频”推向“实时可导演的视觉模拟器”。
5. Code, reproducibility, limitations / 代码、复现与局限
Code reference:
main@beebfb38(2026-03-01; README-only public repository)
代码搜索结论:代码搜索未找到开源实现。强制代码检索已覆盖 arXiv 页面、项目页、论文标题 + GitHub 搜索、作者/方法名搜索,以及 GitHub repo alex4727/MotionStream 的默认分支 tree。该 public repo 当前只有 .gitignore、README.md 和 asset/teaser.gif 三个 blob;README 明确说明代码仍在公司内部开源审查中,尚无确定 release 时间。因而本笔记中的伪代码是论文复现导向 pseudocode,不是官方源码摘录;下面的 mapping table 也只能记录公开 repo 与论文段落之间的可复现依据。
| Paper Concept | Source File | Key Class/Function |
|---|---|---|
| Code release status | README.md in alex4727/MotionStream | README note: code under company internal review |
| Motion-conditioned teacher | N/A(代码未开源) | Paper Sec. 3.1; flow matching + track head design |
| Joint text-motion guidance | N/A(代码未开源) | Paper Eq. (2); w_t=3.0, w_m=1.5 |
| Causal adaptation and Self Forcing-style DMD | N/A(代码未开源) | Paper Sec. 3.2; causal masks, ODE pairs, DMD rollout |
| Attention sink + rolling KV cache | N/A(代码未开源) | Paper Sec. 3.2 / Fig. 2; sink chunks S, window W |
| Tiny VAE streaming decoder | N/A(代码未开源) | Appendix Table A1/A2; full VAE bottleneck and Tiny VAE ablation |
复现难点主要有四类。第一,需要 teacher 和 student 的训练资源:论文称 teacher 初始化自 VideoXFun Wan variants,并在 filtered OpenVid-1M 约 0.6M videos 上训练 4.8K steps,再用 cleaner synthetic data fine-tune;Wan 2.1 teacher 训练在 32 张 A100 上约 3 天,causal adaptation + distillation 约 20 小时。
第二,需要稳定的 track 数据管线:训练从视频中用 CoTracker3 在 50×50 uniform grid 上提取 trajectories,真实视频轨迹噪声和遮挡处理会直接影响 motion adherence。第三,需要 DMD critic / fake score function 与 Self Forcing rollout 的实现细节;论文给出 learning rate、batch size、1:5 update ratio、gradient truncation 等信息,但缺少官方配置文件。
第四,低延迟 demo 还依赖系统工程,包括 mixed precision、Flash Attention 3、Tiny VAE、前端输入延迟和本地集群部署;项目页也提示在线 demo 对网络 latency 敏感。
局限 1:固定 attention sink 稳定但保守。sink 机制让模型长期锚定初始 chunk,因此在多数“同一场景内移动对象/相机”的任务中很有用;但如果环境发生彻底切换,模型会倾向保留初始场景特征,不容易适应新上下文。项目页的 world exploration failure case 也说明,当 game-engine footage 中视角和场景快速变化、tracks 需要频繁重新初始化时,固定 sink 与 discontinuous track identity 会让模型困惑,出现短暂 artifacts 或回到初始 anchor 的视觉特征。
局限 2:轨迹本身是脆弱控制接口。2D tracks 很适合拖拽物体、跟踪人脸关键点和中等 camera motion,但它不能天然表达遮挡后的 3D 状态、物体拓扑变化、场景切换或不连续交互。论文也指出零值条件无法完全区分“未指定”和“不可见/遮挡”,虽然 stochastic masking 可以缓解用户松手时的闪烁,但不是根治。对快速、物理上不合理的轨迹,模型可能产生时间不一致或物体外观扭曲。
局限 3:backbone 上限仍决定视觉质量。MotionStream 的 1.3B/5B student 速度很快,但纯视觉质量并不总是压过更大 backbone 的离线模型。user study 中 ATI 使用 14B backbone,在部分视觉偏好上仍有优势;项目页 failure cases 也展示了复杂人物身份、猫/乌龟/蒙娜丽莎等精细内容在连续拖拽下会出现细节漂移。这说明 MotionStream 的核心贡献是把高质量 motion control 推向实时,而不是彻底解决视频生成的所有视觉保真问题。
我的判断:这篇论文最值得复用的是“训练时模拟推理时的缓存约束”这一原则。很多长视频或流式生成方法在推理时做 sliding window、cache rolling、prefix 保留,但训练时仍看完整上下文,导致长时分布偏移。MotionStream 把 sink + local window 作为训练 rollout 的一部分,配合 DMD 和 gradient truncation,把实时系统的工程限制转化为模型学习目标。这一点对实时 video、audio-video、world model、agentic simulation 都有迁移价值。
可迁移实现清单:如果要在自己的视频模型上复刻思路,优先顺序应是:(1) 先训练一个离线 teacher,保证控制信号真的有效;(2) 把控制信号编码成轻量 latent-side features,避免 ControlNet/RGB-VAE 这类实时瓶颈;(3) 设计 joint guidance,让文本自然性和控制精度都进入蒸馏目标;(4) student 训练时就采用和推理一致的 sink + rolling local cache;(5) 用 Tiny VAE / faster decoder 处理生成后端瓶颈,否则 transformer 已经实时,decode 仍可能不实时。
Assets / 本次 source-first 提取的图像
figures_teaser_v3.svg:总体 teaser 与交互效果。figures_method_v5.svg:teacher + causal distillation 方法图,是理解整篇论文的主图。figures_main_streaming_demo.svg、figures_sup_streaming_demo.svg:实时 streaming demo。figures_streaming_abl2.svg、figures_long_video.svg:attention sink / long-video extrapolation。figures_g_abl_quan.svg、figures_g_abl_qual.svg、figures_user_study_results.svg:guidance ablation 与 user study。figures_sup_failure.svg:快速/不合理轨迹、复杂场景和 world exploration failure cases。