Pipe Packer
Fold 16 wires into one and declutter your canvas
- PACKED_PIPE
Every ComfyUI workflow starts tidy. Forty nodes later you're dragging the canvas through what looks like a plate of spaghetti, and one misclick on a wire reroutes your whole pipeline. Pipe Packer is a small quality-of-life node that exists to fix that: it takes up to 16 connections of literally any type and folds them into a single wire.
It comes from a tiny pack called ComfyUI-PackedPipes (one author, one idea, zero dependencies), and it sits in the same mental drawer as rgthree's Context and Context Big - bundle a bunch of signals into one pipe so a workflow too large to read becomes one you can still work in. The difference is Context is built around a fixed set of ComfyUI types, while Pipe Packer accepts anything: models, CLIP, latents, images, conditioning, samplers, ints, strings. No schema to learn, no dropdown to configure.
Where it really earns its keep is module boundaries. The README's flagship example is a modified Wan 2.2 I2V template that sequences scenes into a video longer than 5 seconds - a direct answer to the famous Wan "5-second problem." Each scene is a subgraph; the packer bundles everything that crosses the scene boundary into one wire, the last frame passes to the next scene as the first image, and the top level stays readable. The same trick applies to any block you keep copying.
How it works
The Python side is deliberately dumb. Pipe Packer declares no inputs at all in its node definition - all the work happens in a frontend JS file that adds up to 16 any-type input ports as you go. When you connect a wire, the port adopts that source's type (and label, unless you've set your own), so it always reflects what's actually feeding it. On execution, pack() just collects whatever inputs arrived into a Python dict and hands it out as a single PACKED_PIPE. That's the whole trick: a packed pipe is a dict, nothing more.
The bits that matter
The info_schema shows no required or optional inputs - everything is dynamic, so there's almost nothing to set:
- "Keep input names" toggle (on by default): when enabled, the node stops overwriting port labels with the source's output name, so custom labels you set stick. Flip it off if you'd rather ports auto-label.
- "Sync Unpackers" button: appears once your output is connected. Clicking it pushes the current port layout to every connected unpacker.
- Output:
PACKED_PIPE- wire it to a Pipe Unpacker on the far side, or into another Pipe Packer if you want nesting. A packed pipe can be packed again.
It also plays nice with graph furniture: rerouters and subgraph boundaries are walked through transparently, and packed-pipe links render in a dark magenta so you can spot them across the canvas.
Install
ComfyUI Manager: search "PackedPipes" (pack title "ComfyUI-PackedPipes") and install. Or the manual way:
cd ComfyUI/custom_nodes
git clone https://github.com/id7238/ComfyUI-PackedPipes
Restart ComfyUI. No pip requirements, no model downloads, nothing to configure - it's one Python file and one JS file. The other half of the pack, Pipe Unpacker, comes along for free.
Gotchas
The README warns in bold that it does not support the Nodes 2.0 theme, and the pack's manifest caps compatibility at requires-comfyui < 2.0.0. ComfyUI's Vue-based Nodes 2.0 rendering already broke big packs like rgthree, and this one is upfront that it doesn't port. If ports don't appear or the node renders wrong, switch back to the legacy canvas. Otherwise the only real limit is the 16-port cap - if you need more than 16 signals, nest two packers.
Inputs (0)
No inputs
Outputs (1)
| Name | Type | Description |
|---|---|---|
| PACKED_PIPE | PACKED_PIPE | — |