ComfyUI Node

Pipe Unpacker

The return trip for ComfyUI's 16-in-one wire

By id7238·Created 8 months ago·Updated 7 months ago· 5
Pipe Unpacker
  • packed_pipe
  • output_0
  • output_1
  • output_2
  • output_3
  • output_4
  • output_5
  • output_6
  • output_7
  • output_8
  • output_9
  • output_10
  • output_11
  • output_12
  • output_13
  • output_14
  • output_15

Pipe Unpacker is the other half of the deal. Where Pipe Packer folds up to 16 connections into a single wire, Pipe Unpacker waits at the far end and unfolds them back into up to 16 separate outputs. One pack, two nodes, one idea: keep the canvas readable by only showing the wires that matter between the sections that matter.

You'll rarely reach for this node on its own - it only exists to mirror a packer. The workflow shape is: Pipe Packer collects a bundle at the start of a messy section, the single magenta PACKED_PIPE link crosses the empty space (or a subgraph boundary), and Pipe Unpacker restores the individual signals where you actually need them. The pack's README demonstrates it in a modified Wan 2.2 I2V workflow that chains scenes into a video longer than 5 seconds - each scene subgraph hands a packed pipe to the next one, and the unpacker re-exposes the model, conditioning, and last frame for the next pass. That's the answer to the Wan "5-second problem" if you don't want to hand-splice clips.

How it works

Mechanically it's the mirror image of the packer. The backend takes one required input, packed_pipe (type PACKED_PIPE, which is really just a Python dict), and unpack() returns the dict's values in order - so whatever went into the packer as input 0 comes out as output_0, input 1 as output_1, and so on. All sixteen outputs are typed * (any), so they plug into whatever you feed them: models, latents, images, conditioning, sampler settings.

The clever part is the frontend. Because the packer's ports change as you wire them, the unpacker's outputs can't be static - so a JS file keeps them synced to the packer's current layout, adding, renaming, and even disconnecting outputs to match. It does this automatically when you connect the input wire, and the packer's Sync Unpackers button forces a refresh across everything it can find, walking through rerouters and subgraphs to do it.

What you actually set

There's one input and zero knobs:

  • packed_pipe (required): the single wire coming from a Pipe Packer.
  • Outputs output_0 through output_15: the unpacked signals, in packer order. If the packer only has five ports filled, you get five outputs.

One thing worth knowing: outputs sync after the input is connected, not before. If you wire the outputs first, or the packer can't be found (a dead reroute, a disconnected mid-section), the labels get a trailing " ?" - the node's way of telling you it's not in sync. Connect the input, hit Sync Unpackers on the packer, and the ports snap into place.

Install

Same pack, same install - Pipe Packer and Pipe Unpacker ship together in ComfyUI-PackedPipes, so one install gets you both. ComfyUI Manager: search "PackedPipes". Manual:

cd ComfyUI/custom_nodes
git clone https://github.com/id7238/ComfyUI-PackedPipes

Restart ComfyUI and you'll find both under utils. No dependencies, no model files to download.

Gotchas

The big one is shared with the packer: the manifest declares requires-comfyui < 2.0.0 and the README says the Nodes 2.0 theme isn't supported, so on ComfyUI 2.x's Vue rendering stick with the legacy canvas. The other gotcha is that sync is connection-driven, not automatic on load - if you open a workflow and outputs look wrong or still carry the " ?" suffix, the packer and unpacker haven't talked yet. That's a refresh, not a bug.

Categoryutils

Inputs (1)

NameTypeDefaultDescription
packed_pipePACKED_PIPE

Outputs (16)

NameTypeDescription
output_0*
output_1*
output_2*
output_3*
output_4*
output_5*
output_6*
output_7*
output_8*
output_9*
output_10*
output_11*
output_12*
output_13*
output_14*
output_15*