Deadline Ultimate SD Upscale Distributed (No Upscale)
The farm-sized version of the classic tiled upscaler
- upscaled_image
- model
- positive
- negative
- vae
- IMAGE
If you've ever upscaled a big image on a small card, you know Ultimate SD Upscale: it cuts the image into overlapping tiles, runs a fresh sampling pass over each tile, and stitches them back together so you get detail without blowing your VRAM budget. This is the same idea with the farm bolted on. The tiles don't all have to sample on one GPU - they get spread across every worker the master can see, and the results come back stitched.
What the "(No Upscale)" in the name means. This node doesn't upscale. It expects the image already enlarged - that's why the first input is upscaled_image - and runs the tiled refiner pass: the detail-restoring second half of the classic Ultimate SD Upscale recipe. You upscale the pixels with a real upscaler first (ESRGAN-style, or whatever your pipeline likes), then run this node's tiled sampling to hallucinate the detail back in. That's the same mental model the KB's upscaling doc pushes: decide whether your job is "more pixels" or "more detail" before you pick a tool.
The inputs that matter. It's a full sampler under a hood, so the sampler family shows up in force: model, positive, negative, vae, seed, steps (default 20), cfg (default 8), sampler_name, scheduler, denoise (default 0.5). Then the tiling controls: tile_width / tile_height (512 default), padding (32, the overlap that stops seams), and mask_blur (8, the feather on the tile edges). Two toggles are worth knowing: tiled_decode runs the VAE decode in tiles to keep memory low on big images, and force_uniform_tiles (default true) keeps tile sizes even. static_distribution is explicitly labeled legacy - leave it off and the node picks between static and dynamic distribution automatically. One IMAGE comes out.
How the distribution works. The source spells out three modes. No workers available? Everything runs locally, single GPU, exactly like the classic node. Small batches? Static mode, tiles flattened and handed out across workers. Large batches (the dynamic threshold defaults to 8 images)? Whole images get assigned to workers dynamically instead, which is far less chatty than shuttling thousands of tiles. Workers heartbeat back, and if one times out on its tiles, the master requeues or locally completes the missing work - that fallback is the reason this node feels robust in a way the raw collector doesn't.
Settings and gotchas. The heavy tunables live in gpu_config.json (worker_result_wait_timeout, worker_heartbeat_grace_timeout, max_batch) plus a few env vars (COMFYUI_MAX_BATCH default 20, COMFYUI_MAX_PAYLOAD_SIZE default 50MB). Realistically the default tile settings are fine on SDXL-class models; start at 512 tiles, 32 padding, denoise 0.5, and only touch them when you see seams (raise padding) or tile-boundary artifacts (raise mask_blur). Every worker needs the same checkpoint and the same ComfyUI version - a missing model file on one machine turns a fast farm job into a timeout-fest while the master waits on a worker that's silently failing.
Inputs (18)
| Name | Type | Default | Description |
|---|---|---|---|
| upscaled_image | IMAGE | — | |
| model | MODEL | — | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| vae | VAE | — | |
| seed | INT | 00–18446744073709550000 | — |
| steps | INT | 201–10000 | — |
| cfg | FLOAT | 8.000–100 | — |
| sampler_name | COMBO | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 | |
| scheduler | COMBO | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 | |
| denoise | FLOAT | 0.500–1 | — |
| tile_width | INT | 51264–2048 | — |
| tile_height | INT | 51264–2048 | — |
| padding | INT | 320–256 | — |
| mask_blur | INT | 80–256 | — |
| force_uniform_tiles | BOOLEAN | true | — |
| tiled_decode | BOOLEAN | false | — |
| static_distribution | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |