SUPIR Upscale (Legacy)
The one-node restore-and-upscale button
- image
- upscaled_image
This is the "just fix my photo" node. Plug in an image, pick your two checkpoints, hit run, get back something bigger and cleaner. Everything else in the pack - the loaders, the conditioner, the sampler, the VAE nodes - is what kijai split this single node into once the workflow matured. If you've ever seen a SUPIR workflow screenshot online with one giant box in the middle, this is almost always that box.
One thing to know going in, because it changes how much time you should spend here: the author has marked the whole pack final. SUPIR landed natively in ComfyUI core, and beyond breaking-bug fixes this repo is done getting updates. That doesn't mean it stops working - it means if you're starting a workflow from scratch today, it's worth a quick check of whether core's built-in SUPIR support covers what you need before reaching for this wrapper. This node is very much still usable; it's just not where new development is happening.
What it actually does
Under the hood SUPIR is an SDXL img2img pipeline with a custom ControlNet-style conditioner bolted on. The distinctive part is what happens before sampling: a "first stage" pass through SUPIR's own denoise-encoder VAE, which cleans up compression artifacts and blur - and yes, it often blurs the image in the process. That's expected, not a bug; it's restoration, not sharpening. This node runs that whole chain - encode, denoise, condition, sample, decode, color-fix - in one call.
That convenience has a real cost: because this node loads your SDXL checkpoint internally by filename rather than accepting an already-built model, you can't slot a LoRA loader in front of it. That's the entire reason the split loader nodes exist elsewhere in this pack.
Inputs and outputs that matter
The two you can't skip: supir_model and sdxl_model, both checkpoint pickers from your models/checkpoints folder - you need both a SUPIR checkpoint (SUPIR-v0Q for general use, SUPIR-v0F if your source has only light degradation) and a normal SDXL checkpoint. Beyond that:
image,seed,scale_by- the resize factor applied before generation; leave it at 1.0 and pre-size with another node if you want an exact pixel target.steps,cfg_scale,restoration_scale,control_scale- the core sampler knobs; the defaults are sane starting points.a_prompt/n_prompt- quality descriptors appended to positive/negative conditioning (default "high quality, detailed" / "bad quality, blurry, messy").color_fix_type- Wavelet (default), AdaIn, or None. Wavelet corrects the color drift SDXL tends to introduce; leave it on unless you have a reason not to.use_tiled_vaeplusencoder_tile_size_pixels/decoder_tile_size_latent- memory controls for big images.- Optional extras:
captions,diffusion_dtype,encoder_dtype,batch_size,use_tiled_samplingwith its tile size/stride,fp8_unet,fp8_vae, andsampler(RestoreDPMPP2MSampler or RestoreEDMSampler).
Output is a single upscaled_image.
How to install it
Easiest path: ComfyUI Manager, search "SUPIR", install, restart. Manual route:
cd ComfyUI/custom_nodes
git clone https://github.com/kijai/ComfyUI-SUPIR
pip install -r ComfyUI-SUPIR/requirements.txt
Portable build: run the pip install with python_embeded\python.exe -m pip install -r ... from the portable root. You'll want a reasonably current PyTorch; xformers is optional and auto-detected if present.
Then grab the models. The SUPIR checkpoint (pruned safetensors versions live on Kijai's HuggingFace, Kijai/SUPIR_pruned) and a standard SDXL checkpoint both go in ComfyUI/models/checkpoints.
Common issues
VRAM tracks your input resolution, not the output size - scale_by just scales after that memory decision is already made. The author reports 512→1024 fitting on a 10GB 3080, and up to 3072×3072 on 24GB. System RAM matters too; expect trouble under 32GB, 64GB was the tested baseline. fp8_unet is a legitimate VRAM saver with only a small quality hit, but don't do the same for the VAE - fp8 causes visible artifacts there, use use_tiled_vae instead.
The bigger trap is faces: SUPIR doesn't preserve identity, it invents a plausible one from what it read off the image. Great for a stranger in a degraded photo, bad if the subject is someone you actually know - keep faces out of the pass or handle them separately. And the model weights carry a non-commercial license requiring written permission for commercial use, which matters if this output is going anywhere near a paying product.
Inputs (31)
| Name | Type | Default | Description |
|---|---|---|---|
| supir_model | COMBO | 0 options: | |
| sdxl_model | COMBO | 0 options: | |
| image | IMAGE | — | |
| seed | INT | 1230–18446744073709550000 | — |
| resize_method | COMBO | lanczos | 5 options: nearest-exact, bilinear, area, bicubic, lanczos |
| scale_by | FLOAT | 1.000.01–20 | — |
| steps | INT | 453–4096 | — |
| restoration_scale | FLOAT | -1-1–6 | — |
| cfg_scale | FLOAT | 4.000–100 | — |
| a_prompt | STRING | high quality, detailed | — |
| n_prompt | STRING | bad quality, blurry, messy | — |
| s_churn | INT | 50–40 | — |
| s_noise | FLOAT | 1.0031–1.1 | — |
| control_scale | FLOAT | 1.000–10 | — |
| cfg_scale_start | FLOAT | 4.000–100 | — |
| control_scale_start | FLOAT | 0.000–1 | — |
| color_fix_type | COMBO | Wavelet | 3 options: None, AdaIn, Wavelet |
| keep_model_loaded | BOOLEAN | true | — |
| use_tiled_vae | BOOLEAN | true | — |
| encoder_tile_size_pixels | INT | 51264–8192 | — |
| decoder_tile_size_latent | INT | 6432–8192 | — |
| captionsopt | STRING | — | |
| diffusion_dtypeopt | COMBO | auto | 4 options: fp16, bf16, fp32, auto |
| encoder_dtypeopt | COMBO | auto | 3 options: bf16, fp32, auto |
| batch_sizeopt | INT | 11–128 | — |
| use_tiled_samplingopt | BOOLEAN | false | — |
| sampler_tile_sizeopt | INT | 102464–4096 | — |
| sampler_tile_strideopt | INT | 51232–2048 | — |
| fp8_unetopt | BOOLEAN | false | — |
| fp8_vaeopt | BOOLEAN | false | — |
| sampleropt | COMBO | RestoreEDMSampler | 2 options: RestoreDPMPP2MSampler, RestoreEDMSampler |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| upscaled_image | IMAGE | — |