MIDI Device Loader @ vrch.ai
Tame your MIDI controller and map it to your workflow
- RAW_DATA
- INT_CC_VALUES
- FLOAT_CC_VALUES
- BOOLEAN_NOTE_VALUES
- INT_NOTE_VALUES
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_VALUESandFLOAT_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'sdenoiseor a strength parameter; int is what you'll feed into a step count or seed.BOOLEAN_NOTE_VALUESandINT_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.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| device_id | STRING | — | |
| name | STRING | — | |
| debug | BOOLEAN | false | — |
| raw_data | STRING | — |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| RAW_DATA | JSON | — |
| INT_CC_VALUES | INT | — |
| FLOAT_CC_VALUES | FLOAT | — |
| BOOLEAN_NOTE_VALUES | BOOL | — |
| INT_NOTE_VALUES | INT | — |