Tiled Upscaler Script
Tiled Upscaler Script
- script
- SCRIPT
Upscaling a big image on a modest GPU means tiling - splitting it into overlapping chunks, running diffusion on each, and blending them back. Tiled Upscaler Script packs that whole dance into one node that plugs into an Efficient KSampler. Per the pack's own README, it "attempts to encompass BlenderNeko's ComfyUI_TiledKSampler workflow into 1 node," which is a fair description: it's the Efficiency Nodes take on tiled diffusion upscaling.
How it works
Tiled upscaling belongs to the "more pixels, arbitrary size, limited VRAM" branch of the upscaling family - the same territory as Ultimate SD Upscale and Tiled Diffusion. The image gets divided into tiles of tile_size, each tile is re-diffused at low denoise to add detail, then they're stitched together. Because only one tile is on the GPU at a time, you can push to 4K on 6-8GB of VRAM.
As a Script node, it doesn't run by itself - its SCRIPT output connects to the script input of an Efficient KSampler, and the sampler does the work with these settings applied. Script nodes in this pack can be chained, so you can stack this with the Noise Control script on the same sampler.
The settings that matter
upscale_by(default 1.25) - the multiplier. 1.5–2x is the usual sweet spot; going bigger in one pass invites seams.denoise(default 0.4) - the single most important dial. Around 0.3–0.5 adds coherent detail without repainting; too high and each tile invents its own content and they stop agreeing at the seams.tile_size(default 512) andtiling_strategy(random,random strict,padded,simple,none) - bigger tiles mean fewer seams but more VRAM; the randomized strategies help hide the grid.use_controlnet- flip this on to feed each tile a Tile ControlNet condition, which is what keeps tiles faithful to the source. This is the difference-maker for photoreal work, and the KB backs it up: tile ControlNet plus tiled diffusion is one of the most reliable realistic upscalers going. It needs a tile ControlNet model available (thetile_controlnetdropdown is empty until you have one installed).
There's also tiling_steps, seed, and strength (the ControlNet strength when use_controlnet is on).
Installing it
ComfyUI Manager → search Efficiency Nodes for ComfyUI, install, restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/jags111/efficiency-nodes-comfyui
Restart ComfyUI. For the ControlNet-guided path you'll need a tile ControlNet model in models/controlnet, plus comfyui_controlnet_aux if you want the preprocessing side.
Common issues
The README's own advice, and it's real: set your KSampler's preview_method to vae_decoded_only when running this script. Live-previewing every tile is slow and noisy, and this keeps the run sane.
tile_controlnet shows nothing to select? That's expected until you've actually got a tile ControlNet model installed - the dropdown populates from models/controlnet. Leave use_controlnet off if you don't have one.
Seam artifacts usually trace back to denoise being too high or tiles too small - drop the denoise toward 0.3 and bump tile_size before blaming the node.
And the pack-wide one: if Efficiency Nodes hits IMPORT FAILED at startup (a pip freeze non-zero exit is the recurring cause), the whole pack drops and this script goes with it. Update ComfyUI, update the node, verify the environment.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| upscale_by | FLOAT | 1.250.01–8 | — |
| tile_size | INT | 512256–16384 | — |
| tiling_strategy | COMBO | 5 options: random, random strict, padded, simple, none | |
| tiling_steps | INT | 301–10000 | — |
| seed | INT | 00–18446744073709550000 | — |
| denoise | FLOAT | 0.400–1 | — |
| use_controlnet | BOOLEAN | false | — |
| tile_controlnet | COMBO | 0 options: | |
| strength | FLOAT | 1.000–10 | — |
| scriptopt | SCRIPT | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| SCRIPT | SCRIPT | — |