Ultimate SD Upscale (Custom Sample)
Tiled upscaling with your own sampler wired in
- image
- model
- positive
- negative
- vae
- upscale_model
- custom_sampler
- custom_sigmas
- IMAGE
Same tiled upscaler as the flagship node, with one extra door bolted on. The plain UltimateSDUpscale locks you into ComfyUI's stock sampler_name and scheduler dropdowns for the img2img pass. UltimateSDUpscaleCustomSample adds two optional inputs, custom_sampler and custom_sigmas, so you can drive the tile refinement with a sampler and sigma schedule you built yourself in the custom-sampling graph.
If you don't use custom sampling, you don't need this node; use the regular one. But if you've gone down the rabbit hole of packs like RES4LYF (ClownsharkBatwing's high-order solvers and custom sigma schedules, which is where a lot of sampler tuning actually happens in 2026), this is how you get those solvers into your upscale instead of settling for euler because that's what the dropdown offered.
How it works
Mechanically it's identical to UltimateSDUpscale: enlarge the image, split it into tiles at native resolution, run img2img on each tile at low denoise, blend with a seam fix. The difference is how the per-tile sampling is done. Leave the custom inputs empty and it falls back to the built-in steps/cfg/sampler_name/scheduler/denoise fields, behaving exactly like the standard node. Plug a SAMPLER into custom_sampler and a SIGMAS into custom_sigmas and it uses those instead, running each tile through your chosen solver and schedule. That's the whole feature: the tiling and seam logic stay the same, you just get to swap the sampling brain.
The inputs and outputs that matter
The three inputs that make this node different are all optional:
custom_sampler(SAMPLER): wire in a sampler node like KSamplerSelect, or one from RES4LYF. This replaces thesampler_namedropdown for the tile pass.custom_sigmas(SIGMAS): a sigma schedule, typically from BasicScheduler or a split-sigmas node. This replacesscheduler, and it's also what sets your effective denoise when you go custom, so build the schedule accordingly.upscale_model(UPSCALE_MODEL): optional here, unlike on the base node. Wire in an ESRGAN model for the initial enlarge, or leave it off if yourupscale_bystep doesn't need one.
Everything else matches the flagship: image, model, positive, negative, vae, upscale_by (default 2), seed, the fallback sampler block, the tiling controls, and the seam-fix group. When you're not using the custom inputs, denoise (default 0.2) is still your most important dial, keep it low. The single output is one IMAGE.
Installing it
It's in the standard Ultimate SD Upscale pack. ComfyUI Manager: Custom Nodes Manager, search "UltimateSDUpscale", install, restart. Or the terminal route:
cd ComfyUI/custom_nodes
git clone https://github.com/ssitu/ComfyUI_UltimateSDUpscale
then restart. The pack has no heavy dependencies and ships no models, so if you want custom samplers you'll want a sampling pack (like RES4LYF) installed separately. Everything lands under image/upscaling.
Common issues and troubleshooting
The number one confusion here is denoise when you go custom. The denoise field on the node applies to the built-in sampler path. Once you feed custom_sigmas, your denoise is baked into that sigma schedule, not the slider, so if your tiles are barely changing (or changing wildly) check the schedule you're feeding before touching the denoise field, which is being ignored on the custom path. A common mistake is wiring a full-denoise sigma schedule into an upscale and getting the classic overcooked result: hallucinated faces in busy texture and patchwork seams as each tile drifts off on its own. Build sigmas for a partial denoise, the equivalent of the 0.15 to 0.3 range, and the tiles stay coherent.
Otherwise all the standard tiled-upscale advice applies: seams get cleaned up by mask_blur/tile_padding and a Half Tile seam_fix_mode, and for tough sources a ControlNet Tile keeps every tile locked to the original. If none of the custom-sampling machinery means anything to you yet, that's a sign to start with the plain UltimateSDUpscale node and come back here once you actually have a sampler you want to swap in.
Inputs (28)
| Name | Type | Default | Description |
|---|---|---|---|
| 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. | |
| upscale_by | FLOAT | 2.000.05–4 | The factor to upscale the image by. |
| 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. |
| upscale_modelopt | UPSCALE_MODEL | The model to use for upscaling the image. If not provided, a simple Lanczos scaling will be used instead. | |
| custom_sampleropt | SAMPLER | A custom sampler to use instead of the built-in ComfyUI sampler specified by sampler_name. Only used if both custom_sampler and custom_sigmas are provided. | |
| custom_sigmasopt | SIGMAS | A custom noise schedule to use during sampling. Only used if both custom_sampler and custom_sigmas are provided. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | The final upscaled image. |