Nodes/Symbiotica/Symbiotica Template Editor
ComfyUI Node

Symbiotica Template Editor

The full template editor that lives inside your workflow — order, layout, and sheet in one node

By symbiotica-ai·Created 6 months ago·Updated about 13 hours ago· 2
Symbiotica Template Editor
  • events
  • spec
  • template
  • base sheet
  • task sheet
  • bundle_json
  • skeleton
  • prompts
  • width
  • height
  • sheets
  • sheet_prompts
  • ref_1
  • ref_2
  • ref_3
  • ref_4
  • ref_5
  • ref_6
  • ref_7
  • ref_8
  • ref_9
  • ref_10
project_path
month
feature
selected_sheets[]
assignments{}
preset_modelqwen-image
resolution1K
aspect_ratio1:1
algorithmshelf
distribute_by_foldertrue
group
sheet_name
max_width2048
max_height2048
background#808080
sheet_file
regions_json[]
scene_prompt

This is the node where Symbiotica's order pipeline gets hands-on. Where the Template Builder packs reference art automatically, the Template Editor hands you an actual full-screen editor - zoom/pan canvas, draggable and resizable numbered regions, a project-assets tree, per-region task references, and pack settings - and turns what you draw into the same kind of template bundle. It's an entire texture-packing app living inside ComfyUI, which is either exactly what you want or deeply overkill, depending on whether you're running this pipeline at all.

If you're a beginner who just googled the node: this is not a general-purpose tool. It's built for Symbiotica's game-asset order workflow. But it's also the friendliest way into that workflow, because it reads the order itself - you point it at a client project folder and it does the rest.

How it works

The key design choice: the node reads the order on its own. Give it project_path (the folder containing orders/ and reference-assets/) and month, and it loads the .xlsx order directly - no Order Read → Event Specs chain needed. The optional events and spec inputs are legacy: they still work, but they're ignored when project_path is set. Blank feature means "the event this order leads with."

Two execution paths:

  • Fresh from the catalog: with no saved sheet, it builds a paired base sheet + task sheet from the sprite catalog, using the assignments JSON (task asset name → catalog path) to place things. The base sheet is the style source; the task sheet carries the client's design references on the same region layout.
  • From a saved editor sheet: once you've edited and saved in the "Open template editor" app, sheet_file and regions_json take over. The saved PNG is the base sheet, your regions are the layout, and the task sheet gets repainted from the client refs onto it. No packing needed.

Either way you get the same bundle shape, and the node saves everything under output/templates/.

The inputs you'll actually touch

Most inputs are marked advanced and managed by the editor UI (selected_sheets, assignments, sheet_file, regions_json are all "managed by the editor/node UI"). The human ones:

  • project_path, month, feature - point at the project, pick the month, done.
  • scene_prompt - an overall scene/style instruction that rides along in the bundle. Feed it to your edit node or LLM downstream.
  • preset_model / resolution / aspect_ratio - sizing presets, same as the Builder.

The outputs - this is where it shines

  • template, base sheet, task sheet, bundle_json - the core bundle.
  • skeleton - layout facts for an LLM to turn into the edit prompt: one numbered element per region with its box_2d placement, reference image number, and the client's brief. It deliberately carries no framing; your LLM's system prompt owns that.
  • prompts - the order's client prompts, one recipe per row ("row 1 / Prep) … Ready) … Serving) …"), the text the recipe workflow feeds the LLM alongside the sheet.
  • sheets + sheet_prompts - the sheets you ticked in the editor's grid, index-aligned. Wire sheets to Save Image and sheet_prompts to Show Text and downstream runs once per sheet.
  • ref_1ref_10 - per-region reference crops from the task sheet, numbered for the Regional Prompt Builder's sockets.

Install

Part of the Symbiotica pack - install once, get every node:

cd ComfyUI/custom_nodes
git clone https://github.com/symbiotica-ai/comfyui-nodes.git symbiotica
pip install -r symbiotica/requirements.txt

Restart ComfyUI, or ComfyUI Manager → search Symbiotica → install. No models download for this node; the pack's heavy dependency (faster-whisper) only matters if you use the transcription node.

Common issues

  • "no sprite catalog - set project_path to a folder that has a reference-assets/ subfolder" - you're on the fresh-from-catalog path without a catalog. The usual editor flow saves a sheet_file instead; that error is telling you it can't build fresh here.
  • "could not read sheet … re-save from the template editor" - the saved sheet file is stale or moved. Re-save.
  • Invalid JSON in assignments or regions_json - the node raises with a clear message; these are normally written by the UI, so if you hand-typed them, that's on you.

If you're not running an order pipeline, skip this node. If you are, it replaces a spreadsheet plus a texture-packer plus a conversation with the client - one node, one run.

Categorysymbiotica/pipeline

Inputs (20)

NameTypeDefaultDescription
project_pathSTRINGThe client project folder — the one that contains orders/ and reference-assets/
monthSTRINGWhich month's order to build (the .xlsx files under orders/)
featureSTRINGWhich event the editor is building (set by the editor's Event selector)
selected_sheetsSTRING[]JSON list of saved sheets ticked in the editor's grid — emitted on the 'sheets' output (managed by the editor)
assignmentsSTRING{}JSON: task asset name -> catalog rel path (managed by the node UI)
preset_modelCOMBOqwen-image5 options: nano-banana-pro, nano-banana-2, imagen-4, qwen-image, custom
resolutionCOMBO1K4 options: 0.5K, 1K, 2K, 4K
aspect_ratioCOMBO1:114 options: 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, +8
algorithmCOMBOshelf3 options: shelf, maxrects, grid
distribute_by_folderBOOLEANtrue
eventsoptSYMBIOTICA_ORDER_EVENTSLegacy: the whole order from an Order Read node (else read from project + month here)
specoptSYMBIOTICA_EVENT_SPECLegacy: one event's spec from Event Specs (ignored when project/events set)
groupoptSTRINGTemplate group slug filter (empty = all groups with refs)
sheet_nameoptSTRING
max_widthoptINT204864–8192Sheet width when preset_model=custom
max_heightoptINT204864–8192
backgroundoptSTRING#808080Hex fill; empty = transparent
sheet_fileoptSTRINGSaved editor sheet (managed by the editor)
regions_jsonoptSTRING[]
scene_promptoptSTRING

Outputs (20)

NameTypeDescription
templateSYMBIOTICA_TEMPLATE
base sheetIMAGE
task sheetIMAGE
bundle_jsonSTRING
skeletonSTRINGThe layout facts for an LLM to turn into the edit prompt: one numbered element per region with its box_2d placement, reference image number, and the client's brief. Carries no framing of its own — the LLM's system prompt owns that.
promptsSTRINGThe order's client prompts, one recipe per row ("row 1\nPrep) … Ready) … Serving) …") — the text the recipe/grid workflow feeds its LLM alongside the sheet.
widthINT
heightINT
sheetsIMAGEThe saved sheets ticked in the editor's grid, as a batch — wire to Save Image, or use each as an img2img base. Downstream runs once per sheet.
sheet_promptsSTRINGClient prompts for each ticked sheet, 1:1 with `sheets` (same order). Wire to Show Text next to `sheets`→Save Image: one save + one prompt block per sheet, however many you ticked (food, decorations, appliances…).
ref_1IMAGERegion 1's reference crop from the task sheet
ref_2IMAGERegion 2's reference crop from the task sheet
ref_3IMAGERegion 3's reference crop from the task sheet
ref_4IMAGERegion 4's reference crop from the task sheet
ref_5IMAGERegion 5's reference crop from the task sheet
ref_6IMAGERegion 6's reference crop from the task sheet
ref_7IMAGERegion 7's reference crop from the task sheet
ref_8IMAGERegion 8's reference crop from the task sheet
ref_9IMAGERegion 9's reference crop from the task sheet
ref_10IMAGERegion 10's reference crop from the task sheet