EndNode (Yogurt Nodes)
The node with 32 inputs, no outputs, and one very specific job
- data1
- data2
- data3
- data4
- data5
- data6
- data7
- data8
- data9
- data10
- data11
- data12
- data13
- data14
- data15
- data16
- data17
- data18
- data19
- data20
- data21
- data22
- data23
- data24
- data25
- data26
- data27
- data28
- data29
- data30
- data31
- data32
EndNode looks like a joke at first glance - up to 32 *-typed inputs, zero outputs, and all it does is return nothing. But it solves a real ComfyUI problem that trips people up the moment their graphs stop being a single straight line: how do you force a branch to actually run?
ComfyUI executes lazily. It only runs the nodes that are needed to produce the outputs you've hooked to something visible (a save node, a preview, a job result). If you've got a side-branch - a model merge, a stats calculation, a file write - that isn't feeding anything downstream, it may simply never execute, and you'll scratch your head wondering why nothing happened. EndNode fixes that by being an output node: whatever you wire into it is marked as "needed," so every branch connected to one of its 32 inputs gets computed, even the ones with no other consumer. It's the "please actually run this part of the graph" node.
That's also why it has 32 inputs. Want to force five different results to compute in one run? Plug all five in and the whole graph executes. It doubles as a tidy visual "end of pipeline" marker in big workflows - everything fans out, then fans back in here, and you can see at a glance what the graph is supposed to produce.
How it works
EndNode sets OUTPUT_NODE = True, which is the flag ComfyUI uses to decide what must run. Its execute just returns an empty tuple - there's genuinely no computation. The data1 through data32 inputs are all optional and *-typed, so you can attach almost anything without type-matching pain. The pack generates these dynamic inputs under the hood, which is why the numbering runs to 32.
Inputs
data1…data32- all optional, any type. Wire in the branches you want guaranteed to run. Most people use a handful; 32 is overkill for almost everything, but it's there.
Outputs
None. It's a sink. Whatever you need from those branches gets computed as a side effect.
Install
Ships in ComfyUI-YogurtNodes:
cd ComfyUI/custom_nodes
git clone https://github.com/yogurt7771/ComfyUI-YogurtNodes.git
cd ComfyUI-YogurtNodes
pip install -r requirements.txt
Or install via ComfyUI Manager (search "YogurtNodes") and restart. Look under "Yogurt Nodes" → Logic.
Common issues
- "I plugged it in and nothing changed" - it doesn't display anything; it just forces execution. If your side-effect (a save, a log) happens now but didn't before, it's working.
- "My graph still skips a branch" - make sure the node is actually wired to that branch, not just sitting in the graph.
- "Why would I ever use this?" - you wouldn't, until you hit the lazy-execution surprise. Then it's the cleanest fix.
Some packs solve this with a generic "Preview Any" or a dummy save. EndNode is the no-frills version: no preview window, no file, just a guarantee that the graph finishes what you started.
Inputs (32)
| Name | Type | Default | Description |
|---|---|---|---|
| data1opt | * | The 1th data. | |
| data2opt | * | The 2th data. | |
| data3opt | * | The 3th data. | |
| data4opt | * | The 4th data. | |
| data5opt | * | The 5th data. | |
| data6opt | * | The 6th data. | |
| data7opt | * | The 7th data. | |
| data8opt | * | The 8th data. | |
| data9opt | * | The 9th data. | |
| data10opt | * | The 10th data. | |
| data11opt | * | The 11th data. | |
| data12opt | * | The 12th data. | |
| data13opt | * | The 13th data. | |
| data14opt | * | The 14th data. | |
| data15opt | * | The 15th data. | |
| data16opt | * | The 16th data. | |
| data17opt | * | The 17th data. | |
| data18opt | * | The 18th data. | |
| data19opt | * | The 19th data. | |
| data20opt | * | The 20th data. | |
| data21opt | * | The 21th data. | |
| data22opt | * | The 22th data. | |
| data23opt | * | The 23th data. | |
| data24opt | * | The 24th data. | |
| data25opt | * | The 25th data. | |
| data26opt | * | The 26th data. | |
| data27opt | * | The 27th data. | |
| data28opt | * | The 28th data. | |
| data29opt | * | The 29th data. | |
| data30opt | * | The 30th data. | |
| data31opt | * | The 31th data. | |
| data32opt | * | The 32th data. |
Outputs (0)
No outputs