Unbundle by Name
When your workflow has 40 bundles and you can't tell them apart
- bundle
- output_1
- output_2
- output_3
- output_4
- output_5
- output_6
- output_7
- output_8
- output_9
- output_10
- output_11
- output_12
- output_13
- output_14
- output_15
- output_16
- output_17
- output_18
- output_19
- output_20
- output_21
- output_22
- output_23
- output_24
- output_25
- output_26
- output_27
- output_28
- output_29
- output_30
- output_31
- output_32
Bundle nodes are great until you have ten of them. Then the question stops being "how do I tidy my wires" and becomes "which of these ten identical cables is the one carrying my latents?" Unbundle by Name is the pack's answer: instead of wiring an Unbundle to a specific Bundle, you give your Bundle a name and let this node find it.
It's the sibling of the plain Unbundle in Mickmumpitz-Nodes (the pack behind Mickmumpitz's consistent-character and long-form video workflows), and it exists for the case plain Unbundle can't handle gracefully - big workflows with multiple bundles, especially when they live in different subgraphs.
How it works
The trick is that the Bundle node has a name widget. Unbundle by Name exposes a source_bundle string field, and when you hit queue, the pack's prompt handler steps in. It scans the submitted prompt for a Bundle node whose name matches source_bundle, finds it, and injects the link into this node's bundle input - a connection you never actually drew on the canvas.
The reason that works across subgraphs (which is the whole point) is that ComfyUI's frontend flattens subgraphs into a single prompt dict before submitting it to the server. So the handler sees every Bundle in every subgraph as one flat list, and the name lookup reaches across boundaries that a visible wire couldn't cross.
Once the link is injected, it behaves exactly like the plain Unbundle: unpack the values, retype the wildcard outputs from the source Bundle's metadata, pad the rest with None.
The inputs that matter
- source_bundle - the name you gave the Bundle node you want to split. It's matched as an exact trimmed string.
- bundle - technically required in the schema but effectively populated by the handler; you don't wire it.
- saved_meta - the optional metadata string; leave it alone.
Outputs are output_1 through output_32, wildcard-typed and renamed by the JS extension to match the source bundle.
When to reach for it
Use it when you've got multiple named bundles and plain Unbundle would force you to draw a wire across a busy subgraph boundary - or when the Bundle you want to split is inside a subgraph you'd rather not open. Give the Bundle a memorable name ("character_pipe"), drop an Unbundle by Name with that same string, and you're done.
Install
It ships in Mickmumpitz-Nodes:
cd ComfyUI/custom_nodes
git clone https://github.com/mickmumpitz/ComfyUI-Mickmumpitz-Nodes
then restart - or search "Mickmumpitz" in ComfyUI Manager. Light deps, no models.
Gotchas
Names must match exactly - trailing spaces or a typo in source_bundle and the handler finds nothing, leaving every output None and the next node down exploding with a type error. Keep Bundle names unique; if two Bundles share a name, the handler's lookup walks the prompt and the last one seen wins, which will surprise you eventually. And because this relies on a submit-time handler, previewing on a stale prompt (before you've re-queued) won't show the wiring. Change a name, re-queue, then read the outputs.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| source_bundle | STRING | — | |
| bundle | BUNDLE | — | |
| saved_metaopt | STRING | {} | — |
Outputs (32)
| Name | Type | Description |
|---|---|---|
| output_1 | * | — |
| output_2 | * | — |
| output_3 | * | — |
| output_4 | * | — |
| output_5 | * | — |
| output_6 | * | — |
| output_7 | * | — |
| output_8 | * | — |
| output_9 | * | — |
| output_10 | * | — |
| output_11 | * | — |
| output_12 | * | — |
| output_13 | * | — |
| output_14 | * | — |
| output_15 | * | — |
| output_16 | * | — |
| output_17 | * | — |
| output_18 | * | — |
| output_19 | * | — |
| output_20 | * | — |
| output_21 | * | — |
| output_22 | * | — |
| output_23 | * | — |
| output_24 | * | — |
| output_25 | * | — |
| output_26 | * | — |
| output_27 | * | — |
| output_28 | * | — |
| output_29 | * | — |
| output_30 | * | — |
| output_31 | * | — |
| output_32 | * | — |