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

Unpack Universal (NH)

Unpacking the Universal Pipe

By jetthuangai·Created 5 months ago·Updated 21 days ago· 6
Unpack Universal (NH)
  • package
  • pipe
  • item
index0

Unpack Universal (NH) is the other end of a trick the pack calls the "universal pipe": bundle up to ten values into a single package on one node, drag one wire across the graph, and pop values back out here. It's the generic-data version of the context-bus pattern every ComfyUI power user eventually reaches for - except this one doesn't care what's inside, because everything is * typed.

You'll almost never use this node alone. Its partner is Pack Universal (NH), which has ten optional inputs (input_0 through input_9) and outputs one NH_UNIVERSAL_PIPE. You pack a handful of values - a seed, a filename, a strength, a boolean - then Unpack pulls whichever one you need at the destination. The graph keeps one tidy wire instead of five that cross the whole canvas.

How it works

The package is just a Python list under the hood, and the order is fixed by how you packed it. Three inputs:

  • index - which slot to pull, 0 through 9, matching the pack's input numbering.
  • package - the pipe from Pack Universal (NH).
  • pipe - an alias input, also NH_UNIVERSAL_PIPE, for wiring a pipe that came from somewhere else. If both are connected, package wins.

One output: item, typed *, which means it can carry anything - the value is whatever you put in that slot. If the index is out of range (the pack only filled 3 slots and you ask for slot 7), you get None back, which then behaves the standard ComfyUI way: an optional input downstream reading None knows nothing is connected.

The two rules that actually matter

Order is the contract. There are no labels in a pipe - slot 3 is slot 3, full stop. You must pack and unpack in the same order, and if you rearrange the pack inputs you silently break every unpacker on the wire. This is the exact stale-context failure the node-plumbing docs warn about with every pipe scheme: the connection is present, the contents are just wrong, and nothing tells you.

Don't use it for models and latents you're actively iterating on. A pipe is for the boring, stable values - numbers, filenames, strings that rarely change. If you're tweaking a strength and the whole workflow depends on seeing it, keep it on an explicit wire so you can actually read it. The universal pipe is a legibility tool; it buys you tidy graphs at the price of hiding what's inside.

When to reach for it

Long, linear workflows that pass a set of parameters down a chain, or shared workflow templates where you want a clean "inputs in, pipe out" section. It pairs naturally with the pack's indexed loaders - pack a few filenames and a switch index, and drive selection at the end. It's also worth knowing that Pack Universal's inputs are all optional, so unconnected slots just don't make it into the list - pack input_0 and input_2 only and the list is 2 items long.

Install

Ships in NH-Nodes. ComfyUI Manager → search NH-Nodes → install → restart:

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

No models, no extra downloads. Pure plumbing, and a genuinely useful one once you've hit your first wall of spaghetti.

CategoryNH-Nodes/Utils/Pipe

Inputs (3)

NameTypeDefaultDescription
indexINT00–9
packageoptNH_UNIVERSAL_PIPE
pipeoptNH_UNIVERSAL_PIPE

Outputs (1)

NameTypeDescription
item*