Nodes/Music Production Toolkit/Cover song · instrumental score / phrase map
ComfyUI Node

Cover song · instrumental score / phrase map

Muting the vocal line in an ABC score without wrecking the arrangement

By jplenio·Created 19 days ago·Updated a day ago· 55
Cover song · instrumental score / phrase map
    • cover_abc
    • syllable_brief
    • score_report_json
    cover_source_json
    cover_abc

    The cover chain in this toolkit turns your audio into an ABC notation score with SheetSage2, then hands that score to YuE2 as conditioning. Which raises an obvious question the moment you want an instrumental cover: what happens to the notes the singer was singing?

    Left alone, they stay in a Vocal voice block, and you've just told the model "here's a song with a vocal line, sing it" while asking for an instrumental. This node is where the decision gets made and, more importantly, where it gets reported.

    What it rewrites, and what it doesn't

    Only instrumental mode changes the score. For new lyrics and original lyrics, the voice blocks are exactly where the words go later, so the score is handed back byte-identical - the words change, not the notation.

    For an instrumental cover the transformation is quite specific:

    • Vocal notes become equal-duration rests. Chord symbols stay put, because the harmony was never the vocalist's, and the two-voice block format is preserved.
    • If the block had notes and you picked a lead instrument, that melodic line moves into the native Ins block, and where the two melodies overlap inside a one-to-four-bar block the former vocal melody wins - the replaced Ins notes are counted in the report so the substitution isn't silent.
    • Blocks with no sung notes keep their original instrumental theme. Instrumental-only material isn't touched.
    • Remove vocal line (accompaniment only) mutes Vocal and leaves Ins alone.
    • Header fields, meter, key, tempo and the one-to-four-bar block boundaries all survive, and the lead instrument is conveyed through the Style text rather than by renaming ABC headers - the native dialect has fixed voice names.

    The rewrite is idempotent, and both the LLM prompt and the generator receive the same rewritten score. That's the honest part of the design: the model isn't being told one thing and handed another.

    Inputs and outputs

    Two inputs, both required, both wiring: cover_source_json from Cover song · source audio (it carries the lyrics mode and the lead-instrument choice, and that's what decides whether anything is rewritten) and cover_abc from the SheetSage2 transcription node. An empty transcription raises rather than passing an empty score downstream - the cover run stops.

    Three outputs. cover_abc is the adapted score, and that's what continues down the cover chain (or into the Cover Studio, if you've switched it on). syllable_brief is the phrase map. score_report_json records the mode, whether the score was adapted, how many notes were removed and replaced, and the phrase data.

    Read the phrase map carefully, because its name oversells it slightly: it reports note onsets and phrase grids, not measured syllables. A sung vowel can span several notes, and the legacy total_syllables key in the report means "note-onset count". If you're using it to density-match new lyrics, treat it as approximate guidance - the pack's own docs say so.

    Install

    No separate install; it comes with the pack:

    cd ComfyUI/custom_nodes
    git clone https://github.com/jplenio/ComfyUI-MiniMax-Music-Production-Toolkit.git
    cd ComfyUI-MiniMax-Music-Production-Toolkit
    python -m pip install -r requirements.txt
    

    The score path needs a ComfyUI build that exposes the native audio-encoder and SheetSage2 nodes, and the SheetSage2 BF16 weights (about 1.39 GB) in models/audio_encoders/sheetsage2_bf16.safetensors - the model check node downloads them when sheetsage2_models and auto_download are on. Restart ComfyUI, reload the browser and reopen the bundled workflow rather than an old saved graph.

    Where it goes wrong

    YuE2 Cover requires non-empty SheetSage2 ABC transcription is the empty-score guard, and the fix is upstream: try another source file, or read the native SheetSage2 error. SheetSage2 is a music transcriber, so plucked-and-shouted tracks sometimes yield nothing usable.

    expected paired Vocal/Ins blocks from SheetSage2 means the score's structure isn't what the rewrite expects - the transformation deliberately operates on the native voice blocks and refuses to rebuild music from the analysis map, so it stops rather than guessing.

    And the big one: a rewritten score does not guarantee a voice-free render. Every invitation is removed, but YuE2 can still add voice-like material. That's what the optional instrumental vocal check exists for - this node does the notation, that one does the listening. If voices keep appearing, the documented next thing to try is switching the source mode from full to melody, since a full-mode cover asks the engine for melody and harmony from a score whose vocal part is empty by design.

    CategoryMiniMax Music Production Toolkit/generation

    Inputs (2)

    NameTypeDefaultDescription
    cover_source_jsonSTRINGConnect Cover song / source audio. The lyrics mode decides whether the score is rewritten.
    cover_abcSTRINGConnect Cover song / SheetSage2 transcription. An empty transcription stops the cover run.

    Outputs (3)

    NameTypeDescription
    cover_abcSTRING
    syllable_briefSTRING
    score_report_jsonSTRING