Nodes/UltimateSDUpscale/Ultimate SD Upscale (Custom Sample)
ComfyUI Node Runs on cloud

Ultimate SD Upscale (Custom Sample)

Tiled upscaling with your own sampler wired in

By ssitu·Created 3 years ago·Updated about a month ago· 1,534
Ultimate SD Upscale (Custom Sample)
  • image
  • model
  • positive
  • negative
  • vae
  • upscale_model
  • custom_sampler
  • custom_sigmas
  • IMAGE
upscale_by2.00
seed0
steps20
cfg8.00
sampler_name
scheduler
denoise0.20
mode_type
tile_width512
tile_height512
mask_blur8
tile_padding32
seam_fix_mode
seam_fix_denoise1.00
seam_fix_width64
seam_fix_mask_blur8
seam_fix_padding16
force_uniform_tilestrue
tiled_decodefalse
batch_size1

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 the sampler_name dropdown for the tile pass.
  • custom_sigmas (SIGMAS): a sigma schedule, typically from BasicScheduler or a split-sigmas node. This replaces scheduler, 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 your upscale_by step 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.

Categoryimage/upscaling

Inputs (28)

NameTypeDefaultDescription
imageIMAGEThe image to upscale.
modelMODELThe model to use for image-to-image.
positiveCONDITIONINGThe positive conditioning for each tile.
negativeCONDITIONINGThe negative conditioning for each tile.
vaeVAEThe VAE model to use for tiles.
upscale_byFLOAT2.000.05–4The factor to upscale the image by.
seedINT00–18446744073709550000The seed to use for image-to-image.
stepsINT201–10000The number of steps to use for each tile.
cfgFLOAT8.000–100The CFG scale to use for each tile.
sampler_nameCOMBOThe sampler to use for each tile.
schedulerCOMBOThe scheduler to use for each tile.
denoiseFLOAT0.200–1The denoising strength to use for each tile.
mode_typeCOMBOThe tiling order to use for the redraw step.
tile_widthINT51264–8192The width of each tile.
tile_heightINT51264–8192The height of each tile.
mask_blurINT80–64The blur radius for the mask.
tile_paddingINT320–8192The padding to apply between tiles.
seam_fix_modeCOMBOThe seam fix mode to use.
seam_fix_denoiseFLOAT1.000–1The denoising strength to use for the seam fix.
seam_fix_widthINT640–8192The width of the bands used for the Band Pass seam fix mode.
seam_fix_mask_blurINT80–64The blur radius for the seam fix mask.
seam_fix_paddingINT160–8192The padding to apply for the seam fix tiles.
force_uniform_tilesBOOLEANtrueForce 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_decodeBOOLEANfalseWhether to use tiled decoding when decoding tiles.
batch_sizeINT11–4096The 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_modeloptUPSCALE_MODELThe model to use for upscaling the image. If not provided, a simple Lanczos scaling will be used instead.
custom_sampleroptSAMPLERA 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_sigmasoptSIGMASA custom noise schedule to use during sampling. Only used if both custom_sampler and custom_sigmas are provided.

Outputs (1)

NameTypeDescription
IMAGEIMAGEThe final upscaled image.