Nodes/ComfyUI Web Viewer/MIDI Device Loader @ vrch.ai
ComfyUI Node

MIDI Device Loader @ vrch.ai

Tame your MIDI controller and map it to your workflow

By VrchStudio·Created 2 years ago·Updated 18 days ago· 356
MIDI Device Loader @ vrch.ai
    • RAW_DATA
    • INT_CC_VALUES
    • FLOAT_CC_VALUES
    • BOOLEAN_NOTE_VALUES
    • INT_NOTE_VALUES
    device_id
    name
    debugfalse
    raw_data

    You've seen the demos: someone twisting a knob on a MIDI controller and a ComfyUI-generated image shifts live in response. This is the node that makes that happen. VrchMidiDeviceLoaderNode reads input from a MIDI device - a knob box, a launchpad, a keyboard - and hands the values to your workflow as separate outputs you can wire into anything numeric. It's the input side of the pack's real-time control story, aimed squarely at live performers and tinkerers.

    What it does

    You tell it which device to listen to:

    • device_id - an identifier for the MIDI device (leave it empty to grab defaults, per the pack's design).
    • name - a friendly name for the device so you can tell what you're looking at.
    • debug - prints incoming messages so you can see the raw data flying in.

    There's also a raw_data multiline field, which is where you can supply or inspect raw MIDI messages.

    The useful part is the five outputs, which split MIDI data into typed streams:

    • RAW_DATA (JSON) - the raw incoming messages, for when you want everything.
    • INT_CC_VALUES and FLOAT_CC_VALUES - continuous controller (CC) values, i.e. your knobs and faders, as integers or floats. Float is what you'll wire into a KSampler's denoise or a strength parameter; int is what you'll feed into a step count or seed.
    • BOOLEAN_NOTE_VALUES and INT_NOTE_VALUES - note events as booleans (a key pressed/released) and integers. Use these for triggers and buttons.

    That split is the whole trick: it turns MIDI's two event types (continuous CC and discrete notes) into ComfyUI-native types so you can plug them straight into existing inputs instead of hand-parsing.

    The real-world flow

    Load the node, select your device, then grab a FLOAT_CC_VALUES output and drag it onto the parameter you want to control. Because ComfyUI re-runs the graph, each change re-queues your generation - which is exactly why this pack pairs with fast, distilled models (think Lightning/Turbo checkpoints) if you want responses that feel live rather than a slideshow. The pack's README points at OSC and gamepad nodes for the same idea; MIDI is just another controller to the same realtime layer, and this one is the one musicians already own.

    Installing it

    It ships with the ComfyUI Web Viewer pack:

    cd ComfyUI/custom_nodes
    git clone https://github.com/VrchStudio/comfyui-web-viewer
    pip install -r comfyui-web-viewer/requirements.txt
    

    Or find ComfyUI Web Viewer in ComfyUI Manager and restart. No models to download. Note the README lists MIDI example workflows as TBA, so you're largely on your own for wiring - start with debug on and wiggle a knob to confirm the node sees your device before you build anything on top.

    Troubleshooting

    No output at all usually means the wrong device_id or the device not being detected - watch the debug output. If nothing on the graph moves when you turn a knob, you're probably wiring an INT_CC_VALUES output into a FLOAT input, or vice versa; the type split exists to prevent that, so mind the colors on the sockets. And if you're chasing truly live response, remember the bottleneck is your sampling speed, not the MIDI node - that's where a distilled checkpoint earns its keep.

    Categoryvrch.ai/control/midi

    Inputs (4)

    NameTypeDefaultDescription
    device_idSTRING
    nameSTRING
    debugBOOLEANfalse
    raw_dataSTRING

    Outputs (5)

    NameTypeDescription
    RAW_DATAJSON
    INT_CC_VALUESINT
    FLOAT_CC_VALUESFLOAT
    BOOLEAN_NOTE_VALUESBOOL
    INT_NOTE_VALUESINT