Does weighting the reconstruction loss by optical-flow magnitude buy
sharper moving regions? Two adapters whose configs differ in exactly one field.
Flow weighting did not do what it was built to do
Across 32 held-out val clips, the flow-weighted adapter is -0.28 dB on exactly the moving regions it was supposed to improve, while static regions gain +0.20 dB. That is the intended trade running backwards: capacity moved away from motion, not toward it.
The CutTofu clip disagrees — it shows moving +0.12 dB. That is why both are shown: one clip cannot separate a tenth of a dB from clip-to-clip variation, and picking the clip that agrees with the hypothesis would have manufactured a positive result.
Caveat that cuts the other way: one training run per arm (seed 0). A 0.28 dB gap is small enough that run-to-run variance is not ruled out. The honest reading is no evidence flow weighting helps moving regions — not proof that it hurts.
Overall PSNR was never going to settle this: it averages every pixel, so a pure redistribution nets out. Only the moving column can discriminate. Both adapters do beat the frozen base by ~2.8 dB — the LoRA finetune works; only the flow weighting is a wash.
treatment · flow_weight 16fps, L1 weighted by motion
PSNR 46.18 dB · MSE 2.41e-05 · +0.42 dB vs base
Error maps
diff ×20|original − base Wan2.2|
brighter = larger error
diff ×20|original − control · flow_weight 0|
brighter = larger error
diff ×20|original − treatment · flow_weight 1|
brighter = larger error
PSNR split by motion · this clip
No *_flow.npz exists beside this clip, so there is no
motion map to split on — only whole-frame PSNR is available here. The motion split for
these adapters is on the CutTofu tab and, at population scale, in the val table below.
treatment · flow_weight 16fps, L1 weighted by motion
PSNR 45.86 dB · MSE 2.59e-05 · +0.47 dB vs base
Error maps
diff ×20|original − base Wan2.2|
brighter = larger error
diff ×20|original − control · flow_weight 0|
brighter = larger error
diff ×20|original − treatment · flow_weight 1|
brighter = larger error
PSNR split by motion · this clip
No *_flow.npz exists beside this clip, so there is no
motion map to split on — only whole-frame PSNR is available here. The motion split for
these adapters is on the CutTofu tab and, at population scale, in the val table below.
treatment · flow_weight 16fps, L1 weighted by motion
PSNR 43.59 dB · MSE 4.37e-05 · +0.77 dB vs base
Error maps
diff ×20|original − base Wan2.2|
brighter = larger error
diff ×20|original − control · flow_weight 0|
brighter = larger error
diff ×20|original − treatment · flow_weight 1|
brighter = larger error
PSNR split by motion · this clip
No *_flow.npz exists beside this clip, so there is no
motion map to split on — only whole-frame PSNR is available here. The motion split for
these adapters is on the CutTofu tab and, at population scale, in the val table below.
treatment · flow_weight 16fps, L1 weighted by motion
PSNR 43.39 dB · MSE 4.58e-05 · +0.13 dB vs base
Error maps
diff ×20|original − base Wan2.2|
brighter = larger error
diff ×20|original − control · flow_weight 0|
brighter = larger error
diff ×20|original − treatment · flow_weight 1|
brighter = larger error
PSNR split by motion · this clip
No *_flow.npz exists beside this clip, so there is no
motion map to split on — only whole-frame PSNR is available here. The motion split for
these adapters is on the CutTofu tab and, at population scale, in the val table below.
Val set · 32 held-out clips · the population read
The tabs above are individual samples; this is the population, and it is
what the conclusion rests on. Same motion split, same lora_last.pt adapters,
32 val clips at 6fps (4.8% of
pixels moving) · compare_flow_adapters.py