Nodes/Seb Nodes/Unified Prompter (Seb)
ComfyUI Node

Unified Prompter (Seb)

Prompt-craft as dropdowns, and the Random button actually helps

By cyberhirsch·Created about a year ago·Updated 8 months ago· 4
Unified Prompter (Seb)
  • clip
  • positive
  • negative
  • positive_text
  • negative_text
main_prompta beautiful landscape
seed0
technique
artistic_style_and_movement
medium
genre
artist
shot_type
perspective
lens_and_camera
depth_of_field
composition
lighting
color_palette
contrast
emotion_and_mood
quality_enhancers
base_negative_prompt
negative_preset_1
negative_preset_2
negative_preset_3
log_promptsfalse

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 None to skip, Random to 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.

Categoryutils/prompting

Inputs (23)

NameTypeDefaultDescription
clipCLIP
main_promptSTRINGa beautiful landscape
seedINT00–18446744073709550000
techniqueCOMBO36 options: None, Random, Photograph, 3D Render, Oil Painting, Acrylic Painting, +30
artistic_style_and_movementCOMBO27 options: None, Random, Photorealistic, Impressionism, Expressionism, Surrealism, +21
mediumCOMBO23 options: None, Random, Movie Film Still, Shot on 35mm Film, Shot on IMAX 70mm, Polaroid Photo, +17
genreCOMBO20 options: None, Random, Fantasy, Dark Fantasy, Sci-Fi, Space Opera, +14
artistCOMBO18 options: None, Random, Greg Rutkowski, Makoto Shinkai, James Gurney, Frank Frazetta, +12
shot_typeCOMBO15 options: None, Random, Extreme Close-up, Close-up Shot, Medium Close-up, Portrait, +9
perspectiveCOMBO11 options: None, Random, Eye-level View, High Angle View, Low Angle View, Top-down / Drone Shot, +5
lens_and_cameraCOMBO14 options: None, Random, Telephoto Lens (85mm), Standard Lens (50mm), Wide-Angle Lens (24mm), Macro Lens, +8
depth_of_fieldCOMBO7 options: None, Random, Shallow (f/1.4), Medium (f/5.6), Deep (f/16), Everything in Focus (Pan-focus), +1
compositionCOMBO18 options: None, Random, Rule of Thirds, Golden Ratio, Centered Composition, Asymmetrical Balance, +12
lightingCOMBO21 options: None, Random, Soft Light, Hard Light, Cinematic Lighting, Moody Lighting, +15
color_paletteCOMBO14 options: None, Random, Vibrant Colors, Muted Colors, Pastel Colors, Earth Tones, +8
contrastCOMBO26 options: None, Random, High Tonal Contrast (Chiaroscuro), Low Tonal Contrast (Muted), Tenebrism (Extreme Light/Dark), Notan (Light/Dark Pattern), +20
emotion_and_moodCOMBO14 options: None, Random, Joyful, Serene, Melancholic, Nostalgic, +8
quality_enhancersCOMBO11 options: None, Random, Masterpiece, Highly Detailed, Insanely Detailed, Sharp Focus, +5
base_negative_promptSTRING
negative_preset_1COMBO12 options: None, Ugly / Deformed, Blurry / Grainy, No Text / UI, CGI / 3D, Duplicate / Morbid, +6
negative_preset_2COMBO12 options: None, Ugly / Deformed, Blurry / Grainy, No Text / UI, CGI / 3D, Duplicate / Morbid, +6
negative_preset_3COMBO12 options: None, Ugly / Deformed, Blurry / Grainy, No Text / UI, CGI / 3D, Duplicate / Morbid, +6
log_promptsBOOLEANfalse

Outputs (4)

NameTypeDescription
positiveCONDITIONING
negativeCONDITIONING
positive_textSTRING
negative_textSTRING