File size: 5,257 Bytes
6a54f89
 
 
 
 
 
 
 
 
 
a3d8cb2
6a54f89
 
 
 
 
 
 
 
 
 
3b9a7ab
6a54f89
 
 
a3d8cb2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6a54f89
 
 
 
 
a3d8cb2
6a54f89
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a3d8cb2
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
---
license: apache-2.0
language:
- en
tags:
- WM
- Diffusion
- Egocentric
---

Waypoint-1-Small is a 2.3 billion parameter control-and-text-conditioned causal diffusion model. It is a transformer architecture utilizing rectified flow, distilled via self forcing with DMD. The model can autoregressively generate new frames given historical frames, actions, and text.

# Capabilities:

Can generate worlds in realtime on high-end consumer hardware
Allows for exploration and interaction with worlds via control inputs
Allows for guidance of generated world via text prompts
Can be prompted with any number of starting frames and controls

# Usage:

In order to simply use Waypoint-1-Small, we recommend [Biome](https://github.com/Overworldai/Biome) for local, the [Overworld streaming client](https://www.overworld.stream/), or the Hugging Face hosted [Gradio Space](TODO).

To run the model locally, we recommend an NVIDIA RTX 5090, which should achieve 20-30 FPS, or an RTX 6000 Pro Blackwell, which should achieve ~35 FPS.

# Run with Diffusers Modular Pipelines

World Engine and Waypoint-1 can be used with [Diffusers Modular Pipelines](https://huggingface.co/docs/diffusers/main/en/api/modular_pipelines/modular_pipeline).

## Setup

```bash
uv venv -p 3.11 && uv pip install \
    torch>=2.9.0 \
    diffusers>=0.36.0 \
    transformers>=4.57.1 \
    einops>=0.8.0 \
    tensordict>=0.5.0 \
    regex \
    ftfy \
    imageio \
    imageio-ffmpeg \
    tqdm
```

## Usage Example

```python
import random
import torch

from tqdm import tqdm
from dataclasses import dataclass, field
from typing import Set, Tuple
from diffusers.modular_pipelines import ModularPipeline
from diffusers.utils import load_image, export_to_video

@dataclass
class CtrlInput:
    button: Set[int] = field(default_factory=set)  # pressed button IDs
    mouse: Tuple[float, float] = (0.0, 0.0)  # (x, y) velocity


# Generate random control trajectories
ctrl = lambda: random.choice(
    [
        CtrlInput(button={48, 42}, mouse=[0.4, 0.3]),
        CtrlInput(mouse=[0.1, 0.2]),
        CtrlInput(button={95, 32, 105}),
    ]
)
model_id = "Overworld/Waypoint-1-Small"

pipe = ModularPipeline.from_pretrained(model_id, trust_remote_code=True)
pipe.load_components(
    device_map="cuda", torch_dtype=torch.bfloat16, trust_remote_code=True
)
pipe.transformer.apply_inference_patches()

# Optional Quantization Step
# Available options are: nvfp4 (if running on Blackwell hardware), fp8, w8a8
# pipe.transformer.quantize("nvfp4")
pipe.transformer.compile(fullgraph=True, mode="max-autotune", dynamic=False)
pipe.vae.bake_weight_norm()
pipe.vae.compile(fullgraph=True, mode="max-autotune")

prompt = "A fun game"
image = load_image(
    "https://gist.github.com/user-attachments/assets/4adc5a3d-6980-4d1e-b6e8-9033cdf61c66"
)

num_frames = 240
outputs = []

# create world state based on an initial image
state = pipe(prompt=prompt, image=image, button=ctrl().button, mouse=ctrl().mouse)
outputs.append(state.values["images"])

state.values["image"] = None
for _ in tqdm(range(1, num_frames)):
    state = pipe(
        state,
        prompt=prompt,
        button=ctrl().button,
        mouse=ctrl().mouse,
        output_type="pil",
    )
    outputs.append(state.values["images"])

export_to_video(outputs, "waypoint-1-small.mp4", fps=60)
```

# Keywords

To properly explain limitations and misuse we must define some terms. While the model can be used for general interactive video generation tasks, we herein define interacting with the model via sending controls and receiving new frames as “playing” the model, and the agent/user inputting controls as the “player”. The model has two forms of output, continuations and generations. Continuations occur when seed frames are given and no inputs are given. For example, if a scene has fire or water, you may see them evolve progressively in the generated frames even if no action is given. Likewise, if you seed with an image of a humanoid entity, the entity will persist on the screen as you move/look around. However, generations occur when the player plays with the model extensively, for example moving around, turning around fully, or interacting with objects/items. Continuations roughly correspond to moving around already existing information in the given context frames while generations correspond to creating entirely new information.

# Limitations

- Continuations can plausibly model any inputted scene or photo, and will depend largely on the seed frame given. For generations, the model may occasionally:
- Ignore given text prompt
- Ignore certain controls in specific contexts
- Fail to generate realistic text or interactive HUD/UI elements
- Fail to generate human/animal entities
- Fail to generate realistic motion for given entities
- Prompt adherence is heavily dependent on prompting strategy
- Fail to generate faces

# Out of Scope Usage

- The model and derivatives must not be used
- For harassment or bullying
- For the purpose of exploiting or harming minors in any way
- For simulating extremely violent acts
- For generating violent/gory video
- For facilitation of large-scale disinformation campaigns
- For the purpose of generating any sexually explicit or suggestive material