YUE_SM_Cond
Feed it a song, get the sheet music back
- clip
- audio
- abc_file
What this is
YUE_SM_Cond is the audio→score step of cover mode: you hand it a track, it hands you back a file path to an ABC notation score of that track's melody, which you then feed to the sampler with your own style and lyrics. It's the "clone the tune, not the recording" move, and it's the most interesting thing in this pack - local music models mostly take a prompt and give you whatever they feel like; this one lets you point at an existing song and keep its bones.
It takes two inputs, clip (from YUE_SM_Clip, which is really SheetSage2) and audio (an AUDIO socket - LoadAudio, or the output of any generation node), and it outputs one STRING called abc_file. Don't let the socket type fool you: that string is a filesystem path to a real .abc file the node just wrote.
How it works
The node writes your incoming audio tensor out to a temp wav with soundfile, then calls SheetSage2's transcribe() on it with melody_only=True, targeting a fresh timestamped directory under ComfyUI/output/audio/cover_score_<timestamp>/. The model is moved to the GPU for the transcription and returned to CPU afterwards.
melody_only=True is the detail that matters. It returns a chord-free, melody-only score - a monophonic two-voice ABC (a Vocal line and an Ins line, plus section markers), not a piano reduction and not the harmony. That's deliberate: the pack's own workflow notes say to use melody mode for covers precisely so the accompaniment is free to be rewritten in the new style. If the transcription can't produce a usable score, the node raises RuntimeError("Transcription did not produce a usable melody score") rather than passing garbage downstream - which is the behaviour you want, even if the traceback is annoying.
Wiring it up
The classic cover chain, all inside one pack:
LoadAudio → YUE_SM_Cond.audio
YUE_SM_Clip → YUE_SM_Cond.clip
YUE_SM_Cond.abc_file → YUE_SM_Sampler.abc_file (plus new style + new lyrics, cot = melody)
There is exactly one combination that won't run, and it's the one a beginner tries first: the sampler raises ValueError: A supplied score requires full or melody mode if you supply a score with cot set to off. With an ABC in play, melody is the recommended setting and full works when your score carries chord symbols. off means "no symbolic plan at all", so it has nothing to do with a score you handed it.
Installing it
Nothing beyond the pack - but this node is the one that actually exercises SheetSage2, so the prerequisites are shared with YUE_SM_Clip:
cd ComfyUI/custom_nodes
git clone https://github.com/smthemex/ComfyUI_YuE
pip install -r requirements.txt
Populate ComfyUI/models/clip/ with sheetsage2.safetensors and mert2_model.safetensors (see the YUE_SM_Clip article for why both are mandatory). Upstream's transcription stack also expects ffmpeg 6.1 and its shared libraries on your PATH for decoding audio, so if a run dies at the decode step with an odd codec complaint, convert your source to a plain 44.1/48 kHz wav and try again.
Where people get burned
- Every run writes a new timestamped folder.
output/audio/cover_score_*accumulates silently - four candidates means four folders with ascore.abceach, and no index telling you which is which. Rename as you go or you will lose the good one. - Long tracks are the VRAM spike. The transcription loads SheetSage2 plus its MERT parent and processes the whole song; a full-length track is where a 12GB card falls over first in this pack. Shorten the reference to the section you actually want to cover if it OOMs.
- The output is melody, not stems, and not chords. If you wanted the harmony or the arrangement preserved, you're on the wrong node - that's the score-editing path, where you keep an ABC's chord symbols and use
cot = fullinstead.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| clip | CLIP | — | |
| audio | AUDIO | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| abc_file | STRING | — |