Nodes/Kaola ACE-Step Music/ACE-Step Transcriber
ComfyUI Node

ACE-Step Transcriber

Get the lyrics out of any song — ACE-Step Transcriber understands 50+ languages

By kana112233·Created 7 months ago·Updated 6 months ago· 29
ACE-Step Transcriber
  • audio
  • transcription
model_idkana112233/ComfyUI-kaola-ace_step
deviceauto
dtypeauto
languageauto
chunk_length_s30
return_timestampsfalse
custom_prompt
max_new_tokens4096
temperature0.2
top_p0.95
repetition_penalty1.1
num_beams1
seed0

Feed this node an audio file and it hands back the lyrics, formatted with structure tags like [Verse], [Chorus], and [Bridge], in 50+ languages. That's a genuinely hard problem - singing voices are slurred, mixed with instruments, and full of words no dictionary wants to admit exist. The Transcriber is built specifically for it, and it's the node that pairs naturally with the pack's Cover and Repaint: transcribe first, then tell the model "re-sing these lyrics" with real text instead of hoping it hears them.

The catch is the model behind it. This runs the ACE-Step Transcriber, a Qwen2.5-Omni-7B based multimodal model - and the README is refreshingly honest about the appetite: it recommends ~30GB+ VRAM with Flash Attention 2, and warns that the Qwen preview branch has version-lock quirks. This is the heavyweight node in the pack, not the one you add casually.

How it works

The node loads a Qwen2.5-Omni ASR pipeline via transformers, chunking long audio into 30-second windows (chunk_length_s) so you're not locked to one shot. Two details show the author knew what they were fighting: it disables Qwen's audio generation path (so it doesn't try to synthesize a response) and it monkeypatches token2wav to stop the model from burning VRAM generating waveforms when you only asked for text. You get one output - transcription - as a plain string, ready to drop into a text display node or wire into the lyrics input of a generation node.

The inputs that matter

  • audio - the track to transcribe.
  • model_id - a local path or HuggingFace ID. The dropdown defaults to the pack's ID but you'll typically download the model locally instead.
  • language - auto or force one of the ten-plus listed.
  • return_timestamps - false, true (segment-level), or word (word-level). Handy when you need to align lyrics to a video.
  • chunk_length_s - 30 default; lower for shorter memory, higher for more context.
  • max_new_tokens - 4096 default; raise it for very long lyrics.
  • The usual sampler knobs: temperature 0.2, top_p 0.95, repetition_penalty 1.1 - if output loops, raise the penalty.
  • num_beams - 1 (no beam search) default; higher is slower but sometimes more accurate.

Install

You need the node pack plus a separate model download, because the transcriber is not part of the standard ACE-Step 1.5 model set:

cd ComfyUI/custom_nodes
git clone https://github.com/kana112233/ComfyUI-kaola-ace-step.git
cd ComfyUI-kaola-ace-step && pip install -r requirements.txt
huggingface-cli download ACE-Step/acestep-transcriber --local-dir ComfyUI/models/acestep-transcriber

You also still need the base ACE-Step environment for the rest of the pack to work. Restart ComfyUI after installing. Note the README flags Qwen-preview-specific transformers requirements for this model - if the pipeline errors on load, the version lock is the usual culprit.

Where people get burned

The big one is VRAM. The README's own guidance: for a consumer card (well under 30GB), consider Whisper-large-v3 or a lighter ASR instead of this node. If it OOMs, cut chunk_length_s, use dtype float16, and accept that this model wants a serious GPU. The good news: when it fits, it's one of the better singing-voice transcribers you can run locally - generic Whisper models are noticeably worse on sung, mixed-down audio with structure tags.

CategoryACE_STEP

Inputs (14)

NameTypeDefaultDescription
audioAUDIOInput audio to transcribe.
model_idCOMBOkana112233/ComfyUI-kaola-ace_stepSelect the Qwen2.5-Omni model. Can be a local path (in models/acestep-transcriber) or a HuggingFace ID.
deviceCOMBOautoInference device. Use 'auto' or 'mps' for Mac.
dtypeCOMBOautoModel precision. 'auto' uses float16 for CUDA and float32 for CPU/MPS.
languageCOMBOautoTarget language for transcription. 'auto' uses default prompt.
chunk_length_sFLOAT300–300Audio chunk length in seconds for processing.
return_timestampsCOMBOfalseWhether to return timestamps. 'word' for word-level timestamps, 'true' for segment-level.
custom_promptSTRINGCustom prompt to override built-in language prompts. e.g. 'Transcribe the audio to Chinese:'
max_new_tokensINT409664–8192Maximum number of tokens to generate. Increase for longer lyrics.
temperatureFLOAT0.20–1Sampling temperature. Lower values are more deterministic.
top_pFLOAT0.950–1Nucleus sampling: cumulative probability threshold.
repetition_penaltyFLOAT1.11–2Penalty for repeating tokens. Increase if output gets stuck in loops.
num_beamsINT11–8Number of beams for beam search. 1 = no beam search.
seedINT00–4294967295Random seed for reproducible results. 0 for random.

Outputs (1)

NameTypeDescription
transcriptionSTRING