Tiled Upscale π
Redraw at the megapixels you asked for, tile by tile
- image
- upscale_model
- tiles
- stitcher
- before
- width
- height
- report
Tiled upscaling has been the standard answer to "my model can't render that big" since Ultimate SD Upscale: cut the picture into overlapping tiles, let the model redraw each one, blend the joins. Tiled Upscale is the first half of that pipeline, and what makes it worth a look is how much arithmetic the author did before touching a tensor. It decides your redraw size for you, and - this is the part I'd buy it for - it tells you in plain words what it decided.
How it works
You set one thing: megapixels, the size of the finished picture. 0 keeps the source size, which is the setting for a light cleanup pass over something already big enough.
Everything after that is planning, and the planning is where the opinions live. The finished size isn't simply redrawn at full size. The node computes a redraw size that is your target, but capped at max_growth (default 8) times the source's own megapixels, never smaller than one tile. So a 0.4 MP phone snapshot asked for 16 MP isn't hallucinated into existence - it's redrawn up to about 3.2 MP and enlarged the plain Lanczos way from there. The code is blunt about why: a picture of a megapixel or more barely changes unless it grows roughly 1.6Γ per side. If the growth cap still gets you to 90% of the size you asked for, it redraws at your size rather than resample away the last 5%.
The redraw is then cut into equal k Γ k tiles, each at most tile_megapixels (default 2, with a little slack for grid snapping), and shaped like the picture itself. Anything up to about tile_megapixels stays as one tile. Cap is 144 tiles, past which it stops and tells you to ask for fewer megapixels or a bigger tile rather than quietly melting your VRAM.
The optional inputs:
tile_megapixels- the most your model redraws at once. The tooltip gives you the numbers to start from: 2 for Qwen Image 2.1 and Krea 2, 1 for SDXL.overlap- pixels neighbouring tiles share (default 128). That strip is what the stitch blends across.multiple- every tile edge snaps to a multiple of this. Keep it at 32, which the tooltip says works with every model tried and which Qwen Image 2.1 needs.max_growth- raise it if you deliberately want a tiny source redrawn at a big size.upscale_model- optional. Plug a 4x ESRGAN-family model in and the picture is enlarged with it before being cut into tiles; unplugged, it's Lanczos. It calls ComfyUI's own Upscale Image (using Model) under the hood.
Outputs: tiles is a list, so whatever you wire next - your sampler chain - runs once per tile. stitcher is the object Tiled Upscale Stitch needs, and it's not optional; without it the second node can't place anything. before is your picture enlarged the plain way to the finished size, which is the honest A/B against what the redraw actually did. width and height are the real numbers. And report tells you whether you got a genuine redraw or a resample after the fact - check it first when results look soft, because it will say what it did.
Install
The pack comes from ComfyUI Manager (search AusBoss) or:
cd ComfyUI/custom_nodes
git clone https://github.com/ausboss/ComfyUI-AusBoss.git
Restart afterwards; comfy node install ausboss-nodes does the same via comfy-cli. No pip dependencies beyond what ComfyUI already ships. The pack wants ComfyUI 0.27.1 or newer, and the optional upscale_model path needs a core recent enough to have Upscale Image (using Model) - an old core gives you a specific message telling you to update or unplug the model.
Where people get burned
Low denoise is not optional. On tiled diffusion the tile keeps its own content, so 0.3β0.4 denoise is the range that preserves the picture; above about 0.5 the composition starts changing per tile and your joins look like different photographs. And if you're not conditioning the tiles on the source (ControlNet Tile's whole job), tiles drift apart and you get exactly the patchwork artifact the upscaling literature warns about. The before output exists so you can see that drift instead of guessing.
Wiring the tiles list wrong. Because tiles is a list, a node that only accepts one image will either error or silently process the first tile. Send the whole list through the same operations, then give Tiled Upscale Stitch the tiles in the same order and count.
Treating it as a restorer. This is the "more pixels, and let the model sharpen what's there" rung. Inventing detail that was never there is a restoration model's job, and tiled redrawing at high denoise is how you get invented texture on a photo that only needed cleaning.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | The picture to enlarge and cut into tiles. | |
| megapixels | FLOAT | 4.000β64 | Size of the finished picture, in megapixels. 0 keeps the picture's own size. |
| upscale_modelopt | UPSCALE_MODEL | Optional. Enlarges the picture with an upscale model before it is cut into tiles. Unplugged, it is enlarged the plain way (lanczos). | |
| tile_megapixelsopt | FLOAT | 2.000.25β16 | The most your model redraws at once. A picture up to about this size stays in one tile. 2 suits Qwen Image 2.1 and Krea 2; use 1 for SDXL. |
| overlapopt | INT | 1280β1024 | How many pixels neighbouring tiles share. The join is blended across this strip. |
| multipleopt | INT | 321β256 | Every tile's width and height is a multiple of this. 32 works with every model tried; Qwen Image 2.1 needs it. |
| max_growthopt | FLOAT | 8.01β64 | A small picture is redrawn at no more than this many times its own megapixels, and enlarged the plain way from there. Raise it to redraw a tiny picture at a big size anyway. |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| tiles | IMAGE | The tiles, one after another. Nodes after this run once per tile. |
| stitcher | AUSBOSS_TILE_STITCHER | What Tiled Upscale Stitch π needs to put the tiles back together. |
| before | IMAGE | Your picture enlarged the plain way to the finished size: the before picture. |
| width | INT | Width of the finished picture in pixels. |
| height | INT | Height of the finished picture in pixels. |
| report | STRING | What was done with your picture, in one or two sentences. |