Extract Image Tile
Pull one tile out of an image for per-tile processing
- image
- layout
- tile
Once you've defined a tiling grid with Create Tile Layout, ETN_ExtractImageTile is how you cut a single tile out of the image so you can process it on its own. Pick a tile by index, get back just that slice (with its overlap padding included), sample or upscale it, and later drop it back in with Merge Image Tile. It's the "split" primitive in Acly's tooling-nodes tiling set.
The reason this is a separate, index-addressed node rather than an automatic loop is the whole design philosophy of the pack: it doesn't force one fixed upscale pipeline on you. You extract tiles yourself so you can do anything per tile - a different prompt for the sky vs the foreground, region masking on one tile, ControlNet on another. As the README pitches it, the split/merge primitives make it "feasible to generate individual workflows for each tile," which is exactly the programmatic flexibility a tool driving ComfyUI wants.
How it works
Give it the image, the layout, and a tile index, and it returns that tile as a normal IMAGE - cropped to the tile's region plus the padding overlap the layout defined. From there it's just an image: encode it, sample it at your model's native resolution, upscale it, whatever your workflow needs. The overlap on the edges is what lets Merge Image Tile blend it back seamlessly later.
One gotcha worth internalizing up front: the indexing is column-major. Per the README, "tile 1 is usually below tile 0," not to its right. So you walk down a column before moving across. Get this backwards and your reassembled image is scrambled.
The inputs and outputs that matter
image(IMAGE) - the full image to extract from. Same image you fed Create Tile Layout.layout(TileLayout) - the grid from ETN_TileLayout. Required; it's what defines where the tile is.index(INT, default0, min0) - which tile to pull, column-major. This is the value you iterate - via a batch, a loop, or your external tool driving the prompt repeatedly with different indices.
Output:
tile(IMAGE) - the extracted tile, padding included. Wire it into the processing chain for that tile (VAE Encode → KSampler → VAE Decode, an upscaler, etc.).
How to install it
The pack installs as one unit. ComfyUI Manager: search ComfyUI Nodes for External Tooling, install, restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/Acly/comfyui-tooling-nodes.git
then restart. No models to download.
Common issues & troubleshooting
Reassembled image is jumbled. You almost certainly assumed row-major order. Indices go column-major - tile 1 is below tile 0. Make sure your extract index and your merge index use the same convention (they will, as long as you don't manually re-map them).
Index out of range. The valid indices are 0 through (tile count − 1), and the count is set by your layout's min_tile_size and padding. If you're looping, derive the count from the layout rather than hardcoding it.
Seams after merge. Extraction isn't the problem - the blend happens at merge time using the padding this node preserved. If you cropped the padding away between extract and merge, or changed resolution mid-chain in a way that breaks alignment, the merge can't feather correctly. Keep the tile's geometry consistent through the round trip.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| layout | TileLayout | — | |
| index | INT | 0 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| tile | IMAGE | — |