RT HeartMuLa Transcribe
Round-Trip Your Generated Song Back to Lyrics
- transcriptor_pipe
- audio
- lyrics
RT HeartMuLa Transcribe is the second half of the pack's optional transcriptor branch. It takes the pipeline from RT HeartMuLa Transcriptor Loader, points it at an AUDIO input, and returns the words it hears as a single STRING. It's the "did the model actually sing my lyrics?" node.
Given the pack's own feature set, this reads like a verification loop: you feed the sampler lyrics, it sings them, and this node transcribes the result back so you can compare. Community testing of HeartMuLa backs up the premise - the model is unusually faithful to lyrics, so the round-trip usually comes back clean, which makes transcription more of a QA tool and an accessibility nicety (subtitles, lyric sheets) than a fixer. It will also happily transcribe any AUDIO you feed it, not just freshly generated songs - hook it up after a LoadAudio node and it works on anything.
How it works
The node takes the audio's waveform and sample rate, downmixes to mono if it's stereo, then walks through the waveform in 30-second chunks. Each chunk goes through the loaded ASR pipeline with timestamps, the transcribed pieces are joined with spaces, and the whole thing comes back as a lyrics string. Tiny tail chunks under 100 samples are dropped rather than fed to the model, which is a small detail but a sensible one - no point burning a model call on a fragment of silence.
It runs inside a progress bar loop that respects ComfyUI's interrupt handling, so a 4-minute track's transcription is cancelable mid-run rather than a hang-you-until-it's-done affair.
Inputs and output
transcriptor_pipe- the pipeline object from the Transcriptor Loader (HEART_TRANSCRIPTOR). Wire the loader's output here.audio- anAUDIOinput. The sampler's output works directly; so does any audio source.- Output: a single
lyricsSTRING.
That string is plain text, so route it to a text display node (the pack's example workflow uses ShowText) or anywhere a string is useful.
Before you use it
Remember the transcriptor model is optional and not installed by default. If the loader throws Model not found, that's the cause:
cd ComfyUI/models/HeartMuLa
git clone https://huggingface.co/HeartMuLa/HeartTranscriptor-oss
Common issues
- Empty or truncated transcription - the 100-sample tail cutoff is the usual culprit on short clips; feed it a longer piece of audio. Stereo inputs are handled (downmixed), so that's rarely the issue.
- Slow transcription - it's a full ASR model running chunk-by-chunk. On CPU this is genuinely tedious; keep
device: cudain the loader if you can. - Timestamps ignored - the pipeline is called with
return_timestamps=Truebut the node discards them and returns only concatenated text. If you need word-level timing, you'll be writing your own node; this one gives you the words, not the clock. - Transcription doesn't match your lyrics - that's the model's adherence talking, not the transcriptor. If it's a different song entirely, your prompt conditioning was off; revisit
cfg_scaleand the tag format in the sampler side.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| transcriptor_pipe | HEART_TRANSCRIPTOR | — | |
| audio | AUDIO | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| lyrics | STRING | — |