Qwen3 ASR - Transcribe Audio
Turn any ComfyUI AUDIO into text without an API key
- audio
- transcript
- language
- metadata_json
The name is a lie in the best way: "ASR" here doesn't call any cloud service and needs no key. This node runs Alibaba's Qwen3-ASR speech-to-text model locally and hands you the transcript as a plain string you can wire anywhere. Feed it an AUDIO input - a clip, a generated voice, a video's soundtrack - and the words come out the other end.
Qwen3-ASR is Qwen's entry into automatic speech recognition, out since January 2026 and a real local alternative to API ASR. It ships in two sizes: 0.6B (fast, the default) and 1.7B (better quality, still small enough that people run it on free Colab tiers). This is not a 20B diffusion monster; the 0.6B loads fast and transcribes a 10-minute clip in about a minute. The Qwen family's strong multilingual handling carries over - 30 languages plus dialects, with automatic language detection.
What this node is for
The AUDIO-input variant wires into a live graph rather than a folder. Typical jobs:
- Auto-transcribing a TTS reference. Feed a 10-second voice clip to an ASR node, then hand the text to a voice-cloning TTS node so it reads exactly what was said. No more typing it out.
- Captioning generated audio or video. Transcribe a video's dialogue or a generated soundtrack for subtitles, or a script you can reuse as a prompt.
- Feeding speech text into an LLM node downstream - chat, summarization, a prompt enhancer.
Audio lives at the edge of ComfyUI in bespoke node packs, and this is a clean entry - model downloads on first run, no server to babysit.
The inputs that matter
Seven inputs, and you'll touch maybe three:
language- defaults toauto, which genuinely works. If you know the language, pick it from the dropdown (full names likeEnglishorChinese; the pack also maps ISO codes likeenandzh). Setting it pins the output too.context- a multiline box for vocabulary, names, or jargon. If the model keeps mangling a proper noun, put the word here. The ASR equivalent of a prompt.max_new_tokens- how long a decode can run, default 256. Bump it for long, tricky clips.model_name,custom_model_id,device,dtype- the defaults are sane:autoeverywhere, 0.6B model.custom_model_idoverrides the dropdown when Qwen publishes a newer id.
What comes out
Three outputs, all strings:
transcript- the recognized speech and the one you'll actually use. It previews on the node (showing[No speech detected]on silence) and wires into a Show Text node, an LLM, or a TTS.language- the detected or requested language, handy if you left it onauto.metadata_json- a JSON blob from the model wrapper (language,text,time_stamps, requested model). Fine for logging; you'll rarely parse it.
One honest limitation: no word-level timestamps. The qwen-asr package needs the separate Qwen3 ForcedAligner model for that mode, and this pack doesn't expose it. If you came for karaoke lyrics or SRT subtitles, you want the other popular Qwen3-ASR pack (DarioFT's) or Whisper - and even the aligner route misses some languages, Hindi being a known gap. This node is "give me the words," not "give me a timestamped transcript."
How it works, briefly
The node grabs the AUDIO tensor, writes it to a temp WAV (PCM 16-bit, via soundfile), runs Qwen3ASRModel from qwen-asr, and cleans up after itself. The model caches once loaded; device: auto picks CUDA if you have it, CPU forces float32. The 1.7B on pure CPU is slow-but-doable; use the 0.6B there.
Install
ComfyUI Manager (search the pack title ComfyUI-Qwen3-ASR) or the manual route:
cd ComfyUI/custom_nodes
git clone https://github.com/endman100/ComfyUI-Qwen3-ASR
Then install dependencies into the same Python environment ComfyUI uses and restart:
pip install -r ComfyUI/custom_nodes/ComfyUI-Qwen3-ASR/requirements.txt
That pulls qwen-asr from endman100's own fork of the Qwen3-ASR repo, pinned lower-bound-only to pick up newer model support. First run downloads weights from Hugging Face.
Common issues
soundfilenot found - the AUDIO-input path needs it, and the error message tells you so.pip install soundfilefixes it.- Weights download stalls - first run is a Hugging Face download, not a hang. 0.6B is small; 1.7B less so.
- The fork makes people twitchy. Installing from a personal git fork with loose version ranges is a trust decision, and custom nodes here have a documented history of being weaponized. It's a small, readable pack - one
nodes.py- so skim it if you care. The trade-off is honest: exact pins break Qwen3-ASR's fast-moving releases, so the author relaxed them and takes on the maintenance. - No timestamps, again. Don't hunt for a setting that isn't there. Need word timing? Different tool. Need text? This is the most direct route in ComfyUI.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | AUDIO | — | |
| model_name | COMBO | Qwen/Qwen3-ASR-0.6B | 2 options: Qwen/Qwen3-ASR-0.6B, Qwen/Qwen3-ASR-1.7B |
| custom_model_id | STRING | — | |
| device | COMBO | auto | 3 options: auto, cuda, cpu |
| dtype | COMBO | auto | 4 options: auto, bfloat16, float16, float32 |
| language | COMBO | auto | 31 options: auto, English, Chinese, Cantonese, Arabic, German, +25 |
| context | STRING | — | |
| max_new_tokens | INT | 25616–4096 | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| transcript | STRING | — |
| language | STRING | — |
| metadata_json | STRING | — |