Image Tile Extract (Grid)
Cut a picture into tiles, one output each
- images
- tile_1
- tile_2
- tile_3
- tile_4
- tile_5
- tile_6
- tile_7
- tile_8
- tile_9
- tile_10
- tile_11
- tile_12
- tile_13
- tile_14
- tile_15
- tile_16
Every now and then you need to treat the four quadrants of an image as four separate images - feed each corner to its own sampler, process a region differently, or work on a detail area without the whole frame. WAS Image Tile Extract (Grid) cuts each picture into a columns×rows grid and sends every tile to its own output, one wire per tile, read left to right then top to bottom.
The name matters for picking the right node. This one gives you one output per tile - set columns and rows and the node grows outputs to match, up to a 4×4 grid and sixteen tiles. If instead you want many tiles collapsed onto a single wire (to process a whole batch of tiles together), the suite's Image Tiled is the one you want; this node is for when each tile needs to go somewhere different.
So the real inputs are just columns and rows - both clamp at 4, giving up to 16 tiles and 16 outputs. A 2×2 grid gives the four quadrants, which is exactly what the fixed-output Image Tile Extract (Quadrants) node does; this node is the same idea made general.
The other two inputs are cosmetic but have a hidden wrinkle. border_width (default 0) draws a border of border_color around each tile - and here's the mechanism detail that surprises people: the tile is shrunk to fit inside the border, so the output stays the same size whether you add a border or not. Leave border_width at 0 and tiles come out at their own resolution with no resampling at all; add a border and the tile is scaled down to make room for it. If you're assembling tiles back into a grid later, a border lets you see the seams - it's a debugging aid as much as a look.
The output list is tile_1 through tile_16, and the tooltips all carry the same honest warning: an output carries nothing meaningful when the grid holds fewer tiles than this, so leave it unwired. Set a 3×3 grid and tile_10 through tile_16 exist on the node but hold nothing - wire only what you need. Every frame of an input batch is cut the same way, so each output carries the same tile of every frame: tile_1 is the top-left of all frames, which makes this usable on a sequence if you need to process a moving region per-frame.
It's a genuinely thin utility node - there's no image processing happening at all, just slicing. You cut, do whatever per-tile work your workflow needs, and stitch back with the suite's image stitching node. As utilities go it's exactly the kind of cheap, deterministic building block that keeps cropping up in post-processing graphs.
Install
In WAS Node Suite v3 - ComfyUI Manager, search "WAS Node Suite", or:
cd ComfyUI/custom_nodes
git clone https://github.com/WASasquatch/was-node-suite-comfyui
Restart after. Requires ComfyUI 0.14.0+ and Python 3.10+, no pip packages or model downloads (v3 fixed the v2 pack's dependency load entirely).
Common issues
- Some outputs are empty. Your grid is smaller than the number of outputs. 2×2 fills
tile_1–tile_4; leave the rest unwired. - Tiles came back resized when you added a border. Expected: the tile is shrunk inside the border so the output dimension is stable. Use
border_width0 if you want untouched pixels. - Want all tiles on one wire? Wrong node for the job - that's Image Tiled.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | The pictures to cut up. Every frame of a batch is cut the same way, so each output carries the same tile of every frame. | |
| columns | INT | 21–4 | Tiles across. Together with rows this decides how many outputs appear, up to 16. |
| rows | INT | 21–4 | Tiles down. A grid of 2 by 2 gives the four quadrants, which is what Image Tile Extract (Quadrants) does with fixed outputs. |
| border_width | INT | 00–100 | Border in pixels drawn around each tile, in border_color. The tile is shrunk to fit inside it, so the output stays the same size. 0 leaves the tile at its own resolution with no resampling at all. |
| border_color | STRING | #FFFFFF | Colour of the border, as a hex string such as #FFFFFF for white or #000000 for black. The leading # is optional, and an unreadable value falls back to white. Ignored when border_width is 0. |
Outputs (16)
| Name | Type | Description |
|---|---|---|
| tile_1 | IMAGE | The first tile, counting left to right then top to bottom. Carries nothing meaningful when the grid holds fewer tiles than this, so leave it unwired. |
| tile_2 | IMAGE | The second tile, counting left to right then top to bottom. Carries nothing meaningful when the grid holds fewer tiles than this, so leave it unwired. |
| tile_3 | IMAGE | The third tile, counting left to right then top to bottom. Carries nothing meaningful when the grid holds fewer tiles than this, so leave it unwired. |
| tile_4 | IMAGE | The fourth tile, counting left to right then top to bottom. Carries nothing meaningful when the grid holds fewer tiles than this, so leave it unwired. |
| tile_5 | IMAGE | The fifth tile, counting left to right then top to bottom. Carries nothing meaningful when the grid holds fewer tiles than this, so leave it unwired. |
| tile_6 | IMAGE | The sixth tile, counting left to right then top to bottom. Carries nothing meaningful when the grid holds fewer tiles than this, so leave it unwired. |
| tile_7 | IMAGE | The seventh tile, counting left to right then top to bottom. Carries nothing meaningful when the grid holds fewer tiles than this, so leave it unwired. |
| tile_8 | IMAGE | The eighth tile, counting left to right then top to bottom. Carries nothing meaningful when the grid holds fewer tiles than this, so leave it unwired. |
| tile_9 | IMAGE | The ninth tile, counting left to right then top to bottom. Carries nothing meaningful when the grid holds fewer tiles than this, so leave it unwired. |
| tile_10 | IMAGE | The tenth tile, counting left to right then top to bottom. Carries nothing meaningful when the grid holds fewer tiles than this, so leave it unwired. |
| tile_11 | IMAGE | The eleventh tile, counting left to right then top to bottom. Carries nothing meaningful when the grid holds fewer tiles than this, so leave it unwired. |
| tile_12 | IMAGE | The twelfth tile, counting left to right then top to bottom. Carries nothing meaningful when the grid holds fewer tiles than this, so leave it unwired. |
| tile_13 | IMAGE | The thirteenth tile, counting left to right then top to bottom. Carries nothing meaningful when the grid holds fewer tiles than this, so leave it unwired. |
| tile_14 | IMAGE | The fourteenth tile, counting left to right then top to bottom. Carries nothing meaningful when the grid holds fewer tiles than this, so leave it unwired. |
| tile_15 | IMAGE | The fifteenth tile, counting left to right then top to bottom. Carries nothing meaningful when the grid holds fewer tiles than this, so leave it unwired. |
| tile_16 | IMAGE | The sixteenth tile, counting left to right then top to bottom. Carries nothing meaningful when the grid holds fewer tiles than this, so leave it unwired. |