Nodes/NH-Nodes/Pack Universal (NH)
ComfyUI Node

Pack Universal (NH)

Collapsing a dozen wires into one tidy pipe

By jetthuangai·Created 5 months ago·Updated 21 days ago· 6
Pack Universal (NH)
  • input_0
  • input_1
  • input_2
  • input_3
  • input_4
  • input_5
  • input_6
  • input_7
  • input_8
  • input_9
  • package

There's a moment in every sprawling ComfyUI workflow where the graph stops being a pipeline and starts being a plate of spaghetti, and the fix is almost always a pipe: bundle a bunch of values into one connection, run it down a single wire, split it back out where you need it. That's exactly what Pack Universal (NH) is for.

It takes up to ten inputs - input_0 through input_9, each of the ComfyUI wildcard type *, so literally anything: images, latents, strings, models, masks - and packs them into a single NH_UNIVERSAL_PIPE output called package. Its counterpart, Unpack Universal (NH) in the same menu, takes that pipe back apart by index.

The mechanism is dead simple under the hood. The pack node just collects every connected input value into a Python list, in slot order, and hands the list downstream. The unpack node reads slot index from that list and returns it. No serialization, no magic, no state - which is exactly why it's reliable. It's the same "carry a dozen wires down a single line" trick the KB's node-plumbing doc describes as the second pillar of the plumbing layer: legibility. One wire across the canvas instead of ten.

The thing to get right: order is the contract

Because the pipe is a plain positional list, the only rule that matters is slot order. input_0 becomes index 0, input_1 becomes index 1, and so on. There are no names in the pipe - if you wire a string into slot 0 one day and an image into slot 0 the next, downstream Unpack nodes will happily hand you whichever type is in that slot. Keep a mental map (or a note node) of what lives where, and don't shuffle inputs after you've built the graph around them.

Two related gotchas. First, unconnected optional inputs just don't land in the list - Pack packs only what's wired, so the list length is the number of connected inputs, not ten. That's usually what you want, but it means an unpack index can go out of range and return None if you've only connected three slots. Second, this is a workflow-local pipe. It isn't saved to any file and it can't cross workflow boundaries; it's purely a graph-cleaning tool. If you need to persist values, look at nodes that write files, not this one.

Install

It ships with NH-Nodes, so:

  • ComfyUI Manager → search NH-Nodes → install → restart ComfyUI. Or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/jetthuangai/NH-Nodes.git
cd NH-Nodes
pip install -r requirements.txt

Then restart ComfyUI.

MIT licensed, no extra downloads.

Common issues

The classic frustration is unpack returning None - that's the out-of-range index problem above; double-check how many slots you actually connected. And if you rewire a slot mid-workflow and everything downstream suddenly behaves differently, it's not corruption, it's the positional contract doing its job. When a pipe is the wrong tool - you need one specific value threaded through many nodes, or you want named fields - a plain wire or a dedicated node type beats a pipe every time. Pipes win at bunching, not at describing.

CategoryNH-Nodes/Utils/Pipe

Inputs (10)

NameTypeDefaultDescription
input_0opt*
input_1opt*
input_2opt*
input_3opt*
input_4opt*
input_5opt*
input_6opt*
input_7opt*
input_8opt*
input_9opt*

Outputs (1)

NameTypeDescription
packageNH_UNIVERSAL_PIPE