Ultimate SD Upscale (No Upscale, Guider)
The tile-refine pass for images you already blew up
- upscaled_image
- guider
- sampler
- sigmas
- vae
- mask
- IMAGE
The name is a lie, in the good way. "No Upscale" doesn't mean this node does nothing - it means you already did the hard part. You pixel-upscaled a 1024 image to 4K with ESRGAN, or generated big, or pasted an inpainted patch back into a huge canvas, and now you want a diffusion pass to add detail and clean up the mush without re-rendering the whole thing. That's exactly this node: tiled image-to-image refinement on an image you bring in, with no built-in upscaler in the way.
It's the sibling of Ultimate SD Upscale (Guider) in the same pack - same machinery, but the upscale_model and upscale_by inputs are stripped out and the scale is hardcoded to 1.0. Feed it an image, it splits it into tiles, re-diffuses each tile with your chosen guider, and stitches them back. The output is the same resolution as the input; what changed is the detail.
Why "Guider" and why you'd care
Normally Ultimate SD Upscale takes a model, positive, negative, cfg, sampler, scheduler, steps, and denoise as separate inputs. This fork collapses all of that into a GUIDER socket, plus separate SAMPLER and SIGMAS sockets from KSamplerSelect and BasicScheduler. One consequence of that design: the node can't do per-tile conditioning crops, so spatial conditioning like ControlNet or GLIGEN is off the table - the author says as much, and for that you want the original non-guider nodes. Text-based guiders are where this shines.
The killer case is PerpNegGuider, which is why Blakeem forked this in the first place: it restores a working negative prompt at CFG 1, where a plain negative prompt is inert (ComfyUI skips the unconditioned pass entirely at that setting) and where real CFG burns guidance-distilled models like Flux. Cleaner upscales without doubling your render time. On SDXL with real CFG, CFGGuider works just as well.
The inputs that actually matter
Don't touch most of the seam fix stuff - the fork's whole point is that you shouldn't need it. The ones a beginner actually sets:
upscaled_image- your already-large image. There's no upscaler attached, so this is the source of truth.guider,sampler,sigmas- build these withPerpNegGuider/CFGGuider,KSamplerSelect, andBasicScheduler. Your denoise lives in the scheduler, not on this node; a lot of people go hunting for a denoise input and don't find one. That's not a bug.tile_overlap_mode- set to Context Only Overlap. Tiles extend into already-generated neighbors bytile_paddingand use them as read-only context instead of re-denoising them, so seams don't appear in the first place. The default "Reprocess Overlap" is the old seam-prone behavior.anchor_context- optional but recommended. It holds the context pixels pinned to your real image during sampling instead of a re-diffused version that drifts, so sections stay consistent and seams blend into the actual image.mask- optional. White gets re-diffused, black is untouched, and tiles that don't touch the mask are skipped entirely, so refining one small region is nearly free. This is how you chain a background pass and a character pass with different models in one workflow.batch_size- the number of tiles sampled per call, not images. Raise it to speed things up, but note it's incompatible with Context Only Overlap and with a connected mask; the node will error if you combine them.
Output is a single IMAGE that you can feed into a save node or the next step in a chain.
Install and the elephant in the room
Install is the usual custom-node song and dance, and there are no extra Python dependencies:
cd ComfyUI/custom_nodes
git clone https://github.com/Blakeem/ComfyUI_UltimateSDUpscaleGuider
Then restart ComfyUI. On first launch it auto-downloads the original A1111 Ultimate SD Upscale script into repositories/, so don't be alarmed by network activity. No model files of its own - you supply the checkpoint/VAE through your guider.
Here's the part worth knowing before you invest: this pack is deprecated. The README and even the console log point you to the author's from-scratch successor, ComfyUI-ContextAnchoredTileRefine, which has better settings baked in and no legacy machinery. The author retired this fork after the upstream ssitu repo added a Guider node with the same class name - which is also why you shouldn't run both forks side by side; they'll collide on the same node definition. If you're locked into an old workflow, this still works fine. If you're starting fresh, install the successor instead.
Inputs (21)
| Name | Type | Default | Description |
|---|---|---|---|
| upscaled_image | IMAGE | The image to upscale. | |
| guider | GUIDER | A guider that encapsulates the model, conditioning, and CFG. Use CFGGuider, PerpNegGuider, or other guider nodes. | |
| sampler | SAMPLER | The sampler to use. Use KSamplerSelect node to create this. | |
| sigmas | SIGMAS | The noise schedule. Use BasicScheduler or other scheduler nodes to create this. The denoise is configured in the scheduler. | |
| vae | VAE | The VAE model to use for tiles. | |
| seed | INT | 00–18446744073709550000 | The seed to use for noise generation. |
| 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. |
| tile_overlap_mode | COMBO | Reprocess Overlap | How to handle tile overlap regions. 'Ignore Overlap' uses minimal tile sizes. 'Reprocess Overlap' uses uniform tiles with overlap regions potentially regenerated. 'Context Only Overlap' uses uniform tiles where overlap regions from previous tiles become read-only context. |
| 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. |
| maskopt | MASK | Optional region mask. Only masked (white) areas are re-diffused; tiles that do not touch the mask are skipped entirely, which greatly speeds up small-region upscales. Sampling still sees the full tile for context, and blending uses the same mask_blur feathering as tile edges (the edit extends about mask_blur pixels past the mask). The mask may be any resolution and is resized to the upscaled canvas. Grayscale values give partial blending. With batched images, a single mask applies to every image, and a batch of masks maps one mask to each image. Not compatible with batch_size > 1 (tile batching). | |
| anchor_contextopt | BOOLEAN | false | Hold the areas a tile will not composite back to the original image at every sampling step, so the model sees the true surroundings instead of a re-diffused version that can drift. Keeps detail consistent between sections and blends seams into the real image. Takes effect when a mask is connected or tile_overlap_mode is 'Context Only Overlap'; otherwise it has no effect. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | The final refined image. |