Nodes/ComfyUI-Advanced-Tile-Processing/๐Ÿ”ง Advanced Tile Splitter
ComfyUI Node

๐Ÿ”ง Advanced Tile Splitter

The right way to tile a 4K image in ComfyUI โ€” without black borders or seams

By QL-boyยทCreated 9 months agoยทUpdated 8 months agoยท 49
๐Ÿ”ง Advanced Tile Splitter
  • image
  • latent
  • tile_config
  • tiles_image_batch
  • tiles_image_list
  • tiles_latent_batch
  • tiles_latent_list
โ—„tile_size512โ–บ
โ—„overlap64โ–บ
โ—„rows0โ–บ
โ—„columns0โ–บ
โ—„normalizetrueโ–บ

If you've ever watched a KSampler OOM the instant you ask it for something past 2048px, you already know why this node exists. Tiled diffusion is the trick that lets a 6GB card chew on 4K and 8K images: cut the picture into overlapping chunks, run the sampler on each chunk at a resolution it can actually handle, then stitch the results back. This node is the first half of that pipeline - the cutting. Its sibling CustomTileMerger does the stitching, and the two talk through a shared TILE_CONFIG so you never have to line up coordinates by hand.

This is ComfyUI's answer to what Ultimate SD Upscale did as a one-click button in A1111, except you stay in the graph and can drop a ControlNet Tile condition or a loop node into the middle. If you came here from the Z-Image tile-ControlNet upscale workflow, this is the splitter that workflow leans on.

How it works

Feed it an image, a latent, or both, and it works out the tiling math for you. The part that's genuinely nicer than the old DIY approaches: instead of padding the canvas with black - which the model then happily draws artifacts into - it pads with reflect padding (the edge mirror trick) and, when normalize is on, aligns everything to multiples of 64. Every tile is guaranteed to cover the original image, and there are no black borders for the model to hallucinate into. Tile coordinates get snapped to multiples of 8 so they stay VAE-friendly. If you hand it a latent, it does the same math in 8ร— downsampled latent space.

The key thing to understand is the metadata contract: it emits a TILE_CONFIG object that records the original size, the padded size, the overlap, and every tile's coordinates. The Merger reads exactly that and reconstructs the image from whatever comes back. Don't skip wiring tile_config through - it's the difference between a working stitch and a pile of loose fragments.

The inputs that matter

Only a handful are worth touching as a beginner:

  • tile_size - 512 for SD 1.5, 1024 for SDXL/Z-Image. If it's bigger than your image, you just get one padded tile.
  • overlap - default 64. The author recommends at least 10% of tile_size; the bundled SDXL example uses 128 at 1024. Too little overlap and your seams show, no matter how good the Merger is.
  • rows / columns - 0 means "figure it out from the tile size." Set them only when you want a fixed grid, up to 32ร—32.
  • normalize - leave it on; multiples of 64 keep every model happy.

Which output do you wire up?

You get five outputs but really two paths. tiles_image_batch (or tiles_latent_batch) is one tensor with every tile stacked - feed that straight into a KSampler for maximum speed when you have few tiles and VRAM to spare. tiles_image_list / tiles_latent_list are the per-tile lists for loop-node processing and the low-VRAM route.

Here's the trap that catches people: the Merger expects the list form. It reads one tile per position, so if you run a KSampler over the batch output, you have to split the batch back into a list (an unbatch node) before the Merger will stitch it correctly. The README's "multiple images as output" FAQ is this same gotcha wearing a different hat.

Installing it

It ships in a pack of two nodes, so one install gets you both:

cd ComfyUI/custom_nodes
git clone https://github.com/QL-boy/ComfyUI-Advanced-Tile-Processing
# restart ComfyUI

Or skip the terminal: ComfyUI Manager โ†’ search "ComfyUI-Advanced-Tile-Processing" โ†’ Install. It needs ComfyUI 0.4.0+, Python 3.10+ and PyTorch 2.0+. The only dependency beyond what ComfyUI already drags in is scipy (used by the Merger's feathering), and there are no model downloads and no API keys anywhere in this pack.

When it bites

Faint lines where tiles meet almost always mean overlap is too low - bump it before you blame the Merger. And remember this node only cuts; if your tiles come back looking patchwork, the usual cause is tiled upscaling without a ControlNet Tile condition keeping each chunk faithful to the source, which is a workflow design question, not a splitter setting.

Categoryimage/postprocessing

Inputs (7)

NameTypeDefaultDescription
tile_sizeINT51264โ€“8192โ€”
overlapINT640โ€“512โ€”
rowsINT00โ€“32โ€”
columnsINT00โ€“32โ€”
normalizeBOOLEANtrueโ€”
imageoptIMAGEโ€”
latentoptLATENTโ€”

Outputs (5)

NameTypeDescription
tile_configTILE_CONFIGโ€”
tiles_image_batchIMAGEโ€”
tiles_image_listIMAGEโ€”
tiles_latent_batchLATENTโ€”
tiles_latent_listLATENTโ€”