Cover song · instrumental score / phrase map
Muting the vocal line in an ABC score without wrecking the arrangement
- cover_abc
- syllable_brief
- score_report_json
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:
Vocalnotes 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
Insblock, and where the two melodies overlap inside a one-to-four-bar block the former vocal melody wins - the replacedInsnotes 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)mutesVocaland leavesInsalone.- 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.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| cover_source_json | STRING | Connect Cover song / source audio. The lyrics mode decides whether the score is rewritten. | |
| cover_abc | STRING | Connect Cover song / SheetSage2 transcription. An empty transcription stops the cover run. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| cover_abc | STRING | — |
| syllable_brief | STRING | — |
| score_report_json | STRING | — |