Prompts (Symbiotica)
Edit one block of the prompt book without leaving the canvas
- text
Most prompt systems keep your text in a text node, which lives in a workflow, which gets shared and duplicated until "the lighting prompt" exists in nine different files. Symbiotica Prompt Block is the pack's answer: one block of the prompt book - a shared rule, an image-model block, or an asset type - edited right on the canvas, saved to <project>/prompts/ where every queue reads the same copy.
Several of these side by side are the book. They look like the string-literal graphs they replace, except the source of truth is a file, not a widget.
How it works
A block is a .md file under your project's prompts/ folder. This node is a window onto one of them. Type blocks live at prompts/<Category>.md, shared rules at prompts/_rules/, image-model blocks at prompts/_image/. A block file can hold up to three versions split by <!-- version: name --> markers, with the top of the file staying the default.
Wire the Prompt Book's project_path output in and chain block to block through project - one wire feeds the whole row instead of every node fanning back to the book. Each block appends to the text passing through it, so the last block in a row carries the entire composed prompt.
The inputs
project_path(required) - the project folder holding the book. Wire the Prompt Book'sprojectoutput, or the previous block's passthrough.block(required) - which block this node edits, e.g.Chair.mdor_rules/02-inputs.md. The panel's picker fills this in.slot- which slot of the category's recipe this edits. Set for you automatically whentext_incomes from a Prompt Recipe: wiretext_3in and this becomes 3.category(optional) - wire Asset Focus'scategoryhere and this node edits whatever_recipes/<category>.jsonnames inslot. Switch asset type and the block on screen follows, with nothing to pick. Whencategoryis wired,blockis ignored.text_in(optional) - wire a Prompt Recipe'stext_Nin to preview and edit that prompt. With nocategory, it's the legacy chain input: the previous block's text, which this node appends its own block to.
The outputs
project_path- passthrough, so blocks chain on one wire.text- this node's block, ready for the LLM. Chained, it's everything so far:text_inplus this block, blank-line separated.
Install
One pack, one 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. This node needs no API key and downloads nothing - it reads and writes markdown.
Gotchas
The mental model to keep: the block file is the truth, and this node is just a comfortable editor for it. Editing here needs no restart - Category Prompts re-reads the book when a file changes. If you hand-edit the same file in an external editor at the same time, last writer wins, same as anywhere. And a block written with a version marker you never picked will keep serving its top version until you switch slots, which trips people the first time they see an edit "not take."
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| path | STRING | The folder holding the prompts. Type it, or wire a string. Its sub-folders fill the `folder` dropdown. | |
| folder | STRING | Which sub-folder of the path, relative to it (`_rules`). `/` is the path itself. | |
| file | STRING | Which file in that folder. The dropdown lists what the folder holds. | |
| text | STRING | The file's text. Edit here; `save file` writes it back. | |
| filesopt | STRING | The ticked files, as JSON. Set by ticking files in the tree. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| text | * | single: the open file's text. multi: every ticked file, for Prompt Specs. |