Nodes/PopNow/HeartMuLa Transcribe · Speech to Text
ComfyUI Node

HeartMuLa Transcribe · Speech to Text

Get the lyrics out of a sung vocal

By popnow-ai·Created 24 days ago·Updated about 20 hours ago· 0
HeartMuLa Transcribe · Speech to Text
  • audio_url
  • text
  • task id

One input, one output, and it does the hard thing

Transcribing speech is a solved problem - Whisper has been sitting in ComfyUI for years and it's free. Transcribing sung vocals is not solved, because melody stretches vowels until the words dissolve, and the usual ASR models hand you back "and I-I-I will alwaaaays" as a poem about uncertainty. HeartMuLa is built for that case specifically: pull the words out of a track, in a bunch of languages.

So the reason to reach for this node is narrow and real. You generated a song with a music model and want the lyrics back for a second pass, a rewrite, or subtitles. Or you have a vocal stem and no idea what the artist is singing. Whisper will get you most of the way on clean spoken audio; on a sung vocal, a lyric-tuned model is the difference between usable and useless.

Mechanism

The node has one input socket, audio_url, which takes a ComfyUI AUDIO value - despite the name, you don't type a link. Feed it a Load Audio node's output, or audio from any other audio node in the pack. On queue, the node converts the waveform to 16-bit PCM WAV in memory and uploads it (there's a 90 MiB ceiling on media uploads, which is roughly a couple of hours of mono WAV), quotes the run, submits the task with an idempotency key, polls it, and returns the transcript as a plain string.

No weights, no VRAM, no dependency installs - this pack declares none, and everything it needs ships with ComfyUI. Pricing is flat per run at 7.5 credits rather than per second, which makes it the rare audio node where a long file costs the same as a short one.

Inputs and outputs

audio_url - the audio to transcribe. That's the entire node. There's no language hint, no timestamps option, no diarization toggle; the model's schema doesn't expose them, so don't go looking. The tooltip's warning about the file needing to resolve directly to audio is inherited from the API's own field description - as a socket input it's handled for you, but it tells you why an empty or broken audio connection fails rather than degrades.

text (STRING) - the transcript. task id (STRING) - the run's handle in the PopNow API console.

Wiring it up: Load Audio → this node → whatever consumes a string. A Show Text node or a preview is enough to read the result; the same output feeds a prompt field on a re-generation, which is the interesting loop - transcribe a take you liked, edit the words, feed them back into a TTS or music node.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/popnow-ai/popnow-comfyui

Restart, then paste an API key from popnow.ai/api/console/keys into Settings > PopNow (or export POPNOW_API_KEY on a headless box), and restart again so the node list rebuilds from your account's catalog. Delete any legacy custom_nodes/popnow_api.py. Recent ComfyUI needed - the pack targets the V3 node API.

Trouble

If your AUDIO connection is empty, the field is omitted and the request goes out without audio; you'll get a PopNow 400 naming the field rather than a useful transcript, so check the loader first. 40201 means the wallet is empty - 7.5 credits a run is flat, so the cost per minute improves fast on longer material. 40004 means the combination isn't servable. 401 and 40310 are key and email problems respectively. Anything the model declines arrives as content_rejected and is refunded.

Because it's a hosted model, your audio leaves the machine - for a rough mixdown nobody cares, for unreleased material you might. And the usual pack-level caveat: PopNow has no community history to learn from, so the failure modes you'll discover are the ones you discover. The upside of a node with one input is that there isn't much left to configure wrong.

One last note on cancel: it stops you waiting, not the task. The transcription continues on PopNow and is charged if it succeeds.

CategoryPopNow/Audio/HeartMuLa

Inputs (1)

NameTypeDefaultDescription
audio_urlAUDIOURL of the audio file to transcribe. Must resolve directly to audio, not to a web page.

Outputs (2)

NameTypeDescription
textSTRING—
task idSTRINGThe PopNow task id, for the API console logs or support.