The fast one. A pre-flighted bundle of the Self-Forcing 4-step distill of Wan 2.2 TI2V 5B + UMT5-XXL Q3_K_S + the taew2_2 tiny decoder, sized for phones and run via Mirage — the on-device diffusion engine for iOS / macOS / visionOS.
Compared to the standard Wan 2.2 bundle, this one is 2.5 GB smaller and an order of magnitude faster, from three compounding tricks:
4 sampling steps instead of 20 — the distill bakes the denoising schedule into the weights (~5× on sampling)
CFG 1.0 — guidance is distilled in too, so every step is one forward pass instead of two, and the negative prompt never needs encoding (~2× more)
A 23 MB tiny decoder replaces the 1.4 GB VAE — frame decode drops from minutes to seconds
The trade: slightly softer texture and less negative-prompt control. For clips on a phone, it's the right trade.
Total bundle size: ~6.0 GB (vs 8.5 GB for the standard bundle).
Quick start (Mirage)
swift
1importMirage23let docs =FileManager.default.urls(for:.documentDirectory,in:.userDomainMask)[0]45let engine =tryEngine(models:ModelFiles(6 diffusionModel: docs.appendingPathComponent("Wan2_2-TI2V-5B-Turbo-Q4_K_S.gguf"),7 t5Encoder: docs.appendingPathComponent("umt5-xxl-encoder-Q3_K_S.gguf"),8 taeDecoder: docs.appendingPathComponent("taew2_2.safetensors")9))1011let video =tryawait engine.generateVideo(.init(12 prompt:"a golden retriever puppy running through shallow ocean waves at sunset, slow motion, cinematic",13 width:480, height:832,// Wan's native 480p — off-distribution sizes degrade hard14 frames:13,// must be 4n+115 steps:8,// distilled for 4; 8 is decisively sharper (see below)16 cfgScale:1.0,// guidance is baked in — do not change17 flowShift:3.018))
cfg 1.0 is part of the model — the guidance distillation is baked into the weights, so never raise it. Steps are worth doubling: the distill targets 4, but side-by-side on an iPhone 17 Pro Max, 4-step output reads as artifact mush while 8 steps resolves recognizable subjects, lighting, and water — the community's experience with these Self-Forcing/lightx2v-style distills is the same (8 ≈ the sweet spot, no documented gains beyond). Fewer than 4 produces noise. Both text→video and image→video (pass initImage) work from the same weights.
Prompting guide
Wan conditions on UMT5-XXL, an instruction-grade multilingual encoder — it rewards full-sentence, cinematography-flavored prompts over tag soup, and it weighs the start of the prompt most heavily:
Subject first, then motion, then camera, then scene. "A red fox stalking through snow, tracking shot, dawn mist" — in that order.
Describe how things move, with concrete verbs: "waves crash", "the corgi paddles", "she spins slowly". Video models allocate their capacity to change-over-time.
Direct the camera explicitly: close-up, tracking shot, slow pan, aerial view.
Set light and mood at the end: golden hour, heavy rain, neon glow.
One subject, one action. 2 seconds is a shot, not a film — simple, richly described scenes come out cleanest.
Fun fact from the training distribution: Wan is trained by Alibaba on a heavily Chinese-curated corpus, so iconic Chinese imagery is remarkably strong — pandas, lanterns, bamboo, misty mountains, street food, rain-slick neon streets. If you want a guaranteed-gorgeous demo clip, "a panda eating ramen in the rain under a red umbrella" practically renders itself.
English and Chinese prompts both work (bilingual training); the strongest negative prompt in the ecosystem is the upstream Chinese default (only relevant above cfg 1.0 — at cfg 1.0 the negative branch is skipped entirely).
Performance (measured via stable-diffusion.cpp on an M2 Mac, 24 GB)
480×832 · 13 frames · 4 steps · Metal DiT + CPU text encoder + tiny decoder:
Phase
Turbo bundle
Standard bundle
Text encode (once, CPU)
~34 s
~45–115 s ×2 (pos + neg)
Sampling
~52 s (4 steps × 1 pass)
~8.5 min (20 steps × 2 passes)
Frame decode
2.4 s
~13.5 min (full VAE, tiled)
End to end
~96 s
~25 min
Sample output
The exact clip from the measurement above — 480×832, 13 frames, 4 steps, seed 42:
Prompt: "a golden retriever puppy running through shallow ocean waves at sunset, splashing water, slow motion, cinematic lighting"
License note: the GGUF repo this bundle repackages is tagged Apache-2.0 and the base model is Apache-2.0, but the original Turbo distillation repo does not assert an explicit license of its own. If you need belt-and-suspenders licensing for commercial use, FastVideo/FastWan2.2-TI2V-5B is an explicitly Apache-2.0 3-step distill of the same base (Diffusers format — convert before use with sd.cpp).
License
Bundle and documentation: Apache 2.0. Component licenses above.