cstr/qwen3-forced-aligner-0.6b-gguf Q4_K GGUF - Free GGUF Download is indexed on GraySoft with repository links, GGUF quant files, and Hugging Face metadata. This page helps you pick a local model for guIDE or other runtimes. See related models in the same shard below.
cstr/qwen3-forced-aligner-0.6b-gguf overview
GGUF conversions of Qwen/Qwen3-ForcedAligner-0.6B — a single-pass forced aligner that takes any (audio, transcript) pair and predicts per-word/per-token timestamps. Reuses the Qwen3-ASR audio encoder + 28-layer LLM body but swaps the lm_head from (vocab, d) to (5000, d): each placeholder you embed in the input gets a 5000-class softmax over class 80 ms timestamps. Plug it into CrispASR via -am qwen3-forced-aligner-.gguf to get word-level timing on any transcription backend — voxtral, voxtral4b, qwen3-asr, granite, parakeet, canary, cohere, even whisper. It's an alternative to the existing canary-ctc-aligner second-pass with broader language coverage and 80-ms resolution.
Repository Files & Downloads
Model Details Live
Metadata Inspector
Normalized metadata (stored in metadata_json)
{
"metadata": {},
"card_data": {
"license": "apache-2.0",
"base_model": "Qwen/Qwen3-ForcedAligner-0.6B",
"language": [
"zh",
"en",
"yue",
"fr",
"de",
"it",
"ja",
"ko",
"pt",
"ru",
"es"
],
"tags": [
"forced-alignment",
"speech-to-text",
"audio",
"timestamps",
"gguf",
"ggml",
"qwen3"
],
"pipeline_tag": "automatic-speech-recognition",
"library_name": "ggml",
"frontmatter": {
"license": "apache-2.0",
"base_model": "Qwen/Qwen3-ForcedAligner-0.6B",
"language": [
"zh",
"en",
"yue",
"fr",
"de",
"it",
"ja",
"ko",
"pt",
"ru",
"es"
],
"tags": [
"forced-alignment",
"speech-to-text",
"audio",
"timestamps",
"gguf",
"ggml",
"qwen3"
],
"pipeline_tag": "automatic-speech-recognition",
"library_name": "ggml"
},
"hero_image_url": "",
"summary": "GGUF conversions of Qwen/Qwen3-ForcedAligner-0.6B — a single-pass forced aligner that takes any (audio, transcript) pair and predicts per-word/per-token timestamps. Reuses the Qwen3-ASR audio encoder + 28-layer LLM body but swaps the lm_head from (vocab, d) to (5000, d): each placeholder you embed in the input gets a 5000-class softmax over class * 80 ms timestamps. Plug it into CrispASR via -am qwen3-forced-aligner-*.gguf to get word-level timing on **any** transcription backend — voxtral, voxtral4b, qwen3-asr, granite, parakeet, canary, cohere, even whisper. It's an alternative to the existing canary-ctc-aligner second-pass with broader language coverage and 80-ms resolution.",
"quick_links": [],
"benchmark_table_html": "",
"readme_markdown": "---\nlicense: apache-2.0\nbase_model: Qwen/Qwen3-ForcedAligner-0.6B\nlanguage:\n - zh\n - en\n - yue\n - fr\n - de\n - it\n - ja\n - ko\n - pt\n - ru\n - es\ntags:\n - forced-alignment\n - speech-to-text\n - audio\n - timestamps\n - gguf\n - ggml\n - qwen3\npipeline_tag: automatic-speech-recognition\nlibrary_name: ggml\n---\n\n# Qwen3-ForcedAligner-0.6B — GGUF (CrispASR)\n\nGGUF conversions of [`Qwen/Qwen3-ForcedAligner-0.6B`](https://huggingface.co/Qwen/Qwen3-ForcedAligner-0.6B) — a single-pass forced aligner that takes any (audio, transcript) pair and predicts per-word/per-token timestamps. Reuses the Qwen3-ASR audio encoder + 28-layer LLM body but swaps the lm_head from `(vocab, d)` to `(5000, d)`: each `<timestamp>` placeholder you embed in the input gets a 5000-class softmax over `class * 80 ms` timestamps.\n\nPlug it into [CrispASR](https://github.com/CrispStrobe/CrispASR) via `-am qwen3-forced-aligner-*.gguf` to get word-level timing on **any** transcription backend — voxtral, voxtral4b, qwen3-asr, granite, parakeet, canary, cohere, even whisper. It's an alternative to the existing `canary-ctc-aligner` second-pass with broader language coverage and 80-ms resolution.\n\n## What's in the box\n\n| File | Size | Quantization | Notes |\n|---|---|---|---|\n| `qwen3-forced-aligner-0.6b-f16.gguf` | 1.84 GB | F16 | Reference precision; matches PyTorch bfloat16 within float-noise tolerance |\n| `qwen3-forced-aligner-0.6b-q8_0.gguf` | 0.99 GB | Q8_0 | Effectively lossless |\n| `qwen3-forced-aligner-0.6b-q5_0.gguf` | 0.64 GB | Q5_0 | Slightly slower than Q4_K but a bit more accurate on edge cases |\n| `qwen3-forced-aligner-0.6b-q4_k.gguf` | 0.53 GB | Q4_K | 3.5× compressed; smallest reasonable choice |\n\nAll four contain:\n\n* The full audio encoder (24 layers, d_model 1024, 16 heads, 4096 ff)\n* The Qwen3 0.6B LLM body (28 layers, d_model 1024, 16 heads / 8 KV heads, 3072 ff, 152K vocab, RoPE θ=1e6)\n* The 5000-class **forced-alignment** lm_head (instead of the 152K-class lm_head used by the regular ASR variants)\n* Full GPT-2-style BPE vocab + merges, mel filterbank, and Hann window\n\n## How it differs from the ASR models\n\nSame body, different head:\n\n| | Qwen3-ASR-0.6B / 1.7B | Qwen3-ForcedAligner-0.6B |\n|---|---|---|\n| Audio encoder | 24-layer, d_model 1024 | identical |\n| Text decoder | Qwen3 28-layer | identical body |\n| `lm_head` shape | `(vocab=152K, d)` | **`(5000, d)`** — timestamp classes |\n| Inference mode | Autoregressive (decode token by token) | **Single forward pass** over the whole input |\n| Use case | Audio → text | (Audio, text) → per-word timestamps |\n| Output | Generated tokens | argmax(lm_head)·80 ms at each `<timestamp>` placeholder |\n\nThe CrispASR C++ runtime auto-detects which variant a loaded GGUF is by reading the lm_head shape from `output.weight.ne[1]` — no separate backend, no separate library.\n\n## Use with CrispASR\n\n```bash\n# Build crispasr (one-time)\ngit clone https://github.com/CrispStrobe/CrispASR\ncd CrispASR\ncmake -B build -DCMAKE_BUILD_TYPE=Release\ncmake --build build -j$(nproc) --target whisper-cli\n\n# Word-level SRT from any transcription backend, using FA for timing.\n# `-am` (--aligner-model) auto-routes to the qwen3-fa path when the\n# filename contains \"forced-aligner\" (case-insensitive).\n\n# voxtral 3B + Qwen3-FA timing\n./build/bin/crispasr --backend voxtral \\\n -m voxtral-mini-3b-2507-q8_0.gguf \\\n -f my_audio.wav \\\n -am qwen3-forced-aligner-0.6b-q4_k.gguf \\\n -osrt -ml 1\n\n# parakeet + Qwen3-FA (parakeet has its own native word timestamps, but\n# you can override them with FA on the same audio)\n./build/bin/crispasr --backend parakeet \\\n -m parakeet-tdt-0.6b-v3-q4_k.gguf \\\n -f my_audio.wav \\\n -am qwen3-forced-aligner-0.6b-q4_k.gguf \\\n -osrt -ml 1\n\n# Granite, qwen3-asr, voxtral4b, cohere, canary all work the same way.\n```\n\nThe Python equivalent on the upstream side is `Qwen3ForcedAligner.align(audio, text, language)` from `qwen-asr`. Our C++ wrapper does the whole pipeline (mel → encoder → prompt build with `<timestamp>` placeholders → embed + audio splice → single FA forward → argmax at placeholder positions → ms conversion) in one call to `qwen3_asr_align_words(ctx, samples, n_samples, words[], n_words, out_start_ms, out_end_ms)`.\n\n## Languages\n\nSame as upstream Qwen3-ForcedAligner: Chinese, English, Cantonese, French, German, Italian, Japanese, Korean, Portuguese, Russian, Spanish (11 languages).\n\nThe current C++ wrapper uses **whitespace pre-tokenization** for splitting the transcript into words. This works well for English and the other Latin/Cyrillic-script languages but is sub-optimal for Chinese / Japanese where the upstream Python uses character-level / morphological tokenizers (`tokenize_japanese`, `tokenize_korean` via soynlp). Adding char-level tokenization for CJK languages is a follow-up tracked in the CrispASR repo.\n\n## How it was made\n\n```bash\n# 1. Download the base model from HF\nhf download Qwen/Qwen3-ForcedAligner-0.6B --local-dir ./Qwen3-ForcedAligner-0.6B\n\n# 2. Convert to F16 GGUF (the qwen3-asr converter handles both ASR and\n# ForcedAligner variants — sizes are read from config.json so the\n# same script handles both checkpoints)\npython models/convert-qwen3-asr-to-gguf.py \\\n --input ./Qwen3-ForcedAligner-0.6B \\\n --output qwen3-forced-aligner-0.6b-f16.gguf\n\n# 3. Quantize\n./build/bin/crispasr-quantize qwen3-forced-aligner-0.6b-f16.gguf qwen3-forced-aligner-0.6b-q8_0.gguf q8_0\n./build/bin/crispasr-quantize qwen3-forced-aligner-0.6b-f16.gguf qwen3-forced-aligner-0.6b-q5_0.gguf q5_0\n./build/bin/crispasr-quantize qwen3-forced-aligner-0.6b-f16.gguf qwen3-forced-aligner-0.6b-q4_k.gguf q4_k\n```\n\nThe C++ side needed two small additions to support FA models alongside ASR models in the existing qwen3 backend:\n\n1. **Flexible lm_head shape.** `qwen3_asr_load_model` now reads the actual `output.weight.ne[1]` instead of asserting it equals `llm.vocab_size`. For ASR models the two are equal (152K); for FA models the head is 5000 wide.\n\n2. **Single-pass aligner forward.** A new `qwen3_asr_run_aligner()` extern \"C\" entry point runs `build_graph_llm_kv(..., last_token_only=false)` so the lm_head sees every token position, not just the last. The result is a `(5000, T)` logit matrix; `qwen3_asr_align_words()` reads argmax at the positions where `input_id == 151705` (`<timestamp>` placeholder) and converts to ms via `class * 80`.\n\n## Verification\n\nEnd-to-end on samples/jfk.wav with voxtral as the transcription backend:\n\n```bash\ncrispasr --backend voxtral -m voxtral-mini-3b-2507-q8_0.gguf \\\n -f samples/jfk.wav \\\n -am qwen3-forced-aligner-0.6b-q4_k.gguf -ml 1\n```\n\n```\n[00:00:00.320 --> 00:00:00.560] And\n[00:00:00.960 --> 00:00:00.960] so,\n[00:00:00.960 --> 00:00:01.280] my\n[00:00:01.360 --> 00:00:01.680] fellow\n[00:00:02.080 --> 00:00:02.160] Americans,\n... (10 s total, 21 words)\n```\n\nSame audio with all four quants produces near-identical timing — the worst spread between F16 and Q4_K on this clip is 80 ms (one alignment-class step).\n\n## License\n\nApache-2.0, same as upstream Qwen3-ForcedAligner-0.6B.\n\n## Citation\n\n```bibtex\n@misc{qwen3asr,\n title = {Qwen3-ASR},\n author = {Qwen Team},\n year = {2026},\n url = {https://huggingface.co/Qwen/Qwen3-ForcedAligner-0.6B}\n}\n```\n",
"related_quantizations": []
},
"tags": [
"ggml",
"gguf",
"forced-alignment",
"speech-to-text",
"audio",
"timestamps",
"qwen3",
"automatic-speech-recognition",
"zh",
"en",
"yue",
"fr",
"de",
"it",
"ja",
"ko",
"pt",
"ru",
"es",
"base_model:Qwen/Qwen3-ForcedAligner-0.6B",
"base_model:quantized:Qwen/Qwen3-ForcedAligner-0.6B",
"license:apache-2.0",
"region:us"
],
"likes": 1,
"downloads": 345,
"gated": false,
"private": false,
"last_modified": "2026-04-11T18:06:21.000Z",
"created_at": "2026-04-11T18:05:33.000Z",
"pipeline_tag": "automatic-speech-recognition",
"library_name": "ggml"
}
Source payload excerpt (from Hugging Face API)
{
"_id": "69da8d6de48aad1702de67c0",
"id": "cstr/qwen3-forced-aligner-0.6b-GGUF",
"modelId": "cstr/qwen3-forced-aligner-0.6b-GGUF",
"sha": "84beb0c7affb90c55a0c3ee0649c725d291a89ff",
"createdAt": "2026-04-11T18:05:33.000Z",
"lastModified": "2026-04-11T18:06:21.000Z",
"author": "cstr",
"downloads": 345,
"likes": 1,
"gated": false,
"private": false,
"pipeline_tag": "automatic-speech-recognition",
"library_name": "ggml",
"siblings_count": 6
}