SAX Node Collector
Aggregate any node's outputs into one tidy bundle
- slot_0
- slot_1
- slot_2
- slot_3
- slot_4
- slot_5
- slot_6
- slot_7
- slot_8
- slot_9
- slot_10
- slot_11
- slot_12
- slot_13
- slot_14
- slot_15
- slot_16
- slot_17
- slot_18
- slot_19
- slot_20
- slot_21
- slot_22
- slot_23
- slot_24
- slot_25
- slot_26
- slot_27
- slot_28
- slot_29
- slot_30
- slot_31
- out_0
- out_1
- out_2
- out_3
- out_4
- out_5
- out_6
- out_7
- out_8
- out_9
- out_10
- out_11
- out_12
- out_13
- out_14
- out_15
- out_16
- out_17
- out_18
- out_19
- out_20
- out_21
- out_22
- out_23
- out_24
- out_25
- out_26
- out_27
- out_28
- out_29
- out_30
- out_31
Every big ComfyUI workflow eventually turns into a spaghetti plate of wires - three output sockets from a sampler, four from an upscaler, all fanning out to different consumers. SAX Node Collector is the decluttering node: you register up to 32 source nodes, and it aggregates all their outputs into its own output slots, so one collector can replace a tangle of long wires with a tidy single junction. The pack frames it as the "simplify complex wiring" node, and it's a direct attack on the messiest part of graph building.
How it works
There's a critical design choice here, and it's the thing that separates this from other set/get-style nodes: it uses real wiring connections and runs on ComfyUI's normal execution graph. No hidden global store, no magic registration that can silently desync. You add a source via "+ Add Source", pick nodes from a picker, and the collector wires itself to their outputs and mirrors those outputs as out_0 through out_31 (32 slots, matching the 32 source cap). The slot_0–slot_31 inputs accept the ANY wildcard type, so a collector can carry models, images, latents, strings - whatever its sources emit.
The genuinely smart part is the bookkeeping. The collector watches its sources and:
- Auto-detects when a source adds, removes, or renames output slots, and re-syncs its own slots in response - preserving downstream connections on the same logical slot even when the upstream node reshuffles.
- Keeps a source registered only as long as the upstream node actually exists. Transient stuff - paste, undo, a subgraph collapse - doesn't nuke the entry; the node has to be really deleted.
- Restores source connections after copy & paste, so sharing the workflow doesn't break it.
- Has a "Show links" pill that toggles the source wires' visibility, so you can hide the aggregation wires when you don't need to see them, and click a source's name to pan to it.
Why you'd bother
The plumbing doc's core tension is legibility vs. wire count - more nodes, fewer visible wires. This node is firmly on the "fewer visible wires" side, with a safety valve: because the connections are real (not a hidden store), a downstream node still sees actual upstream data, and the collector re-syncs itself when things change. That "connections never break during editing" promise is the headline - in a stock graph, renaming an output socket silently breaks the wires downstream; here it re-syncs instead.
It's also a genuinely useful organizational tool when you're not trying to be clever: gather all the intermediate outputs you might want to inspect in one place (a "junk drawer" collector feeding debug nodes), or collapse a multi-output stage into one bundle that a subgraph-style workflow can consume.
The honest caveat
A collector that hides wires can also hide what feeds what - the mirror image of legibility. If you're debugging a workflow where the collector is doing too much, the KB's plumbing doc's warning applies: with forty visible wires you can see the problem; with a collector you have to expand it to find it. Use it where the graph is stable and legibility is the binding constraint, not while you're still iterating on the wiring itself.
Installing
Part of the pack:
cd ComfyUI/custom_nodes
git clone https://github.com/so16tm/SAX_Bridge
SAX/Bridge/Collect → SAX Node Collector. Its siblings are SAX Image Collector (batch up IMAGE outputs for comparison) and SAX Pipe Collector (pick the first valid pipe from several routes) - the three cover the aggregation needs of most workflows.
Inputs (32)
| Name | Type | Default | Description |
|---|---|---|---|
| slot_0opt | * | — | |
| slot_1opt | * | — | |
| slot_2opt | * | — | |
| slot_3opt | * | — | |
| slot_4opt | * | — | |
| slot_5opt | * | — | |
| slot_6opt | * | — | |
| slot_7opt | * | — | |
| slot_8opt | * | — | |
| slot_9opt | * | — | |
| slot_10opt | * | — | |
| slot_11opt | * | — | |
| slot_12opt | * | — | |
| slot_13opt | * | — | |
| slot_14opt | * | — | |
| slot_15opt | * | — | |
| slot_16opt | * | — | |
| slot_17opt | * | — | |
| slot_18opt | * | — | |
| slot_19opt | * | — | |
| slot_20opt | * | — | |
| slot_21opt | * | — | |
| slot_22opt | * | — | |
| slot_23opt | * | — | |
| slot_24opt | * | — | |
| slot_25opt | * | — | |
| slot_26opt | * | — | |
| slot_27opt | * | — | |
| slot_28opt | * | — | |
| slot_29opt | * | — | |
| slot_30opt | * | — | |
| slot_31opt | * | — |
Outputs (32)
| Name | Type | Description |
|---|---|---|
| out_0 | * | — |
| out_1 | * | — |
| out_2 | * | — |
| out_3 | * | — |
| out_4 | * | — |
| out_5 | * | — |
| out_6 | * | — |
| out_7 | * | — |
| out_8 | * | — |
| out_9 | * | — |
| out_10 | * | — |
| out_11 | * | — |
| out_12 | * | — |
| out_13 | * | — |
| out_14 | * | — |
| out_15 | * | — |
| out_16 | * | — |
| out_17 | * | — |
| out_18 | * | — |
| out_19 | * | — |
| out_20 | * | — |
| out_21 | * | — |
| out_22 | * | — |
| out_23 | * | — |
| out_24 | * | — |
| out_25 | * | — |
| out_26 | * | — |
| out_27 | * | — |
| out_28 | * | — |
| out_29 | * | — |
| out_30 | * | — |
| out_31 | * | — |