MF Dropdown Menu
An editable dropdown you can wire into any workflow — resolution presets, styles, anything
- selected_value
ComfyUI gives you combo widgets on loaders, but a custom dropdown you control, whose value you can wire anywhere? That's the gap MF Dropdown Menu (MF_CustomDropdownMenu) fills. It's a plain node that renders a real select menu on the canvas - click it, pick an option, and the chosen string comes out the other side. Default options are low, medium, high, ultra (the author defaulted it to video-game graphics settings), and you're meant to replace them with your own.
It's one of 13 nodes in MF PipoNodes (pierreb-mf / Moment Factory), a small pack with near-zero community footprint - so treat it as "nice utility, maintain it yourself" rather than "battle-tested." It's exactly the kind of quality-of-life node the ecosystem essay would slot next to rgthree's UX work, except this one is a single dropdown instead of a whole suite.
How it works
The trick is that the dropdown is almost entirely frontend. The node takes two STRING inputs:
selection- the currently chosen value (defaultmedium).dropdown_options- your list of choices, newline-separated (defaultlow\nmedium\nhigh\nultra).
The JavaScript in web/pipoNodes.js hides those raw strings and renders a real <select> with an EDIT button. Click EDIT, type your options one per line, and the dropdown rebuilds. What's clever (and a little fragile) is that your custom list lives in the dropdown_options widget, which means it's serialized into the workflow JSON - rename the list, save the workflow, and the options come back next load. The Python side is dead simple: it just passes selection straight through to the selected_value output.
Where to wire it
The value is any string, so it composes anywhere a STRING goes:
- Resolution presets:
512x512,768x768,1024x1024→ drive a Width/Height pair (you'll need a couple of nodes to split the string, or feed it to something that parses it). - Style labels feeding a prompt-assembly node.
- A checkpoint or LoRA switcher if you've got one that takes a name string.
- Simplest of all: as a human-readable tag you log alongside generations.
Install
cd ComfyUI/custom_nodes/
git clone https://github.com/pierreb-mf/ComfyUI-MF-PipoNodes
cd ComfyUI-MF-PipoNodes
pip install -r requirements.txt
Restart ComfyUI (or search "MF PipoNodes" in ComfyUI Manager). Only aiohttp and pyyaml get pulled in - no downloads, no models.
Gotchas
- It's a UI widget. The output is whatever's selected in the dropdown; if you edit the workflow JSON by hand,
selectionis just a plain string field, and there's no validation that it matches an option. - EDIT is the only way to change options from the canvas - if you don't see the EDIT button, the web extension didn't load (check the browser console for a JS error; the pack's frontend has had rough edges on newer ComfyUI frontend builds).
- Because the options are a serialized widget, keep the list in the node, not in a disconnected text file - that's the whole point of it persisting with the workflow.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| selection | STRING | medium | — |
| dropdown_options | STRING | low medium high ultra | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| selected_value | STRING | — |