Image Untile (NH)
Sew the tiles back together, even if you upscaled them first
- tiles
- tile_data
- image
- untile_info
Tiling is only half the job. Once you've upscaled or enhanced every tile individually, you need to get the original image back - seam-free, at the right size, with no visible tile boundaries. That's Image Untile (NH): it takes the processed tiles and the tile_data from Image Tile (NH), and stitches everything back into one image. It's the second half of the tile pipeline, and it's the half that most tiling attempts get wrong by hand.
How it works
Give it tiles (the processed tile batch) and tile_data (the map straight from the tile node). Untile then:
- Infers the scale. It compares the first processed tile's dimensions to the original tile size recorded in
tile_dataand works out the scale factor - so if you 2x'd every tile, it knows the full image should be 2x too. This is the feature that makes the upscale-then-untile pattern just work. - Places each tile at its recorded position, scaled by that same factor.
- Blends the overlaps. In the overlap zones, tiles get a linear weight ramp - edges of each tile fade out toward the neighbor - and the final pixel is the weighted average. That fade is what kills visible seams; it's the whole difference between "stitched" and "seamless."
The result comes out as image at the reconstructed (scaled) resolution, plus untile_info - a STRING reporting how many images/tiles were rebuilt and at what scale, which is useful for logging that the reconstruction matched expectations.
When it's the right tool
- Any tile-then-process workflow where every tile got the same treatment (uniform upscale, uniform enhancement).
- Large-image upscaling on limited VRAM: tile → upscale each tile → untile, and you've upscaled something the GPU never had to hold whole.
- Combining with Image Tile (NH)'s
original_ratiomode for aspect-faithful tiling.
The traps (most of these are inherited from the tile side)
tile_datamust arrive intact. This is the non-negotiable rule of the pair: the data has to be the same structure that came out of Tile. Drop it, transform it, or put something else in that socket, and Untile has no map - it errors out with an invalid-input message rather than guessing.- Uniform processing. If you 2x'd half the tiles and 3x'd the rest, the scale inference breaks and reconstruction misaligns. Keep tile treatment uniform.
- Batch sizes must match. All original images in the batch need the same dimensions - a constraint from the Tile node that carries forward.
- Not enough tiles. Untile validates the tile count against
tile_dataand raises if you're short, so a dropped tile shows up as an error, not silent corruption.
Installing
Part of NH-Nodes, same one-time install as the rest of the pack:
cd ComfyUI/custom_nodes
git clone https://github.com/jetthuangai/NH-Nodes.git
cd NH-Nodes
pip install -r requirements.txt
Or search NH-Nodes in ComfyUI Manager and restart. No models, no downloads - it's numpy-weighted compositing over a metadata map. If the seams show, the usual cause is non-uniform tile sizes or a modified tile_data, not a flaw in the blender.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| tiles | IMAGE | — | |
| tile_data | NH_TILE_DATA | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| untile_info | STRING | — |