Bubba Character Prompt Builder
Bubba Character Prompt Builder
- pipe
- metadata
- clip
- pipe
- metadata
- positive
- negative
- positive_prompt
- negative_prompt
If you generate the same character more than twice, you already know the pain: a prompt that's half hair color, half outfit, half "you know, that person with the scar," copy-pasted and edited by hand every run. Bubba Character Prompt Builder is the structured answer. You split the prompt into slots - appearance, body, clothing, pose, expression, scene, style, quality - and it assembles the positive and negative prompts for you, optionally CLIP-encodes them, and hands both back along with a pipe.
It's part of the Bubba Nodes pack, which is built around a BUBBA_PIPE object that carries your model, CLIP, VAE, latent, and a BUBBA_METADATA block through the whole workflow. So this node doesn't just make a string; it slots cleanly into a pipeline where a Combo Loader feeds it a pipe, it updates the prompts inside that pipe, and Bubba KSampler picks them up downstream. That's the whole point of the pack - fewer loose wires, provenance that travels with the image.
What to actually set
Nine multiline fields do the work: appearance, body, clothing, pose, expression, scene, style_tags, quality_tags, and negative_tags. Don't overthink the split - a field can hold one tag or a whole paragraph. The only other input you'll touch day to day is format_mode:
booru- comma-separated tags, the house style of Illustrious/Pony/NoobAI checkpoints. Default style for the anime SDXL crowd.prose- natural language sentences, better for instruct-tuned models where a comma list reads as noise.hybrid(default) - a middle ground; tags plus assembled phrasing.
cleanup normalizes whitespace and separators before output, and dedupe kills duplicate tags case-insensitively while keeping the first spelling and order. Leave both on. If a tag genuinely needs to repeat, that's what escaping is for.
The clip input is optional, but if you want the positive and negative CONDITIONING outputs, a CLIP has to come from somewhere - either wire one in or rely on the pipe's clip (which a Bubba loader supplies). No clip, and the node will still give you the assembled positive_prompt/negative_prompt strings, just not the conditioning.
Why you'd reach for it
Two reasons, really. First, consistency: your character's base appearance lives in the appearance slot and doesn't drift between runs while you fiddle with scene and pose. Second, the autocomplete. Bubba's frontend extension reads danbooru and e621 tag CSVs, so typing in these multiline fields gives you real tag suggestions - type __ to browse bundled wildcard files, hit Tab to insert. For a tag-heavy hobby, that's the difference between remembering "aqua_eyes" and finding it.
If this all feels like a lot for a prompt, you're not wrong that it overlaps with Bubba Simple Prompt Builder (the flat-text version) and Prompt Randomizer (JSON-backed). The Character builder is the one you want when the character is the constant and the scene is the variable - think batch generations of one OC, or a merge-preview workflow where you need the same subject across four candidate models.
Install
Bubba Nodes is a single-pack install - search "Bubba Nodes" in ComfyUI Manager, or:
cd ComfyUI/custom_nodes
git clone https://github.com/bubbafett5611/Bubba_Nodes
then restart ComfyUI. The pack needs aiohttp and pydantic (its requirements.txt installs them) and targets ComfyUI 0.27.0+, so update ComfyUI if a node fails to appear. No model files to download for prompt nodes.
One trap: the prompt fields feed the autocomplete, and if the tag CSVs haven't been fetched you get a degraded fallback list. If suggestions look thin, use ComfyUI settings → Bubba: Local CSV Sync + Cache to rebuild the cache once.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| appearance | STRING | — | |
| body | STRING | — | |
| clothing | STRING | — | |
| pose | STRING | — | |
| expression | STRING | — | |
| scene | STRING | — | |
| style_tags | STRING | — | |
| quality_tags | STRING | — | |
| negative_tags | STRING | — | |
| format_mode | COMBO | hybrid | 3 options: booru, prose, hybrid |
| cleanup | BOOLEAN | true | — |
| dedupe | BOOLEAN | true | — |
| pipeopt | BUBBA_PIPE | — | |
| metadataopt | BUBBA_METADATA | — | |
| clipopt | CLIP | — |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| pipe | BUBBA_PIPE | — |
| metadata | BUBBA_METADATA | — |
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |
| positive_prompt | STRING | — |
| negative_prompt | STRING | — |