ComfyUI Node

Qwen3-ASR

Transcribe audio inside ComfyUI with Qwen3-ASR — no API key, no cloud

By mailzwj·Created 8 months ago·Updated 7 months ago· 7
Qwen3-ASR
  • audio
  • 文本
  • 语言
  • time_stamps
  • time_stamps_json
max_inference_batch_size32
max_new_tokens256
model_choice1.7B
deviceauto
precisionbf16
languageAuto
forced_alignerfalse
seed42

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 - the AUDIO output of a LoadAudio node. That's the whole wiring: LoadAudio → this → text.
  • model_choice - 0.6B or 1.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 - Auto detects 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, and seed round 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_asr shows up as a "Critical Import Error" in your console; that means pip install -r requirements.txt didn'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.

CategoryQwen3-ASR

Inputs (9)

NameTypeDefaultDescription
audioAUDIO
max_inference_batch_sizeINT32
max_new_tokensINT256
model_choiceCOMBO1.7B2 options: 0.6B, 1.7B
deviceCOMBOauto4 options: auto, cuda, mps, cpu
precisionCOMBObf162 options: bf16, fp32
languageCOMBOAuto30 options: Auto, 中文, 英文, 粤语, 阿拉伯语, 德语, +24
forced_alignerBOOLEANfalse
seedINT42

Outputs (4)

NameTypeDescription
文本STRING
语言STRING
time_stampsANY
time_stamps_jsonSTRING