Symbiotica Save Render
Saves the render AND the recipe that made it
- images
- order
- files
- prompt_shas
A plain Save Image is amnesia in PNG form. You get a file, and when the client says "this one came out flat," you have no way to answer why - the prompt may have changed twice since that render. Symbiotica Save Render is the pipeline's memory: it files each render under its asset name AND records what produced it - the architect prompt's hash, the version of every rule block that composed it, the reference drawn, and the seed. The record goes in the PNG metadata and in <project>/prompts/renders.jsonl.
That's the part every other save node skips, and it's the whole pitch. Feedback has something to attach to.
How it works
The node takes the images plus the per-asset strings that describe them: names, categories, the actual system_prompts sent (per-asset, from Category Prompts), and the project path. It saves each image under month/feature/category/asset in the project, embeds the record in the PNG, and appends a line to renders.jsonl. The prompt_shas output hands downstream nodes the prompt's hash per image - that's the handle feedback uses to name which prompt a comment is about.
There's also a pipeline-integration detail worth knowing: the node declares what it wrote as the run's output images. An API caller reads a run's renders from /history, and only what a node declares gets there - so this node's save is what a headless order runner actually sees as the deliverable.
The inputs
images(required) - the renders.asset_names/categories(required) - from Order Assets; they name the file and the record.system_prompts(required) - Category Prompts' per-asset output, the text actually sent.subfolder- defaultrenders, under the project.project_path(required) - where the record lives.client_prompts,reference_names,seed,order(optional) - the rest of the provenance, when you have it.
The outputs
files- the paths written.prompt_shas- the architect prompt's hash per image.
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.
Gotchas
The record is only as good as the wires you give it. Skip system_prompts and the hash means nothing; skip reference_names and you lose the provenance chain. This node is built to sit at the end of the pack's own pipeline (Order Assets → Category Prompts → sampler → here), so wiring it mid-pipeline with half the inputs empty gets you a fancy file saver. Also remember the JSONL is append-only - it's a log, not a database, so don't build anything that assumes unique keys on it. If a render's provenance matters for a client dispute, that's exactly the case where you want every field filled.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| asset_names | STRING | Order Assets' asset_names — names the file and the record. | |
| categories | STRING | — | |
| system_prompts | STRING | Category Prompts' PER-ASSET output, the text actually sent. | |
| subfolder | STRING | renders | — |
| project_path | STRING | — | |
| client_promptsopt | STRING | — | |
| reference_namesopt | STRING | — | |
| seedopt | INT | 00–1152921504606847000 | — |
| orderopt | SYMBIOTICA_ORDER | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| files | STRING | — |
| prompt_shas | STRING | The architect prompt's hash per image — the handle feedback uses to name which prompt it is about. |