Qwen3 Forced Aligner Config
Word-level timestamps are one config node away (Qwen3 Forced Aligner)
- aligner_config
Don't judge this node by its four inputs and one output. It looks like a stub that does nothing, but it's the difference between a plain transcript and a transcript with word-level timestamps you can actually use. It ships in the same pack as the Qwen3 ASR Transcriber, and its entire job is to hand that node the recipe for loading the Qwen3-ForcedAligner-0.6B model.
What it actually does
Transcribe with the main Qwen3 ASR Transcriber node and you get text plus a timestamps output that reads "No timestamps generated." Connect this config node's aligner_config output into the Transcriber's optional forced_aligner input and that same output fills with aligned lines like [0.00 - 0.42] hello, one per word or short segment. That's the whole value: instead of searching a video's audio for where someone said "yes," you get it handed to you.
Under the hood, get_config resolves the model path and bundles a small dict - model name plus load kwargs for device, dtype, and attention backend - into a QWEN3_ALIGNER_CONF that the Transcriber consumes. Nothing heavy happens here. This node does not load the aligner model; the Transcriber does that when the workflow runs, so the real VRAM hit shows up there, not here.
The inputs
Since it's a config node, every input matters, but only in how it must agree with the Transcriber:
model_name- the dropdown of folders undermodels/diffusion_models/Qwen3-ASR/; pickQwen3-ForcedAligner-0.6B. If it says "None Found," the model isn't placed (it needshuggingface-cli download Qwen/Qwen3-ForcedAligner-0.6B --local-dir models/diffusion_models/Qwen3-ASR/Qwen3-ForcedAligner-0.6B).device- should match the Transcriber's,cudanormally.precision- should also match the Transcriber's; the aligner is loaded with the same dtype, and mismatches mean a reload (or worse) on the next run.flash_attention_2- off by default. The tooltip spells out the catch: it requires a compatible GPU andbf16/fp16. Turn it on withfp32and you're asking for an error.
The single output, aligner_config, wires straight into the Transcriber's forced_aligner socket. If you're wondering why it's a config object instead of just a checkbox on the Transcriber, that's the design: it keeps the aligner's own model choice and load settings separate so you can swap models or backends without reworking the main node.
What it doesn't do
Worth knowing before you build a whole timestamping pipeline on it: the forced aligner supports a smaller set of languages than the ASR model itself. Early community testing found it aligned English words cleanly but only partially covered languages the ASR handled fine - Hindi was the example that bit people. If you're working in an aligner-unsupported language, don't assume the gaps are a bug in your workflow. And if you only ever transcribe short clips and never need timestamps, you can skip this node entirely - it's purely additive.
Install
It's one node out of the same pack, so there's no separate install - grab kaushiknishchay/ComfyUI-Qwen3-ASR via ComfyUI Manager or git clone into ComfyUI/custom_nodes, run pip install -r requirements.txt, and grab the aligner weights with the huggingface-cli command above. Then load the Transcriber, add this node next to it, and watch your transcripts grow timecodes.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| model_name | COMBO | The Qwen3 Forced Aligner model to use for generating timestamps. | |
| device | COMBO | cuda | The device to run the aligner on. |
| precision | COMBO | bf16 | The numerical precision to use for the aligner model. |
| flash_attention_2 | BOOLEAN | false | Enable Flash Attention 2 for faster inference and lower VRAM usage (requires compatible GPU and bf16/fp16). |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| aligner_config | QWEN3_ALIGNER_CONF | — |