Task (Symbiotica)
Pick the asset once, hand the whole record down one wire
- specs
Task is the node you'd reach for if your renders come from somebody else's spreadsheet. It reads an order - a project folder with an orders/ subfolder of .xlsx files - and gives you a sidebar: month, event, category, asset, with the client's own reference art as thumbnails and the prompt they wrote underneath. Click the thing you're working on and the whole pick goes downstream on a single specs socket.
Where this fits
The usual complaint about ComfyUI plumbing is repetition - the same seed typed into five samplers, and the first time you forget one you get a silent mismatch. Task attacks a nastier version of that: not "the same value in five places" but "which asset is this render even for". Under a batch of thirty commissioned assets, a mismatch files a correctly-rendered image under the wrong name. So one node owns the identity and everything else reads it off a wire.
One thing to know: the README still calls this Symbiotica Asset Focus, thirteen sockets of output. The shipped code splits that same selection into two nodes - Task (the browser, one output) and Task Specs (the fan-out). If your ComfyUI also has an Symbiotica Asset Focus node, that's the older combined version and it still works.
How it works
Every widget here is a filter over the order sheet. project_path and month say which order; feature picks the event within it; category narrows to one asset type, and asset names the one asset. Leave asset empty and you get the first asset of the narrowing, which is the intended way to run a category one at a time. Click a thumbnail and the ref widget is set for you - that's not a name you're meant to type.
Choosing happens in the sidebar: the tree lists the categories and assets the last run found, grouped by category or by event. Since those choices arrive from the run, the node is queueable on its own - press queue once on a bare graph and the panel populates. 📁 Read folder fills the month and event dropdowns without queuing at all.
Its deal with the cache is the interesting bit: with a project folder set, it fingerprints itself on the order file (mtime and size), the references folder's listing and the project's order-guide.md. Touch the spreadsheet and the graph re-runs; sit still and it's cached. A marker that always reads "changed", the source comment says, would keep every queue in the pipeline permanently dirty.
Inputs and the one output
category and asset are the required inputs, and you set them from the panel rather than typing. project_path is the folder with the orders/ subfolder - without it there's no order to read. month picks the order file, feature the event, ref the reference file.
Output is specs, typed SYMBIOTICA_ORDER: the whole pick on one wire. It exists so this node can stay two sockets tall instead of thirteen - wire it into a Task Specs (Symbiotica) and the name, client prompt, save path, reference art, canvas size and category recipe come back out as separate sockets. It's a list of one, which behaves exactly like a scalar downstream, so it runs once per queue.
Installing it
Manager → search Symbiotica, or:
cd ComfyUI/custom_nodes
git clone https://github.com/symbiotica-ai/comfyui-nodes.git symbiotica
pip install -r symbiotica/requirements.txt
Restart. Dependencies are requests and pillow, there are no model files, and this node never calls a provider - no key needed. Use a recent ComfyUI build; the pack is written against the newer node API.
Where people get burned
Nothing set = a raise, not an empty render. With no project_path and no month you get the pack's own error telling you to set the folder and pick a month - plus an offer to wire an event_order into order, which you can ignore: Task has no order socket on purpose, and its project_path tooltip mentions a wired order for the same inherited reason.
A project outside ComfyUI's own folders browses empty. If your game project lives in ~/games/my-game rather than under ComfyUI, declare it: Settings → Symbiotica → Paths → Asset folders, or
export SYMBIOTICA_ASSET_ROOTS="/Users/me/games/my-game, /Volumes/art"
One asset per queue is a feature, and it's opinionated. Clicking a category clears asset, and an empty asset emits the first of the narrowing. That's on purpose - the alternative was one click fanning out into thirty renders and thirty API calls. Name an asset that isn't in the event and you get a hard error listing the names the event does hold, because rendering a renamed asset under its old name is the failure this whole node exists to prevent.
The old release is still on the registry. 2026.9.23 cut 33 nodes out, the Neural Sins / Hypereel arc; a workflow needing them opens as red missing-node boxes - pin 2026.9.22.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| category | STRING | Narrow the choice to one asset type. Empty is the whole event, and the first asset of it is what runs. | |
| asset | STRING | Which asset, by name. Set by clicking it on the node; typed names work too. Empty means the first. | |
| project_pathopt | STRING | The project folder, the one with an orders/ subfolder. Only read when no order is wired in — this node then does the whole selection itself. | |
| monthopt | STRING | — | |
| featureopt | STRING | Which event of that month. Empty means the order's first. | |
| refopt | STRING | Which of the asset's client references to emit, by filename. Set by clicking a thumbnail on the node. Empty means the first. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| specs | SYMBIOTICA_ORDER | The whole pick on ONE wire — same event, same project, a one-asset assets list, and the reference you clicked. Put a Task Specs on the end of it for the name, the prompt, the save path, the reference art and the canvas size. One asset, so downstream runs once. |