MCSDF · Scene Extrapolation with World Memory

Memory-Conditioned Scene Diffusion Forcing — teaching a video diffusion model to remember the world it has seen and walk into the parts it hasn't · 2026-07-29
🎯 Goal: Show the model a short observation of a real scene (18 frames), then have it keep filming the same world along an arbitrary camera trajectory (63 future frames). Wherever the scene was observed, the output must be faithful to geometry (no drift, no re-invention); wherever it wasn't, the model must hallucinate plausibly and richly (no gray, no blur). Core methodology: content rides the channel, trust rides the noise field — each token's knownness decides its place in the denoising calendar: who commits first, who serves as reference, who is in charge of imagination. North star: leave the scene and come back, and the same world is still there (revisit consistency = true world memory).

① Input / Output

INPUT

OUTPUT

Example (held-out TEST clip). Row 1 = GT trajectory (frame 0 is observed; 20/40/60/80 are future). Row 2 = knownness evidence heatmap (red = well seen, blue = barely, dark = never seen). Row 3 = our output (expE_sync @1500).

② Capability ladder (what we are building, and where it stands)

1
Geometric fidelity — seen content appears where geometry says it should
Persistent 17-ch warp channel feeds content at every step; VGGT + Umeyama fixed shattered geometry; z_mem-anchored training teaches "clean the splat"
✅ established
2
Generative completeness — unseen regions grow rich, plausible content, never gray
P-SDEdit diagnosis: texture is synthesized in the high-noise segment → τ ≥ 0.85 + rehearsal preserves the generative prior; 4–7× the content energy of the uniform baseline
✅ established
3
Trust scheduling — knownness carries no content; it orchestrates who commits first and who references whom
SYNC synchronized-start calendar (+0.23 dB, then a further lead once training matches it); cluster-128 trust regions; expJ is testing the continuous finish-timetable
✅ core novelty
4
Pose obedience everywhere — empty regions also know where the camera is (fixes view-drift)
6-ch Plücker ray map = declarative per-token pose (expF / expF_sync); first readout showed the best deep-frame alignment in the fleet
🔥 training
5
Posterior self-correction — detect "the prior says seen, but it's wrong" and re-imagine those regions
Uncertainty head (Patch-Forcing style, +1-ch logvar; stop-grad ⇒ trainable as a frozen-backbone probe) = expI candidate
🧪 designed

③ SOTA results showcase — 4 examples · 4 rows each

Row order per example: GT trajectoryknownness map k (the evidence chart) → warp memory z_mem (VAE-decoded — literally what the 17-ch channel feeds the model: splat + gray holes) → OURS (expE_sync, SYNC cl-128 τ.85, 24 forwards). Frames 0 / 20 / 40 / 60 / 80; frame 0 is observed, everything after is generated. Watch the red evidence recede into blue as the camera advances — and the output keep the seen and invent the unseen.
▶ Video comparisons (knownness map in motion): the same story as the strips below, but animated — watch the red evidence drain out of the knownness panel as the camera advances.
TEST 111b656f · signals video (GT / warp memory / knownness / output)
TEST 2501f488 · signals video
TRAIN 00534f58 · knownness comparison video
TRAIN 0003dc82 · knownness comparison video
More motion: all video comparisons · knownness video space
TEST (held-out) · 111b656f — seen-PSNR 17.0 dB. Deep frames: the warp memory has collapsed to holes, ours keeps shelf + brick-wall structure and invents the room beyond.
TEST (held-out) · 2501f488 — hardest clip in the dev set (10.5 dB): large unseen sweep, heavy imagination load.
TRAIN · 0003dc82 — outdoor scene, 13.5 dB; note the memory's speckle noise being cleaned up in the output.
TRAIN · 00534f58 — 11.7 dB; strong forward motion, evidence half-gone by frame 40.

④ Current SOTA pipeline (expE_sync · 13.20 avg / 17.1 test @ only 1500 steps)

Config fingerprint: Wan2.1-I2V-14B · LoRA-64 + trained time-modulation path · persistent 17-ch warp channel (zero-init) · τ = clip(1 − 0.95k, 0.85, 1) → cluster-128 → SYNC synchronized-start sampler (24 forwards) · training-field dice: rehearsal .10 / lift .35 / sync slices / patch fields · clean from-scratch lineage
GEOMETRY EVIDENCE (offline, once per clip) TRUST SCHEDULING · knownness rides the noise field Wan2.1-I2V-14B BACKBONE (per-token diffusion) 18 observed frames+ 81 poses / KDL3DV · 480×832 · stride 2 VGGT geometryconsistent depth + conf+ Umeyama scale align world cloud ~2.7Mno-voxel (no fusion)density-k coverage stats z_mem [16,21,60,104]splat → 81 poses → VAE (memory frames); fed to the DiT + SDEdit init knownness k [21,30,52]per-token evidence ∈ [0,1] (density coverage) (expF branch: +6 ch)Plücker rays (d, o×d)frame-0-relative · span-normalizeddeclarative per-token pose Training and inference share the same evidence cache (cache_novoxel, 1430 clips); text prompt via frozen T5 τ map: τ = clip(1 − 0.95k, 0.85, 1)start-noise = trust; 0.85 keeps the texture band cluster-128 trust regionsk-means [4k, xyz(Xtok), pos] → cluster-mean τ SYNC synchronized-start calendar ⭐t_i(j) = max(0, τ_i − e_j); everyone starts at step 0; on zero-crossing: own x0-projection → PINNED (told-t = 0.02)known commits first → becomes clean reference in attention →the unseen decides its late game against GT-grade context (+0.23 dB validated)24 forwards · optional shift / CFG · expJ upgrade in training: continuous timetable τ = 1 − 0.2k DiT ×40 blocks (frozen + LoRA-64) input: noisy x (16) + I2V cond (20) + z_mem/k channel (17) ★ per-token AdaLN (the key detail) each token's own t_i → sinusoidal(256) → time_embedding (MLP, trained ✓) → time_projection → t_mod [B, L, 6, dim] → per-token shift/scale/gate ×2 (attn + ffn) (DiTBlock has_seq branch; block.modulation trained ✓) ★ 3D RoPE positions · text cross-attn (T5) same mechanism independently validated by Patch Forcing (CVPR'26) v-prediction: v = (x_t − x0)/t points at the TRUE x0 training-field dice (one branch per step) 10% rehearsal: global scalar t, evidence zeroed (anti-forgetting) 35% lift: τ0 ← 1 − (1−τ0)γ², γ = U² (covers the high-noise edge) remaining 50/50: · sync slice clamp(τ0 − c, .02, 1) ← what the sampler visits · patch field u_patch·τ0 (contiguous 3D blocks, AsyncPatch-style) anchor mixture: covered tokens w/ p=0.4 & t≥0.3 anchor at z_mem → teaches "clean the splat"; the rest anchor at x0 → pure generation loss = v-MSE with honest told-t (unknown_w = 1) 8-GPU DDP (manual grad all-reduce) · lr 5e-5 (LoRA) inference loop (24 forwards) for j in 0..23: told_i = alive ? t_i : 0.02 (pinned broadcast clean) v = DiT(x, told·1000, evidence, text) t_next = max(0, τ_i − e_{j+1}) (SYNC constant-rate / shift) crossing tokens: x ← x − t_i·v (own x0-projection) → pin others: x ← x + (t_next − t_i)·v (per-token Δt) → VAE decode → 81 output frames metrics: seen-PSNR (k>.5, frames 20/40/60) + unseen content energy (chroma+contrast, frame 40)
🔍 Detail emphasis — three places this differs from most camera-conditioned video work: ① conditioning is persistent — the warp channel is injected at all 24 denoising steps, not only at initialization (this is what cured the gray-patch failure); ② the timestep is not a global scalar — the [B, L, 6, dim] per-token modulation lets all 32,760 tokens sit at different noise times simultaneously, the mechanical prerequisite for "trust = noise"; ③ the sampling calendar carries semantics — finish order = evidence order; known regions commit first and serve as references (SYNC), and expJ is currently upgrading this into a fully continuous timetable (τ = 1 − 0.2k).
fleet best 13.20 dB (4-clip avg) big TEST clip 17.1 dB only 1500/10000 steps content energy vs uniform baseline 24 forwards · ~70 s/clip

⑤ Links

All-experiment atlas (k→τ maps) · Latest parade · Fleet progress · expH verdict · ctx18 official benchmark