Bundle Pack
Stuff up to 32 named values into one wire and declutter your graph
- bundle
- value1
- value2
- value3
- value4
- value5
- value6
- value7
- value8
- value9
- value10
- value11
- value12
- value13
- value14
- value15
- value16
- value17
- value18
- value19
- value20
- value21
- value22
- value23
- value24
- value25
- value26
- value27
- value28
- value29
- value30
- value31
- value32
- bundle
Every serious ComfyUI workflow eventually hits the wall where ten values need to travel together and the graph looks like a bowl of spaghetti. Bundle Pack is Nifty Nodes' answer: it packs up to 32 values of any type into a single BUNDLE wire, keyed by name, so one connection carries the whole payload. It's the same itch rgthree's Context nodes scratch, but with named keys and dot-notation nesting instead of fixed slots.
How it works
You connect values into the auto-growing slots (value1, value2, … up to 32), and each slot's renamed label becomes the key. Double-click a slot label, type seed, and from then on that value lives in the bundle under seed. This is the critical bit: the key isn't "value1" forever - it's whatever you rename it to. Keys support dot notation too, so a slot labeled camera.fov nests one level deep and render.output.format goes deeper.
The output is a single bundle socket of type BUNDLE, ready to travel anywhere - into a Bundle Unpack, a Bundle Get, or on to another Pack for merging.
Three controls matter on the node:
- count - how many value slots to show (1–32). You don't have to display all 32; set it to what you're packing.
- hide_links - hides the incoming wires on this node. Pure cosmetics, but if you're packing a dozen values, this is the difference between "clean hub" and "octopus."
- bundle (optional) - an incoming bundle to merge into. New values overwrite keys with the same name; everything else is preserved. This is how you incrementally build up a shared settings object across multiple nodes: one node adds the seed, another adds the dimensions, both merge into the same bundle.
Why you'd reach for it
Two reasons. First, decluttering: settings, prompts, flags, and model names that all need to reach a distant section of graph collapse into one wire. Second, composition: because a bundle is just a dict of named values, you can build it up in stages (Pack → Set → merge) instead of one giant Pack with 20 sockets at the top of your workflow.
Install
It's part of Nifty Nodes for ComfyUI. Manager: search "Nifty Nodes for ComfyUI" → Install → restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/Stibo/comfyui-nifty-nodes
Restart ComfyUI. The bundle nodes are pure Python - no models, no dependencies beyond the pack (which Manager's requirements.txt installs). MIT-licensed, built on the v3 comfy_api.latest API, and new enough (v2.1.0, mid-2026) that updating is recommended.
Gotchas
The contract between Pack and Unpack is the slot label, and it's easy to trip on. The same label must be used on both ends - Pack's renamed slot seed lines up with Unpack's renamed output seed. If you rename on one side but not the other, values quietly misalign (you'll get None on a Get, or values in the wrong output). Also, "hide_links" hides wires visually but changes nothing about data flow - don't panic when wires vanish. And remember, merging via the optional bundle input is an overwrite-on-conflict merge, so order matters: whichever node runs last with a given key wins.
Inputs (36)
| Name | Type | Default | Description |
|---|---|---|---|
| count | INT | 11–32 | Number of value slots to show (1–32). |
| hide_links | BOOLEAN | false | Hide the connection wires going into this node to reduce visual clutter. |
| _slot_names | STRING | [] | — |
| bundleopt | BUNDLE | Optional existing bundle to merge into. New values will be added or overwrite keys with the same name. | |
| value1opt | * | Value to pack into the bundle. Rename the slot label to set the key name. | |
| value2opt | * | Value to pack into the bundle. Rename the slot label to set the key name. | |
| value3opt | * | Value to pack into the bundle. Rename the slot label to set the key name. | |
| value4opt | * | Value to pack into the bundle. Rename the slot label to set the key name. | |
| value5opt | * | Value to pack into the bundle. Rename the slot label to set the key name. | |
| value6opt | * | Value to pack into the bundle. Rename the slot label to set the key name. | |
| value7opt | * | Value to pack into the bundle. Rename the slot label to set the key name. | |
| value8opt | * | Value to pack into the bundle. Rename the slot label to set the key name. | |
| value9opt | * | Value to pack into the bundle. Rename the slot label to set the key name. | |
| value10opt | * | Value to pack into the bundle. Rename the slot label to set the key name. | |
| value11opt | * | Value to pack into the bundle. Rename the slot label to set the key name. | |
| value12opt | * | Value to pack into the bundle. Rename the slot label to set the key name. | |
| value13opt | * | Value to pack into the bundle. Rename the slot label to set the key name. | |
| value14opt | * | Value to pack into the bundle. Rename the slot label to set the key name. | |
| value15opt | * | Value to pack into the bundle. Rename the slot label to set the key name. | |
| value16opt | * | Value to pack into the bundle. Rename the slot label to set the key name. | |
| value17opt | * | Value to pack into the bundle. Rename the slot label to set the key name. | |
| value18opt | * | Value to pack into the bundle. Rename the slot label to set the key name. | |
| value19opt | * | Value to pack into the bundle. Rename the slot label to set the key name. | |
| value20opt | * | Value to pack into the bundle. Rename the slot label to set the key name. | |
| value21opt | * | Value to pack into the bundle. Rename the slot label to set the key name. | |
| value22opt | * | Value to pack into the bundle. Rename the slot label to set the key name. | |
| value23opt | * | Value to pack into the bundle. Rename the slot label to set the key name. | |
| value24opt | * | Value to pack into the bundle. Rename the slot label to set the key name. | |
| value25opt | * | Value to pack into the bundle. Rename the slot label to set the key name. | |
| value26opt | * | Value to pack into the bundle. Rename the slot label to set the key name. | |
| value27opt | * | Value to pack into the bundle. Rename the slot label to set the key name. | |
| value28opt | * | Value to pack into the bundle. Rename the slot label to set the key name. | |
| value29opt | * | Value to pack into the bundle. Rename the slot label to set the key name. | |
| value30opt | * | Value to pack into the bundle. Rename the slot label to set the key name. | |
| value31opt | * | Value to pack into the bundle. Rename the slot label to set the key name. | |
| value32opt | * | Value to pack into the bundle. Rename the slot label to set the key name. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| bundle | BUNDLE | — |