TL;DR. MCSDF's per-token Diffusion-Forcing sampler was under-integrating: it applied the
global step Δu to every active token and skipped the final x0-projection. Fixing it to a
per-token local Δt (min(τ,uk+1)−min(τ,uk), the full jump at
activation) plus a direct x0-projection (x̂₀ = x − t·v, v points at x0) buys
+13–22% sharpness, largest in the deep-extrapolation frames — no retraining. And 24
steps with the fix beats 50 without: it's integrator correctness, not compute. Shipped as the
default sampler.
What MCSDF is (and its relation to AsyncPatch)
MCSDF is AsyncPatch Diffusion (arXiv 2606.07079)
applied to posed video: a spatial timestep field replaces the global scalar t, and one joint
denoiser reads the whole latent so clean tokens condition noisy ones. MCSDF adds three things AsyncPatch
doesn't have — the timestep field is a 3D-geometry-derived knownness map τ (not arbitrary patches);
an imperfect point-cloud memory zmem injected as SDEdit content and corrected via an
anchor-DF objective (hence τ floored at 0.45, unlike AsyncPatch's known=0); and a video / pretrained-DiT
retrofit rather than a from-scratch UNet. The recent --train_modulation + --async_patch
work was literally adopting AsyncPatch's two load-bearing ingredients.
A/B — OLD vs FIXED integrator (checkpoint step 2500)
OLD = current sampler (global-Δu, no x0-projection) ·
FIXED = per-token Δt + x0-projection · columns = frames 0/20/40/60/80 ·
green % = sharpness gain (Laplacian variance).
Deep frame 40 (pier), 3× zoom — OLD left is smeared/mushy,
FIXED right has crisper edges and articulated stone texture.
Sharpness gain (Laplacian variance, vs OLD)
vs current (A)
f0 near
f20
f40
f60 deep
f80 return
pier — B: fix, 24 steps
+7.5%
+21.8%
+17.6%
+15.3%
+14.8%
pier — C: fix, 50 steps
+7.5%
+15.9%
+14.1%
+12.6%
+13.2%
plaza — B: fix, 24 steps
+7.3%
+17.9%
+13.3%
+16.8%
+13.2%
The largest gains are in the deep-extrapolation frames (f20–f60) —
exactly the region that looked soft. C (50 steps) ≤ B (24 steps): more steps of the correct update don't
add, confirming this is integrator correctness, not step count.
What the fix does NOT fix — and the training in progress
The fix sharpens what's there but can't invent correct geometry: the deep frames are still structurally
rough in both rows. That residual is undertraining / capacity, addressed by extending training to
~12k steps (in progress; currently ~step 4000). Below is the live training viz, now rendered through the
fixed sampler — near + return frames crisp and consistent, deep middle sharpening as it trains.
pier · step ~3800plaza · step ~3800
Next unused lever (inference-only, no retrain): AsyncPatch input guidance — extrapolate two scores
at different context-noise levels to enforce stricter fidelity to the remembered content.