ComfyUI Node

XPipe

Twenty wires in one, and a graph that finally stays readable

By Xz3r0-M·Created 8 months ago·Updated about 6 hours ago· 13
XPipe
  • xpipe_in
  • value_1
  • value_2
  • value_3
  • value_4
  • value_5
  • value_6
  • value_7
  • value_8
  • value_9
  • value_10
  • value_11
  • value_12
  • value_13
  • value_14
  • value_15
  • value_16
  • value_17
  • value_18
  • value_19
  • value_20
  • value_21
  • value_22
  • value_23
  • value_24
  • value_25
  • value_26
  • value_27
  • value_28
  • value_29
  • value_30
  • value_31
  • value_32
  • value_33
  • value_34
  • value_35
  • value_36
  • value_37
  • value_38
  • value_39
  • value_40
  • value_41
  • value_42
  • value_43
  • value_44
  • value_45
  • value_46
  • value_47
  • value_48
  • value_49
  • value_50
  • xpipe_out
  • value_1
  • value_2
  • value_3
  • value_4
  • value_5
  • value_6
  • value_7
  • value_8
  • value_9
  • value_10
  • value_11
  • value_12
  • value_13
  • value_14
  • value_15
  • value_16
  • value_17
  • value_18
  • value_19
  • value_20
  • value_21
  • value_22
  • value_23
  • value_24
  • value_25
  • value_26
  • value_27
  • value_28
  • value_29
  • value_30
  • value_31
  • value_32
  • value_33
  • value_34
  • value_35
  • value_36
  • value_37
  • value_38
  • value_39
  • value_40
  • value_41
  • value_42
  • value_43
  • value_44
  • value_45
  • value_46
  • value_47
  • value_48
  • value_49
  • value_50
port_names[]
type_warningtrue

Big ComfyUI workflows die by a thousand wires. The fix the ecosystem settled on is bundling - carry a whole group of related values down one cable and unpack it at the other end, the way rgthree's Context nodes do. XPipe is this pack's take: a pipe-bundle node with up to 20 any-type slots, per-slot overrides, and a single bundle wire that carries both the data and the slot names. If you've ever tried to move a dozen settings from a control section to a sampler section and watched the canvas turn into a spiderweb, this is the node that collapses that spiderweb into one line.

How it works

Each of the 20 slots (value_1value_20) is a MatchType input/output pair, so slot 3 can carry an IMAGE while slot 7 carries a FLOAT - every slot independently conforms to whatever you connect. The bundle wire is the xpipe_in / xpipe_out pair using the pack's custom xpipe type. Connect one XPipe's xpipe_out to another's xpipe_in and the entire group of values plus their names travels as one bundle.

The merge logic is where it gets useful. When a slot has its own input connected, that value overrides whatever came in the bundle at that position; when a slot is empty, it falls back to the bundle's value. So you can chain two XPipes and surgically override just the slots you care about at each stage, which makes it a building block for "config here, override there" workflows. The bundle format is a simple dict tagged __xpipe_bundle__ with a version number, so the node can detect a real bundle vs. garbage on the input.

Port names are customizable - you give slot 5 the name "seed" and slot 12 "cfg" and those names travel in the bundle, so downstream nodes and panels know what each value means without you memorizing positions. The names live in port_names, a serialized JSON string that the XPipe naming panel manages. The tooltip is blunt: don't edit it by hand.

Inputs that matter

  • xpipe_in - the upstream bundle.
  • value_1 … value_20 - the individual slots; a connected value overrides the bundle at that position.
  • port_names - the slot-name JSON, managed by the panel.

Outputs: xpipe_out (the new bundle) plus value_1 … value_20 (the merged values, so you can unpack at the far end or tap individual slots).

Installing it

Part of ComfyUI-Xz3r0-Nodes. ComfyUI Manager: search ComfyUI-Xz3r0-Nodes, or:

cd ComfyUI/custom_nodes
git clone https://github.com/Xz3r0-M/ComfyUI-Xz3r0-Nodes.git
cd ComfyUI-Xz3r0-Nodes
pip install -r requirements.txt

Restart ComfyUI. No extra dependencies.

Gotchas

The author is refreshingly honest here: in the changelog they admit the current interface is a compromise - ComfyUI's frontend constraints forced a less slick design than they wanted, with some efficiency loss in the UI. So expect the naming panel to feel a little clunky; the data machinery is solid, the polish is the trade-off. Second, keep a mental model of the override rule: a connected slot always beats the bundle, so if you're debugging "why isn't my override applying," it's usually the reverse - a leftover connection is overriding the bundle. And 20 slots is a lot of ports on one node; on a small canvas it's visually dense, so the bundle wire is really the way to use it end-to-end. If you just need three wires grouped, rgthree's Context might be lighter; at ten-plus values, XPipe's flat slot model shines.

Category♾️ Xz3r0/Workflow-Processing

Inputs (53)

NameTypeDefaultDescription
port_namesSTRING[]Serialized JSON list of slot names, managed by the XPipe naming panel. Do not edit by hand.
type_warningBOOLEANtrueShow visual warning on links and output ports when a type mismatch is detected. Disable to hide the warning effect.
xpipe_inoptxpipeConnect an upstream XPipe bundle here to receive the whole group of data and names at once. A connected slot input still overrides the same position.
value_1optCOMFY_MATCHTYPE_V3Slot 1 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_2optCOMFY_MATCHTYPE_V3Slot 2 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_3optCOMFY_MATCHTYPE_V3Slot 3 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_4optCOMFY_MATCHTYPE_V3Slot 4 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_5optCOMFY_MATCHTYPE_V3Slot 5 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_6optCOMFY_MATCHTYPE_V3Slot 6 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_7optCOMFY_MATCHTYPE_V3Slot 7 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_8optCOMFY_MATCHTYPE_V3Slot 8 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_9optCOMFY_MATCHTYPE_V3Slot 9 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_10optCOMFY_MATCHTYPE_V3Slot 10 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_11optCOMFY_MATCHTYPE_V3Slot 11 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_12optCOMFY_MATCHTYPE_V3Slot 12 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_13optCOMFY_MATCHTYPE_V3Slot 13 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_14optCOMFY_MATCHTYPE_V3Slot 14 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_15optCOMFY_MATCHTYPE_V3Slot 15 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_16optCOMFY_MATCHTYPE_V3Slot 16 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_17optCOMFY_MATCHTYPE_V3Slot 17 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_18optCOMFY_MATCHTYPE_V3Slot 18 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_19optCOMFY_MATCHTYPE_V3Slot 19 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_20optCOMFY_MATCHTYPE_V3Slot 20 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_21optCOMFY_MATCHTYPE_V3Slot 21 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_22optCOMFY_MATCHTYPE_V3Slot 22 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_23optCOMFY_MATCHTYPE_V3Slot 23 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_24optCOMFY_MATCHTYPE_V3Slot 24 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_25optCOMFY_MATCHTYPE_V3Slot 25 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_26optCOMFY_MATCHTYPE_V3Slot 26 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_27optCOMFY_MATCHTYPE_V3Slot 27 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_28optCOMFY_MATCHTYPE_V3Slot 28 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_29optCOMFY_MATCHTYPE_V3Slot 29 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_30optCOMFY_MATCHTYPE_V3Slot 30 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_31optCOMFY_MATCHTYPE_V3Slot 31 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_32optCOMFY_MATCHTYPE_V3Slot 32 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_33optCOMFY_MATCHTYPE_V3Slot 33 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_34optCOMFY_MATCHTYPE_V3Slot 34 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_35optCOMFY_MATCHTYPE_V3Slot 35 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_36optCOMFY_MATCHTYPE_V3Slot 36 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_37optCOMFY_MATCHTYPE_V3Slot 37 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_38optCOMFY_MATCHTYPE_V3Slot 38 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_39optCOMFY_MATCHTYPE_V3Slot 39 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_40optCOMFY_MATCHTYPE_V3Slot 40 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_41optCOMFY_MATCHTYPE_V3Slot 41 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_42optCOMFY_MATCHTYPE_V3Slot 42 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_43optCOMFY_MATCHTYPE_V3Slot 43 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_44optCOMFY_MATCHTYPE_V3Slot 44 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_45optCOMFY_MATCHTYPE_V3Slot 45 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_46optCOMFY_MATCHTYPE_V3Slot 46 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_47optCOMFY_MATCHTYPE_V3Slot 47 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_48optCOMFY_MATCHTYPE_V3Slot 48 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_49optCOMFY_MATCHTYPE_V3Slot 49 input (optional, accepts any data). Overrides the same slot from the bundle when present.
value_50optCOMFY_MATCHTYPE_V3Slot 50 input (optional, accepts any data). Overrides the same slot from the bundle when present.

Outputs (51)

NameTypeDescription
xpipe_outxpipeSend the current grouped data and names onward as a single XPipe bundle connection.
value_1COMFY_MATCHTYPE_V3Slot 1 output (data or bundle fallback)
value_2COMFY_MATCHTYPE_V3Slot 2 output (data or bundle fallback)
value_3COMFY_MATCHTYPE_V3Slot 3 output (data or bundle fallback)
value_4COMFY_MATCHTYPE_V3Slot 4 output (data or bundle fallback)
value_5COMFY_MATCHTYPE_V3Slot 5 output (data or bundle fallback)
value_6COMFY_MATCHTYPE_V3Slot 6 output (data or bundle fallback)
value_7COMFY_MATCHTYPE_V3Slot 7 output (data or bundle fallback)
value_8COMFY_MATCHTYPE_V3Slot 8 output (data or bundle fallback)
value_9COMFY_MATCHTYPE_V3Slot 9 output (data or bundle fallback)
value_10COMFY_MATCHTYPE_V3Slot 10 output (data or bundle fallback)
value_11COMFY_MATCHTYPE_V3Slot 11 output (data or bundle fallback)
value_12COMFY_MATCHTYPE_V3Slot 12 output (data or bundle fallback)
value_13COMFY_MATCHTYPE_V3Slot 13 output (data or bundle fallback)
value_14COMFY_MATCHTYPE_V3Slot 14 output (data or bundle fallback)
value_15COMFY_MATCHTYPE_V3Slot 15 output (data or bundle fallback)
value_16COMFY_MATCHTYPE_V3Slot 16 output (data or bundle fallback)
value_17COMFY_MATCHTYPE_V3Slot 17 output (data or bundle fallback)
value_18COMFY_MATCHTYPE_V3Slot 18 output (data or bundle fallback)
value_19COMFY_MATCHTYPE_V3Slot 19 output (data or bundle fallback)
value_20COMFY_MATCHTYPE_V3Slot 20 output (data or bundle fallback)
value_21COMFY_MATCHTYPE_V3Slot 21 output (data or bundle fallback)
value_22COMFY_MATCHTYPE_V3Slot 22 output (data or bundle fallback)
value_23COMFY_MATCHTYPE_V3Slot 23 output (data or bundle fallback)
value_24COMFY_MATCHTYPE_V3Slot 24 output (data or bundle fallback)
value_25COMFY_MATCHTYPE_V3Slot 25 output (data or bundle fallback)
value_26COMFY_MATCHTYPE_V3Slot 26 output (data or bundle fallback)
value_27COMFY_MATCHTYPE_V3Slot 27 output (data or bundle fallback)
value_28COMFY_MATCHTYPE_V3Slot 28 output (data or bundle fallback)
value_29COMFY_MATCHTYPE_V3Slot 29 output (data or bundle fallback)
value_30COMFY_MATCHTYPE_V3Slot 30 output (data or bundle fallback)
value_31COMFY_MATCHTYPE_V3Slot 31 output (data or bundle fallback)
value_32COMFY_MATCHTYPE_V3Slot 32 output (data or bundle fallback)
value_33COMFY_MATCHTYPE_V3Slot 33 output (data or bundle fallback)
value_34COMFY_MATCHTYPE_V3Slot 34 output (data or bundle fallback)
value_35COMFY_MATCHTYPE_V3Slot 35 output (data or bundle fallback)
value_36COMFY_MATCHTYPE_V3Slot 36 output (data or bundle fallback)
value_37COMFY_MATCHTYPE_V3Slot 37 output (data or bundle fallback)
value_38COMFY_MATCHTYPE_V3Slot 38 output (data or bundle fallback)
value_39COMFY_MATCHTYPE_V3Slot 39 output (data or bundle fallback)
value_40COMFY_MATCHTYPE_V3Slot 40 output (data or bundle fallback)
value_41COMFY_MATCHTYPE_V3Slot 41 output (data or bundle fallback)
value_42COMFY_MATCHTYPE_V3Slot 42 output (data or bundle fallback)
value_43COMFY_MATCHTYPE_V3Slot 43 output (data or bundle fallback)
value_44COMFY_MATCHTYPE_V3Slot 44 output (data or bundle fallback)
value_45COMFY_MATCHTYPE_V3Slot 45 output (data or bundle fallback)
value_46COMFY_MATCHTYPE_V3Slot 46 output (data or bundle fallback)
value_47COMFY_MATCHTYPE_V3Slot 47 output (data or bundle fallback)
value_48COMFY_MATCHTYPE_V3Slot 48 output (data or bundle fallback)
value_49COMFY_MATCHTYPE_V3Slot 49 output (data or bundle fallback)
value_50COMFY_MATCHTYPE_V3Slot 50 output (data or bundle fallback)