Nodes/RyanOnTheInside/MIDI Loader βš‘πŸ…‘πŸ…žπŸ…£πŸ…˜
ComfyUI Node

MIDI Loader βš‘πŸ…‘πŸ…žπŸ…£πŸ…˜

Get a .mid file into ComfyUI so RyanOnTheInside's Flex nodes can react to it

By ryanontheinsideΒ·Created 2 years agoΒ·Updated 5 months agoΒ· 852
MIDI Loader βš‘πŸ…‘πŸ…žπŸ…£πŸ…˜
    • MIDI
    β—„midi_fileβ–Ύβ–Ί
    β—„track_selectionβ–Ύβ–Ί
    β—„start_measure1β–Ί
    β—„start_beat1β–Ί
    β—„end_measure0β–Ί
    β—„end_beat1β–Ί

    The pack's whole pitch is "Everything-Reactivity" - nodes that respond to audio, MIDI, motion, and more - and this is the entry point for the MIDI half of that. It loads a .mid file and trims it to a specific measure/beat range, ready to feed into whatever MIDI-driven feature extraction the rest of the pack builds on top of.

    How it works

    Pick a file from the dropdown, optionally narrow it to a specific range of measures and beats, and it outputs a MIDI object. This node doesn't do anything with the MIDI data beyond loading and trimming - turning notes into a reactive FEATURE signal (something a Flex node can actually modulate a parameter with) is a separate step elsewhere in the pack.

    The inputs and outputs that matter

    • midi_file (required, enum) - the dropdown lists whatever .mid files are available to the node; the pack ships a handful of samples out of the box (a couple of "promiscuous"-themed test files, plus a generic sample_midi.mid). Like other ComfyUI loader nodes, this dropdown reflects a folder ComfyUI watches for that file type - drop your own MIDI file in and it should show up after a refresh.
    • track_selection (required) - the schema shows all as the available choice, i.e. by default you're loading every track in the file rather than isolating one instrument.
    • start_measure / start_beat (default 1 each) and end_measure / end_beat (end_measure default 0, meaning "all remaining measures"; end_beat default 1) - the trim window. Leave end_measure at 0 to just play through to the end of the file.
    • Output - a single MIDI object, for whatever downstream node in this pack extracts a reactive feature from it.

    How to install it

    Via ComfyUI Manager: search "RyanOnTheInside," install, restart. Manually:

    cd ComfyUI/custom_nodes
    git clone https://github.com/ryanontheinside/ComfyUI_RyanOnTheInside.git
    cd ComfyUI_RyanOnTheInside
    pip install -r requirements.txt
    

    then restart ComfyUI. No model downloads for this node - it's parsing a standard MIDI file format, not running inference.

    Common issues & troubleshooting

    Your own MIDI file doesn't show up in the dropdown. ComfyUI loader dropdowns are populated from disk at load time in general, so a file added after ComfyUI started won't appear until you refresh the node (right-click β†’ refresh, or restart ComfyUI) - this is standard behavior across loader-style nodes, not specific to this one.

    Trimmed range doesn't match what you expected to hear. start_measure/start_beat and end_measure/end_beat are two separate coordinates, not one continuous timestamp - double check both pairs are set consistently, and remember end_measure: 0 means "don't cut the end at all," which can surprise you if you expected 0 to mean "nothing."

    Only certain tracks matter but track_selection only offers "all." As of this pack's current schema, per-track isolation isn't exposed here - if you need to isolate a specific instrument track, that's either a job for your MIDI file itself (export just that track before loading) or for whatever downstream node processes the loaded MIDI object, not something this loader controls.

    CategoryRyanOnTheInside/Audio/MIDI

    Inputs (6)

    NameTypeDefaultDescription
    midi_fileCOMBO5 options: prom_single_track.mid, promiscuoius__chorus.mid, promiscuous_chorus_melody.mid, promiscuous_melody.mid, sample_midi.mid
    track_selectionCOMBO1 options: all
    start_measureINT1β€”
    start_beatINT1β€”
    end_measureINT0End measure (0 = all remaining measures)
    end_beatINT1β€”

    Outputs (1)

    NameTypeDescription
    MIDIMIDIβ€”