Symbiotica Slice Cells
Cut the generated sheet on the grid it was packed to
- image
- cells
- roles
- stitched
Generate a sheet of game assets and the work isn't done - you have one image that's really a dozen, and each one needs to be edited or delivered separately. Symbiotica Slice Cells cuts a generated sheet back into one image per asset, on the grid the dataset was packed to. Wire the Dataset Reference node's cell_boxes in and every asset type cuts itself: a food sheet gives prep/ready/serving, a chair sheet gives its four rotations. No crop coordinates to type, nothing to rewire when the run changes type.
That last part is the whole trick. The grid isn't guessed - it's asked for. The boxes describe the layout the render was supposed to hit, so the cut always matches the pack, whatever the asset type.
How it works
cell_boxes is the JSON from Dataset Reference - the same packing record the render was built to. The node crops each box out of the sheet, applying inset pixels of shrink. The inset matters because the boxes are the grid the render was asked to hit, and a render lands slightly off sometimes: a pixel or two of slack keeps background out of a cell. Each cell also gets a role - what it holds, prep, serving, a rotation - so an edit downstream can address "serving" rather than "the third one."
The inputs
image(required) - the generated sheet to cut.cell_boxes(required) - the Dataset Reference node'scell_boxesoutput. This is a wire, not a type-this field.inset- pixels to shrink every cell by, default 1.output_size- resize each cell to this square, or 0 to keep its cut size. Uses Lanczos, the same resampler an Upscale Image node uses.
The outputs
cells- one IMAGE per cell, in reading order. This is the main one; wire it into the edit or save lanes.roles- what each cell holds, index-aligned withcells. Let an edit address the role.stitched- every cell in one image, side by side left to right incellsorder (shorter cells padded at the bottom). Handy for a contact-sheet preview or a save without a stitcher node.
Install
Standard pack install - search Symbiotica in ComfyUI Manager, or:
cd ComfyUI/custom_nodes
git clone https://github.com/symbiotica-ai/comfyui-nodes.git symbiotica
pip install -r symbiotica/requirements.txt
Restart after. No API key, no model - pure tensor crops.
Gotchas
Wire cell_boxes from the same Dataset Reference node that produced the sheet. Paste a stale or hand-typed box list and the node will happily cut the wrong places - or raise "none of the N cells fall inside this image," which is the friendlier failure and means the boxes describe a different size sheet than the one you fed it. Also keep inset modest: it's there to shave render wobble, and cranking it eats into the art. And mind the ordering contract - cells and roles are index-aligned, so if you ever shuffle one list, you've broken the mapping. The paired Reconstruct Cells node is the inverse: it puts edited cells back onto the same boxes, so a sheet survives a per-asset edit intact.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | The generated sheet to cut. | |
| cell_boxes | STRING | The Dataset Reference node's `cell_boxes` output. | |
| inset | INT | 10–256 | Pixels to shrink every cell by. The boxes are the grid the render was ASKED to hit, so a pixel or two of slack keeps the background out of a cell when the render lands slightly off. |
| output_size | INT | 00–8192 | Resize each cell to this square, or 0 to keep it at its cut size. Lanczos, the same resampler an Upscale Image node uses. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| cells | IMAGE | One image per cell, in reading order. |
| roles | STRING | What each cell holds — 'prep', 'serving', a rotation — index-aligned with `cells`. |
| stitched | IMAGE | Every cell in one image, side by side left to right in the same order `cells` counts them. A shorter cell is padded at the bottom to the tallest one. |