Nodes/Comfyui_SynVow_Qwen3ASR/Qwen3 Forced Align
ComfyUI Node

Qwen3 Forced Align

Word-level timestamps for subtitles and karaoke — with one big language caveat

By shumoLR·Created 7 months ago·Updated 7 months ago· 37
Qwen3 Forced Align
  • aligner
  • audio
  • timestamps
  • text_list
  • start_times
  • end_times
text
languageChinese
segment_by_sentencetrue

This is the node that makes the pack worth more than a plain speech-to-text pipe. Qwen3 Forced Align takes an audio file, a transcript, and the aligner model, and returns the timing of each segment - "你准备好了吗" starts at 0.400s, "OK" at 2.960s, and so on. If you've ever wanted to auto-generate subtitles, karaoke lyrics, or a lip-sync schedule, this is the piece that produces the data to build them.

What it does

Forced alignment means: given the text, find where each word is in the audio. It's not a transcription - you supply the text yourself, pasted from the Transcribe node's output or written by hand. The inputs that matter:

  • aligner - the QWEN3_ALIGNER output from Qwen3 ForcedAligner Loader.
  • audio - the same ComfyUI AUDIO you fed the transcribe node.
  • text - the transcript in a multiline box. It should match what's actually said.
  • language - here's the caveat: only 11 languages, defaulting to Chinese. Nothing like the 52 the ASR side advertises. Hindi, Thai, Arabic, Vietnamese are all out, so check this list before you align anything exotic.
  • segment_by_sentence (default true) - splits output into sentence/phrase spans using punctuation. Turn it off for per-word timing instead.

Four STRING outputs come out: timestamps (one text\tstart\tend per line), plus text_list, start_times, and end_times as parallel one-per-line lists - handy when you're processing downstream rather than parsing the tab format.

How it works

The aligner model matches the transcript's words against the audio and returns a start and end time per word. With segment_by_sentence on, the node splits your input on punctuation and groups the per-word times into sentence spans - which is why the output reads like subtitle cues ("你准备好了吗\t0.400\t2.960") instead of a word-by-word dump. Times are floats in seconds to three decimal places. Two README caveats: alignment handles up to ~3 minutes natively with auto-chunking for longer audio, and the whole thing runs on the same bf16 / cuda:0 GPU setup as the loaders.

Installing

One of four nodes in the SynVow pack:

cd ComfyUI/custom_nodes
git clone https://github.com/shumoLR/Comfyui_SynVow_Qwen3ASR
cd Comfyui_SynVow_Qwen3ASR
pip install -r requirements.txt

…or search "Comfyui_SynVow_Qwen3ASR" in ComfyUI Manager and restart. First use downloads the aligner model.

Common issues

  • Timestamps drift or drop words. Almost always a transcript that doesn't match the audio - the aligner is matching, not guessing. Fix the text.
  • Defaults bite. language defaults to Chinese and segment_by_sentence defaults to on. If the output looks wrong, check both before you blame the model.
  • Your language isn't in the 11. The aligner simply can't do it - this is a model limitation, not a bug. Hindi is the classic community complaint.
  • VRAM. The aligner (~4GB) plus an ASR model in the same graph gets tight on 8GB cards.

Worth the setup cost, though: timestamped transcripts are the difference between a text blob and data you can cut video with.

CategoryQwen3-ASR

Inputs (5)

NameTypeDefaultDescription
alignerQWEN3_ALIGNER
audioAUDIO
textSTRING
languageCOMBOChinese11 options: Chinese, English, Cantonese, French, German, Italian, +5
segment_by_sentenceBOOLEANtrue

Outputs (4)

NameTypeDescription
timestampsSTRING
text_listSTRING
start_timesSTRING
end_timesSTRING