Nodes/ComfyUI/SUPIRApply
ComfyUI Node Runs on cloud

SUPIRApply

Restoration-grade upscaling without a single extension pack

By Comfy-Org·Created 4 years ago·Updated about 19 hours ago· 130,663
SUPIRApply
  • model
  • model_patch
  • vae
  • image
  • MODEL
strength_start1.00
strength_end1.00
restore_cfg4.0
restore_cfg_s_tmin0.05

SUPIR has lived a strange life in ComfyUI: for two years it meant hunting down a third-party node pack, fighting installs, and loading a model with a captioner bolted on. Then in April 2026, core just... absorbed it. SUPIRApply is the official version, implemented the way modern ComfyUI does control mechanisms - as a model patch, not a standalone pipeline. No extension pack, no special install, no caption model to babysit. Just a node that takes your base checkpoint and bolts SUPIR's restoration brain onto it.

Because that's the key mental shift: this is not a one-click upscaler. It's a ControlNet-style patch. You load a regular diffusion model (SUPIR's control modules are built for the SDXL UNet, so an SDXL checkpoint is the normal base), you load the SUPIR weights as a model patch, and SUPIRApply fuses them so your image-to-image pass is a SUPIR restoration.

How it actually works

The node encodes your input image into a latent (using SUPIR's own denoise_encoder weights when the checkpoint carries them, the VAE otherwise), runs that "hint" through SUPIR's GLVControl encoder to get control features, and injects them into the UNet at every block through ZeroSFT/ZeroCrossAttn adapters - exactly how a ControlNet drives a diffusion pass. The input image is the condition; the sampler is the restoration engine. strength_start/strength_end (both default 1.0) control how hard the patch pushes at the start (high sigma) versus the end (low sigma) of sampling, interpolating between them. restore_cfg (default 4.0) pulls the denoised output toward the input latent - higher is stricter fidelity to the source, and 0 disables it - with restore_cfg_s_tmin (default 0.05) switching it off below a sigma threshold so it doesn't fight the final detail pass.

Getting the files

The SUPIR weights load through the built-in Load Model Patch node, which reads from ComfyUI/models/model_patches/. Drop the checkpoint there and it'll be detected automatically. That's the whole setup.

The part nobody warns you about

The KB says it plainly and it's worth repeating: SUPIR is a restoration upscaler, not a pixel one. It fixes compression, noise, and blur while adding detail - and on a clean image that behaviour is a liability, adding texture nobody asked for. And it does not preserve identity: it invents a plausible face, which is why SUPIR is famous for changing facial features. Use it on genuinely damaged sources you want rebuilt, not on sharp photos you want bigger, and don't point it at someone you need to recognise. It's also still VRAM-hungry and its weights are non-commercial - worth checking before you build a product on it.

Categorymodel/patch/supir

Inputs (8)

NameTypeDefaultDescription
modelMODEL
model_patchMODEL_PATCH
vaeVAE
imageIMAGE
strength_startFLOAT1.000–10Control strength at the start of sampling (high sigma).
strength_endFLOAT1.000–10Control strength at the end of sampling (low sigma). Linearly interpolated from start.
restore_cfgFLOAT4.00–20Pulls denoised output toward the input latent. Higher = stronger fidelity to input. 0 to disable.
restore_cfg_s_tminFLOAT0.050–1Sigma threshold below which restore_cfg is disabled.

Outputs (1)

NameTypeDescription
MODELMODEL