Symbiotica Template Builder
Packing a client's reference art into one template sheet — the job this node automates
- spec
- template
- sheet
- bundle_json
If you landed here cold, know this up front: the Builder doesn't draw anything. It needs no API key, calls no model, and runs on nothing but Pillow. It's a layout machine for a very specific pipeline - Symbiotica's order workflow, where a client hands you a monthly .xlsx order plus a folder of reference images, and you have to produce game-art template sheets from it. If you don't have that problem, this node is probably not for you. If you do, it's the step that turns "which asset goes where" into an actual sheet you can edit, and it saves you the manual packing.
It sits between two other Symbiotica nodes. Upstream, an Order Read → Event Specs pair parses the month's order into an event spec - that's the spec input here, type SYMBIOTICA_EVENT_SPEC. Downstream, the template output feeds Symbiotica Template Prompt, which turns the sheet's regions into the edit prompt for the Nano Banana edit nodes. The Builder is where the reference art physically gets packed onto a canvas.
How it works
The mode combo picks the whole job:
prefill_from_specs(default) packs the client's reference images into reference strips. Single-reference assets get a flipped pair; multi-reference assets get one cell per stage. This is the mode you'll run every month.catalog_gridinstead grabs existing game art from your asset catalog, matched by category, for one template group. That's the "reuse what's already made" mode - you needgroup(the template group slug) andassets_root(the catalog folder) set, or it refuses.
Either way it packs onto a sheet using one of the algorithm options - shelf, maxrects, or grid - and saves the result to output/templates/<name>.png with a JSON region sidecar that records where every cell sits. That sidecar is what lets the editor, the prompt node, and the Regional Prompt node find the regions later.
The inputs that matter
For a beginner, most of this is "leave it alone." The ones you actually touch:
spec- the event spec wire from Event Specs. Non-negotiable.mode,group,assets_root- mode and its two friends, described above.preset_model,resolution,aspect_ratio- the model preset the sheet is sized for (qwen-imageat 1K 1:1 by default). Pickcustomto drivemax_width/max_heightyourself. Pick a resolution or aspect a preset doesn't support and the node raises, listing what it does support - that error is the feature, not the bug.algorithmanddistribute_by_folder- packing behavior;shelfwith distribute-by-folder on is a sensible default.
Everything else (padding, border, grid_cell, columns, background) is advanced. background is a hex fill; leave it empty for transparency.
Outputs
template- theSYMBIOTICA_TEMPLATEwire. Feed it into Template Prompt or the Regional Prompt node.sheet- the packed IMAGE. Wire it to a Preview or Save Image.bundle_json- the same bundle as a JSON string, if you want to inspect or script it.
Install
This is one node of the Symbiotica pack, so you install the pack once:
cd ComfyUI/custom_nodes
git clone https://github.com/symbiotica-ai/comfyui-nodes.git symbiotica
pip install -r symbiotica/requirements.txt
Restart ComfyUI. Or skip all that: ComfyUI Manager → search Symbiotica → install. The pack's requirements.txt is just requests, pillow, and faster-whisper - nothing heavy, and no model files download for the template nodes.
Common issues
- "no assets with reference files to prefill" - the month's reference folder is missing or empty. Check the Order Read project folder's month refs, not the node.
catalog_gridwith noassets_root- it needs the catalog path; it can't guess.- A named
groupnot in the spec - the node raises and helpfully lists what the spec actually holds. That's usually a stale slug, not a bug.
The name is a lie, it doesn't call any API and needs no key - you're just making sheets. That's the whole appeal: the boring layout work becomes a deterministic node you can re-run.
Inputs (17)
| Name | Type | Default | Description |
|---|---|---|---|
| spec | SYMBIOTICA_EVENT_SPEC | — | |
| mode | COMBO | prefill_from_specs | 2 options: prefill_from_specs, catalog_grid |
| preset_model | COMBO | qwen-image | 5 options: nano-banana-pro, nano-banana-2, imagen-4, qwen-image, custom |
| resolution | COMBO | 1K | 4 options: 0.5K, 1K, 2K, 4K |
| aspect_ratio | COMBO | 1:1 | 14 options: 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, +8 |
| algorithm | COMBO | shelf | 3 options: shelf, maxrects, grid |
| distribute_by_folder | BOOLEAN | true | — |
| groupopt | STRING | Template group slug (required for catalog_grid; filters prefill when set) | |
| assets_rootopt | STRING | Game asset catalog folder (catalog_grid mode) | |
| sheet_nameopt | STRING | Saved sheet name (defaults to the group / feature slug) | |
| max_widthopt | INT | 204864–8192 | Sheet width when preset_model=custom |
| max_heightopt | INT | 204864–8192 | — |
| paddingopt | INT | 00–512 | — |
| borderopt | INT | 00–512 | — |
| grid_cellopt | INT | 00–4096 | — |
| columnsopt | INT | 10–64 | — |
| backgroundopt | STRING | #808080 | Hex fill; empty = transparent |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| template | SYMBIOTICA_TEMPLATE | — |
| sheet | IMAGE | — |
| bundle_json | STRING | — |