🎠Dynamic Dropdowns (Demo Mode)
The Dynamic Dropdowns demo node
- clip
- PROMPT_STRING
- CONDITIONING
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 Portraitlighting- Soft Natural, Harsh Neon, Golden Hour, Blue Hour, Studio Keypost_process- Orange Down, Teal & Orange, Matte Black, Film Grain, Cleancamera- "Studio Cinematic, Tyren Style", 35mm f/1.4, Anamorphic, Wide Angle, Macrocomposition- 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 theCONDITIONINGoutput 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
CONDITIONINGinto a KSampler but never connectclip, you're feeding it an empty list - the sampler gets nothing to guide it. Wire the clip. (Or just usePROMPT_STRINGand 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 nameComfyUI_Dynamic_Dropdowns_Demo, while the shipped class isDynamicDropdownDemoNode. 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.exein the repo root, which generates a custom__init__.pyfrom your ownlists/*.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.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| style | COMBO | 5 options: Studio Cinematic, Anime Flat, Editorial, Raw Documentary, Soft Portrait | |
| lighting | COMBO | 5 options: Soft Natural, Harsh Neon, Golden Hour, Blue Hour, Studio Key | |
| post_process | COMBO | 5 options: Orange Down, Teal & Orange, Matte Black, Film Grain, Clean | |
| camera | COMBO | 5 options: Studio Cinematic, Tyren Style, 35mm f/1.4, Anamorphic, Wide Angle, Macro | |
| composition | COMBO | 5 options: Studio Cinematic, Rule of Thirds, Centered, Dutch Angle, Overhead | |
| input_stringopt | STRING | — | |
| clipopt | CLIP | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| PROMPT_STRING | STRING | — |
| CONDITIONING | CONDITIONING | — |