A frozen video diffusion model that reuses what it has seen — and generates only what it hasn't.
A 3D-grounded memory bank · per-token noise scheduling · write-back rollout
The problem
Video models re-hallucinate on revisit
Generate a long video where the camera moves away and comes back to a place it already saw.
Frame-by-frame diffusion has no memory of 3D.
On return, the same wall / table / sky is re-invented differently — flicker, drift, ghosting.
Naïvely copying old pixels (splatting) leaves holes, seams, and stale geometry.
GOAL
Revisit ⇒ recall, not re-generate
When the camera returns to a known place, the model should restore the same scene from memory — and still freely generate genuinely new regions.
KEY IDEA
One scalar per token: knownness k
Route each space-time token between reuse-and-repair and generate-from-noise — inside a single frozen diffusion model.
2
The recipe in one line
Memory sets the noise level; diffusion does the rest
OFFLINE
Build a 3D world memory
Depth + poses → a persistent voxel point cloud. Reproject it into every target camera to get z_mem (what should be there), k (how sure), and Xtok (where in 3D).
ONLINE
Per-token noise from k
Wan DiT natively supports a different diffusion timestep per token. Known → low noise (repair). Unknown → high noise (generate). New output is written back into memory.
high k → start near z_mem · short denoise | low k → start from noise · full generation
3
System overview
4
Phase 1 · offline caching
Video → persistent 3D world memory
Out-and-back trajectory (~41 out / ~40 back) forces a revisit — the return path is real GT to score consistency.
Metric depth + one global scale matched to the camera baseline. Depth is only a 3D address, never copied as pixels.
Back-project ~11 frames into PointMemory: RGB, count, view directions, color variance (ghosting detector).
Reproject to each target cam (z-buffer, adaptive splat) → coverage / count / diversity / disagreement maps.
High k only when a region is covered, seen often, from many views, and observations agree.
6
Phase 2 · model
Frozen Wan DiT + four small hooks
① CORE
Knownness → per-token timestep
Wan natively supports a different diffusion timestep per token. Known = low noise (repair); unknown = high noise (generate). No surgery on the backbone.
② GEOMETRY
3D positional encoding (Xtok)
Each token knows its world position and viewing direction → the same world point stays the same identity as the camera moves.
③ RETRIEVAL
Geometry-keyed cross-attention
Every 5 blocks, Xtok queries the slot bank with Rope3D relative embedding — retrieve the same content from any viewing angle.
④ GATING
Confidence-gated shortcut
Residual that passes more memory where k is high, damped where k is low — bad memory can't leak in.
All new modules zero-initialized → day-0 behavior ≈ original Wan
7
Phase 3 · training
Anchor-mixture Diffusion Forcing
Per token: sample noise level t, pick a clean anchor, build the input on the model's familiar noise-to-image manifold:
x_t = (1 − t)·anchor + t·ε
Usually anchor = x₀ (real video latent).
For memory-covered tokens, ~40% use anchor = z_mem — but only when t ≥ 0.3.
Model always receives the true t.
THE TARGET IS ALWAYS x₀
Even when the anchor is z_mem, the loss points at the real frame. So the model learns to repair blurry / holey / ghosted memory into truth — not to copy it.
UNKNOWN REGIONS UP-WEIGHTED
Loss weighting stops the model from becoming a mere splat cleaner — it must truly synthesize content absent from memory.
8
Phase 4 · inference & rollout
Knownness → per-token start noise → write-back
τ = clip( 1 − λk, 0.45, 1 )
Known: x_τ = (1−τ)·z_mem + τ·ε — start from memory + a little noise, short denoise path.
Unknown: x_τ ≈ ε — start from ~pure noise, full generation.
Each token integrates from its own τ → 0 in a single diffusion pass.
Decode latents → frames with the VAE decoder.
WRITE-BACK · CHUNKED ROLLOUT
Back-project new frames into PointMemory as hypothesis points. Long videos run chunk-by-chunk; each chunk grows the memory.
When the camera returns, k is now high → it starts from the stored content and recovers the same scene instead of re-hallucinating.
9
Concretely, on DL3DV
Every space-time token gets memory, a 3D address, and a k
832×480
VIDEO RESOLUTION
81
FRAMES
[16,21,60,104]
VAE LATENT
30×52
TOKEN GRID
32,760
TOKENS = 21×30×52
Each of the 32,760 tokens carries its own memory content, 3D position, and knownness.
10
Takeaway
Memory decides how much to generate
Phase 1
Posed video → world memory content, per-region knownness, per-token 3D address.
Phase 3
Teach the model to repair memory, never blindly copy it. Target is always the real frame.