Nodes/ComfyUI-AppBuilder/AppBuilder (Advanced)
ComfyUI Node

AppBuilder (Advanced)

The AppBuilder that hands values back to your graph

By lihaoyun6·Created 2 months ago·Updated 24 days ago· 15
AppBuilder (Advanced)
    • parameters
    config_json{"string":{"type": "string","name": "Usage","placeholder": "Click [⚙️ Configuration Panel] button to generate the widgets you need.","multiline":true,"tooltip":"You can delete this sample widget"}}
    live_previewfalse

    AppBuilder turns a workflow into a web app. AppBuilderAdv turns a workflow into a web app that feeds its results back into the graph. Same configuration-panel idea, one crucial difference: this node emits a parameters bundle, which is what makes the app's sliders, text boxes, and seed fields real values the rest of the workflow can consume.

    So when do you reach for it? Whenever "someone clicks Generate in a browser" needs to actually change the picture. Typical setup: you build a txt2img or img2img workflow for a colleague, expose prompt, negative prompt, seed, steps, and CFG, and leave the app in charge of those. The plain AppBuilder is the "just show a UI" version; this one is the full round-trip.

    Inputs and output

    Only two inputs matter, and both are simple:

    • config_json (STRING) - the widget layout as JSON. The default ships with a sample "Usage" widget so you can see the shape of a config before building your own; it's a multiline text box that you're meant to delete once you add real controls.
    • live_preview (BOOLEAN, default off) - shows a live preview of your widget set on the panel as you build. The config panel's "previewer" control flips it for you, so you usually don't touch it directly.

    The output is a single parameters slot. That's the bundle you wire onward.

    How it works

    The frontend builds the dynamic widgets from config_json, exactly like the base node. But at execution, the node's execute() parses that same config, pulls each value - from the workflow's prompt inputs, the node's own kwargs, or the widget default - casts it to the type declared in the config (INT, FLOAT, BOOLEAN), applies a float precision if you set one, and packs everything into { data, config }. One bundle out, typed and ready.

    Setup flow: add the node → ⚙️ Configure Panel → add controls → each control becomes a key in config_json. Wire the parameters output into ParametersUnpacker, and it splits back into individual slots you can drag into a CLIP Text Encode prompt, a KSampler seed, whatever.

    Install

    ComfyUI Manager (search "PowerPanel"), or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/lihaoyun6/ComfyUI-PowerPanel
    

    Restart after. The pack's only Python deps are pynvml and psutil, both auto-installed; no models to download. Note the naming: the README still calls this pack "ComfyUI-AppBuilder" because lihaoyun6 renamed the repo after the docs - they're the same thing.

    Common issues

    Watch the one-per-workflow rule: the pack allows only a single AppBuilder-family node per graph and auto-removes a second one with a warning toast. And remember that only values declared in the config get emitted - delete a widget from the panel and its value stops flowing to the graph. If your app runs but nothing changes downstream, that's usually it: the widget exists in the UI but isn't in config_json as a real control.

    CategoryAppBuilder

    Inputs (2)

    NameTypeDefaultDescription
    config_jsonSTRING{"string":{"type": "string","name": "Usage","placeholder": "Click [⚙️ Configuration Panel] button to generate the widgets you need.","multiline":true,"tooltip":"You can delete this sample widget"}}
    live_previewBOOLEANfalse

    Outputs (1)

    NameTypeDescription
    parametersparameters