Module
Your Subgraph Is a Copy of Itself. Module Makes It a Reference.
The problem this node is aimed at
ComfyUI's subgraph is a copy-and-forget deal: the definition is stored inside each workflow and nothing looks at it again. Collapse your whole LoRA-plus-prompt block into a tidy subgraph, reuse it across eight workflows, then swap the LoRA - and you have changed it in exactly one file. The other seven still carry last month's weights, and nothing on the canvas tells you.
People noticed. That reuse gap is why packs like SugarCubes and Subworkflows got built - one pitch for it is almost verbatim "subgraphs don't fully solve reuse across workflows". Module is a different take on the same itch: keep the subgraph a subgraph, and make it a named, revisioned thing in a library.
One warning first: this pack has effectively zero Reddit footprint - a corpus search for its name returns zero threads. No users ahead of you, no bug reports to read. Ground truth here is the README and the source.
How it works
Modules live as JSON in user/default/symbiotica-modules/. Slashes in the name are folders on disk, so bakery/flip and fashion-story/llm stay apart, and segments are sanitized so a name can't walk out of the library.
Publishing stamps what you published. A subgraph module carries {name, rev} in the definition's extra; a group module tags every member node, and the frame is only the rectangle that says which tagged nodes belong together - so a copy-pasted group keeps working, because the tags travel with the nodes.
On every workflow open, the frontend runs before the graph is built: it collects every tagged subgraph and group, compares each tag's revision against the library, and swaps in the library copy for anything stale - keeping the workflow's own subgraph id so existing instances still resolve. The Python side runs the same merge against files on disk, which is what the Sync all workflows button calls. Hence updates to workflows you never opened.
The clever part is what it doesn't overwrite. Promoted widget values - a LoRA picker on the outside of a subgraph instance - live on the instance, not the definition. Each instance keeps a snapshot from its last sync and a value is only replaced when the module actually changed it since, so a prompt typed into workflow A survives a LoRA change published from workflow B. Without that rule this node would be a machine for silently eating local edits.
Inputs, outputs, and honest expectations
module is the dropdown, and it behaves like a launcher rather than a setting: pick a published module and it gets dropped onto the canvas below the node, then the widget snaps back to - pick a module -. folder is a plain string prefilling the path for new rows - type bakery and the Flip group is offered as bakery/flip. Wire it up if you like, but the panel refuses to guess: wired to a node with no typed text, it says so instead of inventing a name.
There are no outputs, and the node is marked virtual - it never executes, and queueing the graph does nothing for it. All its work happens in its own panel: one row per group and subgraph in the graph on screen, with the title, an editable folder/name path, the revision (r3, or new), and Publish.
Installing it
Same as the rest of the pack - 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, then look under Symbiotica/Modules. No models, no API keys, nothing to download for this node. The library directory is created on first publish.
What will bite you
Nested subgraphs inside a module aren't supported yet. Stated outright in the README. If your module contains a subgraph, don't expect the inner one to travel.
The merge is implemented twice, in two languages, on purpose - JavaScript for the graph on open, Python for files on disk - with a comment in both saying to change them together. Two implementations of one rule is a bug waiting to diverge, and this pack is young. Back up user/default/workflows/ before your first Sync all workflows; it rewrites files. And a workflow is only linked on a machine whose library holds that module, so hand over the module JSON when you share a graph.
Group sync reports what it dropped. Links are relinked by slot name; one whose node or slot is gone is dropped, with a toast saying so. Read the toast. Nodes keep their ids and positions; ones you add appear everywhere, ones you remove disappear.
Sync-on-open is a frontend feature. It happens when a person opens the workflow. A headless API run pulls nothing; a file keeps whatever revision it has until somebody opens it or presses Sync all.
The panels are DOM widgets - exactly the class of node ComfyUI's Nodes 2.0 frontend rewrite broke, and it's unresolved upstream (comfyui-ecosystem.md). If the rows render as stacked fields with dead buttons, switch to the legacy canvas before blaming the pack.
Honest placement: this is the organization layer, not the data layer (comfyui-node-plumbing.md). One place to edit a reusable block, in exchange for one pack's worth of lock-in - cheaper than hand-syncing eight files.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| module | COMBO | Pick a published module to add it below this node. | |
| folder | STRING | Project folder for new modules, e.g. bakery. Type it or connect a text node. |
Outputs (0)
No outputs