Nodes/ComfyUI-3R3BOS-Pack/Prompt Selector
ComfyUI Node

Prompt Selector

Your prompt library, finally out of Notepad

By 3R3BOS·Created 8 months ago·Updated about a month ago· 13
Prompt Selector
    • text
    selected_items[]
    custom_text

    The name undersells it. Prompt Selector isn't a dropdown that picks between two strings - it's a full prompt database rendered right inside the ComfyUI canvas. Categories, subcategories, clickable tags, a live preview terminal, all of it. If you've been keeping your LoRA trigger words and style templates in Notepad, or as a spaghetti of Primitive nodes, this is the node the author built to stop doing exactly that.

    It ships in the 3R3BOS Pack, a small solo pack from a developer who posted it to r/comfyui himself ("I got tired of managing prompts in Notepad") - so set expectations: this isn't a community juggernaut, it's a genuinely nice take on a real annoyance. The Prompt Selector is the pack's flagship, and it's the part worth keeping even if you ignore the rest.

    How it works

    The backend is almost insultingly thin, which is a compliment. All the heavy lifting is a 53KB canvas UI in JavaScript that talks to two tiny API routes: GET /3r3bos/prompts_db to load your library and POST /3r3bos/prompts_db/save to write it back. Your data lives in a prompts_db.json file inside the node's folder, in a simple category → subcategory → items structure. Create, rename and delete categories right in the node - you never touch the JSON by hand.

    When you click tags, the frontend collects their IDs into a JSON array and the backend looks up each one in the database, then joins the matching prompt strings with ", " (it even cleans up stray double commas). That comma-join is a nice fit for SDXL-lineage models like Illustrious or Pony where tag-style prompting still works, which is worth remembering if you're used to sentence-style prompting on Flux - the tool stores whatever strings you give it, but the join convention is built for tags.

    The inputs that matter

    The node has just two inputs, and you barely touch either:

    • selected_items (STRING) - the JSON list of selected prompt IDs. Normally you don't type this at all; clicking tags in the canvas writes it. Default [].
    • custom_text (STRING) - the "Edit Live Prompt" override. If it's non-empty, it completely replaces the concatenated output for this run. That's the escape hatch for tweaking a weight on one generation without touching your saved templates, and it's the single most useful part of the design.

    The one output, text (STRING), wires straight into a CLIP Text Encode node - positive or negative, your call.

    Installing it

    It's part of the pack, so there's nothing extra to fetch - no model files, no requirements.txt, nothing beyond what ComfyUI already ships. Easiest path is Manager:

    1. Open ComfyUI Manager.
    2. Search for 3R3BOS Pack.
    3. Install and restart.

    Or clone it yourself:

    cd ComfyUI/custom_nodes
    git clone https://github.com/3R3BOS/ComfyUI-3R3BOS-Pack
    

    then restart ComfyUI. It also registers on the Comfy Registry, so comfy node install 3r3bos-pack works if you use comfy-cli.

    Where people get burned

    The README's warning is the one that matters: your entire prompt library lives in prompts_db.json inside the node folder. That file is lost if you delete the custom node or do a fresh ComfyUI install. Back it up - the author says so himself, and it's the only data in this pack that can't be rebuilt. Since the UI is canvas JavaScript, a hard refresh (Ctrl+F5) or a ComfyUI restart fixes the most common "the node renders as a plain box" symptom, though the node will still output text from its inputs either way.

    One honest caveat: this is a young, low-traffic pack, so the widget is only as battle-tested as its author's own workflows. For a prompt library that huge, old-school setups use text files or more established packs - but if you want your triggers and styles clickable inside the graph, this is currently the nicest way to get it.

    Category3R3BOS/Text

    Inputs (2)

    NameTypeDefaultDescription
    selected_itemsSTRING[]
    custom_textSTRING

    Outputs (1)

    NameTypeDescription
    textSTRING