Read Result
Grab any named output from anywhere, no wire required
- fallback
- source
- value
Read Result is the "get" half of Flow Branch's named-result pair. Somewhere in your workflow a Publish Result node tags a piece of data with a readable name - "Original Image", "Face Restored", "Upscaled" - and this node fetches that data back out, anywhere in the graph, without you dragging a wire from one end of the canvas to the other.
That's the entire pitch, and it's a good one. ComfyUI's classic failure mode at scale is illegibility: every reusable output gets its own wire, and by the time a sampler's result has to feed a face-fixer, an upscaler, and a save node that are all in different zip codes of the canvas, you're staring at noodles. Name the result once at the source and read it by name at the consumers, and twenty crossing wires become three short ones. This is plumbing, not magic - the same "one source, many consumers" instinct behind primitive value nodes, just lifted from values to whole images and latents.
How it works
The node reads by channel - the result name. That name has to match a publisher's name exactly (whitespace is trimmed, but spelling counts), and it has to be unique: the Flow Branch compiler treats two publishers sharing a name as a config error rather than guessing which one you meant.
The priority order is what trips people up, so get it straight:
source- if you wire this, it wins, no name lookup at all.fallback- used only when the named publisher doesn't exist or isn't available at queue time.- The publisher itself - found by name across the workflow, including results published by a Flow Orchestrator stage.
The lazy part matters here. This node's check_lazy_status tells the engine exactly which input it needs this run, so it never computes a fallback it doesn't use, and it never forces an upstream publisher to run if nothing is actually consuming it. If a read finds no publisher and no fallback, the compiler drops the link before queueing - the consumer treats it like an unconnected optional input, and ordinary nodes downstream keep running. If the node somehow gets invoked anyway, it blocks with a clear "no publisher or fallback" message instead of passing garbage through.
The inputs that matter
- channel (string, default "Original Image") - the result name you're fetching. The tooltip says it plainly: reads a publisher or pipeline stage with the same name.
- fallback (any) - optional. Plug in a value to use when the named publisher is missing.
- source (any) - optional. Direct override; bypasses name resolution entirely.
The single output, value, carries whatever you asked for - image, latent, conditioning, a string, anything. Wire it wherever the source data would have gone. Handy detail: right-click the node (or double-click it) for Go to Publisher, which jumps you to the node that publishes that name.
Install and gotchas
Install flow-branch from ComfyUI Manager, or:
cd ComfyUI/custom_nodes
git clone https://github.com/yurishk/ComfyUl-FlowBranch
Then restart ComfyUI. There are no Python dependencies and no model files - it's pure node logic plus a small frontend. One naming gotcha worth repeating: names must be unique and exact. Typo the channel and you don't get a wrong image, you get a silently-removed link that makes an optional consumer pass through or error. If a read ever stops resolving, check the publisher's name first - that's the failure mode nine times out of ten.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| channel | STRING | Original Image | Read a publisher or pipeline stage with the same result name. |
| fallbackopt | * | — | |
| sourceopt | * | — | |
| compile_erroropt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| value | * | — |