SUPIR First Stage (Denoiser)
The pre-clean pass that's supposed to blur your image
- SUPIR_VAE
- image
- SUPIR_VAE
- denoised_image
- denoised_latents
The first time you run this node and the output looks softer than what you fed it, you haven't broken anything. That's the point. This is SUPIR's "first stage" - a pass through its own denoise-encoder VAE that strips compression artifacts, noise, and JPEG blockiness before the actual generative restoration happens. Blurring is a documented side effect of doing that job, not a failure.
Worth clearing up a naming confusion straight from the author: this "first stage" is not the same thing as the "first stage" label in SUPIR's original Gradio demo, which refers to LLaVA captioning. In the ComfyUI nodes, this stage is purely the denoise-encoder step, and it's fully optional - skip it entirely, or swap it for any other preprocessing node (a different upscaler, a plain blur, whatever) if you want to handle pre-cleaning your own way.
What it does
It takes your raw image, runs it through SUPIR's VAE encoder with the denoising behavior baked in, and hands you back both a viewable denoised image and the latent representation ready for sampling - in one node, rather than you chaining encode and decode separately. It's a convenience wrapper over the same VAE that SUPIR_encode and SUPIR_decode use individually.
Inputs and outputs that matter
Required: SUPIR_VAE (from either model loader node) and image. use_tiled_vae defaults to on - it processes the image in chunks to keep memory use down, and for anything past a modest resolution you'll want to leave it on. encoder_tile_size and decoder_tile_size (both default 512) control how those chunks are sized; smaller tiles use less VRAM per step but take longer. encoder_dtype should stay on auto unless you're troubleshooting a load error.
Outputs: SUPIR_VAE passes straight through so you can chain it into the decode step later without re-plugging your loader, denoised_image is the visible result if you want to inspect or save it, and denoised_latents is what actually feeds into SUPIR_conditioner and SUPIR_sample.
How to install it
ComfyUI Manager: search "SUPIR", install, restart. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/kijai/ComfyUI-SUPIR
pip install -r ComfyUI-SUPIR/requirements.txt
Portable installs use python_embeded\python.exe -m pip install -r .... Needs a reasonably recent PyTorch; xformers is optional. You'll need a SUPIR checkpoint and an SDXL checkpoint sitting in ComfyUI/models/checkpoints for the loader feeding this node - this node itself doesn't load anything, it just consumes the SUPIR_VAE produced upstream.
Common issues
The most common "is this broken" moment is exactly the blur described above - if your source was already clean, running it through this stage anyway is the mistake, not the node. On an already-sharp image, skip this node and feed the image straight to SUPIR_encode, or bypass first-stage denoising entirely and let the sampler do the work.
Memory-wise, this node inherits the same profile as the rest of the VAE side of the pipeline: it scales with your input resolution, and tiled VAE is there specifically so you don't need a monster card to process a large image. If you're still running into out-of-memory errors with tiling on, drop the tile sizes further before reaching for a smaller input image.
One thing not to bother chasing: the node doesn't expose a "strength" or "amount" control for the denoising - it isn't in the schema, and there's no hidden setting for it. If you need a gentler pass, replace this node with your own lighter preprocessing instead of hunting for a parameter that doesn't exist here.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| SUPIR_VAE | SUPIRVAE | — | |
| image | IMAGE | — | |
| use_tiled_vae | BOOLEAN | true | — |
| encoder_tile_size | INT | 51264–8192 | — |
| decoder_tile_size | INT | 51264–8192 | — |
| encoder_dtype | COMBO | auto | 3 options: bf16, fp32, auto |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| SUPIR_VAE | SUPIRVAE | — |
| denoised_image | IMAGE | — |
| denoised_latents | LATENT | — |