Nodes/ComfyUI-UltimateSDUpscale-GGUF/Ultimate SD Upscale (GGUF)
ComfyUI Node

Ultimate SD Upscale (GGUF)

Tiled hires upscaling for the advanced-sampling chain

By traugdor·Created about a year ago·Updated 12 months ago· 15
Ultimate SD Upscale (GGUF)
  • image
  • noise
  • guider
  • sampler
  • sigmas
  • vae
  • upscale_model
  • upscaled
  • tiles
  • masks
upscale_by2.0
max_tile_size512
mask_blur8
transition_sharpness0.333
tile_padding32
seam_fix_modeNone
seam_fix_width64
seam_fix_mask_blur8
seam_fix_padding16
force_uniform_tilestrue

Ultimate SD Upscale is the old reliable of tiled hires upscaling - slice the image into overlapping tiles, run each one through img2img, blend the seams, and get arbitrary output resolution without blowing your VRAM budget. The version everyone knows (ssitu's ComfyUI port of Coyote-A's A1111 extension) takes classic KSampler-style inputs: model, positive, negative, seed, steps, cfg. This node does the same job with different plumbing - instead of those, it wants NOISE, GUIDER, SAMPLER, and SIGMAS, the building blocks of ComfyUI's advanced/custom sampling group (RandomNoise, KSamplerSelect, BasicScheduler, a guider like BasicGuider or CFGGuider).

Worth knowing before you go looking for a GGUF-specific reason: nothing here actually requires a GGUF model. Those four types are plain ComfyUI core types, agnostic to what precision the checkpoint behind them is. I checked, and the plain Ultimate SD Upscale node already runs fine on GGUF-loaded models too - people just swap in UNETLoaderGGUF and nothing else changes. So this fork's real value isn't GGUF compatibility, it's that it speaks the advanced sampling dialect. Reference workflows for GGUF-loaded flow-matching checkpoints (Flux, Qwen-Image) are usually built on those custom-sampling nodes already, since GGUF is how people fit them onto consumer VRAM in the first place - so this is the tiled-upscale node that plugs straight in without bridging back to the older model/positive/negative/cfg interface. The README is one sentence - "GGUF implementation for the ComfyUI Ultimate SD Upscale node" - so take the framing above as a read of what the schema shows, not a claim the README makes outright.

How it works

Feed it your full image plus an upscale model (an ESRGAN-style .pth - 4x-UltraSharp is the community's general-purpose favorite). It runs the pixel upscale first, chops the result into tiles sized by max_tile_size, VAE-encodes each tile, and drives it through the noise/guider/sampler/sigmas chain you wired in - same as SamplerCustomAdvanced, just looped per tile instead of running once on a single latent. Overlapping tile borders get blended back together, with an optional second pass over the seams if you turn on seam fixing.

The inputs and outputs that matter

Most of what's here you'll leave at defaults. The ones worth understanding:

  • upscale_model and upscale_by (default 2x) - the pixel-upscale stage that runs before tiling starts.
  • max_tile_size (default 512) - the VRAM/quality knob. Bigger tiles mean fewer seams to blend but more memory per pass; smaller tiles are gentler on VRAM but multiply total sampling passes.
  • mask_blur and transition_sharpness - how softly adjacent tiles blend. Too little blur shows a grid; too much smears detail at the borders.
  • tile_padding - extra context each tile samples beyond its own boundary, so the model has something to agree with at the edges.
  • seam_fix_mode, plus seam_fix_width / seam_fix_mask_blur / seam_fix_padding - off by default; turn it on if the first pass leaves visible tile lines and you need a dedicated cleanup pass along just the seams.
  • force_uniform_tiles (default on) - keeps every tile the same size instead of letting edge tiles shrink to fit, one less variable when troubleshooting.

Outputs: upscaled is the image you actually want, wired to a save/preview node. tiles and masks are lists of the individual processed tiles and their blend masks - useful for spotting which tile went wrong, but most runs you'll just ignore them.

How to install it

Through ComfyUI Manager: search "ComfyUI-UltimateSDUpscale-GGUF", install, restart. Manually:

cd ComfyUI/custom_nodes
git clone https://github.com/traugdor/ComfyUI-UltimateSDUpscale-GGUF

then restart. You'll also need city96's ComfyUI-GGUF if you're loading a quantized checkpoint, an upscale model dropped in models/upscale_models, and the core RandomNoise / KSamplerSelect / BasicScheduler / guider nodes wired ahead of it - all of which ship with ComfyUI, nothing extra to fetch there.

Common issues & troubleshooting

You copied a classic Ultimate SD Upscale workflow and the widgets don't match. This node has no model/positive/negative/cfg/steps inputs - it needs the full advanced-sampling stack wired in instead, not a swap-in replacement.

Visible seams between tiles. Usually mask_blur and tile_padding set too low for the detail your upscale model is adding. Raise both first; if seams persist, that's what seam_fix_mode and its width/blur/padding trio are for.

It's slow, especially on a heavily quantized model. Every tile is its own full sampling pass, and GGUF already pays a per-layer dequantization tax on top - multiply that by however many tiles you're running. Bump max_tile_size up if VRAM allows; fewer, bigger tiles means fewer passes.

Colors shift tile to tile. Double-check the vae matches the checkpoint - a mismatch produces slightly different color casts per encode/decode, and across dozens of tiles that adds up to a patchy result.

One honest note: this is a small, low-traffic pack - outside comfy.icu's own listing it barely shows up anywhere, so there's no big community thread to lean on if you hit a wall. General Ultimate SD Upscale conventions (tile padding, seam fix, mask blur) still apply; only the sampling plumbing changed.

Categoryimage/upscaling

Inputs (17)

NameTypeDefaultDescription
imageIMAGE
noiseNOISE
guiderGUIDER
samplerSAMPLER
sigmasSIGMAS
vaeVAE
upscale_modelUPSCALE_MODEL
upscale_byFLOAT2.01–8
max_tile_sizeINT512256–2048
mask_blurINT80–64
transition_sharpnessFLOAT0.3330.125–1
tile_paddingINT320–128
seam_fix_modeCOMBONone4 options: None, Band Pass, Half Tile, Half Tile + Intersections
seam_fix_widthINT640–8192
seam_fix_mask_blurINT80–64
seam_fix_paddingINT160–128
force_uniform_tilesBOOLEANtrue

Outputs (3)

NameTypeDescription
upscaledIMAGE
tilesIMAGE
masksIMAGE