Model card: teaser, keyboard actions, compact layout
Browse files
README.md
CHANGED
|
@@ -6,51 +6,92 @@ tags:
|
|
| 6 |
- world-model
|
| 7 |
- camera-control
|
| 8 |
- video-generation
|
|
|
|
| 9 |
---
|
| 10 |
|
| 11 |
-
|
| 12 |
|
| 13 |
-
|
| 14 |
-
|
| 15 |
|
| 16 |
-
|
|
|
|
| 17 |
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
co-visibility. This checkpoint is the 4-step distilled model (Self-Forcing + DMD,
|
| 22 |
-
teacher guidance distilled in): use 4 denoising steps and no classifier-free
|
| 23 |
-
guidance. It is built on Wan2.2-TI2V-5B and outputs 864x480 video at 16 fps.
|
| 24 |
|
| 25 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 26 |
|
| 27 |
```bash
|
| 28 |
-
git clone https://github.com/TingtingLiao/memorizon.git && cd memorizon
|
| 29 |
-
|
| 30 |
-
python scripts/generate.py --checkpoint Luffuly/memorizon \
|
| 31 |
-
--
|
| 32 |
```
|
| 33 |
|
| 34 |
```python
|
| 35 |
-
import
|
| 36 |
-
from memorizon import MemorizonPipeline, save_video
|
| 37 |
|
| 38 |
pipe = MemorizonPipeline.from_pretrained("Luffuly/memorizon")
|
| 39 |
-
video = pipe("
|
| 40 |
-
num_chunks=60) # 4 steps, no CFG; prompt=None captions the image
|
| 41 |
save_video(video, "out.mp4")
|
| 42 |
```
|
| 43 |
|
| 44 |
-
|
| 45 |
-
|
| 46 |
-
|
| 47 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 48 |
|
| 49 |
-
|
| 50 |
-
frame (4 per second), in the first frame's coordinates (OpenCV axes), with
|
| 51 |
-
translations in metres / 4. See the code repository for details.
|
| 52 |
|
| 53 |
-
## Citation
|
| 54 |
|
| 55 |
```bibtex
|
| 56 |
@article{memorizon2026,
|
|
|
|
| 6 |
- world-model
|
| 7 |
- camera-control
|
| 8 |
- video-generation
|
| 9 |
+
- long-video
|
| 10 |
---
|
| 11 |
|
| 12 |
+
<div align="center">
|
| 13 |
|
| 14 |
+
<h2>Memorizon</h2>
|
| 15 |
+
<h3>Training World Models Beyond Their Context Window</h3>
|
| 16 |
|
| 17 |
+
**Tingting Liao · Xuezhi Liang · Hao Li · Guangyi Liu**
|
| 18 |
+
<br>IFM, MBZUAI
|
| 19 |
|
| 20 |
+
<a href="https://github.com/TingtingLiao/memorizon"><img src="https://img.shields.io/badge/GitHub-code-black?logo=github&labelColor=white"></a> 
|
| 21 |
+
<a href="https://tingtingliao.github.io/memorizon/"><img src="https://img.shields.io/badge/project-page-green?logo=googlechrome&logoColor=green&labelColor=white"></a> 
|
| 22 |
+
<a href=""><img src="https://img.shields.io/badge/arXiv-coming%20soon-red?logo=arxiv&logoColor=darkred&labelColor=white"></a>
|
|
|
|
|
|
|
|
|
|
| 23 |
|
| 24 |
+
<br>
|
| 25 |
+
|
| 26 |
+
<img src="roundtrip.gif" width="85%">
|
| 27 |
+
|
| 28 |
+
<sub><code>w*16 l*24 w*16 l*24</code> — walk ahead, turn around, walk back, turn around: the start view comes back. 2× speed.</sub>
|
| 29 |
+
|
| 30 |
+
</div>
|
| 31 |
+
|
| 32 |
+
---
|
| 33 |
+
|
| 34 |
+
## ✨ This checkpoint
|
| 35 |
+
|
| 36 |
+
| | |
|
| 37 |
+
|---|---|
|
| 38 |
+
| **Model** | Memorizon, 4-step distilled (Self-Forcing + DMD, CFG distilled in) |
|
| 39 |
+
| **Base** | Wan2.2-TI2V-5B |
|
| 40 |
+
| **Input** | one image + keyboard actions or a camera trajectory |
|
| 41 |
+
| **Output** | 864×480, 16 fps, generated one second at a time |
|
| 42 |
+
| **Sampling** | 4 steps, no CFG (read from the config) |
|
| 43 |
+
|
| 44 |
+
## 🚀 Usage
|
| 45 |
|
| 46 |
```bash
|
| 47 |
+
git clone https://github.com/TingtingLiao/memorizon.git && cd memorizon && pip install -e .
|
| 48 |
+
|
| 49 |
+
python scripts/generate.py --checkpoint Luffuly/memorizon --image photo.jpg \
|
| 50 |
+
--actions "w*16 l*24 w*16 l*24" --output out.mp4
|
| 51 |
```
|
| 52 |
|
| 53 |
```python
|
| 54 |
+
from memorizon import MemorizonPipeline, actions_to_c2w, save_video
|
|
|
|
| 55 |
|
| 56 |
pipe = MemorizonPipeline.from_pretrained("Luffuly/memorizon")
|
| 57 |
+
video = pipe("photo.jpg", actions_to_c2w("w*16 l*24 w*16 l*24"))
|
|
|
|
| 58 |
save_video(video, "out.mp4")
|
| 59 |
```
|
| 60 |
|
| 61 |
+
### 🎮 Keyboard actions — one per 0.25 s
|
| 62 |
+
|
| 63 |
+
| Key | Action | Key | Action |
|
| 64 |
+
|:---:|:---|:---:|:---|
|
| 65 |
+
| `w` `s` | forward / backward · 0.25 m | `j` `l` | turn left / right · 7.5° |
|
| 66 |
+
| `a` `d` | left / right · 0.25 m | `i` `k` | look up / down · 7.5° |
|
| 67 |
+
| `.` | stay | `*N` | repeat N times |
|
| 68 |
+
|
| 69 |
+
<details>
|
| 70 |
+
<summary><b>Prompts</b> — captioned automatically</summary>
|
| 71 |
+
|
| 72 |
+
<br>
|
| 73 |
+
|
| 74 |
+
Without a prompt, the image is captioned by Qwen3-VL-8B in the training format
|
| 75 |
+
(`memorizon/caption.py`). Custom prompts should follow it — a perspective prefix,
|
| 76 |
+
then one paragraph:
|
| 77 |
+
|
| 78 |
+
> First-person perspective — character not visible. A winding paved path curves
|
| 79 |
+
> beneath a canopy of vibrant pink cherry blossoms, …
|
| 80 |
+
|
| 81 |
+
</details>
|
| 82 |
+
|
| 83 |
+
<details>
|
| 84 |
+
<summary><b>Camera trajectories</b></summary>
|
| 85 |
+
|
| 86 |
+
<br>
|
| 87 |
+
|
| 88 |
+
Instead of actions, pass `--trajectory` a `[T, 4, 4]` array of camera-to-world poses,
|
| 89 |
+
`T = 1 + 4 × seconds`, in the first frame's coordinates (OpenCV axes), translations
|
| 90 |
+
in metres / 4.
|
| 91 |
|
| 92 |
+
</details>
|
|
|
|
|
|
|
| 93 |
|
| 94 |
+
## 📖 Citation
|
| 95 |
|
| 96 |
```bibtex
|
| 97 |
@article{memorizon2026,
|