Nodes/Modular Prompt Composer/BRKN Pack Browser and Selector
ComfyUI Node

BRKN Pack Browser and Selector

Stop typing pack IDs — pick your prompt packs from a thumbnail grid

By NUVoize·Created 2 months ago·Updated 2 months ago· 16
BRKN Pack Browser and Selector
  • pack_browser
  • pack_selection
  • pack_selection_json
  • selection_summary
  • warnings
  • enabled_packs
selected_base_pack_id
modifier_pack_ids
selected_pack_summary
selected_packs_by_category_json

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's pack_selection input.
  • enabled_packs - a flat comma-separated list of pack IDs, which is the legacy bridge into the composer's enabled_packs field 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.

CategoryBRKN/Prompt Randomizer

Inputs (5)

NameTypeDefaultDescription
selected_base_pack_idSTRING
modifier_pack_idsSTRING
selected_pack_summarySTRING
pack_browserBRKN_PACK_BROWSER
selected_packs_by_category_jsonoptSTRING

Outputs (5)

NameTypeDescription
pack_selectionBRKN_PACK_SELECTION
pack_selection_jsonSTRING
selection_summarySTRING
warningsSTRING
enabled_packsSTRING