Verified against diffusers 0.39 source + the HF configs/safetensors headers:
- The Wan VAE decodes in float32 (WanPipeline loads AutoencoderKLWan at torch.float32
while the pipe runs bf16); the loader cast every component to bf16, degrading every
clip. Add vae_force_fp32 (both Wan families) and pin pipe.vae back to fp32 after build.
- The Wan transformers ship FP32 on disk (safetensors headers are F32; A14B index =
57.15 GB per expert = 14.3B x 4, TI2V = 20.0 GB = 5B x 4), so bf16_components_gb held
the fp32 on-disk sums (114.3 / 20.0) instead of the documented bf16-resident sizes.
Halve to 57.2 (two A14B experts) and 10.0 (TI2V), so the plan no longer over-budgets
the DiTs ~2x and forces needless offload on an 80 GB GPU.
- TI2V-5B's VAE is 16x spatial (vae/config.json), so WanPipeline floors H/W to 16*2 = 32.
Snap TI2V to /32 (was /16) so the recorded size matches the generated clip (a 720
request was recorded but rendered at 704). A14B keeps /16 (Wan2.1 8x VAE).