Unified Prompter (Seb)
Prompt-craft as dropdowns, and the Random button actually helps
- clip
- positive
- negative
- positive_text
- negative_text
Most ComfyUI prompts live in one giant multiline text box, which is fine until you want to A/B lighting, or you find yourself re-typing "shot on 35mm film, golden hour" for the tenth time. Unified Prompter (Seb) replaces that with a modular system: a main_prompt box plus roughly sixteen dropdowns - technique, artistic style, medium, genre, artist, shot type, lens, lighting, composition, color palette, contrast, mood, and so on - each preloaded with curated options. Pick your way down the list, and the node assembles the finished prompt and encodes it to conditioning for you.
It's the most interesting node in the Seb Nodes pack, because of two details: every positive category has a Random option, and every option comes from a plain JSON file you can edit without touching code.
How it works
At startup the node reads unified_prompter_styles.json (shipped in the pack) and turns each category into a dropdown. When you hit Random in a category, the node rolls a choice from that category's non-None options - and the roll is anchored to the seed input. Same seed, same random picks; bump the seed and you get a fresh roll. That's a genuinely good design: "surprise me" that stays reproducible, instead of chaos that changes every time you re-run.
Assembly is simple string work: main_prompt plus each chosen fragment, comma-joined into one prompt. Negatives are handled separately - a free-text base_negative_prompt plus up to three negative_preset dropdowns (Ugly/Deformed, Blurry/Grainy, EasyNegative, Pony negatives, and friends) that stack into the negative. The text gets encoded with clip.encode_from_tokens_scheduled, which the code comments call out as compatible with SD 1.5, SDXL, and multi-encoder Flux models.
The output set is the good part: you get both the positive/negative CONDITIONING and the assembled positive_text/negative_text strings, so you can see exactly what's being sent to the sampler instead of trusting a black box.
Inputs and outputs that matter
clip- your checkpoint's CLIP, wired like any other conditioning node.main_prompt- the one thing you type yourself; the dropdowns embellish it.seed- controls the Random rolls. Set it above 0 and change it to re-roll.- The category dropdowns - pick
Noneto skip,Randomto gamble. base_negative_prompt+negative_preset_1/2/3- your negative stack.- Outputs:
positive,negative(CONDITIONING),positive_text,negative_text(STRING).
Editing the styles
The real power feature: the JSON is the whole library. Open unified_prompter_styles.json, add a category or a new option under lighting, save, restart ComfyUI, and it's in the dropdown. The README suggests keeping per-theme files (scifi_styles.json, fantasy_styles.json) and swapping the filename before launch. Just remember styles load at startup - edits need a restart to show up.
Two takes worth having
First, the negatives. The presets include EasyNegative, which the KB's prompt-engineering essay tracks as effectively dead in 2026 - a negative embedding from the SD 1.5 era that collapsed from 154 mentions in 2024 to single digits. On modern SDXL-lineage models, plain text negatives and Pony-style presets still do work; an EasyNegative embedding on a model that wasn't trained around it is mostly nothing. So treat the preset list as a menu, not a requirement.
Second, the assembled prompt is comma-joined descriptive prose, which is exactly what SDXL-lineage models and Flux like. On LLM-encoded models (Anima, Z-Image), the KB notes prompting shifted toward instruction-style structure - the output will still work, but check positive_text and adjust rather than assuming the dropdown formulas transfer.
Installing it
ComfyUI Manager → search "Seb" → Install → restart, or:
cd ComfyUI/custom_nodes
git clone https://github.com/cyberhirsch/seb_nodes
# restart ComfyUI
No model downloads. The pack auto-installs OpenCV and friends on first load. That's the whole setup - the JSON ships with the pack, so it works immediately.
Is it for everyone? If you like typing, no - this replaces your workflow with a form. But if you want to lock in a consistent "house style" across a batch, or you keep hitting creative block, the seeded Random alone is worth the install. It's the rare prompt node where the gimmick is actually the point.
Inputs (23)
| Name | Type | Default | Description |
|---|---|---|---|
| clip | CLIP | — | |
| main_prompt | STRING | a beautiful landscape | — |
| seed | INT | 00–18446744073709550000 | — |
| technique | COMBO | 36 options: None, Random, Photograph, 3D Render, Oil Painting, Acrylic Painting, +30 | |
| artistic_style_and_movement | COMBO | 27 options: None, Random, Photorealistic, Impressionism, Expressionism, Surrealism, +21 | |
| medium | COMBO | 23 options: None, Random, Movie Film Still, Shot on 35mm Film, Shot on IMAX 70mm, Polaroid Photo, +17 | |
| genre | COMBO | 20 options: None, Random, Fantasy, Dark Fantasy, Sci-Fi, Space Opera, +14 | |
| artist | COMBO | 18 options: None, Random, Greg Rutkowski, Makoto Shinkai, James Gurney, Frank Frazetta, +12 | |
| shot_type | COMBO | 15 options: None, Random, Extreme Close-up, Close-up Shot, Medium Close-up, Portrait, +9 | |
| perspective | COMBO | 11 options: None, Random, Eye-level View, High Angle View, Low Angle View, Top-down / Drone Shot, +5 | |
| lens_and_camera | COMBO | 14 options: None, Random, Telephoto Lens (85mm), Standard Lens (50mm), Wide-Angle Lens (24mm), Macro Lens, +8 | |
| depth_of_field | COMBO | 7 options: None, Random, Shallow (f/1.4), Medium (f/5.6), Deep (f/16), Everything in Focus (Pan-focus), +1 | |
| composition | COMBO | 18 options: None, Random, Rule of Thirds, Golden Ratio, Centered Composition, Asymmetrical Balance, +12 | |
| lighting | COMBO | 21 options: None, Random, Soft Light, Hard Light, Cinematic Lighting, Moody Lighting, +15 | |
| color_palette | COMBO | 14 options: None, Random, Vibrant Colors, Muted Colors, Pastel Colors, Earth Tones, +8 | |
| contrast | COMBO | 26 options: None, Random, High Tonal Contrast (Chiaroscuro), Low Tonal Contrast (Muted), Tenebrism (Extreme Light/Dark), Notan (Light/Dark Pattern), +20 | |
| emotion_and_mood | COMBO | 14 options: None, Random, Joyful, Serene, Melancholic, Nostalgic, +8 | |
| quality_enhancers | COMBO | 11 options: None, Random, Masterpiece, Highly Detailed, Insanely Detailed, Sharp Focus, +5 | |
| base_negative_prompt | STRING | — | |
| negative_preset_1 | COMBO | 12 options: None, Ugly / Deformed, Blurry / Grainy, No Text / UI, CGI / 3D, Duplicate / Morbid, +6 | |
| negative_preset_2 | COMBO | 12 options: None, Ugly / Deformed, Blurry / Grainy, No Text / UI, CGI / 3D, Duplicate / Morbid, +6 | |
| negative_preset_3 | COMBO | 12 options: None, Ugly / Deformed, Blurry / Grainy, No Text / UI, CGI / 3D, Duplicate / Morbid, +6 | |
| log_prompts | BOOLEAN | false | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |
| positive_text | STRING | — |
| negative_text | STRING | — |