Nodes/WorkflowUIPlugin/WorkflowUI Link
ComfyUI Node

WorkflowUI Link

One node that turns your ComfyUI workflow into an app form

By jimpi-dev·Created 6 months ago·Updated 5 months ago· 1
WorkflowUI Link
    • text_0
    • text_1
    • text_2
    • text_3
    • text_4
    • text_5
    • text_6
    • text_7
    • number_0
    • number_1
    • number_2
    • number_3
    • number_4
    • number_5
    • number_6
    • number_7
    • image_0
    • image_1
    • image_2
    • image_3
    • image_4
    • image_5
    • image_6
    • image_7
    • video_0
    • video_1
    • video_2
    • video_3
    • video_4
    • video_5
    • video_6
    • video_7
    • audio_0
    • audio_1
    • audio_2
    • audio_3
    • audio_4
    • audio_5
    • audio_6
    • audio_7
    • boolean_0
    • boolean_1
    • boolean_2
    • boolean_3
    • boolean_4
    • boolean_5
    • boolean_6
    • boolean_7
    form_labelGeneration parameters
    type_0
    name_0
    type_1
    name_1
    type_2
    name_2
    type_3
    name_3
    type_4
    name_4
    type_5
    name_5
    type_6
    name_6
    type_7
    name_7
    input_text_0
    input_number_00
    input_image_0
    input_video_0
    input_audio_0
    input_boolean_0false
    input_text_1
    input_number_10
    input_image_1
    input_video_1
    input_audio_1
    input_boolean_1false
    input_text_2
    input_number_20
    input_image_2
    input_video_2
    input_audio_2
    input_boolean_2false
    input_text_3
    input_number_30
    input_image_3
    input_video_3
    input_audio_3
    input_boolean_3false
    input_text_4
    input_number_40
    input_image_4
    input_video_4
    input_audio_4
    input_boolean_4false
    input_text_5
    input_number_50
    input_image_5
    input_video_5
    input_audio_5
    input_boolean_5false
    input_text_6
    input_number_60
    input_image_6
    input_video_6
    input_audio_6
    input_boolean_6false
    input_text_7
    input_number_70
    input_image_7
    input_video_7
    input_audio_7
    input_boolean_7false

    WorkflowUI Link is the one graph node in a pack that mostly isn't a graph node. WorkflowUIPlugin is a backend plugin for the WorkflowUI app: it bolts HTTP endpoints onto your ComfyUI server so that app can delete media, browse your output folders, and serve image previews. WorkflowUILink is the piece that lives inside your graph - a form-definition node that tells WorkflowUI which knobs your workflow exposes and where the values plug back in.

    If you're not using the WorkflowUI app, save yourself the install - honestly. Standing alone, this node is a pass-through with forty outputs and no opinion. Its whole job is to make a workflow importable into WorkflowUI as an "app": you import the workflow, the app reads this node and renders a form (positive prompt, a seed box, an image upload, a checkbox), and every run of that app feeds those values back into the graph right here. The author launched WorkflowUI on r/StableDiffusion in early 2026, and the use case that stuck was people who run ComfyUI on one machine and want a clean, shareable UI on another device instead of the janky mobile web frontend. This node is how your workflow tells that UI what to ask for.

    How it works

    The node gives you eight slots. Each slot has two required settings that matter:

    • type_# - an enum: text, number, seed, image, video, audio, boolean, or select. This decides what kind of field the app renders and what data it sends.
    • name_# - the label shown in the app. The placeholder has the one magic value: name a slot seed and WorkflowUI treats it as the master seed.

    Then there's form_label, the section header the app displays above the fields ("Generation parameters" by default).

    Each slot also carries six optional inputs: input_text_#, input_number_#, input_image_#, input_video_#, input_audio_#, and input_boolean_#. That's a lot of widgets for a beginner to eyeball, but the rule is simple: the type you picked decides which input holds the value, and in the graph they all just pass through to the matching output. The one genuinely clever bit in the source: image filenames get loaded from your ComfyUI input directory into real IMAGE tensors (PIL + torch), while video and audio stay as filename strings and booleans get coerced. The run() method itself is a straight relay - no computation, no models.

    The outputs are 40 in six blocks: text_0text_7 (STRING), number_0number_7 (INT), image_0image_7 (IMAGE), video_0video_7 (STRING), audio_0audio_7 (STRING), boolean_0boolean_7 (BOOLEAN). Wire them wherever the value belongs - text into CLIPTextEncode, seed into KSampler, the image into a load-image-style input.

    Installing it

    Two routes, both painless. In ComfyUI Manager, search "WorkflowUIPlugin" and install. Or the manual way:

    cd ComfyUI/custom_nodes
    git clone https://github.com/jimpi-dev/WorkflowUIPlugin
    

    Then restart ComfyUI - the plugin registers its routes at import time and prints a startup banner confirming it loaded. No requirements.txt, no model downloads, no heavy deps: it leans on torch, PIL, numpy, and aiohttp, all of which ComfyUI already ships. It's also published on the ComfyUI registry under the jimpi publisher, which is what makes the Manager install work.

    Where people trip up

    • It's useless without the app. Install the plugin, but also run WorkflowUI (there's a Docker image) or you're just carrying a dead node.
    • Everything lives on ComfyUI's server. The plugin's endpoints mount on the same port as the ComfyUI frontend, and the app uploads to and reads from ComfyUI's input/output folders - so the two need to actually reach each other, and files you expect in the dropdowns need to be in the right input folder.
    • Security is real here. This pack adds a file-delete endpoint to an API that ComfyUI keeps unauthenticated by default. The community has been burned by exposed ComfyUI instances before, so if you set this up for remote access, put auth in front of the port.

    You're not likely to need this node unless you've already fallen in love with the WorkflowUI way of running generations. But if that's you, it's the seam that makes your workflows behave like actual applications.

    CategoryWorkflowUI

    Inputs (65)

    NameTypeDefaultDescription
    form_labelSTRINGGeneration parameters
    type_0COMBO9 options: , text, number, seed, image, video, +3
    name_0STRING
    type_1COMBO9 options: , text, number, seed, image, video, +3
    name_1STRING
    type_2COMBO9 options: , text, number, seed, image, video, +3
    name_2STRING
    type_3COMBO9 options: , text, number, seed, image, video, +3
    name_3STRING
    type_4COMBO9 options: , text, number, seed, image, video, +3
    name_4STRING
    type_5COMBO9 options: , text, number, seed, image, video, +3
    name_5STRING
    type_6COMBO9 options: , text, number, seed, image, video, +3
    name_6STRING
    type_7COMBO9 options: , text, number, seed, image, video, +3
    name_7STRING
    input_text_0optSTRING
    input_number_0optINT00–2147483647
    input_image_0optCOMBO2 options: , example.png
    input_video_0optCOMBO1 options:
    input_audio_0optCOMBO1 options:
    input_boolean_0optBOOLEANfalse
    input_text_1optSTRING
    input_number_1optINT00–2147483647
    input_image_1optCOMBO2 options: , example.png
    input_video_1optCOMBO1 options:
    input_audio_1optCOMBO1 options:
    input_boolean_1optBOOLEANfalse
    input_text_2optSTRING
    input_number_2optINT00–2147483647
    input_image_2optCOMBO2 options: , example.png
    input_video_2optCOMBO1 options:
    input_audio_2optCOMBO1 options:
    input_boolean_2optBOOLEANfalse
    input_text_3optSTRING
    input_number_3optINT00–2147483647
    input_image_3optCOMBO2 options: , example.png
    input_video_3optCOMBO1 options:
    input_audio_3optCOMBO1 options:
    input_boolean_3optBOOLEANfalse
    input_text_4optSTRING
    input_number_4optINT00–2147483647
    input_image_4optCOMBO2 options: , example.png
    input_video_4optCOMBO1 options:
    input_audio_4optCOMBO1 options:
    input_boolean_4optBOOLEANfalse
    input_text_5optSTRING
    input_number_5optINT00–2147483647
    input_image_5optCOMBO2 options: , example.png
    input_video_5optCOMBO1 options:
    input_audio_5optCOMBO1 options:
    input_boolean_5optBOOLEANfalse
    input_text_6optSTRING
    input_number_6optINT00–2147483647
    input_image_6optCOMBO2 options: , example.png
    input_video_6optCOMBO1 options:
    input_audio_6optCOMBO1 options:
    input_boolean_6optBOOLEANfalse
    input_text_7optSTRING
    input_number_7optINT00–2147483647
    input_image_7optCOMBO2 options: , example.png
    input_video_7optCOMBO1 options:
    input_audio_7optCOMBO1 options:
    input_boolean_7optBOOLEANfalse

    Outputs (48)

    NameTypeDescription
    text_0STRING
    text_1STRING
    text_2STRING
    text_3STRING
    text_4STRING
    text_5STRING
    text_6STRING
    text_7STRING
    number_0INT
    number_1INT
    number_2INT
    number_3INT
    number_4INT
    number_5INT
    number_6INT
    number_7INT
    image_0IMAGE
    image_1IMAGE
    image_2IMAGE
    image_3IMAGE
    image_4IMAGE
    image_5IMAGE
    image_6IMAGE
    image_7IMAGE
    video_0STRING
    video_1STRING
    video_2STRING
    video_3STRING
    video_4STRING
    video_5STRING
    video_6STRING
    video_7STRING
    audio_0STRING
    audio_1STRING
    audio_2STRING
    audio_3STRING
    audio_4STRING
    audio_5STRING
    audio_6STRING
    audio_7STRING
    boolean_0BOOLEAN
    boolean_1BOOLEAN
    boolean_2BOOLEAN
    boolean_3BOOLEAN
    boolean_4BOOLEAN
    boolean_5BOOLEAN
    boolean_6BOOLEAN
    boolean_7BOOLEAN