Wan 2.2 TI2V 5B Turbo — iOS bundle

Mirage Upstream License Params Steps CFG

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:

  1. 4 sampling steps instead of 20 — the distill bakes the denoising schedule into the weights (~5× on sampling)
  2. 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)
  3. 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.

What's inside

File Role Size
Wan2_2-TI2V-5B-Turbo-Q4_K_S.gguf Distilled video DiT — 5B params, Q4_K_S 3.1 GB
umt5-xxl-encoder-Q3_K_S.gguf Text encoder (multilingual T5-XXL) 2.9 GB
taew2_2.safetensors TAEHV tiny decoder for Wan 2.2's 48-ch VAE 23 MB

Total bundle size: ~6.0 GB (vs 8.5 GB for the standard bundle).

Quick start (Mirage)

import Mirage

let docs = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]

let engine = try Engine(models: ModelFiles(
    diffusionModel: docs.appendingPathComponent("Wan2_2-TI2V-5B-Turbo-Q4_K_S.gguf"),
    t5Encoder:      docs.appendingPathComponent("umt5-xxl-encoder-Q3_K_S.gguf"),
    taeDecoder:     docs.appendingPathComponent("taew2_2.safetensors")
))

let video = try await engine.generateVideo(.init(
    prompt: "a golden retriever puppy running through shallow ocean waves at sunset, slow motion, cinematic",
    width: 480, height: 832,   // Wan's native 480p — off-distribution sizes degrade hard
    frames: 13,                // must be 4n+1
    steps: 8,                  // distilled for 4; 8 is decisively sharper (see below)
    cfgScale: 1.0,             // guidance is baked in — do not change
    flowShift: 3.0
))

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:

  1. Subject first, then motion, then camera, then scene. "A red fox stalking through snow, tracking shot, dawn mist" — in that order.
  2. Describe how things move, with concrete verbs: "waves crash", "the corgi paddles", "she spins slowly". Video models allocate their capacity to change-over-time.
  3. Direct the camera explicitly: close-up, tracking shot, slow pan, aerial view.
  4. Set light and mood at the end: golden hour, heavy rain, neon glow.
  5. 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"

Provenance

Component Upstream License
Base video DiT Wan-AI/Wan2.2-TI2V-5B Apache 2.0
Self-Forcing 4-step distillation quanhaol/Wan2.2-TI2V-5B-Turbo see note
GGUF conversion hum-ma/Wan2.2-TI2V-5B-Turbo-GGUF Apache 2.0
Text encoder GGUF city96/umt5-xxl-encoder-gguf Apache 2.0
Tiny decoder (taew2_2) madebyollin/taehv MIT

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.

Built by

Haplo · @jc_builds · Mirage on GitHub

Downloads last month
17
GGUF
Model size
6B params
Architecture
t5encoder
Hardware compatibility
Log In to add your hardware

3-bit

4-bit

Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for jc-builds/Wan2.2-TI2V-5B-Turbo-iOS

Quantized
(7)
this model