Qwen3-ASR
Transcribe audio inside ComfyUI with Qwen3-ASR — no API key, no cloud
- audio
- 文本
- 语言
- time_stamps
- time_stamps_json
This node turns an audio clip into text without leaving your graph or phoning home. It's a thin local wrapper around Alibaba's Qwen3-ASR models - the speech-to-text release from late January 2026 that got the "qwen team is firing on all cylinders" treatment on r/StableDiffusion - and it answers the question you have once video workflows get good: what are they saying? Subtitles, a transcript you feed to a prompt node, dialogue for a lip-sync pass. Audio lives at the edge of ComfyUI in bespoke packs like this one, and a local transcriber beats a cloud one the way a local LLM does: free per call, offline after the first download, and the text comes back as a plain string you can wire anywhere.
What it is, honestly
The pack is one node (Qwen3ASR) from an author named mailzwj, a clean port of the Qwen team's qwen_asr package. It's Apache-2.0, brand new, and effectively has no install base yet - 0 impressions at the time of writing. Treat it as "fresh but real": the wrapper is simple and readable, and the models underneath are the actual Alibaba releases (0.6B and 1.7B), which claim 30 languages plus 22 Chinese dialects. The differentiator over plain Whisper is exactly that coverage and an optional word-level timestamp pass. If you only ever transcribe clean English, don't overthink it - this buys you little over lighter options. If your audio is Cantonese, a Chinese dialect, or code-switching, it earns its place.
How it works
On first use it loads the chosen model with Qwen3ASRModel.from_pretrained() into a cached instance, tries flash attention, and falls back gracefully if it's missing. It averages your waveform to mono, transcribes it, and - when you flip forced_aligner on - loads a second model, Qwen3-ForcedAligner-0.6B, for word-level timestamps. All local, no API.
The inputs that actually matter
audio- theAUDIOoutput of aLoadAudionode. That's the whole wiring: LoadAudio → this → text.model_choice-0.6Bor1.7B(default). 1.7B is more accurate; 0.6B if your card is tight. bf16 puts them at roughly 1.2 GB and 3.4 GB, plus the aligner if you enable it.language-Autodetects per-segment and handles mid-clip code-switching; pick a specific one if auto gets confused.forced_aligner- the timestamp switch. Off by default; on adds a real download and a slower run.device(auto/cuda/mps/cpu),precision(bf16/fp32),max_new_tokens(256 default),max_inference_batch_size, andseedround out the set - auto device and bf16 are right for almost everyone.
The outputs
You get 文本 (the transcript, STRING), 语言 (the language it thinks it heard, STRING), plus time_stamps (ANY - the raw aligner object) and time_stamps_json (STRING - a JSON array of {start_time, end_time, text} segments). The shipped example wires text and language into ShowText and the JSON into a PreviewAny. If you want subtitles on a generated video, that JSON is the part to pipe onward.
Installing it
Via ComfyUI Manager (search ComfyUI-Qwen3-ASR) or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/mailzwj/ComfyUI-Qwen3-ASR.git
pip install -r requirements.txt # qwen_asr, torch, numpy - torchaudio is commented out
Then restart ComfyUI. The real install is the models: the node auto-downloads them to ComfyUI/models/qwen-asr/, but if your network chokes on multi-GB pulls, grab them from HuggingFace or ModelScope and drop them in as Qwen3-ASR-0.6B, Qwen3-ASR-1.7B, and Qwen3-ForcedAligner-0.6B.
Warts worth knowing
- The forced aligner has a language ceiling. It officially covers 11 languages and is strongest on English and Chinese. One early Colab tester found it nailed English words but only partially detected Hindi - trust timestamps in the supported set, treat them as fuzzy outside it.
- The language dropdown has a copy-paste bug in the source: Korean ("韩语") currently maps to Italian. Auto-detect sidesteps it entirely; just don't assume the dropdown is accurate until a fix lands.
- First run is slow and big. It downloads whatever model you select plus the aligner if enabled. A 10-minute clip transcribed in about a minute on free-tier Colab, so speed is fine - it's the initial pull that hurts.
- Missing
qwen_asrshows up as a "Critical Import Error" in your console; that meanspip install -r requirements.txtdidn't take. Check you're in the venv ComfyUI actually uses.
One last thing: this is the shape of node worth glancing at before trusting - a fresh LLM-adjacent node that downloads weights. The source is short, the model is legitimately Alibaba's, and a skim of nodes.py costs five minutes. It passes the smell test.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | AUDIO | — | |
| max_inference_batch_size | INT | 32 | — |
| max_new_tokens | INT | 256 | — |
| model_choice | COMBO | 1.7B | 2 options: 0.6B, 1.7B |
| device | COMBO | auto | 4 options: auto, cuda, mps, cpu |
| precision | COMBO | bf16 | 2 options: bf16, fp32 |
| language | COMBO | Auto | 30 options: Auto, 中文, 英文, 粤语, 阿拉伯语, 德语, +24 |
| forced_aligner | BOOLEAN | false | — |
| seed | INT | 42 | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| 文本 | STRING | — |
| 语言 | STRING | — |
| time_stamps | ANY | — |
| time_stamps_json | STRING | — |