VoiceBridge ASR Transcribe
Speech in, words and a clock out
- model_key
- audio
- forced_aligns
- text
- language
- timestamps
This is the node that listens. Give it an audio clip and a loaded Qwen3-ASR model and it hands back the transcript - plus, if you ask nicely, a word-by-word timestamp list that makes everything downstream (translation, subtitles, dubbing) actually line up with the audio. It's the recognizer in VoiceBridge's ASR → LLM → TTS speech-translation pipeline, and it's the node you'd reach for even outside that pipeline, because a ComfyUI-native, local, 31-language transcription node is genuinely useful on its own.
What it does
Feed it any ComfyUI-format AUDIO (so anything from a Load Audio node, another pack's output, or a video's extracted track) and it runs Qwen3-ASR over it. The model auto-detects the language unless you pin one. The output is four things:
text(STRING) - the full transcript. The thing you actually wanted.language(STRING) - the detected (or chosen) language code, handy to wire into later nodes that need to know what they're translating from.timestamps(STRING) - a readablestart-end: wordlist per word, only populated whenreturn_timestampsis on. Great for eyeballing in a text preview.forced_aligns(LIST) - the machine-readable word-level timing data. This is whatGenerate SRTconsumes to build timed subtitles, and it only has real content when timestamps are enabled and a forced aligner is loaded.
The inputs that matter
model_key- fromVoiceBridge ASR Loader. The model must be loaded first; the loader's cache is what this node reads from.audio(AUDIO) - the clip to transcribe.language-autoby default; pick from 31 languages (Chinese, English, Cantonese, Japanese, Korean, and more) if auto-detection misfires or you want to force it.context(STRING) - optional hints that improve accuracy on specialized content: jargon, names, product terms. If you're transcribing something full of weird vocabulary, a one-line context note pays for itself.return_timestamps(BOOLEAN, default off) - the switch that decides whether you get timing. Turn it on if the output feedsGenerate SRTor anything subtitle-shaped.
Installing it
Part of the comfyui_voicebridge pack. ComfyUI Manager search "VoiceBridge", or:
cd ComfyUI/custom_nodes
git clone https://github.com/YanTianlong-01/comfyui_voicebridge.git
cd comfyui_voicebridge
pip install -r requirements.txt
Restart ComfyUI. The first run will pull the Qwen3-ASR weights (a few GB) into ComfyUI/models/Qwen3-ASR/ - that happens at the loader, not here.
Where people get burned
The classic mistake is expecting timestamps without setting anything up for them. return_timestamps defaults off, and even when you flip it on, precise word timing needs the Qwen3-ForcedAligner-0.6B selected on the loader. Skip both and you get a perfectly good transcript with no clock attached - fine for text, useless for subtitles. The other gotcha is model-lifetime: if the ASR model gets unloaded (via VoiceBridge Unload Model or a loader settings change), this node throws a "model not found in cache" error until the loader runs again. That's by design - the pack trades convenience for explicit VRAM control, so the sequence matters: load, transcribe, unload.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| model_key | MODEL_KEY | — | |
| audio | AUDIO | — | |
| languageopt | COMBO | auto | 31 options: auto, Chinese, English, Cantonese, Arabic, German, +25 |
| contextopt | STRING | — | |
| return_timestampsopt | BOOLEAN | false | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| forced_aligns | LIST | — |
| text | STRING | — |
| language | STRING | — |
| timestamps | STRING | — |