SUPIR Decode
Turning the sampled latent back into an actual image
- SUPIR_VAE
- latents
- image
The last stop in a split SUPIR workflow. SUPIR_sample hands you a latent; this node turns it into a normal IMAGE you can preview, save, or feed into anything else in ComfyUI. Nothing glamorous here - it's the mirror image of SUPIR_encode, and it's the node that finally gets you off SUPIR's custom VAE type and back onto something the rest of ComfyUI understands.
What it does
SUPIR uses its own VAE, distinct from a standard ComfyUI checkpoint's VAE, so decoding a SUPIR latent needs a SUPIR-aware node rather than a regular VAE Decode. This node runs that decode, with the same tiling machinery used elsewhere in the pack to keep memory use manageable on larger images.
Inputs and outputs that matter
Required: SUPIR_VAE (from your loader - the same one you used to encode, generally), latents (the output of SUPIR_sample), use_tiled_vae (on by default), and decoder_tile_size (default 512, only matters with tiling enabled).
Optional: decoder_dtype, which like the other dtype settings in this pack should stay on auto unless you're actively debugging a decode failure.
Output: a single image - a standard ComfyUI IMAGE, ready for a Save Image node, a preview, or anything downstream that doesn't need to know SUPIR was ever involved.
How to install it
ComfyUI Manager: search "SUPIR", install, restart. Or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/kijai/ComfyUI-SUPIR
pip install -r ComfyUI-SUPIR/requirements.txt
Portable: python_embeded\python.exe -m pip install -r .... A recent PyTorch is expected; xformers optional. This node needs SUPIR_VAE from an upstream loader, which needs a SUPIR checkpoint and an SDXL checkpoint in ComfyUI/models/checkpoints before any of this will run.
Common issues
fp8 is worth a specific warning here, even though this node's own schema doesn't expose an fp8 toggle directly - it lives on the loader instead. If you enabled fp8_vae-style settings anywhere upstream, don't: the author's own notes are explicit that fp8 on the VAE side causes artifacts, unlike fp8 on the unet, which is a genuinely good trade. If your decoded output looks noisy or blocky in a way the sampled latent shouldn't produce, check that fp8 hasn't been applied to VAE weights somewhere in your chain, and lean on use_tiled_vae for memory savings instead.
Beyond that, the usual VAE-side memory scaling applies: large outputs need tiling, and decoder_tile_size is your first knob to shrink if you're hitting VRAM limits. If you're getting visible tile seams in the final image rather than an out-of-memory error, that's usually a sign the tile size is too small relative to detail in the image - nudge it up rather than down and see if the seams disappear.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| SUPIR_VAE | SUPIRVAE | — | |
| latents | LATENT | — | |
| use_tiled_vae | BOOLEAN | true | — |
| decoder_tile_size | INT | 51264–8192 | — |
| decoder_dtypeopt | COMBO | auto | 3 options: bf16, fp32, auto |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |