UnpackAny (Yogurt Nodes)
The other half of PackAny — split one bundled wire back into up to 32 outputs
- pack
- item1
- item2
- item3
- item4
- item5
- item6
- item7
- item8
- item9
- item10
- item11
- item12
- item13
- item14
- item15
- item16
- item17
- item18
- item19
- item20
- item21
- item22
- item23
- item24
- item25
- item26
- item27
- item28
- item29
- item30
- item31
- item32
ComfyUI's *-typed wires are great for keeping the graph tidy, but there's a limit to how many parallel cables you want running across a big workflow. That's the problem PackAny + UnpackAny solve: bundle a bunch of values into one wire, route that single wire wherever it needs to go, then split it back out at the other end. YogurtUnpackAny is the splitter - one packed input, and up to 32 individual item1–item32 outputs.
How it works
The required input is pack, typed PACK_TUPLE - a type that doesn't exist in vanilla ComfyUI, and that's the tell: this is the dedicated companion node for the pack's YogurtPackAny, which is the only node that naturally produces that type. Wire PackAny's output here, and each value you packed comes back out on its matching itemN output.
There are no knobs. Nothing to configure, nothing to misread. The pairing is positional: what you plugged into PackAny's item 1 comes out of UnpackAny's item 1, and so on. That positional contract is the whole design, and it's also the main thing to keep straight.
Why you'd bother
The payoff is workflow tidiness, the same way rgthree's Context/Context Big nodes bundle bundles of connections down one cable - just with far less machinery. When you're passing the same set of values (a seed, a model name, a prompt fragment, a boolean) through several stages, bundling them into one wire means dragging one line across the canvas instead of four, and it means one node to glance at when you want to see what's traveling. The pack positions this as plain "pack/unpack" utility, and it works best in bigger graphs where wire spaghetti is a real cost.
A few practical notes:
- Unused outputs are fine. You don't have to route all 32.
- If an output comes out empty, check the position at the PackAny end - the pairing is index-for-index, not by name.
- It pairs with
YogurtPackAnyspecifically. Feeding it an arbitrary tuple from elsewhere may not unpack the way you expect.
Installing it
Part of the Yogurt Nodes pack (YogurtNodes/Logic), one install for all of it:
cd ComfyUI/custom_nodes
git clone https://github.com/yogurt7771/ComfyUI-YogurtNodes.git
cd ComfyUI-YogurtNodes
pip install -r requirements.txt
Or search "ComfyUI-YogurtNodes" in ComfyUI Manager and hit install. Restart. No models, no keys, pure graph plumbing.
Common issues
The classic mistake is unpacking at the wrong index. Since the contract is positional and the inputs all look alike, it's easy to wire PackAny's item 7 into what you think is the seed output. When something arrives empty or wrong-shaped, trace it back to which slot it actually occupied at the pack end rather than assuming the names match your intentions. The other one: don't feed it a bare * value from a non-pack node - the PACK_TUPLE input type is picky, which is a feature, because it's what keeps you from plugging the wrong thing in silently.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| pack | PACK_TUPLE | — |
Outputs (32)
| Name | Type | Description |
|---|---|---|
| item1 | * | — |
| item2 | * | — |
| item3 | * | — |
| item4 | * | — |
| item5 | * | — |
| item6 | * | — |
| item7 | * | — |
| item8 | * | — |
| item9 | * | — |
| item10 | * | — |
| item11 | * | — |
| item12 | * | — |
| item13 | * | — |
| item14 | * | — |
| item15 | * | — |
| item16 | * | — |
| item17 | * | — |
| item18 | * | — |
| item19 | * | — |
| item20 | * | — |
| item21 | * | — |
| item22 | * | — |
| item23 | * | — |
| item24 | * | — |
| item25 | * | — |
| item26 | * | — |
| item27 | * | — |
| item28 | * | — |
| item29 | * | — |
| item30 | * | — |
| item31 | * | — |
| item32 | * | — |