Nodes/ComfyUI-Dynamic-Dropdowns/🎭 Dynamic Dropdowns (Demo Mode)
ComfyUI Node

🎭 Dynamic Dropdowns (Demo Mode)

The Dynamic Dropdowns demo node

By 0velia·Created about a month ago·Updated about a month ago· 0
🎭 Dynamic Dropdowns (Demo Mode)
  • clip
  • PROMPT_STRING
  • CONDITIONING
◄style▾►
◄lighting▾►
◄post_process▾►
◄camera▾►
◄composition▾►
◄input_string—►

This node is a showroom, and it's honest about it - the display name literally ends in "(Demo Mode)". But it's a useful showroom: it's the fastest way to see what the 0velia/ComfyUI-Dynamic-Dropdowns pack actually does before you decide whether to build your own with it.

The pitch is canvas decluttering, the same itch behind context buses and rgthree's reroutes (see the node-plumbing layer in our knowledge base). Instead of five separate text boxes or a wall of "convert widget to input" primitives feeding a CLIP Text Encode, you get one node with five tidy dropdowns. Pick your style, lighting, camera, composition, post-processing - and out the other side comes one comma-joined prompt string and, if you hand it a CLIP, an already-encoded conditioning block you can drop straight into a KSampler. No Text Encode node in the path at all.

What you're actually setting

The five required dropdowns are all enums, and they're hardcoded demo values, not read from your files:

  • style - Studio Cinematic, Anime Flat, Editorial, Raw Documentary, Soft Portrait
  • lighting - Soft Natural, Harsh Neon, Golden Hour, Blue Hour, Studio Key
  • post_process - Orange Down, Teal & Orange, Matte Black, Film Grain, Clean
  • camera - "Studio Cinematic, Tyren Style", 35mm f/1.4, Anamorphic, Wide Angle, Macro
  • composition - Studio Cinematic, Rule of Thirds, Centered, Dutch Angle, Overhead

Those choices are the demo; the mechanics are the real product. Two optional inputs matter more than any of them:

  • input_string (STRING) - an upstream prompt fragment, daisy-chained from another Dynamic Dropdowns node or anything that outputs text. It gets prepended to your dropdown picks, which matters: earlier tokens get stronger attention in tag-prompting, so this is how you keep character/subject tags ahead of the style garnish.
  • clip (CLIP) - your checkpoint's CLIP encoder. Leave it unwired and the CONDITIONING output is an empty list.

The two outputs are PROMPT_STRING (the cleaned comma-joined text, useful for debugging or feeding a Text Encode anyway) and CONDITIONING (the encoded block for the KSampler).

How it works under the hood

Read the __init__.py and it's refreshingly small. The node joins the five selections with ", ", inserts your input_string at the front, then scrubs the result: strips double quotes, trailing backslashes, and collapses ", ," artifacts - the classic failure when you concatenate prompt fragments without thinking about separators. If a clip is connected it does exactly what CLIPTextEncode does internally: clip.tokenize() then clip.encode_from_tokens(..., return_pooled=True), emitting [[cond, {"pooled_output": pooled}]].

Installing it

Clone into custom_nodes and restart ComfyUI. That's the whole install - no pip dependencies, no model downloads, nothing:

cd ComfyUI/custom_nodes
git clone https://github.com/0velia/ComfyUI-Dynamic-Dropdowns

ComfyUI Manager can do the same if you search for "ComfyUI-Dynamic-Dropdowns".

Where people get burned

  • No clip, no conditioning. If you wire CONDITIONING into a KSampler but never connect clip, you're feeding it an empty list - the sampler gets nothing to guide it. Wire the clip. (Or just use PROMPT_STRING and a normal Text Encode.)
  • The fancy UI doesn't attach. The repo's js/ adds "âž• Add Slot" buttons and a dark custom background - but it registers against the internal name ComfyUI_Dynamic_Dropdowns_Demo, while the shipped class is DynamicDropdownDemoNode. Name mismatch, so on the stock demo node the extra widgets silently never appear. Don't hunt for a missing button; it isn't there.
  • It's a demo. The dropdown choices are baked in. The real point of this pack is the Windows Node Builder Assistant.exe in the repo root, which generates a custom __init__.py from your own lists/*.txt - the demo node is what you see before you overwrite it with your own build.

Honest verdict: as a node it's a demonstration of an idea, and a decent one. If you want the full workflow without the tinkering, something like a wildcard picker may do more for less. But if you're the kind of person who wants one node per character sheet and is willing to run a generator tool to build it, this demo shows you exactly the shape of the thing before you commit.

Category🎭 Dynamic Dropdowns

Inputs (7)

NameTypeDefaultDescription
styleCOMBO5 options: Studio Cinematic, Anime Flat, Editorial, Raw Documentary, Soft Portrait
lightingCOMBO5 options: Soft Natural, Harsh Neon, Golden Hour, Blue Hour, Studio Key
post_processCOMBO5 options: Orange Down, Teal & Orange, Matte Black, Film Grain, Clean
cameraCOMBO5 options: Studio Cinematic, Tyren Style, 35mm f/1.4, Anamorphic, Wide Angle, Macro
compositionCOMBO5 options: Studio Cinematic, Rule of Thirds, Centered, Dutch Angle, Overhead
input_stringoptSTRING—
clipoptCLIP—

Outputs (2)

NameTypeDescription
PROMPT_STRINGSTRING—
CONDITIONINGCONDITIONING—