Nodes/WAS Node Suite v3/Image Tile Extract (Grid)
ComfyUI Node Runs on cloud

Image Tile Extract (Grid)

Cut a picture into tiles, one output each

By WASasquatch·Created 3 years ago·Updated 4 days ago· 1,844
Image Tile Extract (Grid)
  • 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
columns2
rows2
border_width0
border_color#FFFFFF

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_1tile_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_width 0 if you want untouched pixels.
  • Want all tiles on one wire? Wrong node for the job - that's Image Tiled.
CategoryWAS Suite/Image/Transform

Inputs (5)

NameTypeDefaultDescription
imagesIMAGEThe pictures to cut up. Every frame of a batch is cut the same way, so each output carries the same tile of every frame.
columnsINT21–4Tiles across. Together with rows this decides how many outputs appear, up to 16.
rowsINT21–4Tiles down. A grid of 2 by 2 gives the four quadrants, which is what Image Tile Extract (Quadrants) does with fixed outputs.
border_widthINT00–100Border 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_colorSTRING#FFFFFFColour 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)

NameTypeDescription
tile_1IMAGEThe 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_2IMAGEThe 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_3IMAGEThe 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_4IMAGEThe 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_5IMAGEThe 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_6IMAGEThe 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_7IMAGEThe 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_8IMAGEThe 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_9IMAGEThe 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_10IMAGEThe 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_11IMAGEThe 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_12IMAGEThe 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_13IMAGEThe 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_14IMAGEThe 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_15IMAGEThe 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_16IMAGEThe 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.