Ultimate SD Upscale (No Upscale)
The tiled detail pass, minus the enlarge step
- upscaled_image
- model
- positive
- negative
- vae
- IMAGE
This is UltimateSDUpscale with the front half chopped off. The regular node does two things: enlarge your image with an ESRGAN model, then repaint it in tiles. UltimateSDUpscaleNoUpscale skips the enlarge and does only the tiling. You hand it an image that's already at the size you want, and it runs the low-denoise, tile-by-tile img2img pass to add real detail. Same seam handling, same coherence, no built-in upscale step.
Why would you want that? Because the ESRGAN enlarge inside the main node is fine but not always what you'd pick. Maybe you enlarged with a latent upscale, or a specific chain of ESRGAN models, or a totally different tool like SeedVR2, and you just want the tiled detail pass on top of that. This node decouples the "make it bigger" decision from the "add detail" decision, which is exactly the multi-stage philosophy the community converged on for maximum quality: get your pixels however you like, then refine.
How it works
It's the second stage of Ultimate SD Upscale, standing alone. The image comes in already big. The node splits it into overlapping tiles (512x512 by default, ideally matching your model's native resolution), runs img2img on each tile at low denoise so the model paints in texture and fine detail it couldn't at full canvas size, then blends the tiles back with a seam fix. Because it never enlarges anything, whatever resolution you feed it is the resolution you get back, detailed.
The inputs and outputs that matter
The one input that separates this node from its sibling is the very first one:
upscaled_image(required, IMAGE): the already-enlarged image you want detailed. Note the name. There is noimageinput and noupscale_byorupscale_modelhere, because this node doesn't resize anything. Whatever comes in at 4K goes out at 4K.denoise(default 0.2): still the dial that matters most. It sets how much each tile is allowed to change. Keep it low (0.15 to 0.3) so tiles stay faithful and coherent.
Everything else is the standard sampler block, model, positive, negative, vae, seed, steps, cfg, sampler_name, scheduler, plus the tiling controls (tile_width, tile_height, mask_blur, tile_padding) and the seam-fix group (seam_fix_mode, seam_fix_denoise, seam_fix_width, seam_fix_mask_blur, seam_fix_padding). The single output is one IMAGE. A typical graph: your generation, then an upscale of your choosing (Upscale Image By, an ESRGAN node, a latent upscale), then this node, then Save.
Installing it
It ships in the same pack as the rest of the Ultimate SD Upscale nodes. In ComfyUI Manager, open the Custom Nodes Manager, search "UltimateSDUpscale", install, and restart. Or from a terminal:
cd ComfyUI/custom_nodes
git clone https://github.com/ssitu/ComfyUI_UltimateSDUpscale
then restart ComfyUI. No heavy dependencies, and the pack ships no models. The nodes appear under image/upscaling.
Common issues and troubleshooting
Since this is the same img2img engine as the main node, it has the same failure modes. Push denoise too high and you get the classic tiled-upscale problems: random faces hallucinated into busy texture, and visible seams and patchwork where tiles disagree with each other. The cure is the same, drop denoise back toward 0.2, and if seams remain, raise mask_blur/tile_padding and pick a Half Tile seam_fix_mode.
The one gotcha unique to this node is remembering what it doesn't do. If you feed it a small image expecting it to come out bigger, you'll get a small image back with a bit more detail, and probably wonder where your upscale went. There isn't one. Put the enlarge step before this node. If you'd rather have the ESRGAN upscale built in and handled for you, reach for the plain UltimateSDUpscale node instead; use this one specifically when you want to own the enlargement yourself.
Inputs (24)
| Name | Type | Default | Description |
|---|---|---|---|
| upscaled_image | IMAGE | The image to upscale. | |
| model | MODEL | The model to use for image-to-image. | |
| positive | CONDITIONING | The positive conditioning for each tile. | |
| negative | CONDITIONING | The negative conditioning for each tile. | |
| vae | VAE | The VAE model to use for tiles. | |
| seed | INT | 00–18446744073709550000 | The seed to use for image-to-image. |
| steps | INT | 201–10000 | The number of steps to use for each tile. |
| cfg | FLOAT | 8.000–100 | The CFG scale to use for each tile. |
| sampler_name | COMBO | The sampler to use for each tile. | |
| scheduler | COMBO | The scheduler to use for each tile. | |
| denoise | FLOAT | 0.200–1 | The denoising strength to use for each tile. |
| mode_type | COMBO | The tiling order to use for the redraw step. | |
| tile_width | INT | 51264–8192 | The width of each tile. |
| tile_height | INT | 51264–8192 | The height of each tile. |
| mask_blur | INT | 80–64 | The blur radius for the mask. |
| tile_padding | INT | 320–8192 | The padding to apply between tiles. |
| seam_fix_mode | COMBO | The seam fix mode to use. | |
| seam_fix_denoise | FLOAT | 1.000–1 | The denoising strength to use for the seam fix. |
| seam_fix_width | INT | 640–8192 | The width of the bands used for the Band Pass seam fix mode. |
| seam_fix_mask_blur | INT | 80–64 | The blur radius for the seam fix mask. |
| seam_fix_padding | INT | 160–8192 | The padding to apply for the seam fix tiles. |
| force_uniform_tiles | BOOLEAN | true | Force all tiles to be the same as the set tile size, even when tiles could be smaller. This can help prevent the model from working with irregular tile sizes. |
| tiled_decode | BOOLEAN | false | Whether to use tiled decoding when decoding tiles. |
| batch_size | INT | 11–4096 | The number of tiles to process in a batch. Higher values can reduce processing time but use more VRAM. Yields different results than individual tiles. Only affects the main redraw step, not the seam fix step. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | The final refined image. |