ComfyUI Node

Get Bundle

The half that makes the invisible bus work — and breaks loudly

By Mistress-Lukutar·Created 2 months ago·Updated 2 days ago· 2
Get Bundle
    • slot_1
    • slot_2
    • slot_3
    • slot_4
    • slot_5
    • slot_6
    • slot_7
    • slot_8
    • slot_9
    • slot_10
    • slot_11
    • slot_12
    • slot_13
    • slot_14
    • slot_15
    • slot_16
    ◄bundle_name►
    ◄slots►

    Get Bundle does nothing on its own. It's the reading end of a pair: a Set Bundle upstream publishes a bag of typed values under a name, and a Get Bundle with that same name makes them available here - in the far corner of the graph, inside a group you never want to look at, wherever the wires would have been ridiculous.

    It earns its own page because it's the half that complains when something's wrong.

    What it saves you

    Three consumers need the same checkpoint, VAE and CLIP. Drag three wires to each and that's nine wires crossing your sampler row. One Set Bundle plus these nodes replaces all of it.

    The pattern also covers branch switching: a Set Bundle in each of two alternative branches (load-from-disk vs generate), same name, mute the one you're not using - the surviving Set publishes and every Get follows.

    How the mirroring works

    A Get Bundle is defined by its bundle_name. The extension resolves that name against the active Set Bundle and mirrors it: one named input per slot - each the anchor for an invisible real link from the Set side - and one typed output per slot. Add, rename or remove a slot on the Set and the Get's sockets follow.

    The title tells you the state before you queue: Get Bundle · sdxl (3) means three slots resolved. A ⚠ appears for no active Set, duplicate, and unconnected: vae.

    Because those hidden links are ordinary links serialized into the prompt, export survives: API workflows, headless runs and cached re-execution behave as if you'd drawn the wires yourself. No server-side registry, no state to reset.

    The fields

    bundle_name is the lookup key. Type the same string you typed on the Set. That's the whole configuration.

    slots is a hidden mirror of the Set's slot spec, updated automatically. Don't edit it; the backend uses it to order values and to produce per-slot errors. It's yours only when hand-authoring an API prompt, where it decides order - skip it and name your links slot_1…slot_16, which then pass through in name order.

    Then the per-slot inputs the extension adds. A manual wire into any of them wins over the bundle name - handy when one consumer needs a different VAE, and the escape hatch for debugging.

    Outputs are one per slot with the slot's declared type. The raw node listing shows slot_1…slot_16 of type * - the static fallback schema, since real sockets are grown client-side. With the extension loaded you see model, vae, clip, typed properly. Bundles top out at 16 slots.

    Install

    cd ComfyUI/custom_nodes
    git clone https://github.com/Mistress-Lukutar/ComfyUI-LukutarNodes
    

    Manager users: Install via git URL, same URL, restart. requirements.txt lists opencv-python>=4.8 and nothing else - OpenCV is there for the pack's image nodes, not this one. No models to download.

    Then reload the browser tab, not just the server. The invisible links and socket growth are frontend JavaScript; a stale tab is the number one reason a Get Bundle looks inert after install.

    Reading the errors

    The most common failure is a good one, verbatim:

    Get Bundle [sdxl]: no values arrived. Check that a Set Bundle with this name
    exists and its branch is active (not muted/bypassed), that it is the only
    active Set with this name, that its slots are connected - or wire this
    node's inputs manually.
    

    Work it in that order. A typo in the name is the boring answer. The interesting one is the branch: a bypassed or muted Set is removed from the prompt, so it publishes nothing - which bites people who toggle whole sections off, because the Set can be inside the section. Two active Sets sharing a name is a genuine conflict, not a merge: the Get stays unlinked, both nodes show ⚠, the queue fails.

    The second class is spec desync - value(s) "without a slot in the spec" - fixed by re-selecting bundle_name to force a resync. It usually means the hidden spec went stale after hand-editing a workflow or restoring old JSON.

    Two more that aren't errors but will make you swear. Renaming a slot on the Set renames it on every linked Get, so the socket drops its wire. Removing a slot deletes the matching Get socket outright, taking the wire with it. And if two branches have different specs, switching reshapes every Get and drops wiring for what doesn't exist on the new side - keep them identical.

    The honest trade

    Every wireless scheme invites the same objection, and our plumbing notes spell out why: with a context bus the connection is present and the contents are wrong, which is worse than a wire that isn't there. This is the friendlier version - sockets named after the values, types enforced, errors that name the missing slot instead of handing a None downstream.

    Still: keep values on explicit wires where you're actively iterating, and use the bus where the graph is too big to read. For a single value, Set Variable/Get Variable does the job with no slots at all. And a caveat: this pack has no community history yet - small, sound, unproven.

    CategoryLukutar/Variables

    Inputs (2)

    NameTypeDefaultDescription
    bundle_nameSTRINGBundle name, e.g. sdxl_base; Get Bundle nodes with this name receive all slots
    slotsSTRINGSlot spec 'name:TYPE,...' managed by the web extension (hidden in the UI); hand-written API prompts may set it to order the slots

    Outputs (16)

    NameTypeDescription
    slot_1*—
    slot_2*—
    slot_3*—
    slot_4*—
    slot_5*—
    slot_6*—
    slot_7*—
    slot_8*—
    slot_9*—
    slot_10*—
    slot_11*—
    slot_12*—
    slot_13*—
    slot_14*—
    slot_15*—
    slot_16*—