Nodes/ComfyUI-CozyGen/CozyGen Dynamic Input
ComfyUI Node

CozyGen Dynamic Input

One node that turns any ComfyUI field into a phone-friendly control

By gsusgg·Created about a year ago·Updated 11 months ago· 24
CozyGen Dynamic Input
    • *
    param_nameDynamic Parameter
    priority10
    param_typeSTRING
    default_value
    add_randomize_togglefalse
    choice_type
    display_bypassfalse

    ComfyUI is great until you're on a couch with a phone and the graph you built at a desk is a wall of tiny wires. That's the exact pain CozyGen exists for, and this node is its beating heart. The author's own framing says it all: he wanted to make dumb cat pictures with his desktop ComfyUI from his phone, hated driving the graph from a phone, and "vibe-coded" a solution. CozyGenDynamicInput is the original "put a field on a web page" node. Drop it into a workflow, wire its output into whatever you want to control remotely, and that parameter shows up as a proper input control on a mobile web UI served by your ComfyUI instance at /cozygen.

    It's the node behind the pack's whole pitch: a mobile-friendly controller for workflows you already built, not a new generation tool.

    How it works

    Behind the scenes it's almost a pass-through, and that's deliberate. The node holds a param_type (STRING, INT, FLOAT, BOOLEAN, or DROPDOWN), converts default_value into that type, and hands it back. The clever half isn't the Python - it's the React frontend that ships in the pack. When you pick a workflow on the /cozygen page, it reads the workflow's API JSON, finds every CozyGen input node, and renders a control that matches the declared type. On generate, your typed-in values get injected back into the queue request. The node is dumb on purpose; the web app does the adapting.

    The inputs that matter

    • param_name - the label shown on the web page. Make it something you'll recognize at a glance.
    • priority - sorts the page. 0 pushes the field toward the top; the default 10 sinks it.
    • param_type - picks the control: text box, number, toggle, or dropdown.
    • default_value - the starting value, used whenever the page doesn't supply one.

    The optional trio is where it gets interesting: add_randomize_toggle adds a Randomize checkbox (you want this on seeds), choice_type names a model folder like loras so a DROPDOWN lists real files, and display_bypass lets you bypass a connected loader - mostly for switching a LoRA off from the phone.

    The single output is typed ANY, so it plugs into virtually anything: KSampler's seed, a text encoder's text, a checkpoint loader's model name.

    Install

    Install via ComfyUI Manager (search "CozyGen"), or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/gsusgg/ComfyUI_CozyGen
    cd ComfyUI_CozyGen
    pip install -r requirements.txt
    

    Restart ComfyUI. To reach it from another device, start ComfyUI with --listen and open http://<your-comfyui-ip>:8188/cozygen. One workflow step people miss: after building your workflow, export it with API into the pack's workflows/ folder so the page can find it. If you're exposing ComfyUI beyond localhost, remember its API is unauthenticated by default - keep it on a trusted network.

    Where people get tripped up

    • Values live in your browser cache, not the workflow. Reload the workflow in ComfyUI and the page-side settings come back as defaults. That's the main reason the author later split this node into the typed Static siblings (CozyGen Int/Float/String/Choice Input) that keep values in the workflow graph. If you're rebuilding, the newer ones are the safer pick.
    • param_type is on you. Say STRING but wire into an INT input and things get loose, because the output is typed ANY.
    • The README's known-issue list still applies: the web page needs to be the active tab when generation finishes, or the live preview won't show (the image still lands in the gallery).

    It's a small, quirky, single-purpose node - but if your use case is "drive my desktop ComfyUI from the couch," this is the one that makes it work.

    CategoryCozyGen

    Inputs (7)

    NameTypeDefaultDescription
    param_nameSTRINGDynamic Parameter
    priorityINT10
    param_typeCOMBOSTRING5 options: STRING, INT, FLOAT, BOOLEAN, DROPDOWN
    default_valueSTRING
    add_randomize_toggleoptBOOLEANfalse
    choice_typeoptSTRING
    display_bypassoptBOOLEANfalse

    Outputs (1)

    NameTypeDescription
    **