Nodes/ComfyUI-SUPIR/SUPIR Decode
ComfyUI Node Runs on cloud

SUPIR Decode

Turning the sampled latent back into an actual image

By kijai·Created 2 years ago·Updated 3 months ago· 2,303
SUPIR Decode
  • SUPIR_VAE
  • latents
  • image
use_tiled_vaetrue
decoder_tile_size512
decoder_dtypeauto

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.

CategorySUPIR

Inputs (5)

NameTypeDefaultDescription
SUPIR_VAESUPIRVAE
latentsLATENT
use_tiled_vaeBOOLEANtrue
decoder_tile_sizeINT51264–8192
decoder_dtypeoptCOMBOauto3 options: bf16, fp32, auto

Outputs (1)

NameTypeDescription
imageIMAGE