Evoke README

The project's README from github.com/AlayaLab/Evoke. As one markdown file: README.md.

    Alaya-EVOKE: From Linear-Scaling Supervision to Endless World

Alaya Lab

Project Page arXiv Weights License

A three-step, CFG-free world model that remembers where it has been, takes direction mid-flight,
and keeps going — 1.5 s of video every 2.11 s on a single H200.

✨ Highlights

📰 Latest News

🎬 Demos

Watch the EVOKE overview on YouTube
▶  Watch the overview

Every clip was produced by the launchers in this repo, on the data bundled in examples/ — no external dataset, no cherry-picking across seeds. The Move / Rot joystick is the camera-control HUD burned into geo_pred.mp4.

Re-prompting mid-rollout

Per-chunk conditioning lets the prompt change while the rollout is running — no cut, no restart. Each schedule below switches at chunk 3 of 6 (213 frames, 8.9 s).

scene the prompt switches to
frozen tundra, polar daylight an aurora ignites across the whole sky
still mountain lake at night a meteor shower opens overhead
alien valley of crystal spires an electrical storm arcs between the spires
dormant ring megastructure the gateway ignites, energy column rising
MODE=segment NUM_CHUNKS=6 MAX_CASES=0 bash scripts/inference/infer_post_distill.sh

Conditioning modes

4 chunks each (141 frames, 5.9 s; t2v is 140).

mode input camera
v2v reference video + pose track yes — continues past the reference window
i2v single first frame + pose track yes
t2v prompt only no — the engine forbids warp + t2v
MODE=v2v NUM_CHUNKS=4 bash scripts/inference/infer_post_distill.sh   # or MODE=i2v / MODE=t2v

The other two models

Both run on the same bundled inputs as the demos above, so they are directly comparable.

model steps note
stage1_camera_control 50, CFG 5.0 the multi-step model that precedes distillation — not distilled, so it is sampled like an ordinary diffusion model. Same case as v2v
evoke_teacher 50, CFG 5.0 the dual-expert DMD teacher sampled directly, same input image as i2v; no camera conditioning
NUM_CHUNKS=4 bash scripts/inference/infer_stage1.sh
bash scripts/inference/infer_evoke_teacher.sh

🧠 How it works

EVOKE inference pipeline

The student is autoregressive over latent chunks (latent_window_size = 9). Each chunk is laid out along the RoPE frame index as:

prefix | long(16) | mid(2) | warp(W) | prev_short(1) | noise(W)
tier what it is
prefix the frame-0 global anchor (i2v: the input image; v2v: the first latent of the reference video)
long / mid multi-term parametric memory (history_sizes = [16, 2, 1]) with coarser patch kernels — long (4,8,8), mid (2,4,4), everything else (1,2,2)
warp the world state bank rendered into this view; its RoPE overlaps the noise window
prev_short the last latent of the previous chunk, the continuity anchor closest to the noise

Every tier lives at the same latent resolution (res/8); compression comes only from the patchify convolution kernel, and no low-resolution latents are stored. In the short tier [prefix | warp | prev_short] the residual MLP and the per-stage compression act only on the warp frames in the middle.

The world state bank itself has three operations: write — a monocular depth model estimates depth for the emitted chunk under its known poses, unprojected into a persistent point cloud; read — the current camera pose addresses the bank directly, with sources ranked by co-visibility, up to eight fused, and a batched z-buffered scatter returning a warped image plus a per-pixel visibility mask; and evict — an optional retention window, which hour-scale runs enable explicitly.

⚙️ Environment

Python 3.10 + CUDA 12.4. The pins in requirements.txt are the environment actually in use — torch 2.4 / deepspeed 0.14.5 / flash-attn are load-bearing, not aspirational.

pip install torch==2.4.0 torchvision==0.19.0 --index-url https://download.pytorch.org/whl/cu124
pip install -r requirements.txt

Two things pip will not do: diffusers is pinned to a development fork that is not on PyPI (install it first or nothing imports), and postprocess_viz.py needs the ffmpeg binary on PATH. Both depth backends (ViGeo, Depth-Anything-3) are vendored under evoke/third_party/, so only their weights are downloaded — see Weights.

📦 Weights

Everything goes under models/ (gitignored). Every released EVOKE directory is the parent of a transformer/, because it loads as from_pretrained(path, subfolder="transformer").

models/
├── model_index.json                              a map of this layout -- not a loadable pipeline
├── evoke-base/                                   vae / text_encoder / tokenizer / scheduler only
├── ViGeo1.1/vigeo.pt                             depth backend -- REQUIRED
├── DA3/{config.json,model.safetensors}           depth backend -- OPTIONAL
└── evoke/
    ├── stage1_camera_control/transformer/        multi-step camera-controllable model
    ├── stage2_few_step_training/transformer/     few-step distillation (3-step pyramid)
    ├── stage3_long_distillation/transformer/     30s long-video distillation (post-distill init)
    ├── stage3_post_distillation/transformer/     the shipped model
    └── evoke_teacher/{high,low}_noise/           the two DMD teacher experts -- training only
# EVOKE -- the four released models, the teacher, and the base components
hf download AlayaLab/Evoke --local-dir models

# ViGeo -- REQUIRED. The depth backend behind the world state bank; every shipped
# recipe uses it (DEPTH_BACKEND=vigeo, cloud_warp.backend: vigeo).
hf download pkqbajng/ViGeo --local-dir models/ViGeo1.1

Depth-Anything-3 is optional — nothing in the default path touches it, and you only need it if you set DEPTH_BACKEND=da3. Get the da3-giant weights from depth-anything-3 and drop config.json + model.safetensors into models/DA3/. Switching backend is a recipe change, not a speed knob — training and inference must agree on it.

Both depth backends ship under CC-BY-NC-4.0, which is more restrictive than this repo's Apache-2.0. Check their licences before any commercial use.

🖥️ Director Web UI

The repository includes a local, single-GPU Director UI for the released post-distill model. It supports a reference image, per-chunk prompts, independent movement/look camera controls, streaming chunk previews, lazy full-video download, continuation, and non-destructive revision branching. The bundled default is the six-chunk Meteor case.

Complete the Environment and Weights sections above first, make sure ffmpeg is on PATH, then run from the repository root:

python -m pip install -r ui/requirements.txt
python ui/app.py

Open http://127.0.0.1:7860 and wait for the status to become READY. Generated projects, jobs, videos, logs, and caches are excluded from source releases by ui/.gitignore.

The server binds to localhost by default and does not provide authentication or rate limiting. Do not expose it directly to the public internet. Configuration, model-path overrides, data layout, and the deliberately exposed reverse-proxy form are documented in ui/README.md.

🚀 Inference

384 × 640 @ 24 fps. One chunk = 36 frames = 1.5 s, so NUM_CHUNKS=20 is a 30 s clip. All four commands run on the data bundled in examples/ — one case each, four for segment — no external dataset:

MODE=t2v     NUM_CHUNKS=20              bash scripts/inference/infer_post_distill.sh   # prompt only
MODE=i2v     NUM_CHUNKS=20              bash scripts/inference/infer_post_distill.sh   # first frame + pose
MODE=v2v     NUM_CHUNKS=20              bash scripts/inference/infer_post_distill.sh   # ref video + pose
MODE=segment NUM_CHUNKS=6  MAX_CASES=0  bash scripts/inference/infer_post_distill.sh   # prompt switches mid-rollout
Launcher Weights Steps
infer_post_distill.sh models/evoke/stage3_post_distillation 3, CFG-free
infer_stage1.sh models/evoke/stage1_camera_control 50, CFG 5.0
infer_evoke_teacher.sh models/evoke/evoke_teacher 50, CFG 5.0 (example only)

Results land in <OUT_ROOT>/<case>/geo_pred.mp4. Every distilled model was trained on v2v conditioning alone (geo_condition_{i2v,t2v}_ratio: 0.0), so MODE=i2v|t2v on them is zero-shot and the launchers say so at startup. Only stage1_camera_control has all three modes in distribution (ratios 0.1 / 0.2).

Everything else — the mode × model matrix, hour-scale rollouts, per-chunk log format, and how to point the launchers at your own data — is in scripts/inference/README.md. Every launcher also has -h.

🗝️ Training

One launcher per released model. Each initialises from its own released checkpoint, so you continue from where we left off — nobody reproduces a stage from scratch, and the pretraining data is not part of this release:

bash scripts/training/train_stage1_camera_control.sh      # no teacher (not a distillation)   1x8
bash scripts/training/train_stage2_few_step_training.sh   # teacher: stage1_camera_control    1x8
bash scripts/training/train_stage3_long_distillation.sh   # teacher: evoke_teacher, 2 experts 6x8
bash scripts/training/train_stage3_post_distillation.sh   # teacher: stage1_camera_control    6x8

Post-distillation goes back to the stage-1 teacher on purpose: it is a short run that firms up camera control, not another long-horizon distillation.

Each writes to models/train/<same-name>/; move or symlink it into models/evoke/ to serve it.

All four start with no external dataset — they point at the single 60 s clip in examples/data/, so they run as a pipeline check, not a real training run (one clip overfits immediately). For a real run swap data_yaml_path to the production mix named beside it in the config.

Scale is set by ACCELERATE_CONFIG — the topology is baked into the accelerate yaml, so do not override it with --num_machines. To merge a LoRA checkpoint into a full transformer, see tools/merge_lora_ckpt.py (use --dtype fp32: the delta is ~5e-4 of the weight magnitude and bf16 swallows it).

📝 Notes

👍 Acknowledgement

The EVOKE teacher is built on LingBot-World. The vae / text encoder / tokenizer / scheduler in models/evoke-base come from the released Helios base, which traces them to Wan. The optional Director UI LightTAE decoder adapter is adapted from ModelTC/LightX2V under Apache-2.0.

🔒 License

Apache-2.0, see LICENSE. Vendored third-party code keeps its own license and provenance under evoke/third_party/*.

✏️ Citation

@misc{evoke2026,
  title         = {Alaya-EVOKE: From Linear-Scaling Supervision to Endless World},
  author        = {Yuanyang Yin and Gongxuan Wang and Yifan Zhan and Chuanhao Li and Kaipeng Zhang and Feng Zhao},
  year          = {2026},
  eprint        = {2608.13546},
  archivePrefix = {arXiv},
  primaryClass  = {cs.CV},
  url           = {https://arxiv.org/abs/2608.13546},
}

Evoke (AlayaLab/Evoke)

Searching Database…

861 ·GitHub
这是什么?EVOKE 是一个交互式「世界模型」的研究实现,可生成无尽且可控的视频:这是一个三步、无 CFG 的系统,能记住自己去过哪里,允许你在生成过程中改道,并在 WBench 长程基准上达到最先进水平。
这是一个开箱即用的应用,还是需要我自己运行的研究代码库?它是一个包含训练和推理脚本的研究代码库,外加一个本地单 GPU 的 Director Web UI,需要你在配置好权重和环境后自行启动——没有托管/在线版本。
怎么让 Director Web UI 跑起来?安装好锁定版本的环境、把已发布的模型权重下载到 models/ 之后,确保 ffmpeg 在 PATH 中,然后从仓库根目录运行 UI 启动器;它默认运行六段式的「Meteor」演示。
尝试之前需要装好什么?带 CUDA 12.4 的 Python 3.10、锁定版本的 torch 2.4 / deepspeed 0.14.5 / flash-attn、一个不在 PyPI 上的 diffusers 开发分支(必须先手动安装),以及 PATH 中的 ffmpeg 二进制(可视化脚本需要)。
安装上有什么需要提前知道的坑吗?有:必须先从锁定的开发分支安装 diffusers,否则任何东西都无法导入;此外,两个可选的深度后端(ViGeo、Depth-Anything-3)虽然仓库本身是 Apache-2.0 许可证,但它们采用更严格的 CC-BY-NC-4.0 许可证发布,商用前请先确认。
运行它需要特定的 GPU 吗?它是在单张 H200 上构建和跑分的,每 2.11 秒生成 1.5 秒的 384x640 视频;Director UI 是单 GPU 的,但文档没有说明最低配置,也没有说明对更小 GPU 的支持情况。
WBench 是什么?WBench 是一个长程交互式世界模型基准,EVOKE 声称在其上取得了最先进的结果,同时在 VBench-Long 和 VBench-2.0 上也保持有竞争力。
它反复提到的「世界状态库」是什么?它是一个外部的、按相机索引的点云,把场景几何存储在模型上下文之外:写入来自单目深度模型对每个新片段的反投影,读取时只取当前视角所需的共视点,因此内存随场景增长,而不是随会话长度增长。
视频生成过程中可以修改提示词吗?可以——逐段条件化让你能在生成中途重新给出提示,比如从宁静的苔原场景切换到头顶绽放的极光,而无需切断或重启生成。
它为什么跳过无分类器引导(CFG)?蒸馏出的学生模型只需 3 步且完全不用 CFG,每步只做一次前向传播而不是两次,既获得了少步数的速度,又避开了少步数通常伴随的质量上限。
Creator
AlayaLab
Size
132.7 MB
Stars
861
Updated
CommitSep 12
Age
2mo
Commits · 90 Days