Mirror reflection — subject and reflection must agree

What this stresses: Geometric self-consistency. A reflection doubles every error: the model has to keep two views of one face in agreement for the whole clip.
960×544 · 124f (5.17 s) · 24 fps · seed 424242 · identical prompt in every cell. Same seed does not mean same take — steps, sampler and LoRA all change the trajectory, so judge character rather than shot-for-shot identity.

prompt
integrated_multimodal_description:
[Shot 1] A photorealistic medium shot of a young man with a shaved head and a dark beard, bare-shouldered, standing at a fogged bathroom mirror under a single warm bulb, white subway tile, a cold tap running into the basin. The camera is positioned so that both his real face in profile on the left and his reflected face in the mirror on the right are fully visible at all times. From 0.0 to 1.3 seconds he wipes a broad arc of condensation from the glass with his open palm, and the reflection clears in exact step with the wipe. At the 1.6-second mark he leans in toward his own reflection and (S1), in a low tired voice barely above a murmur, says: <d>[English] One more day. That is all.</d> From 3.6 seconds he splashes a double handful of water over his face and the mirror fogs faintly again. The reflection matches his real face and his real movement frame for frame throughout.

overall_soundscape:
A small tiled room with hard bright reverb on everything. A steady tap running into a basin for the whole clip. A squeaking palm drag on wet glass from 0.0 to 1.3 seconds. (S1)'s murmured line at 1.6 seconds is close, quiet and heavily reflected by the tile. A loud water splash at 3.8 seconds.

non_diegetic_music:
N/A
baseline · 20 steps
No LoRA. The reference render.
166s · floor -35.6 · med -27.4 · peak 2.4 dB · jitter 189.5 · detail 0.074
ema-ckpt500 · 8 steps
larryvrh/drbaph Turbo LoRA, EMA weights. Round-3 winner.
77s · floor -43.5 · med -29.0 · peak 2.5 dB · jitter 139.6 · detail 0.080
ckpt500 (non-EMA) · 8 steps
Same checkpoint without EMA averaging. Dragged a noise bed in round 3 — re-tested here under the fixed audio path.
77s · floor -39.0 · med -29.7 · peak 2.5 dB · jitter 180.6 · detail 0.117
lightx2v · 4 steps · str 1.0
ModelTC reference settings.
46s · floor -34.8 · med -26.9 · peak 2.5 dB · jitter 287.9 · detail 0.216
lightx2v · 4 steps · str 1.0 · shift 12/6
Reference settings with our house audio shift.
45s · floor -34.5 · med -25.4 · peak 3.2 dB · jitter 283.3 · detail 0.199
lightx2v · 4 steps · str 1.0 · er_sde
Isolates the sampler at full strength.
45s · floor -42.0 · med -32.5 · peak -5.3 dB · jitter 261.7 · detail 0.090
lightx2v · 4 steps · str 0.75
Isolates strength on the reference sampler.
45s · floor -40.7 · med -23.1 · peak 2.6 dB · jitter 261.9 · detail 0.142
lightx2v · 4 steps · str 0.75 · shift 12/6
Lower strength with the house shift.
45s · floor -42.2 · med -26.9 · peak 4.0 dB · jitter 256.3 · detail 0.135
lightx2v · 4 steps · str 0.75 · er_sde
Kijai's recommended config. Pilot winner on jitter and luma.
45s · floor -40.6 · med -32.7 · peak -2.6 dB · jitter 188.8 · detail 0.046
lightx2v · 8 steps · str 1.0
Double the trained step count, reference settings.
77s · floor -34.9 · med -28.1 · peak 0.2 dB · jitter 297.8 · detail 0.103
lightx2v · 8 steps · str 1.0 · shift 12/6
Double steps with the house shift.
76s · floor -39.5 · med -29.8 · peak -0.8 dB · jitter 295.8 · detail 0.097
lightx2v · 8 steps · str 0.75 · er_sde
Kijai's config given twice the steps.
77s · floor -39.6 · med -30.6 · peak -1.8 dB · jitter 232.9 · detail 0.059
baseline · 20 steps + Spectrum
No LoRA, plus SpectrumApplyMiniMaxH3 (v0.1.9 defaults: degree 1, warmup 1, one-point bootstrap) skipping DiT evaluations.
108s · floor -30.4 · med -26.9 · peak -0.9 dB · jitter 111.5 · detail 0.034
ema-ckpt500 · 8 steps + Spectrum
Turbo LoRA and Spectrum stacked. Only possible since Spectrum v0.1.9 — the old warmup_steps=5 default left no forecastable window at 8 steps.
61s · floor -33.0 · med -27.0 · peak 1.3 dB · jitter 111.2 · detail 0.032
ema-ckpt500 · 8 steps + SageAttention
Turbo LoRA with SageAttention 2.2.0 (KJNodes patch, backend auto). Unlike Spectrum, Sage preserves the take — 0.955 frame correlation against plain emck8.
50s · floor -37.2 · med -27.7 · peak 2.3 dB · jitter 136.4 · detail 0.082
ema-ckpt500 · 8 steps + Sage + Spectrum
Everything stacked: the fastest usable config here, at the cost of a different take (the drift is Spectrum's, not Sage's).
41s · floor -33.6 · med -27.4 · peak 2.1 dB · jitter 107.9 · detail 0.032
baseline · 20 steps + SageAttention
Isolates the attention backend with no LoRA in play. Near-identical output to the reference render (0.974 correlation).
98s · floor -35.6 · med -27.7 · peak 1.9 dB · jitter 184.3 · detail 0.072
baseline · 20 steps + Sol-Attn
NVIDIA Sol-Attn sparse attention via the H3 zero-copy patch (tau 1.0, sink_conditioning exact_kv). Changes the take substantially — 0.723 correlation.
98s · floor -36.5 · med -30.2 · peak -5.2 dB · jitter 120.9 · detail 0.081
ema-ckpt850 · 8 steps
larryvrh's further-trained EMA checkpoint — the file he recommends — against the ckpt500 used everywhere else here.
77s · floor -40.2 · med -31.6 · peak 2.2 dB · jitter 180.3 · detail 0.121
v4-step600 EMA · 8 steps
larryvrh's new v4 training recipe (step 600, EMA) — a different training line, not a further ckpt of the 500/850 series. Single-variable swap against emck8, the round-4 winner: same steps, sampler, scheduler, shift and strength.
78s · floor -31.3 · med -26.4 · peak 2.4 dB · jitter 156.9 · detail 0.084
v4-step600 non-EMA · 8 steps
The same v4 checkpoint without EMA averaging. Re-runs the EMA axis on the new recipe — on the v1 line the gap was 6.3 dB of noise floor (emck8 −5.6 vs ck8 +0.7).
77s · floor -38.4 · med -32.2 · peak 2.3 dB · jitter 168.5 · detail 0.085
v4-step600 EMA · 8 steps · euler + beta
drbaph's recommended config for the pruned conversion we load: 8 steps, euler, beta scheduler. Varies sampler *and* scheduler against the rest of the grid, so it is only readable against v4e8, not against the res_multistep columns.
77s · floor -33.3 · med -27.8 · peak 2.3 dB · jitter 165.3 · detail 0.047
v4-step600 EMA · 4 steps
Probes the one regression larryvrh documents for v4: motion smear / trailing ghosting at 4 steps under fast motion, which 6–8 steps is said to remove. rapid-cuts, hands-dexterity and polyphony-foreground are where it should show.
45s · floor -33.7 · med -21.2 · peak 2.1 dB · jitter 260.1 · detail 0.170
v4-step600 EMA · 8 steps + SageAttention
Re-bases the production accelerator onto v4. emck8-sage (45 s, 3.66×, 0.955 correlation) is the current production config; if v4e8 dethrones emck8 this is what replaces it. Sage is an attention-backend swap and so should be weight-independent — this checks that.
50s · floor -33.1 · med -27.2 · peak 1.6 dB · jitter 167.1 · detail 0.082
ema-ckpt500 · 8 steps · euler + beta
Control for v4e8-eb, which varies LoRA, sampler and scheduler at once. Putting drbaph's euler+beta on the weights we already have 10 scenes of isolates the sampler/scheduler axis, so an eb win can be attributed to the config rather than to v4.
77s · floor -35.0 · med -27.6 · peak 1.3 dB · jitter 159.9 · detail 0.036

Measured

configtimefloormedianpeakjitterdetailraw detailluma
baseline · 20 steps166s-35.6-27.42.4189.50.07417681.4
ema-ckpt500 · 8 steps77s-43.5-29.02.5139.60.08020485.2
ckpt500 (non-EMA) · 8 steps77s-39.0-29.72.5180.60.11731582.3
lightx2v · 4 steps · str 1.046s-34.8-26.92.5287.90.21669698.8
lightx2v · 4 steps · str 1.0 · shift 12/645s-34.5-25.43.2283.30.199677101.6
lightx2v · 4 steps · str 1.0 · er_sde45s-42.0-32.5-5.3261.70.090272100.8
lightx2v · 4 steps · str 0.7545s-40.7-23.12.6261.90.14242693.3
lightx2v · 4 steps · str 0.75 · shift 12/645s-42.2-26.94.0256.30.13540492.3
lightx2v · 4 steps · str 0.75 · er_sde45s-40.6-32.7-2.6188.80.04615096.7
lightx2v · 8 steps · str 1.077s-34.9-28.10.2297.80.10336498.2
lightx2v · 8 steps · str 1.0 · shift 12/676s-39.5-29.8-0.8295.80.09734999.1
lightx2v · 8 steps · str 0.75 · er_sde77s-39.6-30.6-1.8232.90.059208104.8
baseline · 20 steps + Spectrum108s-30.4-26.9-0.9111.50.0349483.6
ema-ckpt500 · 8 steps + Spectrum61s-33.0-27.01.3111.20.0326277.3
ema-ckpt500 · 8 steps + SageAttention50s-37.2-27.72.3136.40.08221385.7
ema-ckpt500 · 8 steps + Sage + Spectrum41s-33.6-27.42.1107.90.0326377.0
baseline · 20 steps + SageAttention98s-35.6-27.71.9184.30.07217181.1
baseline · 20 steps + Sol-Attn98s-36.5-30.2-5.2120.90.08122576.1
ema-ckpt850 · 8 steps77s-40.2-31.62.2180.30.12133084.8
v4-step600 EMA · 8 steps78s-31.3-26.42.4156.90.08421983.9
v4-step600 non-EMA · 8 steps77s-38.4-32.22.3168.50.08523186.5
v4-step600 EMA · 8 steps · euler + beta77s-33.3-27.82.3165.30.04711281.8
v4-step600 EMA · 4 steps45s-33.7-21.22.1260.10.17036690.5
v4-step600 EMA · 8 steps + SageAttention50s-33.1-27.21.6167.10.08221883.9
ema-ckpt500 · 8 steps · euler + beta77s-35.0-27.61.3159.90.0369981.3
Rendered on ComfyUI 0.30.0 at commit 344b4398 (2026-08-07, "Support asym w4a8_int (#15308)") · torch 2.12.1+cu130 · NVIDIA GeForce RTX 5080, 15.4 GB
Custom nodes: ComfyUI-Spectrum-MiniMax-H3 1a06e20 (v0.1.9) — used by the two Spectrum columns only · comfyui-kjnodes 1.4.9 · ComfyUI-sol-attn 251c27f
All 14 columns rendered on this single ComfyUI commit. It postdates bdcb886a (MiniMax audio-sampler rework, merged 2026-08-06), which is why round-3 clips are archived separately rather than mixed in.