Nodes/ComfyUI-MiniMax-Music-Production-Toolkit/Cover song · SheetSage2 transcription
ComfyUI Node

Cover song · SheetSage2 transcription

It Reads the Score, Not a Single Word You Sang

By jplenio·Created 16 days ago·Updated about 17 hours ago· 42
Cover song · SheetSage2 transcription
    • cover_abc
    model_profile_json
    cover_source_json
    model_check_report

    MusicCoverTranscription is the listening half of the cover path. It takes the audio you selected and runs it through SheetSage2, which returns a musical score as ABC notation - plain, readable text describing melody, harmony and rhythm. That one string is the whole output.

    Why that's interesting: a cover in this toolkit isn't an audio-to-audio remix. Your track becomes a description of music, and the description is what conditions generation. The toolkit's own framing is "the prompt follows the music" - the ABC goes into the LLM brief so the proposed style, instrumentation and development can follow the source's actual phrases, while the original, unchanged ABC goes to YuE2 for generation. No new score-planning step: in cover mode the normal ABC-planner stage is skipped entirely and your transcription takes its place.

    What it wants wired

    Three required inputs, and they're all strings from elsewhere in the graph:

    • model_profile_json - from the model selector. Anything other than YuE2 Cover and this node returns an empty string and loads nothing.
    • cover_source_json - from MusicCoverSource. This carries the audio filename, the byte size and, critically, the full vs melody mode.
    • model_check_report - the report string from the model-check node. It's the gate that confirms the encoder you asked for is actually on disk before anything tries to load it.

    Output: cover_abc. Wire it to the cover_abc input on the generation node. It also reaches the prompt side, so your LLM sees the score when it writes the arrangement.

    What happens under the hood

    The node doesn't implement transcription. It expands a small native subgraph - LoadAudio into AudioEncoderLoader into SheetSage2AudioToABC, with the mode taken from the source node - and hands the result back. That means two things you have to satisfy on your install.

    First, your ComfyUI build must expose AudioEncoderLoader and SheetSage2AudioToABC. These are native nodes, not part of this pack. A third-party YuE node pack with differently-named nodes is not a drop-in substitute, and a build that predates the cover support will fail here rather than at the dropdown.

    Second, the encoder weights. The default is sheetsage2_bf16.safetensors, roughly 1.39 GB, living in ComfyUI/models/audio_encoders. The toolkit's model check can fetch it, but only when YuE2 Cover is the selected mode and sheetsage2_models (and auto_download) are on. Normal YuE2 and MiniMax runs ignore it completely - you don't pay the 1.39 GB or the load time for songs that aren't covers. Custom encoder filenames need an installed file or a matching catalog entry; the dropdown won't conjure one.

    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   # same Python as ComfyUI
    

    Restart ComfyUI and hard-refresh the browser. Requires a build with the native SheetSage2 nodes above.

    The two ways it fails, and the one misconception

    The documented failure is "YuE2 Cover cannot transcribe the source": an empty ABC stops the run. Check that an audio file is actually selected, that the native nodes exist, and that the SheetSage2 BF16 file is present - then read the native error, because SheetSage2's own message usually names the problem better than the toolkit's wrapper does.

    The other failure is a mode mismatch. The full/melody choice lives on the source audio node and drives both transcription and generation. If you go change yue2_mode in the music settings expecting it to steer a cover, you'll either get no effect (that field is for new songs) or a hard stop: "Cover transcription and generation modes disagree." One setting, both halves. Respect it.

    The misconception is the title of this article. SheetSage2 extracts music, not sung words. If you feed it a vocal track and expect the original lyrics back, you'll be disappointed - and the toolkit's own cover instructions forbid the LLM from claiming it knows them. Supply your own words, ask for new ones, or select instrumental. Given how new this whole path is, expect to experiment: ABC-based conditioning is a first step, not a solved workflow, and the useful thing to develop is your ear for which sources transcribe cleanly.

    CategoryMiniMax Music Production Toolkit/generation

    Inputs (3)

    NameTypeDefaultDescription
    model_profile_jsonSTRINGConfiguration input 'model profile json'. This value is passed directly to the node's processing logic; keep it at the workflow default unless you intentionally want to change that part of the production chain.
    cover_source_jsonSTRINGSource audio identity and shared transcription mode from Cover song / Source audio. Used only for YuE2 Cover; the filename owns the final title.
    model_check_reportSTRINGConfiguration input 'model check report'. This value is passed directly to the node's processing logic; keep it at the workflow default unless you intentionally want to change that part of the production chain.

    Outputs (1)

    NameTypeDescription
    cover_abcSTRING