Nodes/Kinburg-Nodes/Satyr Import (MIDI β†’ Plan) 🐐
ComfyUI Node

Satyr Import (MIDI β†’ Plan) 🐐

Turns a MIDI file into a YuE2 plan, so a melody written in a DAW can be the one the model sings. This is the only real control over the tune: who sings is settled by the style string and the plan gets no say, but what they sing is written here. Two tracks become the Vocal and Ins voices, notes are quantised onto a grid chosen from the music, lengths the format cannot write are spelled with ties, and a note crossing a barline stays ONE syllable. Everything lossy β€” notes moved to reach the grid, chords flattened to their top note, a tempo map reduced to one number β€” is counted in the report. MIDI carries no chord symbols, so use mode 'melody' in YuE2, or wire this through 'Satyr Score' first to check the tune against your lyrics. It also reads the band out of the file: the tempo and every instrument General MIDI names go to the 'style' output, appended to whatever you put in 'style_prefix'.

By KinburgΒ·Created 3 months agoΒ·Updated 2 days agoΒ· 1
Satyr Import (MIDI β†’ Plan) 🐐
    • abc
    • style
    • report
    • seconds
    β—„midi_pathβ–Ί
    β—„vocal_trackβ–Ί
    β—„ins_trackβ–Ί
    β—„style_prefixβ–Ί
    β—„gridβ–Ύβ–Ί
    β—„verbosetrueβ–Ί
    CategoryKinburg-Nodes/Bestiary/Satyr

    Inputs (6)

    NameTypeDefaultDescription
    midi_pathSTRINGA .mid file: a full path, or just the name if it sits in ComfyUI's input folder. What it needs to contain is a melody. Everything else β€” tempo, time signature, key, and section labels from MIDI markers β€” is read if present and reported if missing.
    vocal_trackSTRINGWhich track becomes the sung line. A track name, or its number counting from 0. Leave empty and the node guesses: a name containing vocal / lead / melody wins, otherwise the first track with notes. The report lists every track with its note count and pitch range, so one run tells you what to type here.
    ins_trackSTRINGWhich track becomes the instrumental line. Same rules. Leave empty for the first track the vocal did not take; leave it pointing at nothing and the Ins voice is written as rests, which is perfectly valid.
    style_prefixSTRINGWhat the MIDI cannot know, put here: language, genre, vocal character, mood. The node appends what it CAN know β€” the tempo and the instruments General MIDI names β€” and hands back one style string. YuE2 asks for 'Language + Genre + Vocal Character + Tempo + Instruments', and a MIDI answers the last two exactly. It has nothing to say about the first three, and guessing them from note data would be making things up. Leave it empty to get the tempo and the band on their own, and join them to your own text however you like.
    gridCOMBOThe note grid everything is quantised onto β€” ABC's L: value. auto picks the coarsest grid the music actually fits, which keeps the plan readable: a 1/32 grid can write any rhythm and produces a line nobody can check. Set it by hand when the guess reads wrong, and read the report either way β€” it says how far the notes had to move to land on it. A MIDI quantised in a DAW converts exactly. A live take does not, and the report says so rather than pretending.
    verboseBOOLEANtruePrint the report to the console. The same text is always on the 'report' output.

    Outputs (4)

    NameTypeDescription
    abcSTRINGβ€”
    styleSTRINGβ€”
    reportSTRINGβ€”
    secondsFLOATβ€”