Distributed Worker Sink (internal)
You didn't add this node, the master did — and you shouldn't delete it
- value
If you found this node in a workflow JSON, a server log, or the graph on a worker machine and you're wondering what you accidentally did - nothing. Distributed Worker Sink is internal plumbing from ComfyUI-Distributed. The master inserts it into worker prompts. You never place it by hand, and the (internal) in the display name is the author being straight with you.
The problem it solves
When you run a distributed job, each worker doesn't get your whole workflow. It gets a pruned copy containing only the distributed node - a Distributed Collector or Ultimate SD Upscale Distributed - plus everything upstream of it. The master trims the rest, because there's no reason to send a worker your save nodes, your preview nodes, or a branch it isn't running.
Here's the catch: ComfyUI executes a graph toward its output nodes. Chop off everything downstream of the collector and you've removed the thing the worker's prompt was walking toward. The pruned graph is dangling - no terminal node, nothing to run for. So the master re-adds one. That's the sink.
How it works
The sink declares a single input, value, typed as anything (*), and no outputs at all. Its whole execute step returns an empty result. The master wires it to the distributed node's image slot, or its audio slot when you're collecting audio, and tags it Distributed Worker Sink (auto-added) in the metadata. That's the terminator; the worker's ComfyUI sees a valid end to execute toward and runs.
There's a version check in front of this. Before dispatching, the master asks the worker whether it has the sink registered. If it doesn't - an older install - the master falls back to a PreviewImage or PreviewAudio terminator instead. That fallback is where the old annoyance came from: preview nodes write every frame to that worker's temp directory, so a long run left a few hundred PNGs rotting in temp/ on a machine you don't normally look at. The sink exists specifically to avoid writing those files. It's a data-flow node whose only job is to say "this branch ends here" - the same contribution that the value, switch and reroute nodes make to a graph, minus any visible effect.
What you actually do with it
Nothing, most of the time. Two practical points:
- Don't delete it or cut its wire if you see it in a graph. It looks like a dead end because it is one; that's the function.
- It's hidden from the node search menu as a dev-only node, so you can't drag one out. If you genuinely wanted a "force this branch to compute, save nothing" terminator, you'd have to add it by editing the prompt JSON.
Install
There's nothing node-specific to install - it ships with the pack:
cd ComfyUI/custom_nodes
git clone https://github.com/robertvoy/ComfyUI-Distributed.git
# restart ComfyUI
Install the same version on the master and every worker. That's not housekeeping advice here: the master only uses the sink where the worker confirms it exists, so a master and worker on different versions quietly change which terminator gets used. Machines joining as remote workers also need their own copies of the models and custom nodes the workflow uses - people running mixed fleets report exactly that as the setup step that bites, since nothing is shipped across the network. Remote setups also want --enable-cors-header on the master's launch arguments.
If something looks wrong
Your worker's temp folder is filling with preview PNGs. That worker is running an older version of the pack, so the master fell back to preview terminators. Update and restart it.
The worker reports an unknown or missing node class. Same cause, other direction: the sink isn't registered on that machine. Update the pack there and restart ComfyUI.
Nothing appears on the worker when it finishes. Correct behaviour. The sink writes no files and produces no output - worker results travel back to the master and land at your post-Collector save node. If you expected files on the worker's disk, that expectation is the bug.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| value | * | — |
Outputs (0)
No outputs