Nodes/HeartMuLa_ComfyUI/HeartMuLa Lyrics Transcriber
ComfyUI Node

HeartMuLa Lyrics Transcriber

Read any song back as lyrics

By benjiyaya·Created 7 months ago·Updated 5 months ago· 433
HeartMuLa Lyrics Transcriber
  • audio_input
  • lyrics_text
temperature_tuple0.0,0.1,0.2,0.4
no_speech_threshold0.40
logprob_threshold-1.0

HeartMuLa_Generate writes songs; this is the node that reads them back. Feed it any audio and it hands you the lyrics as plain text. It's the quiet half of the pack, the one you skip until you realize how often you want it - like when you generate a track with the sibling node and want to confirm the model actually sang the words you wrote, because lyric drift is a real thing with these music models.

Honestly, that pairing is the killer use case. Wire HeartMuLa_Generate's audio into HeartMuLa_Transcribe and you get a closed loop: write lyrics → generate → read back what it decided to sing → fix the prompt accordingly. But it works just as well on anything else you can get into ComfyUI as audio - the shipped example workflow loads a track with VHS_LoadAudio and pipes it straight in.

How it works

The node wraps HeartTranscriptor-oss, and the pack's source is refreshingly transparent about what that is: the pipeline subclasses transformers' AutomaticSpeechRecognitionPipeline and loads a WhisperForConditionalGeneration checkpoint. It's Whisper under the hood, fine-tuned for the song side of the family. Your AUDIO input gets saved to a temp wav, chunked into 30-second segments, transcribed with beam search, and the temp file is deleted afterward. Those three exposed knobs are straight Whisper transcription parameters - if you've ever touched whisper.cpp, they'll look familiar.

The inputs that matter

  • audio_input (AUDIO) - plug in HeartMuLa_Generate's audio_output or any audio loader (the example uses VHS_LoadAudio). That's the whole input story; there's no file-path or URL option.
  • temperature_tuple - default "0.0,0.1,0.2,0.4". A comma-separated list, not a single value: Whisper's classic fallback ladder. If a decode is too confident and wrong, it retries at the next temperature.
  • no_speech_threshold (0.4) - how confident the model must be that a chunk actually contains speech before it treats it as lyrics. If you're getting empty results, this is where to look.
  • logprob_threshold (-1) - if a chunk's average log-probability drops below this, the decode is treated as too unreliable and skipped.

Output

  • lyrics_text (STRING) - the transcribed lyrics. Wire it to ShowText|pysssss (as in the example workflow) or any text display/save node.

Installation

If you installed the pack for the music generator, you already have this node - same repo, same pip install -r requirements.txt. The separate catch is the model: the transcribe pipeline loads from ComfyUI/models/HeartMuLa/HeartTranscriptor-oss and throws a FileNotFoundError if that folder isn't there. It's download #4 in the README's list, and the easiest one to skip when you're only here for music. If generate works but transcribe dies, that's almost certainly it:

cd ComfyUI/models
hf download HeartMuLa/HeartTranscriptor-oss --local-dir ./HeartMuLa/HeartTranscriptor-oss

Common issues

  • Empty or missing output - no_speech_threshold is too high for the audio, or the model is being fed a chunk it can't hear. Drop it toward 0.2 for quiet or instrumental-heavy tracks.
  • VRAM pressure. The transcribe model loads as a single float16 instance and shares the card with the generator. On a 12GB setup, loading both at once is when things start to sweat - generate first, then transcribe.
  • It's not general-purpose ASR. It's tuned for sung lyrics, so don't treat it as a podcast or meeting transcriber - that's Whisper's own job, and the stock model does it better.

The one genuine limitation worth knowing: the transcribe pipeline doesn't support version switching the way the generator does. It loads one model, keeps it cached, and that's the whole deal - fine for how you'll actually use it.

CategoryHeartMuLa

Inputs (4)

NameTypeDefaultDescription
audio_inputAUDIO
temperature_tupleSTRING0.0,0.1,0.2,0.4
no_speech_thresholdFLOAT0.400–1
logprob_thresholdFLOAT-1.0-5–5

Outputs (1)

NameTypeDescription
lyrics_textSTRING