ReBNDLer (Master Prompt)
Positive and negative in one wire
- positive
- negative
- CLIP_L_ONLY
- CLIP_G_ONLY
- T5_ONLY
- masterprompt.bndl
Every prompt pair in ComfyUI is two wires - positive conditioning and negative conditioning - that have to travel together to the sampler. The ReBNDLer (Master Prompt) folds them into a single masterprompt.bndl wire, and if you're using SDXL or Flux-style models, it can carry the per-encoder conditionings too. One wire instead of two (or five), with all the prompt info in a bundle a Shima sampler can read directly.
The pack's own prompt node is called Master Prompt and emits masterprompt.bndl; the ReBNDLer is the standalone packer that builds the same bundle from whatever conditioning you already have, so you can drop the bundle pattern into an existing graph without switching text encoders.
How it works
The node packs what you give it into a dict:
{"bndl_type": "masterprompt",
"pos": positive, "neg": negative,
"clip_l": CLIP_L_ONLY, "clip_g": CLIP_G_ONLY, "t5": T5_ONLY,
"pos_string": pos_string, "neg_string": neg_string}
The two core inputs are positive and negative CONDITIONING. Beyond those it handles the modern multi-encoder world: CLIP_L_ONLY, CLIP_G_ONLY (the two SDXL encoders) and T5_ONLY (for Flux/SD3) let you bundle per-encoder conditionings, and pos_string / neg_string carry the raw prompt text for logging, file naming, or display. Every input is optional - a positive-only bundle is legal, and the DeBNDLer downstream just hands you None for the rest.
The inputs that matter
positive/negative- the conditioning pair that makes up 90% of real usage.CLIP_L_ONLY/CLIP_G_ONLY/T5_ONLY- only when you're splitting prompts per encoder (SDXL, Flux).pos_string/neg_string- raw text, worth wiring if you want the prompt recorded in filenames.
Why it exists
Same reason as the other ReBNDLers: legibility. The KB's plumbing essay points out that a context bundle is how you get from "forty wires crossing the canvas" to "a workflow you can actually read" - and its flip side is that a bundle is a snapshot, so stale contents are the price of the tidiness. The Shima docs also note the pack deliberately ships discrete packers like this instead of one universal bundle node, because ComfyUI's serialization would silently drop connections on workflow reload with the dynamic version.
Where it fits
Feed masterprompt.bndl into a Shima Sampler's masterprompt.bndl input (it overrides the individual positive/negative wires there), or into a DeBNDLer (Master Prompt) to get the conditioning sockets back for standard nodes. It's the standard bridge between "I encode my own prompts" and "I want the sampler's one-wire input."
Install
cd ComfyUI/custom_nodes
git clone https://github.com/KDB-USJP/shima_wf.git Shima
pip install -r requirements.txt
Restart, then Shima/Routing → ReBNDLer (Master Prompt). ComfyUI Manager: search "Shima". The installer auto-clones ComfyUI-Impact-Pack and cg-use-everywhere on first boot if they're missing (Use Everywhere is the island auto-linking backbone) - expected.
Common issues
Watch the snapshot trap: if you build the bundle before a LoRA or style node that modifies conditioning, the sampler downstream sees the pre-modification version, and no amount of rewiring the bundle will fix it - rebuild the bundle after the modifying node. And if you forget the neg_string/pos_string wires, the text outputs come back empty; that's fine unless a file-namer downstream assumes they're always filled.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| allow_external_linking | BOOLEAN | false | — |
| positiveopt | CONDITIONING | — | |
| negativeopt | CONDITIONING | — | |
| CLIP_L_ONLYopt | CONDITIONING | — | |
| CLIP_G_ONLYopt | CONDITIONING | — | |
| T5_ONLYopt | CONDITIONING | — | |
| pos_stringopt | STRING | — | |
| neg_stringopt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| masterprompt.bndl | BNDL | — |