Overworld发布实时交互式视频扩散模型Waypoint-1
Introducing Waypoint-1: Real-time interactive video diffusion from Overworld
Overworld推出实时交互式视频扩散模型Waypoint-1,用户可通过文本、鼠标和键盘实时控制生成可步入的虚拟世界。该模型基于帧因果校正流变换器架构,在1万小时游戏视频及对应控制数据上训练,从一开始就专注于交互体验,支持零延迟的自由操控。其配套的高性能推理库WorldEngine在消费级硬件上可实现流畅运行,例如Waypoint-1-Small在RTX 5090上能以30 FPS(4步去噪)或60 FPS(2步去噪)生成画面。模型采用扩散强制预训练和自我强制后训练来确保生成长序列的稳定性。
零延迟交互式视频生成,游戏和创意应用开发者的福音。
Waypoint-1 权重已上线 Hub
试用该模型
Overworld Stream: https://overworld.stream
什么是 Waypoint-1?
Waypoint-1 是 Overworld 的实时交互式视频扩散模型,可通过文本、鼠标和键盘进行控制与提示。你可以向模型输入一些帧,运行模型,让它创建一个你可以步入并与之交互的世界。
该模型的骨干是一个帧因果 rectified flow transformer,基于 10,000 小时多样化的电子游戏画面,并配以控制输入和文本描述进行训练。Waypoint-1 是一个潜空间模型,这意味着它是在压缩帧上进行训练的。
现有世界模型的标准做法,已经变成拿预训练好的视频模型,再用简短、简化的控制输入对其进行微调。相比之下,Waypoint-1 从一开始就以交互体验为核心进行训练。在其他模型中,控制很简单:每隔几帧才能移动和旋转一次相机,而且存在严重的延迟问题。而在 Waypoint-1 中,就控制而言你完全不受限制。你可以用鼠标自由移动相机,并输入键盘上的任意按键,而且这一切都是零延迟。每一帧都是在以你的控制作为上下文的条件下生成的。此外,该模型运行速度足够快,即使在消费级硬件上也能提供无缝体验。
它是如何训练的?
Waypoint-1 通过扩散强制(diffusion forcing)进行预训练,这是一种让模型学习在给定过去帧的情况下对未来帧去噪的技术。模型会施加因果注意力掩码,使得任意给定帧中的 token 只能关注其自身帧或过去帧中的 token,而不能关注未来帧。每一帧都会被随机加噪,因此模型学会分别对每一帧去噪。在推理时,你就可以一次一帧地对新帧去噪,从而生成一个程序化的新帧流。
虽然扩散强制提供了一个很强的基线,但对所有帧随机加噪与逐帧自回归展开并不一致。这种推理不匹配会导致误差累积,以及带噪的长程展开。为了解决这个问题,我们通过自强制(self forcing)进行后训练,这是一种让模型在与推理行为相匹配的机制下产生逼真输出的技术。通过 DMD 实现的自强制还带来了单次 CFG 和少步去噪的额外好处。
推理库:WorldEngine
WorldEngine 是 Overworld 推出的高性能推理库,用于交互式世界模型流式传输。它为用纯 Python 构建推理应用提供了核心工具,针对低延迟、高吞吐、可扩展性和开发者易用性进行了优化。其运行时循环专为交互性而设计:它接收上下文帧图像、键盘/鼠标输入和文本,并输出图像帧以实现实时流式传输。
在 5090 上运行的 Waypoint‑1‑Small(2.3B)上,WorldEngine 可持续达到约 30,000 token‑passes/秒(单次去噪过程;每帧 256 个 token),并在 4 步时达到 30 FPS,或在 2 步时达到 60 FPS
性能来自四项针对性优化:
- AdaLN 特征缓存:只要提示词条件和时间步在前向传播之间保持不变,就通过缓存和复用来避免重复的 AdaLN 条件投影。
- 静态滚动 KV Cache + Flex Attention
- 矩阵乘法融合:使用融合 QKV 投影的标准推理优化。
- Torch Compile 使用
torch.compile(fullgraph=True, mode="max-autotune", dynamic=False)
from world_engine import WorldEngine, CtrlInput
engine = WorldEngine("Overworld/Waypoint-1-Small", device="cuda")
engine.set_prompt("A game where you herd goats in a beautiful valley")
img = pipeline.append_frame(uint8_img)
for controller_input in [
CtrlInput(button={48, 42}, mouse=[0.4, 0.3]),
CtrlInput(mouse=[0.1, 0.2]),
CtrlInput(button={95, 32, 105}),
]:
img = engine.gen_frame(ctrl=controller_input)
使用 World Engine 构建
我们将在 2026 年 1 月 20 日举办一场 world_engine 黑客松——你可以在此报名。欢迎 2-4 人组队参加,奖品是现场发放的一块 5090 GPU。我们很期待看到你们能为扩展 world_engine 想出什么创意,这也会是一场很棒的活动,可以结识志同道合的创始人、工程师、黑客和投资人。希望你能在太平洋时间 1 月 20 日上午 10 点加入我们,共度 8 小时的友好竞赛!
保持联系
来源:Hugging Face:Blog(RSS) · huggingface.co