Nodes/Jovimetrix/MIDI READER (JOV) 🎹
ComfyUI Node

MIDI READER (JOV) 🎹

Hook your MIDI controller up to ComfyUI

By AmoranoΒ·Created 3 years agoΒ·Updated 12 months agoΒ· 397
MIDI READER (JOV) 🎹
    • πŸŽ›οΈ
    • πŸ”›
    • 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 system alsa-lib/libasound dev 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.

    CategoryJOVIMETRIX πŸ”ΊπŸŸ©πŸ”΅/DEVICE

    Inputs (1)

    NameTypeDefaultDescription
    πŸ“ŸoptCOMBODevice

    Outputs (7)

    NameTypeDescription
    πŸŽ›οΈJMIDIMSGMIDI bus that contains the full MIDI message
    πŸ”›BOOLEANThe state of the note -- either `ON` or `OFF`
    CHANINTMIDI channel sent in the MIDI message
    🎚️INTThe control number sent in the MIDI message
    🎢INTNote value (0-127) sent in the MIDI message
    VALFLOATIf this was a control messge, the control value (0-127) sent in the MIDI message
    0-1FLOATIf this was a control messge, the control value normalized to 0-1