MIDI READER (JOV) πΉ
Hook your MIDI controller up to ComfyUI
- ποΈ
- π
- CHAN
- ποΈ
- πΆ
- VAL
- 0-1
MIDI READER (JOV) πΉ is the node that drags your physical MIDI hardware into ComfyUI. Plug in a keyboard, a DJ controller, a MIDI fighter, turn a knob or hit a note, and this node turns that event into numbers you can drive any workflow with - seed changes, parameter sweeps, live image tweaks. It's the gateway for "perform with ComfyUI" setups, and it's why Jovimetrix got a following among people who wanted to play their outputs like an instrument.
First, the thing you need to know before anything else: this node no longer ships in Jovimetrix. The 2.0.0 rework (April 2025) moved all MIDI work out of the pack into a dedicated repository, Amorano/Jovi_MIDI, which now hosts MIDI READER, MIDI MESSAGE, MIDI FILTER, MIDI FILTER EZ, and a newer MIDI LOADER for reading MIDI files. The README says it plainly under "nodes that have been migrated." So if a workflow references MIDI READER (JOV) πΉ and it's missing, that's why - install Jovi_MIDI, don't try to revive the old Jovimetrix.
What it does
The only input is π - the MIDI device selector, where you pick which of your connected MIDI ports to listen to. From there it decodes each incoming message into a full set of outputs:
- ποΈ (JMIDIMSG) - the raw message object, for chaining into the other MIDI nodes.
- π - a boolean saying whether a note is actually being played.
- CHAN (INT) - which MIDI channel the message came in on.
- ποΈ (INT) - the control/CC number (for knobs and faders).
- πΆ (INT) - the note number.
- VAL (FLOAT) - the raw value.
- 0-1 (FLOAT) - the same value normalized to 0β1, which is the one you'll actually feed into most ComfyUI parameters.
That normalized output is the killer feature: a knob's raw MIDI value means nothing to a CFG scale, but a 0β1 float maps straight onto almost any parameter range. Wire 0-1 into a math node, scale it, and your physical knob is now a live slider for your workflow.
Installing it
Install Jovi_MIDI, not Jovimetrix:
# ComfyUI Manager: search "Jovi_MIDI" and install
# or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/Amorano/Jovi_MIDI.git
cd Jovi_MIDI
pip install -r requirements.txt
Restart ComfyUI. The requirements are light - mido[ports-rtmidi] (the MIDI plumbing), aenum, and the shared cozy_comfyui git dependency. No models.
Troubleshooting
- No devices in the π dropdown - the node only lists live MIDI ports. Plug the device in before starting ComfyUI, and make sure it's not grabbed by another app.
alsaseq/ rtmidi errors on Linux -mido[ports-rtmidi]needs the ALSA sequencer backend. Install the systemalsa-lib/libasounddev packages and reinstall the requirement.- Nothing happens when I move a fader - check you're reading the right output. Faders and knobs come through as control changes (watch ποΈ and VAL); notes come through as π + πΆ. They're separate wires.
- Latency feels off - MIDI isn't the bottleneck; the queue is. For true real-time feel you want a low queue / single-step setup, not a 20-item batch.
Jovi_MIDI is MIT, actively maintained, and the author (Joviex) is responsive on the pack's Discord. If "live" is the goal - playing images with a keyboard instead of clicking Run - this is the front door.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| πopt | COMBO | Device |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| ποΈ | JMIDIMSG | MIDI bus that contains the full MIDI message |
| π | BOOLEAN | The state of the note -- either `ON` or `OFF` |
| CHAN | INT | MIDI channel sent in the MIDI message |
| ποΈ | INT | The control number sent in the MIDI message |
| πΆ | INT | Note value (0-127) sent in the MIDI message |
| VAL | FLOAT | If this was a control messge, the control value (0-127) sent in the MIDI message |
| 0-1 | FLOAT | If this was a control messge, the control value normalized to 0-1 |