Publish Result
The naming end of a wire-free workflow
- value
- value
Publish Result is the node you put on the source end of Flow Branch's named-result system. You feed it any data - an image out of a KSampler, a latent, a conditioning, a string, whatever - give that data a readable name, and any Read Result node anywhere in the workflow can fetch it back by that name. No wire between them. That's the whole job, and it does it with two inputs and one output.
Why bother? Because the alternative is the thing that makes big ComfyUI graphs unreadable: a wire from the sampler's output running across the entire canvas to every node that wants it. Name it once at the source ("Original Image"), then read it where you need it - the face-restoration chain, the upscaler chain, the save node - and those three long crossing wires become three short reads. It's the same "one source, many consumers" pattern as the primitive value nodes in ComfyUI core, just carrying images instead of numbers.
How it works
The channel input is the name, and the name is the contract. It's matched exactly by readers (whitespace is trimmed but spelling matters), and it must be unique across the workflow - the Flow Branch compiler treats a second publisher with the same name as a configuration error instead of silently choosing one.
The genuinely nice bit is the laziness. Publish Result executes only when something consumes it - the node declares itself lazy, so if nothing reads "Original Image" this run, it doesn't run at all, and neither does the upstream work feeding it. That means you can leave an unused publish in a workflow without paying for it, which is exactly how the Flow Orchestrator's "only the selected option becomes an execution dependency" trick works under the hood.
There's a deliberate failure mode worth knowing: if a publish has no value connected but something tries to read its name, the reader blocks with a clear "[Flow Branch] Published result 'X' has no input data" error rather than passing you None and letting it silently corrupt a downstream chain. It's annoying when it fires, but it's the safety net that makes the "silently skip the face fix" bug impossible.
What you actually set
- channel (string, default "Original Image") - the unique result name. Pick something human-meaningful; you'll be typing it in Read Result nodes.
- value (any) - the data you're naming. Connect this to whatever produced the result.
The output, value, just passes the data through, so you can keep a normal wire going to one immediate consumer while readers pull the same data by name elsewhere. Right-click the node and choose Create Paired Reader to drop a matching Read Result on its right - handy when you're first wiring up the pair.
Install and gotchas
Install flow-branch from ComfyUI Manager, or:
cd ComfyUI/custom_nodes
git clone https://github.com/yurishk/ComfyUl-FlowBranch
then restart. No Python dependencies, no models. The one trap is naming discipline: a name that's fine when you have one publisher becomes a compile error the moment you duplicate it. If you're copying a group of nodes with Ctrl+B, keep the option's final Publish node inside the same group - otherwise a bypassed option can still publish its name and confuse auto-selecting readers.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| channel | STRING | Original Image | A unique result name used elsewhere in the workflow. |
| valueopt | * | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| value | * | — |