跳到正文
原文
Hugging Face Blog·· 2026-01-20精选AI 评分74

Overworld 发布实时交互视频扩散模型 Waypoint-1

Introducing Waypoint-1: Real-time interactive video diffusion from Overworld

AI 导读

Overworld 发布实时交互视频扩散模型 Waypoint-1,可通过文本、鼠标和键盘控制,权重已在 Hugging Face Hub 上线,Waypoint-1-Small 可用,Medium 版即将推出。

推荐理由

Waypoint-1 把交互式世界模型的训练重点放在零延迟控制上,并公布推理库与运行性能数据,可据此判断实时视频生成的落地条件。

正文 · AI 翻译

waypoint launch grid

Hub 上的 Waypoint-1 权重

试用该模型

Overworld Stream: https://overworld.stream

什么是 Waypoint-1?

Waypoint-1 是 Overworld 的实时交互式视频扩散模型,可通过文本、鼠标和键盘进行控制和提示。你可以给模型提供一些帧,运行模型,让它创建一个你可以步入并与之互动的世界。

该模型的骨干是一个帧因果整流流 transformer,在 10,000 小时多样化的视频游戏画面以及控制输入和文本描述数据上进行训练。Waypoint-1 是一个潜在模型,这意味着它是在压缩帧上进行训练的。

现有世界模型的标准做法已成为:采用预训练的视频模型,再用简短简化的控制输入对其进行微调。相比之下,Waypoint-1 从一开始就以交互体验为重点进行训练。使用其他模型时,控制很简单:你可以每隔几帧移动和旋转一次相机,且存在严重的延迟问题。而使用 Waypoint-1,就控制而言你完全不受限制。你可以用鼠标自由移动相机,并输入键盘上的任意按键,而且这一切都是零延迟。每一帧都是根据你的控制作为上下文生成的。此外,该模型运行速度足够快,即使在消费级硬件上也能提供无缝体验。

它是如何训练的?

Waypoint-1 通过 diffusion forcing 进行预训练,这是一种让模型学习在给定过去帧的情况下对未来帧进行去噪的技术。应用因果注意力掩码,使得任意给定帧中的 token 只能关注其自身帧或过去帧中的 token,而不能关注未来帧。每一帧都被随机加噪,因此模型学会分别对每一帧进行去噪。在推理期间,你可以一次对一帧新帧进行去噪,从而生成一个程序化的新帧流。

虽然 diffusion forcing 提供了一个强大的基线,但随机对所有帧加噪与逐帧自回归展开并不一致。这种推理不匹配会导致误差累积,以及充满噪声的长展开。为了解决这个问题,我们使用 self forcing 进行后训练,这是一种训练模型在与推理行为相匹配的机制下产生逼真输出的技术。通过 DMD 实现的 self-forcing 还带来了单次 CFG 和少步去噪的额外好处。

推理库:WorldEngine

WorldEngine 是 Overworld 用于交互式世界模型流式传输的高性能推理库。它提供了用纯 Python 构建推理应用的核心工具,针对低延迟、高吞吐量、可扩展性和开发者简便性进行了优化。其运行时循环专为交互性而设计:它接收上下文帧图像、键盘/鼠标输入和文本,并输出图像帧以供实时流式传输。

在 5090 上运行 Waypoint‑1‑Small(2.3B)时,WorldEngine 可维持约 30,000 次 token 传递/秒(单次去噪传递;每帧 256 个 token),并在 4 步时达到 30 FPS,或在 2 步时达到 60 FPS

性能来自四项有针对性的优化:

  • AdaLN 特征缓存:只要提示条件和时间步在前向传递之间保持不变,就通过缓存和重用来避免重复的 AdaLN 条件投影。
  • 静态滚动 KV 缓存 + Flex Attention
  • 矩阵乘法融合:使用融合 QKV 投影的标准推理优化。
  • 使用 torch.compile(fullgraph=True, mode="max-autotune", dynamic=False) 的 Torch Compile
from world_engine import WorldEngine, CtrlInput

# Create inference engine
engine = WorldEngine("Overworld/Waypoint-1-Small", device="cuda")

# Specify a prompt
engine.set_prompt("A game where you herd goats in a beautiful valley")

# Optional: Force the next frame to be a specific image
img = pipeline.append_frame(uint8_img)  # (H, W, 3)

# Generate 3 video frames conditioned on controller inputs
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 · hf-mirror.com