Cover song · source audio
Upload a Song, and It Quietly Becomes the Title of Everything
- cover_source_json
- cover_title
Cover versions are the headline feature of toolkit 3.0, and MusicCoverSource is the door you walk in through. Drop a track in, and this node hands the rest of the graph two things: the identity of that file, and the title your finished cover will carry everywhere.
That second part is the bit nobody expects. The output cover_title is the source filename with its extension dropped, plus -cover. My Song.wav becomes My Song-cover - and that string is enforced. It goes into the audio tags, the artwork metadata, the output filenames, the production JSON and the prompt reports. If your LLM cheerfully invents a better title, or you typed one into a manual parser field, it loses. The filename owns the title.
Inputs that matter
Wire model_profile_json from the selector node, or the whole node stays dormant. Then:
audio- a dropdown of audio (and video) files found in ComfyUI's input directory, with native upload, plus the<select audio>placeholdermode-fullkeeps melody and harmony;melodykeeps the tune and gives the new accompaniment more freedom. This one setting drives both the SheetSage2 transcription and YuE2 generation, so the two halves of the cover can't disagree. The upstream cover guide recommendsmelodyfor stylistic covers.sheetsage2_model- a filename, defaulting tosheetsage2_bf16.safetensors, resolved undermodels/audio_encoders
Two outputs: cover_source_json (the payload the transcription, settings and generation nodes read) and cover_title. In any mode other than YuE2 Cover the node returns two empty strings and reports itself unchanged, so a normal MiniMax or YuE2 run neither loads SheetSage2 nor re-triggers on the file's mtime.
Install and the gotcha you will actually hit
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, then update the frontend files and hard-refresh the browser. This node has a named bug in the toolkit's own docs: the first cover build shipped without the audio preview widget ComfyUI's native uploader needs, so the node renders red with UNKNOWN inputs even when backend registration succeeded. Clearing cache doesn't fix it; the fix is web/song_model.js and web/song_model_utils.js being current plus a browser reload. If your copy came from a stale clone, that's what you're looking at.
The audio file itself has to be reachable by the server - it's listed from ComfyUI's input directory, so uploading through the node is the safe path. Selecting a placeholder and queueing raises YuE2 Cover: select an audio file in Cover source. immediately, which is a better failure than a mystery later.
What this node is not
It is not a lyric extractor, and this is the misconception worth killing early. SheetSage2 pulls out the musical score, not the words being sung. The node passes on the file's identity and your mode choice; the transcription node does the listening. The cover instructions in the LLM brief treat your audio and the resulting ABC strictly as data, never as instructions - so lyrics have to come from you or from a new-lyrics request, and instrumental covers stay instrumental.
Also note the cover pipeline conditions on the source, it doesn't mix it. Your original waveform never gets blended into the output; the score informs generation and the new audio is generated from scratch. Long source tracks still need a raised yue2_max_duration, because duration remains a ceiling rather than a copy of the source's runtime. Practically: pick the file, pick full or melody, and let the naming rule do its thing.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| model_profile_json | STRING | Configuration 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. | |
| audio | COMBO | <select audio> | Upload or select the source audio. Only read in YuE2 Cover mode. The filename without its last extension plus -cover becomes the song title. |
| mode | COMBO | full | Full (default) retains melody and harmony; melody keeps the tune with greater freedom for new accompaniment. Drives both SheetSage2 and YuE2. |
| sheetsage2_model | STRING | sheetsage2_bf16.safetensors | Audio encoder filename in models/audio_encoders. Autoload provides sheetsage2_bf16.safetensors; custom filenames must already be installed or configured in the model catalog. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| cover_source_json | STRING | — |
| cover_title | STRING | — |