Nodes/ComfyUI_SOME/SOME Sing to Midi
ComfyUI Node

SOME Sing to Midi

Your Voice Clip, a MIDI File — Sing-to-Midi Straight in ComfyUI

By billwuhao·Created about a year ago·Updated about a year ago· 8
SOME Sing to Midi
  • audio
  • audio
tempo120
midi_namemidi
unload_modeltrue

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:

  1. Grab 0119_continuous128_5spk.zip from the openvpi/SOME v1.0.0-baseline release and unzip it into ComfyUI/models/TTS. Here's the trap: the zip says 128, but the extracted folder - and the folder the code actually looks for - is 0119_continuous256_5spk, containing config.yaml and model_ckpt_steps_100000_simplified.ckpt. Rename if your unzip gives you something else, or nothing loads.
  2. Drop rmvpe.pt (from lj1995/VoiceConversionWebUI) into ComfyUI/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 .mid appears in output/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 its bin folder isn't on PATH, since the code looks up the literal command MuseScore4 and on Linux the binary is usually just musescore - the node throws and ComfyUI reports an error. Your .mid is 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_5spk folder name and that the .ckpt file is actually inside it.
  • First run slow, big VRAM spike - normal; it's loading the transcription model. unload_model on 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.

Category🎤MW/MW-SOME

Inputs (4)

NameTypeDefaultDescription
audioAUDIO
tempoINT12010–500
midi_nameSTRINGmidi
unload_modelBOOLEANtrue

Outputs (1)

NameTypeDescription
audioAUDIO