Luffuly commited on
Commit
c7884b8
·
verified ·
1 Parent(s): b085eec

Model card: teaser, keyboard actions, compact layout

Browse files
Files changed (1) hide show
  1. README.md +68 -27
README.md CHANGED
@@ -6,51 +6,92 @@ tags:
6
  - world-model
7
  - camera-control
8
  - video-generation
 
9
  ---
10
 
11
- # Memorizon (4-step)
12
 
13
- **Memorizon: Training World Models Beyond Their Context Window**
14
- Tingting Liao, Xuezhi Liang, Hao Li, Guangyi Liu · IFM, MBZUAI
15
 
16
- [Code](https://github.com/TingtingLiao/memorizon) · [Project page](https://tingtingliao.github.io/memorizon/)
 
17
 
18
- Memorizon turns one image and a camera trajectory into a long video, generated one
19
- second at a time, that stays consistent when the camera returns to places it has
20
- already seen. Each chunk retrieves its most relevant past frames by camera
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
- ## Usage
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
 
27
  ```bash
28
- git clone https://github.com/TingtingLiao/memorizon.git && cd memorizon
29
- pip install -e .
30
- python scripts/generate.py --checkpoint Luffuly/memorizon \
31
- --image your_photo.jpg --trajectory assets/trajectories/walk_00.npy --seconds 60 --output out.mp4
32
  ```
33
 
34
  ```python
35
- import numpy as np
36
- from memorizon import MemorizonPipeline, save_video
37
 
38
  pipe = MemorizonPipeline.from_pretrained("Luffuly/memorizon")
39
- video = pipe("your_photo.jpg", np.load("assets/trajectories/walk_00.npy"),
40
- num_chunks=60) # 4 steps, no CFG; prompt=None captions the image
41
  save_video(video, "out.mp4")
42
  ```
43
 
44
- Prompts must follow the training caption format (a perspective prefix such as
45
- "First-person perspective — character not visible." and one descriptive paragraph).
46
- Without a prompt the image is captioned automatically with Qwen3-VL-8B in that
47
- format (see `memorizon/caption.py`).
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
48
 
49
- The camera trajectory is a `[T, 4, 4]` array of camera-to-world poses, one per latent
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>&ensp;
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>&ensp;
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,