Symbiotica Dataset Reference
One Seeded Style Reference Per Asset Type — So the Batch Stays Consistent
- order
- images
- names
- cell_boxes
- save_path
Symbiotica Dataset Reference is the style-reference node of the order pipeline. It draws one existing piece of game art per asset type from <project>/dataset/<Asset Type>/ - the catalog's house style - and hands it to your image model as the "make it look like this" reference. The trick that makes it production-worthy is in the first line of its description: the draw is per type, not per asset. Every food item in a run shares one food reference, so the batch comes out consistent instead of each sprite vaguely resembling a different piece of catalog art.
That consistency decision is the whole design. If it drew per asset, you'd get the variety you asked for in a bad way - five food sprites each anchored to a different reference, and the set looks like five different artists. Drawing per type is the pack saying "consistency of a run beats per-item novelty," which for a client deliverable is usually the right call. And because it's seeded, the same seed reproduces the exact same references - which is what lets you say "that food reference was great, run it again" and get the identical pick.
How it works
For each asset type in the order, the node picks a reference file from that type's dataset folder, seeded by the (seed, category) pair. The key property: a type keeps its own pick when another type joins the order. Adding decorations to a food order doesn't reshuffle the food reference you already approved - which is exactly what you want when you're iterating toward a client sign-off and the order keeps growing.
The outputs go beyond the reference itself:
images- the reference for asset i, index-aligned with Order Assets. Wire into the LLM/Gemini image input.names- the filename drawn for asset i, so a good draw can be traced back to its file.cell_boxes- where each asset sits inside this type's packed sheet, as JSON. Wire into Slice Cells to cut a generated sheet back into one image per role. It comes from the same dataset folder the reference was drawn from, so it describes the grid the render was asked to reproduce.save_path- the type folder asset i's reference came from. Wire it into a Pick node'ssave_pathto see every reference of that type in a grid and tick the ones you want instead of taking the seeded draw.
The inputs that matter
seed- which reference each type draws. Same seed = same references; bump it to draw again.subfolder-datasetby default; the subfolder under the project holding the per-type reference folders (same sense as Save Render's subfolder).project_path- the client project folder; filled in from the order when one is wired.categories- asset type per asset (Order Assets'categoriesor Asset Focus'scategory). Leave unwired when the order comes from Asset Focus - the focused order carries each asset's type already.
Install
ComfyUI Manager → search Symbiotica → install, or:
cd ComfyUI/custom_nodes
git clone https://github.com/symbiotica-ai/comfyui-nodes.git symbiotica
pip install -r symbiotica/requirements.txt
Restart ComfyUI. No keys or downloads - it reads local dataset folders. Zero cost per run; the cost is only what your downstream image node charges.
Common issues
- Every run pulls a new reference even with the same seed - check the seed actually matches between runs. Also: if a type's folder gained files, adding a type reshuffles new picks but kept types hold theirs; the per-category seeding means only new categories draw fresh.
- No reference for a type - the dataset folder for that type is empty or missing. The node needs
<project>/dataset/<Type>/populated with at least one image. - The batch looks inconsistent - you wired
categoriesfrom the wrong list (Order Assets' dedupedcategoriesvs per-asset). Make sure the categories input is per-asset, index-aligned. - Trying to pick references by eye instead of by seed - that's a workflow choice the node supports: wire
save_pathinto a Pick node'ssave_path, leave the picker'sstageempty (these are source art with no steps under them), and focus one asset when the order carries several types.
The one thing to know before you lean on it: this is the catalog's house style, not the client's brief art. Wire this into the style socket and Asset Refs into the brief socket, and you've got both halves of "right look, right subject."
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| seed | INT | 00–1152921504606847000 | Which reference each type draws. Same seed = same references; bump it to draw again. A type keeps its own pick when another type joins the order. |
| subfolder | STRING | dataset | Subfolder under the project holding the per-type reference folders — the same sense as Save Render's subfolder. |
| project_path | STRING | Client project folder. Filled in from the order when one is wired. | |
| categoriesopt | STRING | Asset type per asset — Order Assets' `categories` or Asset Focus's `category`. Leave unwired when the order comes from Asset Focus: the focused order carries each asset's type already. | |
| orderopt | SYMBIOTICA_ORDER | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | The reference for asset i — index-aligned with Order Assets. Wire into the LLM/Gemini image input. |
| names | STRING | Filename of the reference drawn for asset i, so a good draw can be traced back to its file. |
| cell_boxes | STRING | Where each asset sits inside this type's packed sheet, as JSON — wire into Slice Cells to cut a generated sheet back into one image per role. Comes from the same dataset folder the reference was drawn from, so it describes the grid the render was asked to reproduce. |
| save_path | STRING | The type folder asset i's reference was drawn from. Wire it into a Pick node's `save_path` to see every reference of that type in a grid and tick the ones you want, instead of taking the seeded draw — leave the picker's `stage` empty, since these are source art with no steps under them. A picker reads the first folder handed to it, so focus one asset (Asset Focus's `category`) when the order carries several types. |