Nodes/comfyui-lopi999-llm/Canary-Qwen-2.5B ASR (Audio→Text)
ComfyUI Node

Canary-Qwen-2.5B ASR (Audio→Text)

Speech-to-text in your ComfyUI graph, minus the API key

By LaVie024·Created 9 months ago·Updated 8 months ago· 0
Canary-Qwen-2.5B ASR (Audio→Text)
  • audio
  • text
model_dir
devicecuda
use_bf16true
max_new_tokens128
user_promptTranscribe the following:

If your workflow ever needs to turn audio into text - subtitles for a clip you're about to re-render, a transcript of a voiceover, a spoken prompt handed to an LLM - this node does it on your machine, not on some vendor's server. CanaryQwenASR wraps NVIDIA's Canary-Qwen-2.5B, a 2.5-billion-parameter speech-language model from the NeMo toolkit. No API, no key, nothing leaves your box. The real story is the price of admission: the node drags the entire NeMo toolkit in with it, and that install is where most people bounce off.

How it works

You feed it a standard ComfyUI AUDIO input. The node downmixes to mono, resamples to 16kHz, writes a temp WAV into ComfyUI's temp directory, loads the model once from models/asr, and caches it in memory so the second run is fast. Then it builds a prompt like "Transcribe the following: <audio>" using the model's audio locator tag, generates, and decodes the tokenizer output to a string.

The interesting bit is that this is a promptable ASR model, not a fixed transcriptor. The default user_prompt is just "Transcribe the following:" - but the model responds to instructions, so you can nudge it toward punctuation, formatting, or a different transcription style and it usually plays along. That's the whole reason the author exposed it as an input instead of hardcoding it.

Inputs and outputs that matter

  • audio - wire in anything that emits an AUDIO dict (Load Audio, video nodes). Honest caveat from the source: if you pass a batch, only the first item is transcribed.
  • model_dir - a dropdown built from folders inside models/asr. If it shows (models/asr not found), that's your problem, spelled out.
  • device (cuda/cpu) and use_bf16 (default on) - bf16 needs an Ampere-or-newer GPU; flip it off on older cards.
  • max_new_tokens (default 128, cap 1024) - long clips want more. If your transcript cuts off mid-sentence, this is the first knob to turn.
  • Output: a single text string, ready to wire into any text input - a prompt node, an LLM node, a text preview, whatever.

Installing it

ComfyUI Manager will find it if you search for "comfyui-lopi999-llm" (or the "lopi999" family). The manual route:

cd ComfyUI/custom_nodes
git clone https://github.com/LaVie024/comfyui-lopi999-llm
# restart ComfyUI

Then the model. The README is emphatic: download the entire nvidia/canary-qwen-2.5b repo from HuggingFace - not just the safetensors. It needs config, tokenizer, and the audio encoder files alongside the weights. Put the whole folder at ComfyUI/models/asr/canary-qwen-2.5b and restart so the dropdown picks it up.

Common issues

  • (models/asr not found) - you skipped the model step. Create models/asr, drop the folder in, restart.
  • NeMo dependency clashes. The pack's requirements.txt installs nemo_toolkit[asr,tts] straight from NVIDIA's git, which is a chunky build that pins packages and can disagree with ComfyUI's torch version. The node lazy-imports NeMo so ComfyUI still boots fine - the failure just shows up on your first transcription. If it dies there, that's a NeMo/torch version fight, not a node bug.
  • Resample quality. The built-in resampler is plain linear interpolation - the code itself notes torchaudio would do better. For 44.1k/48k sources it's acceptable for speech, but don't expect audiophile-grade resampling.

The honest take: this is a genuinely newer ASR model than the usual Whisper nodes, and there's essentially zero community chatter about it yet - you're an early adopter and you may be debugging alone. The payoff is a real modern ASR inside your graph for free, forever, once you survive the install.

Categorylopi999/llm

Inputs (6)

NameTypeDefaultDescription
audioAUDIO
model_dirCOMBO1 options: (models/asr not found)
deviceCOMBOcuda2 options: cuda, cpu
use_bf16BOOLEANtrue
max_new_tokensINT1281–1024
user_promptoptSTRINGTranscribe the following:

Outputs (1)

NameTypeDescription
textSTRING