BRKN Pack Browser and Selector
Stop typing pack IDs — pick your prompt packs from a thumbnail grid
- pack_browser
- pack_selection
- pack_selection_json
- selection_summary
- warnings
- enabled_packs
The BRKN pack system has two halves: a composer that rolls your prompt and this node - the visual selector that tells it which packs to roll from. Without the browser you'd be typing pack IDs into a comma-separated text box and guessing what's in each pack from memory. With it, you open a modal, see square 512px thumbnails for every base and modifier pack, click one base pack plus a few modifiers, and the node hands the composer a structured selection. It's the difference between "I think wear_goth had the right coats" and actually looking at the coats.
It exists because the author (NUVoize, who built the WAN-era BRKN prompt generator before this) learned that on the first beta the UX was the complaint everyone hit - text inputs for a catalog of packs nobody can remember. This node is that fix, and it shipped with a browser UI instead of a pile of dropdowns.
How it works
The node's pack_browser input is a special BRKN_PACK_BROWSER widget, not a wire you connect. Click it and the bundled JavaScript (web/brkn_pack_browser.js) opens a dialog that loads the pack catalog from browser_metadata/*.json, which points at the WebP thumbnails under thumbnails/. You get one active base pack (BRKN Base, Instagram, Portraits, the location/vehicle packs) plus as many modifier packs as you want - wardrobe, makeup, camera style, locations, actions. There's category grouping, search, and pre-execution thumbnails so you can see a pack's look before you commit.
The required string fields (selected_base_pack_id, modifier_pack_ids, selected_pack_summary) aren't meant to be hand-typed - the modal fills them and they persist into the workflow JSON, so a saved workflow reopens with your picks intact, and the node keeps a backward-compat path for selections made before the browser existed so old workflows don't die.
The outputs that matter
Only two really:
pack_selection(BRKN_PACK_SELECTION) - the structured object; wire this into the composer'spack_selectioninput.enabled_packs- a flat comma-separated list of pack IDs, which is the legacy bridge into the composer'senabled_packsfield if you're not using the typed wire.
The rest (pack_selection_json, selection_summary, warnings) is for debugging and saving. The warnings output is genuinely useful: missing thumbnails and broken pack JSON show up there as a fallback tile instead of killing your workflow.
Install
Same for the whole pack. Easiest is ComfyUI Manager - search "Modular Prompt Composer" (or "BRKN") and install. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/NUVoize/ComfyUI-BRKN-Prompt-Randomizer
Then restart ComfyUI and hard-refresh the browser (Ctrl+Shift+R). That second step matters more than it sounds: the browser is a web extension, and a stale cache hides it entirely. The only Python dependency is jsonschema, so there's nothing heavy to babysit - no models, no API keys.
Gotchas
The browser category list is fixed in the pack right now (Base, Camera Style and Lighting, Wardrobe and Makeup, Locations, Transportation, Actions), so if you add your own pack it needs matching metadata before it shows up with a thumbnail. And if you only wire enabled_packs and skip the pack_selection wire, you lose the pinned-entry and per-pack metadata the modal collected - works fine, just less smart. When in doubt, use the typed output; the bridge is there for older workflows.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| selected_base_pack_id | STRING | — | |
| modifier_pack_ids | STRING | — | |
| selected_pack_summary | STRING | — | |
| pack_browser | BRKN_PACK_BROWSER | — | |
| selected_packs_by_category_jsonopt | STRING | — |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| pack_selection | BRKN_PACK_SELECTION | — |
| pack_selection_json | STRING | — |
| selection_summary | STRING | — |
| warnings | STRING | — |
| enabled_packs | STRING | — |