Pipe IN 988
Shove a dozen loose wires into one tidy pipe
- pipe
- input_0
- input_1
- input_2
- input_3
- input_4
- input_5
- input_6
- input_7
- input_8
- input_9
- pipe
At some point every ComfyUI graph becomes a plate of spaghetti: the seed goes to the sampler, the prompt to the encoder, a model path to three different places, and your once-readable workflow is a tangle of wires you're afraid to touch. Pipe IN 988 is the "declutter this" node - it bundles up to ten signals of any type into a single PIPE988 connection, and its partner Pipe OUT 988 unpacks them on the other side.
It belongs to the plumbing layer the KB's node-plumbing essay maps out - the nodes whose whole job is fighting repetition and illegibility in large graphs. A pipe is the visual answer to the "wire every value to five places" problem: one thick line between the two pipe nodes instead of a fan of thin ones.
How it works
The node has a pipe input (a passthrough) plus input_0 through input_9, and it merges them all into one PIPE988 output. Two behaviors make it more than a dumb multiplexer:
- Pipe pass-through: wire an incoming
PIPE988into the first input and it provides defaults for all slots - individual inputs you connect then override them. That's how you chain pipes end-to-end and how a shared "context" pipe stays alive down a long graph. - Autogrowing, self-labelling inputs: the frontend shows
connected + 1slots (min 1, up to 10), and each socket detects its type from the connected source and recolors/labels itself. So you see "IMAGE" in green, "STRING" in its color, and so on - the node teaches you what's in the pipe as you build it.
The inputs that matter
Honestly, all ten input_0…input_9 are the same: any type, whatever you want carried. The thing to get right is the order - the sockets have stable indices, and Pipe OUT presents them in that same order, so slot 0 in is slot 0 out. Keep a mental map, or use the auto-labelling to remember for you.
Outputs
One output: pipe (type PIPE988), carrying everything. Connect it to Pipe OUT 988 to unpack, or to another Pipe IN's pipe input to chain.
When to reach for it
Any workflow where a bundle of values travels as one unit - the classic case in this pack is an LLM or sampler-config graph where system message, prompt, model, seed and settings are all produced in one place and consumed elsewhere. Bundle them at the source, unpack where they're needed. It's also the pack's answer to "convert widget to input everywhere": if you find yourself converting a dozen widgets and wiring them across the graph, a pipe is usually cleaner.
Gotchas
- Type recovery depends on the other end: Pipe OUT can only relabel sockets if it can trace back to a Pipe IN; keep the pair's types in sync.
- Index discipline: the slots are positional. Reorder your inputs and you've silently swapped what the other end receives - check the socket labels after you add a slot.
- It's pure plumbing: it does not validate, transform, or guarantee types. What goes in is what comes out.
Install
Part of ComfyUI-988: Manager (search "ComfyUI-988") or:
cd ComfyUI/custom_nodes
git clone https://github.com/kajan988/ComfyUI-988
cd ComfyUI-988
pip install -r requirements.txt
Then restart. The autogrow/labelling behavior lives in the pack's js/pipe/ frontend extension - if sockets don't relabel, a browser refresh after install fixes the extension load.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| pipeopt | PIPE988 | — | |
| input_0opt | * | — | |
| input_1opt | * | — | |
| input_2opt | * | — | |
| input_3opt | * | — | |
| input_4opt | * | — | |
| input_5opt | * | — | |
| input_6opt | * | — | |
| input_7opt | * | — | |
| input_8opt | * | — | |
| input_9opt | * | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| pipe | PIPE988 | Pipe pass-through — contains all bundled signals. |