Nodes/comfy-ovum/Sync Sink Ovum
ComfyUI Node

Sync Sink Ovum

The node that does nothing so your whole graph finishes

By sfinktah·Created about a year ago·Updated 10 months ago· 7
Sync Sink Ovum
  • any_input
  • value1
  • value2
  • value3
  • value4
  • value5
  • value6
  • value7
  • value8
  • value9
  • value10
  • value11
  • value12
  • value13
  • value14
  • value15
  • value16
  • value17
  • value18
  • value19
  • any_output
  • value1
  • value2
  • value3
  • value4
  • value5
  • value6
  • value7
  • value8
  • value9
  • value10
  • value11
  • value12
  • value13
  • value14
  • value15
  • value16
  • value17
  • value18
  • value19

Sync Sink is a no-op with a job. It accepts up to twenty inputs and passes them all straight through, doing zero work on the values - its whole purpose is to sit at the end of several parallel branches and make sure all of them finish before anything downstream runs. The node's own description is refreshingly honest: "Does nothing, used to force additional attached inputs to complete before the next node."

Why a do-nothing node exists

ComfyUI executes nodes in dependency order, but a graph with parallel branches can race: if your next step only needs one branch's output to proceed, it may start while a different branch is still grinding. Usually that's fine. Sometimes it's a real problem - you want to save a file only after the last of several generation branches is done, or you're timing a pipeline and the "stopwatch" needs the whole thing to have completed. A sink forces the issue: nothing after the sink runs until every branch feeding the sink has returned.

It's a borrowed idea - the pack's author credits KJNodes, which is why this node lives in the ovum/KJNodes category alongside other workflow helpers like widget-to-value readers.

How it works

Mechanically it's a strict pass-through. The first input (any_input) and up to nineteen optional inputs (value1 through value19) all flow to matching outputs, completely unchanged. If an optional input isn't connected, its output is simply None. The node returns all twenty slots, which means every upstream branch is wired through it, and the graph engine can't skip ahead past it.

Because the sockets are all wildcard *, you can sync literally anything - images, latents, strings, conditionings - through the same node, no type juggling.

Inputs and outputs

  • any_input (required, *) - the main flow, always passed to any_output.
  • value1 … value19 (optional, *) - the extra branches to synchronize. Unconnected ones pass through as None.
  • Outputs mirror the inputs: any_output plus value1 through value19.

There are no widgets. Wire, run, collect.

Installing it

Part of the comfy-ovum pack:

cd ComfyUI/custom_nodes
git clone https://github.com/sfinktah/comfy-ovum

Restart ComfyUI, or install via ComfyUI Manager → search "comfy-ovum". Light dependencies, no models.

Common gotchas

  • It synchronizes execution order, not data. Everything arrives unchanged, so if your branches produce conflicting values, a sink won't resolve that - you still need to pick one.
  • Empty optional slots output None. If a downstream node chokes on None, either wire that slot or don't rely on it.
  • Don't mistake it for a switch. There's no conditional logic here. If you wanted "pick between branches," you want an IfElse or switch node, not a sink.
Categoryovum/KJNodes

Inputs (20)

NameTypeDefaultDescription
any_input*
value1opt*
value2opt*
value3opt*
value4opt*
value5opt*
value6opt*
value7opt*
value8opt*
value9opt*
value10opt*
value11opt*
value12opt*
value13opt*
value14opt*
value15opt*
value16opt*
value17opt*
value18opt*
value19opt*

Outputs (20)

NameTypeDescription
any_output*
value1*
value2*
value3*
value4*
value5*
value6*
value7*
value8*
value9*
value10*
value11*
value12*
value13*
value14*
value15*
value16*
value17*
value18*
value19*