SOME Sing to Midi
Your Voice Clip, a MIDI File — Sing-to-Midi Straight in ComfyUI
- audio
- audio
Every once in a while a node shows up that doesn't generate anything - it transcribes. SomeSing2Midi (from the billwuhao/ComfyUI_SOME pack, in the 🎤MW music-node family) takes a singing vocal and turns it into an editable MIDI file, right there inside ComfyUI. Feed it a clean a cappella clip, get back a .mid you can drag into a DAW, fix notes note-by-note, and re-render. It also hands you a piano rendition of the transcription as an audio signal, so you can hear what the model heard without leaving the graph.
It's a thin wrapper around SOME, a singing-to-MIDI transcription model from OpenVPI (the Diffusion-SVC crowd) - and despite the name, this isn't a piano project, it's a pitch-and-note extraction engine. The pack is brand new (v1.0.0 landed mid-2025) and tiny: one node, one job. Its page gets essentially zero search traffic, so if you found this while googling the name, you're early - early is when you want the quirks spelled out.
Where it fits: the obvious chain is "vocal → notes." The author's own ComfyUI_Seed-VC can clean up a raw vocal, and this node turns the cleaned stem into MIDI. The bundled workflow example shows the minimal version: LoadAudio → SomeSing2Midi → PreviewAudio.
How it works
The node caches your audio tensor to a temp WAV, loads it at the model's sample rate, and slices it into chunks at silence boundaries. Each chunk goes through the SOME model, which maps a mel-spectrogram to per-frame MIDI pitch probabilities plus note on/off bounds, then decodes those into note sequences with durations. Chunks get stitched back together and written out with mido as a standard .mid file, timestamped to your chosen tempo. The original SOME pipeline leans on rmvpe for pitch extraction - that's why you have to drop rmvpe.pt into your models folder.
The inputs that matter
Four inputs, and honestly you'll touch three of them:
- audio (AUDIO) - the thing to transcribe. Any ComfyUI audio: LoadAudio, a TTS/VC output, whatever. Clean, dry, solo vocals transcribe best.
- tempo (INT, default 120, range 10–500) - sets the MIDI's tempo. If you know the song's actual BPM, put it in; it affects how the piano preview sounds.
- midi_name (STRING, default "midi") - your output filename. The file lands at
ComfyUI/output/midi/<name>.mid. - unload_model (BOOLEAN, default true) - whether to drop the model from VRAM after each run. Leave it on if you share the GPU with image models; flip it off if you're transcribing a batch of clips and want to skip reloading each time.
Output: a single audio (AUDIO) - the piano version of the transcribed MIDI, rendered by MuseScore4. Wire it into PreviewAudio or SaveAudio. Worth repeating: the real deliverable is the .mid on disk; the audio output is the model telling you what it thinks it heard.
Installing it
cd ComfyUI/custom_nodes
git clone https://github.com/billwuhao/ComfyUI_SOME.git
cd ComfyUI_SOME
pip install -r requirements.txt
For ComfyUI's embedded Python, use ./python_embeded/python.exe -m pip install -r requirements.txt instead. ComfyUI Manager can grab it too - search for "ComfyUI_SOME". Requirements pull in librosa, lightning, fairseq, mido, and praat-parselmouth, which is a chunky set of torch-ecosystem deps, so the first install takes a minute.
Then the models - this is where people get burned:
- Grab
0119_continuous128_5spk.zipfrom the openvpi/SOME v1.0.0-baseline release and unzip it intoComfyUI/models/TTS. Here's the trap: the zip says 128, but the extracted folder - and the folder the code actually looks for - is0119_continuous256_5spk, containingconfig.yamlandmodel_ckpt_steps_100000_simplified.ckpt. Rename if your unzip gives you something else, or nothing loads. - Drop
rmvpe.pt(from lj1995/VoiceConversionWebUI) intoComfyUI/models/TTS/Seed-VC/. It's shared with ComfyUI_Seed-VC, so if you already run that, you're done.
Common issues
- Node errors but a
.midappears inoutput/midi- this is the big one. The README says MuseScore4 is only needed if you want the MP3 piano output, but the code actually calls MuseScore unconditionally after saving the MIDI. If MuseScore4 isn't installed - or itsbinfolder isn't on PATH, since the code looks up the literal commandMuseScore4and on Linux the binary is usually justmusescore- the node throws and ComfyUI reports an error. Your.midis already saved, so nothing's lost, but the node looks broken until MuseScore4 is installed and on PATH. Do that up front and save yourself the confusion. - Model not loading - check the
0119_continuous256_5spkfolder name and that the.ckptfile is actually inside it. - First run slow, big VRAM spike - normal; it's loading the transcription model.
unload_modelon clears it afterward. - Junk notes on unfamiliar voices - the baseline model was trained on five singers ("5spk"), so it generalizes but won't nail every voice. Cleaner a cappella in, cleaner MIDI out; reverb and instrumental bleed add ghost notes.
That's the whole thing. If you want vocal-to-MIDI inside ComfyUI, this is currently the only in-graph option that isn't a half-baked demo - rough edges, folder-name trap, and MuseScore dependency included.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | AUDIO | — | |
| tempo | INT | 12010–500 | — |
| midi_name | STRING | midi | — |
| unload_model | BOOLEAN | true | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |