ComfyUI Node

Dynamic Params

Dynamic Params is a parameter dashboard in a single node

By xiaowc-lib·Created about a year ago·Updated about a year ago· 0
Dynamic Params
    • placeholder

    You know the ComfyUI Primitive node - the one you right-click into existence to feed a constant prompt, seed, or CFG into your graph. Dynamic Params is that idea, except it's one node holding as many of those constants as you want, each with a name, a type, a description, and its own input and output port. Click "Add Parameter," tell it you want an INT named steps, and you get a widget on the node plus an output you can wire straight into your sampler. It's a self-contained config panel for people who'd rather have one obvious dashboard at the top of a workflow than five floating Primitive nodes with no labels.

    It's the kind of quality-of-life utility that lives in the same family as rgthree's graph helpers - it generates nothing on its own; it just makes a big workflow readable. The entire pack is this one node, MIT-licensed, by a solo author (xiaoweichao), and it's as obscure as it sounds: I couldn't find a single Reddit thread about it. That's fine for a utility this small - it means you're mostly relying on the code, and the code is simple enough to eyeball.

    How it works

    The trick is that the node rewrites itself at runtime. The Python side registers with a single dummy STRING output, but when the graph runs, execute() reads the whole workflow out of extra_pnginfo, finds its own node, looks at whatever outputs you've added, and dynamically swaps in its RETURN_TYPES and RETURN_NAMES to match. The frontend (web/dynamic_params.js) is what builds those ports: every param you add gets a widget (number for INT, slider-style number for FLOAT, text for STRING), a matching input, and a matching output, and the whole list is serialized into the node's properties.dynamic_params. That's what makes workflows shareable - everything travels inside the PNG metadata, no extra files.

    One genuinely clever detail: the outputs are wrapped in a TautologyStr bypass tuple, which makes ComfyUI accept the output in any type slot. Convenient, but it also means there's no type checking. You can wire an INT into a slot expecting a STRING and nothing will stop you.

    The inputs and outputs that matter

    The static schema is basically empty - required and optional are blank because every real port is created on the fly. What you actually get:

    • The dynamic inputs - one per param, named after it. Here's the priority rule from the README and the code: if you connect something into a param's input, that value wins; if the input stays unconnected, the widget value is used. The widget even greys out when connected, so it's visually obvious which is active.
    • The dynamic outputs - same names, same types, ready to wire into your sampler, text encoders, anything.
    • A stray placeholder STRING output - always there, and it always returns the literal text placeholder. It's the dummy first output the dynamic rewrite keeps around. Ignore it; don't wire it by mistake.

    Only STRING, INT, and FLOAT are accepted as types. Names must look like valid variables (no spaces, under 50 chars, no duplicates) or the node rejects them.

    Installation

    Two paths, both painless since there are no models and no Python dependencies - no requirements.txt in the repo at all.

    • ComfyUI Manager: search for "Comfyui-Dynamic-Params" and install.
    • Manual:
      cd ComfyUI/custom_nodes/
      git clone https://github.com/xiaowc-lib/comfyui-dynamic-params
      Then restart ComfyUI (the node has a web/ frontend, so a full restart - not just a refresh - is required).

    One genuine trap: the pack's own README contains a copy-paste bug and tells you to clone https://github.com/erehr/comfyui_erenodes.git - a different author's repo. Use the URL above, or Manager, and you're fine.

    Gotchas

    This is a one-commit, June-2025 pack with zero community footprint. The mechanism leans hard on dynamic type rewriting and custom frontend extensions, which is exactly the kind of thing ComfyUI's Nodes 2.0 frontend migration has been breaking across the ecosystem - expect rougher edges with newer ComfyUI versions. It's a handy utility for personal workflows and sharing a clean config dashboard; I wouldn't build a production pipeline on it. For plain "pass a value into one input," ComfyUI's built-in Primitive is still the boring, battle-tested choice. Dynamic Params earns its keep when you want everything in one labeled place.

    CategoryComfyui-Dynamic-Params

    Inputs (0)

    No inputs

    Outputs (1)

    NameTypeDescription
    placeholderSTRING