ComfyUI Node

Image Tile Merge

Blend processed tiles back into one seamless image

By Praveenhalder·Created about a year ago·Updated 6 months ago· 2
Image Tile Merge
  • tiles
  • tile_info
  • image
crop_percent0.0
fade_percent100
blend_modecosine

Image Tile Merge is the second half of the pack's tiling pair. Image Tile Split chops a big image into overlapping square tiles, you run whatever processing you want on each tile, and this node stitches them back into one image - with feathered blending so the seams don't show. It's the classic "process a huge image on a GPU that can't hold the whole thing" trick, and of the 15-odd nodes in this pack, this is one of the two with real engineering behind it.

The setup you'll actually build: split an image you can't feed directly to an upscaler or img2img pass, run your expensive node on the tile batch (this is where tiled upscaling's VRAM savings happen - see the modidex upscaling notes on tiled diffusion), then merge.

The inputs that matter

  • tiles (IMAGE) - the processed tile batch, straight from the splitter or after your processing.
  • tile_info (TILE_INFO) - the metadata dict from Image Tile Split. This is what lets the merger reconstruct positions, grid layout, and original dimensions. Don't lose this wire; without it the node has nothing to anchor to.
  • crop_percent (FLOAT, 0–50, default 0) - how much of the overlap to slice off each tile before blending. Raise it if you see seams.
  • fade_percent (FLOAT, 0–100, default 100) - how much of the remaining overlap gets a feathered blend ramp instead of a hard edge.
  • blend_mode ("linear" or "cosine", default "cosine") - the ramp shape. Cosine gives smoother transitions; the author recommends it.

Output is a single image IMAGE.

How it works

The merger reads the geometry from tile_info, then computes a scale factor from the current tile dimensions. That bit matters: it means the tiles don't have to be the size the splitter produced. Run them through a 2x upscaler and the merger scales its grid and overlap math to match, producing an output 2x the original. It then crops the overlap, builds 1D linear or cosine ramps for the fade zones, and accumulates weighted pixels into a buffer, dividing by the accumulated weight at the end. Edge tiles get no fade on the outer border, so the image boundary stays clean.

Where people get burned

The README is stale, and here's the proof: it claims the crop default is 50% and lists a "sigmoid" blend option. The shipped code defaults crop_percent to 0 and only offers linear and cosine. Trust the code - if you followed the README looking for sigmoid, you won't find it. The pack's own tips suggest starting at 50% crop if you see seams, but that contradicts the actual default, so treat "start at 50" as a troubleshooting knob, not the starting point.

Two real failure modes to know: if the tiles came out of a node that changed their order, the reconstruction scrambles - keep the batch order row-major. And if your processing changed tile dimensions unevenly, the scale math gets weird; try to keep every tile the same size.

Installation

From Praveen's ComfyUI Tools - install via ComfyUI Manager (search "Praveen" / "praveen-tools"), or:

cd ComfyUI/custom_nodes
git clone https://github.com/Praveenhalder/praveen-tools

Restart ComfyUI. No model downloads, no extra pip deps - Pillow, NumPy, and PyTorch, all already in ComfyUI.

Categoryimage/tile

Inputs (5)

NameTypeDefaultDescription
tilesIMAGE
tile_infoTILE_INFO
crop_percentFLOAT0.00–50
fade_percentFLOAT1000–100
blend_modeCOMBOcosine2 options: linear, cosine

Outputs (1)

NameTypeDescription
imageIMAGE