Bundle In (PlagueKind)
Turn a dozen wires into one cable — Bundle In cleans up messy graphs
- input_1
- input_2
- input_3
- input_4
- input_5
- input_6
- input_7
- input_8
- input_9
- input_10
- input_11
- input_12
- input_13
- input_14
- input_15
- input_16
- input_17
- input_18
- input_19
- input_20
- bundle
Bundle In is the tidy side of a two-node pair for getting wires under control. You feed it up to 20 inputs of any type - images, masks, latents, conditioning, whatever - and it packs them into a single BUNDLE output that you route across the canvas as one cable. On the other end, Bundle Out unpacks it back into 20 separate sockets. If you've ever stared at a workflow where a crop node, a VAE decode, and a reference image all need to reach one downstream block across a tangle of spaghetti, this is the bus that un-snarls it.
It ships in PlagueKind-Nodes, a small personal pack (author Plague_Kind) best known for its LTX LoRA stack loader and unified image/mask resize. The bundle pair is the pack's utility corner: no dependencies, no models, no magic - just graph organization. Think of it as rgthree-style rerouting taken one step further: instead of dragging one wire at a time, you bundle once and drag once.
How it works
Mechanically it's almost insultingly simple. On each run, the node collects whatever is connected to its inputs into a Python dict keyed input_1 through input_20, dropping anything that's None, and hands the whole dict to Bundle Out as a single BUNDLE object. The JS file the pack ships (in js/bundle_nodes.js) makes the sockets auto-expand/collapse and labels them with their connected types, so the thing looks clever. It isn't required: the docstring in the source says the mapping is purely cosmetic and execution is correct even without the JS loaded.
The inputs and outputs that matter
There are no required inputs - every socket is optional.
input_1…input_20- twenty wildcard (*) sockets. Connect anything:IMAGE,MASK,LATENT,CONDITIONING,MODEL, anINTfor a seed, whatever. Type checking is bypassed, which is the whole point.bundle- the singleBUNDLEoutput. It only wires intoPlagueKindBundleOut(or another node that knows theBUNDLEtype). This isn't a wire format other nodes can read directly.
Install
Same as the rest of the pack. Easiest is ComfyUI Manager - search "PlagueKind-Nodes" and hit install. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/PlagueKind/ComfyUI-PlagueKind-Nodes.git
Then restart ComfyUI. The README claims no external dependencies beyond stock ComfyUI (torch, comfy.utils), and the repo ships no requirements.txt - it's all stdlib plus what ComfyUI already has. Installing the pack also drops in the crop, resize, and LoRA nodes, but you can ignore those.
Where people get burned
- It's a matched pair.
Bundle Inmaps toBundle Outpositionally - whatever you put ininput_5comes back outoutput_5of the Out node. Keep the pair in the same workflow and don't swap one end. - Empty slots come back empty. Only non-
Noneinputs make it into the bundle, so an unconnectedinput_12silently yieldsNoneatoutput_12. If a downstream node chokes onNone, that's your culprit, not a bug. - No image, no preview, no state. The bundle lives for the duration of the run - it isn't stored between queues. It's a convenience for legibility, not a caching mechanism.
Inputs (20)
| Name | Type | Default | Description |
|---|---|---|---|
| input_1opt | * | — | |
| input_2opt | * | — | |
| input_3opt | * | — | |
| input_4opt | * | — | |
| input_5opt | * | — | |
| input_6opt | * | — | |
| input_7opt | * | — | |
| input_8opt | * | — | |
| input_9opt | * | — | |
| input_10opt | * | — | |
| input_11opt | * | — | |
| input_12opt | * | — | |
| input_13opt | * | — | |
| input_14opt | * | — | |
| input_15opt | * | — | |
| input_16opt | * | — | |
| input_17opt | * | — | |
| input_18opt | * | — | |
| input_19opt | * | — | |
| input_20opt | * | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| bundle | BUNDLE | — |