Nodes/ComfyUI-ParamNodes/Universal Param (for Combos)
ComfyUI Node

Universal Param (for Combos)

Drive combo dropdowns from your API without the wildcard mess

By FaraamFide·Created about a year ago·Updated about a year ago· 1
Universal Param (for Combos)
    • value
    valueNone

    Most of ComfyUI's controls are easy to drive from an API: swap the number in a widget, swap the string in a widget, done. The annoying exception is combo dropdowns - the model lists, the sampler menus, the LoRA pickers. Their valid values live inside the workflow's JSON, and forcing a new value from outside is where things get fiddly. Universal Param (for Combos) exists to make that one move clean.

    It's a single string input that outputs a wildcard type - shown as * - so ComfyUI's frontend lets you connect it anywhere, including into a combo widget. Under the hood it's just a string node with the type-loosening trick applied to its output, which is the same AnyType pattern a lot of flexible packs use to get the graph editor to allow a connection it would otherwise refuse.

    What it's for

    Say a LoraLoader has a dropdown listing your installed LoRA files, and your backend wants to pick which one this generation uses. Wire ParamUniversal into that dropdown, give the node a title like lora_name, and your API can set value to whatever filename is in the list. Same idea works for samplers, schedulers, checkpoints - anything whose widget is backed by a fixed combo list.

    The catch that keeps this honest: the value has to match a valid combo entry exactly. The node passes a string through; it doesn't validate it against the list. Send "SDXL" when the dropdown says "sdxl" and you'll get a confusing downstream failure instead of a friendly error. ComfyUI's own graph validation checks combo values when the workflow loads, so an out-of-list string can refuse to load at all - the error just won't tell you it was your casing that broke it.

    The opinionated part

    There's a long-running community argument about wildcard-typed nodes - the knowledge base even records a "Please Stop using the Anything Anywhere extension" backlash, and the instinct behind it is right: a node that routes any type anywhere makes workflows impossible to debug. This node is that pattern, but with a purpose. It's a string into a string slot, not a type-obliterating router for your whole graph. Used on one combo widget per parameter, it's the legitimate 5% of the idea. Used on everything, you'll be the person debugging a workflow where nothing matches and nothing tells you why. Keep it for the dropdowns and you're fine.

    Inputs, outputs, install

    One input: value, a plain string defaulting to "None" (non-multiline - it's meant for filenames and identifiers, not prose). One output: value, typed as the wildcard *. That's the entire surface.

    cd ComfyUI/custom_nodes
    git clone https://github.com/FaraamFide/ComfyUI-ParamNodes.git
    

    Restart ComfyUI, or install via ComfyUI Manager by searching "ComfyUI-ParamNodes". No dependencies beyond what ComfyUI ships. It's under Params/Input in the Add Node menu.

    Troubleshooting

    • Workflow won't load / value errors. The string doesn't match a combo entry. Check exact spelling and casing against the dropdown's own options.
    • Node connects to something it shouldn't. The wildcard type means ComfyUI will happily let you wire it into non-combo inputs too. If you use it as a general "pass any string anywhere," it works - but you've left the purpose-built ParamString sitting right there doing the same thing with type checking.

    For combo-driven parameters, this is the node that makes the last hard-to-automate widget automatable.

    CategoryParams/Input

    Inputs (1)

    NameTypeDefaultDescription
    valueSTRINGNone

    Outputs (1)

    NameTypeDescription
    value*