WAN 2.1 Latent Resizer
Your video latents don't have to come out blurry
- latent
- LATENT
Every Wan 2.1 video workflow hits the same wall eventually: the model is happy at 720p, your VRAM is not happy once you ask for bigger, and video generation is one of the most VRAM-hungry things ComfyUI does. The usual escape hatch - generate small, then upscale - has a nasty catch specific to video models. Upscale the latent with plain bilinear interpolation and you get soft, smeary output, because latents aren't pixels and don't behave like them. The WAN 2.1 Latent Resizer exists for exactly that job: it's a tiny trained network - 21.8M parameters, a 41.5 MB file - that resizes Wan 2.1 latents the way the model actually wants them resized.
It's a direct descendant of Ttl's ComfyUi_NNLatentUpscale, the pack that made latent-space upscaling respectable back in the SD 1.5 days. The README credits it explicitly, and the trick is the same: skip the decode-and-re-encode round trip, work in latent space, and let a learned model do the resizing instead of an interpolator. Decoding to pixels, upscaling, and re-encoding costs VRAM and re-introduces VAE error; keeping everything in latent space is cheaper and cleaner. If you're already doing a second-pass "refinement" denoise, you were going to end up in latent space anyway.
How it works
The node takes a Wan 2.1 latent - 16 channels, which is what the Wan 2.1 VAE emits - and runs each frame through a small ResBlock network with an attention-free, scale-conditioned design. Your latent arrives as (B,C,T,H,W); the node flattens time into the batch, resizes every frame to your target, then reshapes it back. It's a 2D operation per frame: the model doesn't know or care about motion. That's the honest limitation. It will give you a sharper upscale than bilinear, not temporal coherence - a fact worth remembering when you watch the result move.
The scale conditioning is the neat part. A single model handles both directions: scale above 1 upscales, below 1 downscales, and the network is told the factor via an embedding so it behaves differently depending on how much you're asking. scale = 1.0 short-circuits and returns your latent untouched, no model load at all.
The inputs that matter
Out of the five, a beginner sets three:
- latent - your Wan 2.1 latent, straight from the KSampler or a previous resizer pass.
- model_name - pick
wan2.1_latent_resizer_fp16.safetensors. The dropdown also lists the Wan 2.2 model; ignore it here (more on that below). - scale - 0.1 to 10, default 2.5. For the classic workflow you want a modest 2×, not the max: over-2× in one latent hop gets soft again.
device (cuda/cpu) and use_fp16 you can mostly leave alone. One caveat: use_fp16 defaults to off, meaning fp32 compute on fp16 weights. If you're VRAM-starved - and if you're running Wan video, you are - flip it on; the quality hit on a 21M-param resizer is negligible.
The single LATENT output feeds either a VAE Decode for a quick look, or the recommended route: a second low-denoise sampling pass (latent-space hi-res fix) and then decode. That refinement pass is where detail comes from; the resizer just hands it a bigger, non-smeared canvas.
Install
ComfyUI Manager - search "Wan Latent Resizer" and hit install - or the manual route:
cd ComfyUI/custom_nodes
git clone https://github.com/LBH-123-AI/Comfyui-Wan-latent-Resizer
Then restart ComfyUI. No extra Python dependencies (torch, einops, safetensors all ship with ComfyUI) and no separate model download - the .safetensors files live in the repo. Drop them into ComfyUI/models/upscalers/ if you'd rather keep model files out of custom_nodes, since the loader checks that folder first.
Where people get burned
The big one is version mixing. Both resizer nodes list both model files in their dropdowns, and Wan 2.1 uses a 16-channel VAE while Wan 2.2's VAE packs 48 channels. Feed the 2.2 model into the 2.1 node on a 2.1 latent and the conv layer hits a channel-count mismatch and throws. Match both the node and the model file to your Wan version. Also, this is a sharper resampler, not a detail regenerator - it adds pixels, not new content. If you want hallucinated detail, that's the refinement pass (or a generative upscaler like SeedVR2) doing it, and those run best on pixels anyway. The resizer is the cheap, correct "more pixels" rung for Wan video, and it does that job very well.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| latent | LATENT | — | |
| model_name | COMBO | 2 options: wan2.1_latent_resizer_fp16.safetensors, wan2.2_latent_resizer_fp16.safetensors | |
| scale | FLOAT | 2.50.1–10 | — |
| device | COMBO | cuda | 2 options: cuda, cpu |
| use_fp16 | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| LATENT | LATENT | — |