克隆必须带 --recursive 初始化 ggml 子模块,否则 CMake 直接报错停止;模型需另行下载,可用 -m auto 自动拉取;Vulkan 预编译包需要 Vulkan 驱动且不会回退到 CPU。
CrispASR
CrispStrobeMIT活跃维护基于 ggml 的 C++ 语音推理运行时,统一跑 Cohere Transcribe、Parakeet TDT、Voxtral、Canary 等多语言 ASR 与 TTS 模型,还带通用强制对齐。
C++ ggml runtime hub for multilingual ASR and TTS models: Cohere Transcribe, Parakeet TDT, Voxtral, Canary 1B v2, etc, plus universal forced alignment, and more
git clone --recursive https://github.com/CrispStrobe/CrispASR
cd CrispASR
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j$(nproc)README 未给出具体显存要求;提供 CPU、CUDA、Metal、Vulkan、MUSA、SYCL 构建,Windows CPU 版需 AVX2(2013+ Intel / 2015+ AMD),macOS Intel 版需 AVX2/FMA/F16C(Haswell 或更新)。
一个 C++ 二进制跑 145 种语音后端,涵盖多语言 ASR 与 TTS,无需 Python
基于 ggml 的 C++ 语音推理运行时,统一跑 Cohere Transcribe、Parakeet TDT、Voxtral、Canary 等多语言 ASR 与 TTS 模型,还带通用强制对齐。
核心能力
- 用单个 crispasr 二进制按 GGUF 元数据自动识别后端
- 覆盖 Whisper、Parakeet、Canary、Voxtral 等 ASR 架构
- 内置 69 个 TTS 引擎,支持 --tts 直接合成音频
- 支持词级时间戳、强制对齐与语音翻译
- 可编译为 4.3 MB WebAssembly 在浏览器端运行
容易踩的坑
- v0.8.53最新正式版2026-11-09 · 2026-11-09 06:04 UTC
v0.8.53 — ROCm 7 HIP tarball
Packaging
- New
crispasr-linux-x86_64-hip7.tar.gzfor AMD GPUs on ROCm 7.x (Arch and other rolling distros). ROCm 7 renamed its library sonames (libhipblas.so.2→.so.3), so the ROCm 6 HIP tarball could not load its GPU module there and ran on the CPU. The new tarball is built against ROCm 7.2 and, like the other HIP tarball, starts and falls back to CPU when ROCm is absent. Not yet run on ROCm 7 hardware; reports welcome (#586).
- New
- v0.8.522026-11-08 · 2026-11-08 16:56 UTC
查看更新说明
v0.8.52 — Ultra aligner, Qwen3-TTS split mode, HIP fallback
Alignment
- The Qwen3-ForcedAligner-Ultra base model is published as an F16 GGUF and in the model registry:
crispasr --align-only -am qwen3-forced-aligner-ultra --auto-download .... Its JFK word timestamps match the upstreamqwen-asrimplementation exactly. Ultra checkpoints named after the upstream repo also select the Qwen aligner path (#579). - Experimental: the optional Ultra local boundary-refinement head, which requires an explicit base model. See
docs/qwen3-ultra-local-head-port.md; its precision is not yet qualified (#579). - The nightly regression now covers forced aligners (Qwen3 0.6B, Ultra, canary-ctc), comparing word timestamps with pinned references.
Speech synthesis
- Qwen3-TTS:
CRISPASR_QWEN3_TTS_VULKAN_CPU=1together withCRISPASR_QWEN3_TTS_CODEC_GPU=1(orCODEC_VULKAN=1) runs the talker and code predictor on CPU and keeps only the codec on Vulkan. This suits shared iGPUs; voice-clone reference encoding works in this mode (#585). - TTS: a bare
--voice-dirvoice name now resolves to the recording and its transcript for cloning backends in the CLI, HTTP server and Wyoming (#584).
Separation and server
- SCNet: very short inputs are zero-padded instead of aborting. The server's separate endpoint returns 400 for empty audio and 413 above
CRISPASR_SERVER_SEPARATE_MAX_SECONDS(default 1800; 0 disables).
Packaging
- The Linux HIP tarball loads the GPU backend as a module. Without ROCm 6.x and hipBLAS it now runs on the CPU instead of failing with
libhipblas.so.2: cannot open shared object file(#586).
- The Qwen3-ForcedAligner-Ultra base model is published as an F16 GGUF and in the model registry:
- v0.8.51v0.8.51 — session controls, capture, and fixes2026-11-07 · 2026-11-07 00:27 UTC
查看更新说明
v0.8.51 — session controls, capture, and fixes
Recognition and bindings
- Sessions now support per-session auto-chunking controls and a token budget proportional to each piece's duration, with an optional flat ceiling. These controls are available through the C ABI and language bindings (#574).
Speech synthesis
- Qwen3-TTS can optionally capture generated codec tokens, decoder inputs, and HTTP response provenance for offline audit. Capture is disabled by default; captured data can contain speech-derived tokens and text. See
docs/qwen3-tts-codec-capture.mdfor privacy, failure, and format details (#576, #578). - VoxCPM2 avoids a costly VAE CPU fallback on long sentences (#164).
Fixes and documentation
- Environment flags recognize false, off, and no, case-insensitively, as disabled (#572).
- Fixed formatting and the Breeze session control test harness (#575).
- Added the existing Haas-ja model to the README and recorded the remaining Nemotron 3.5 Transcribe 30B investigation (#577).
- Mini-BS-RoFormer retains its default CPU fallback on Metal; a virtual Apple Metal test did not reproduce the reported silence, but physical M1 and broader accuracy qualification remain open (#568).
- v0.8.502026-11-03 · 2026-11-03 17:03 UTC
查看更新说明
v0.8.50 — Mini-BS-RoFormer, SCNet, MeanVC2, and correctness fixes
Source separation
- Mini-BS-RoFormer V2.5 (HiDolen) native separation: four stems, F16/Q8_0/Q4_K, auto-download via
-m mini-bs-roformer(cstr/mini-bs-roformer-GGUF). CLI--separate, HTTP server and Session (#562).- On Apple Metal it currently runs on the CPU, because the Metal path loses most of the signal (#568). Set
CRISPASR_MINI_BS_ROFORMER_METAL=1to opt back in for debugging.
- On Apple Metal it currently runs on the CPU, because the Metal path loses most of the signal (#568). Set
- SCNet and SCNet-large native separation (#566): strict 372-tensor conversion, F16/Q8_0/Q4_K, CLI/server/Session. Qualified against the original Python model on every stage, waveform and speed gate for both sizes. The upstream MIT notice and the author's permission for the checkpoints are retained.
Recognition
- MOSS-Transcribe-Diarize: Session and CLI now forward the beam size and offer optional seeded sampling (temperature → top-k → top-p, in HF order); greedy stays the default (#564). New CLI aliases
--top-kand--top-p. - moss-audio: encodes only the real audio instead of padding every clip to 30 s, so time markers and event times on short clips are correct (#569).
CRISPASR_MOSS_AUDIO_PAD30=1restores the old path. - Haas-ja-v1.0 with the KDA predictor in the parakeet runtime (#561).
- parakeet-unified-en-0.6b: the converter now takes the model's own tokenizer (#567). The published GGUFs were already corrected in place; re-download if your copy decodes to nonsense.
Language identification
- LID models are no longer downloaded silently. A missing LID model is fetched only with
--auto-downloador after a TTY prompt; otherwise LID is skipped with a hint (#570). moss-audio with--promptskips LID, since the result would be unused.
Voice conversion and synthesis
- MeanVC2 streaming zero-shot voice conversion, with C ABI, registry and bindings.
- ArkTTS Metal acceleration and codebook clamping.
Performance
- CPU speedups across mel/fbank/LFR, conformer attention, CTC alignment and beam search, wav2vec2, SenseVoice, Paraformer, FireRed, F5-TTS, VoxCPM2, Mel-Band RoFormer, MeanVC2, MioCodec, diarization, CQT and RVQ/iSTFT. Each comes with a paired A/B speed and quality bench and a serial fallback switch.
- CosyVoice3 vocoder FASTCONV path.
Fixes
- Lint Deep (cppcheck) is green again. Fixed: an ArkTTS virtual call in the destructor, a Mini-BS lambda, a parakeet null check, and the sampler comparator.
- Windows build fix for Mini-BS-RoFormer (
setenv).
- Mini-BS-RoFormer V2.5 (HiDolen) native separation: four stems, F16/Q8_0/Q4_K, auto-download via
- v0.8.492026-10-30 · 2026-10-30 11:47 UTC
查看更新说明
v0.8.49 — Audio8-TTS (ArkTTS), LID Standalone/Aggregation, and Qwen3 Context
Speech synthesis
- Full backend port and integration for Audio8-TTS (ArkTTS 0.6B) (
Edge0/Audio8-TTS-Realistic-0.6b):- Dual-autoregressive text-to-speech architecture coupling a 28-layer slow semantic transformer with an 8-layer fast acoustic subnetwork generating 10 codebooks per frame at 44.1 kHz.
- Causal neural vocoder with Snake activations and ConvNeXt residual blocks.
- Precision-preserving GGUF quantization: attention and FFN linear weights quantised to
Q4_K/Q8_0while keeping 1D conv kernels ($K \le 16$) and discrete acoustic centroids ($k=1024$) at FP16 to guarantee bit-exact arithmetic without acoustic hash noise. - Verified 1.000000 cosine parity across all 7 stages on
crispasr-diffagainst the PyTorch reference implementation. - Performance optimizations:
- FASTCONV $K=1$ bypass eliminating im2col transposition and contiguous memory buffer copies across 12 audio-rate layers.
- Dual-transformer in-place KV caching.
- Chunked causal vocoder decoding with causal history overlap, bounding peak RAM to
<2.5 GBfor arbitrary audio lengths (3+ minutes) where monolithic graphs require>160 GB.
- Official GGUF weights published to Hugging Face repository
cstr/Audio8-TTS-Realistic-0.6b-GGUFand registered incrispasr_model_registry. - Verified 0.0% Word Error Rate (WER) across TTS-to-ASR roundtrips.
Recognition and CLI
- Support free-form transcription context in Qwen3-ASR (#559, thanks @pszemraj).
- Language Identification (LID) improvements (#560):
- Standalone
--detect-language(-dl) action performs language detection and exits cleanly without requiring an ASR model to be loaded or executed. - Dominant language detection across full recordings.
- Automatic provider fallback to Whisper when dedicated LID models are not specified.
- Standalone
Streaming and context
- Adaptive strided audio context gating for Hikari and Parakeet streaming inference.
- Attention mask caching in Moonshine to eliminate redundant mask construction during streaming chunk processing.
- Synchronize
audio_ctxandhikari_refresh_strideacross Go, Dart, Rust, Python, JavaScript, and C ABI. - Formatted Dart session setter lookupFunction to pass strict CI format checks.
Translation and tools
- Madlad translation: sharded safetensors conversion, low-RAM mmap scratch buffer allocation, and Kaggle quantizations for Madlad-7B and Madlad-10B.
- Cleaned and migrated historical maintenance handoffs and benchmark receipts into
docs/historical/.
- Full backend port and integration for Audio8-TTS (ArkTTS 0.6B) (
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
CrispASR
One C++ binary, 145 backends — 69 of them TTS engines — plus multilingual text translation, zero Python dependencies.
CrispASR started as a fork of whisper.cpp and extends that base into a unified speech engine called crispasr, backed by full ggml C++ runtimes for major open-weights ASR and TTS architectures. One build, one binary, one consistent CLI — pick the backend at the command line or let CrispASR auto-detect it from your GGUF file. See Text-to-Speech for the TTS side.
$ crispasr -m ggml-base.en.bin -f samples/jfk.wav # OpenAI Whisper
$ crispasr -m parakeet-tdt-0.6b.gguf -f samples/jfk.wav # NVIDIA Parakeet
$ crispasr -m canary-1b-v2.gguf -f samples/jfk.wav # NVIDIA Canary
$ crispasr -m voxtral-mini-3b-2507.gguf -f samples/jfk.wav # Mistral Voxtral
$ crispasr --backend qwen3 -m auto -f samples/jfk.wav # -m auto downloads
$ crispasr --backend kokoro -m auto --tts "Hello world" --tts-output out.wav # TTS
No Python. No PyTorch. No separate per-model binary. No pip install. Just one C++ binary and a GGUF file.
Browser: All backends compile to WebAssembly (4.3 MB) via build-wasm.sh.
Multithreaded, runs entirely client-side with COOP/COEP headers.
Demo: HuggingFace Space —
live transcription + TTS + language detection, auto-deployed from hf-space/.
Ecosystem
| Project | What it does |
|---|---|
| CrispASR | This repo — C++ speech engine. 145 backends (69 TTS), CLI + HTTP server + C-ABI + Python/Rust/Dart/Go/Ruby/Java bindings. |
| CrisperWeaver | Cross-platform Flutter transcription app built on CrispASR. Desktop + mobile, model browser with download queue, mic capture, SRT/VTT/JSON export, diarization, batch processing. Fully offline. |
| CrispEmbed | Text-related engine via ggml — same philosophy as CrispASR but for embeddings, retrieval, OCR and OMR, Math and Music Notation. Numerous architectures (XLM-R, Qwen3-Embed, Gemma3, ModernBERT, ...), dense + sparse + ColBERT + reranking. PP-OCR, Tesseract, EasyOCR, InternVL2, etc. Python/Rust/Dart bindings. |
| Susurrus | Python ASR GUI with 9 backends (faster-whisper, mlx-whisper, voxtral, insanely-fast-whisper, ...). The Python counterpart to CrispASR's C++ approach. |
Table of contents
- Start here — new to CrispASR? Two commands to your first working audio, no repo clone needed
- Supported backends — ASR + TTS + translation + post-processing + music & audio analysis
- Feature matrix
- Install & build — quick install (full guide in docs/install.md); which prebuilt Linux tarball to download — the
-vulkanbuild requires the Vulkan driver and does not fall back to CPU (the-cudatarballs do since v0.8.30, the-hiptarball since #586) - Quick start — ASR
- Troubleshooting — it printed the banner and stopped, reading the exit code,
--no-gpubisect, which Windows zip - Text-to-Speech (TTS) — 52 engines: Kokoro, Qwen3-TTS, VibeVoice, dots.tts, Orpheus, Chatterbox, IndexTTS, Irodori, VoxCPM2, CosyVoice3, CSM, Dia, Zonos, Bark, Piper, MeloTTS, and more
- Streaming & live transcription
- Server mode (HTTP API)
- Concurrency, parallelism & scaling — how one transcription uses multiple cores, concurrent server requests (
--server-workers), bulk offline transcription, replicas behind a load balancer - CLI reference — flags, VAD, CTC alignment, output formats, auto-download, audio formats
- Environment variables — the
CRISPASR_<BACKEND>_<FEATURE>convention, global knobs, and every per-backend variable - Language bindings — Python / Rust / Dart / Go / Java / JavaScript / Ruby / mobile
- Benchmarking CrispASR — how to measure transcribe time (not cold start): server/in-process reps, proof-of-work rules, phase-timing env vars
- Architecture — layered layout,
src/core/primitives, regression discipline - Contributing — adding a new backend — 5-file recipe, ground-truth diff workflow
- Regression matrix —
tools/test-all-backends.pycapability tiers - EU AI Act — synthetic-audio marking (watermark + C2PA + spoken disclaimer), what counts as a voice clone, the speaker-biometrics boundary, why there is no emotion recognition, and what stays your duty as deployer
- Quantize models —
crispasr-quantizefor all backends - GPU backend selection
- Debugging & profiling
- Credits
Start here
Everything below this section is a catalogue — 100+ backends, browse it when you need one. If you just want CrispASR working, this is the whole path. No repo clone, no Python, no model hunting.
New to the project? docs/getting-started.md walks the same path step by step, with the expected output and the three usual first-run failures.
1. Get the binary
Download one file from Releases and unzip it:
| Platform | Download | Notes |
|---|---|---|
| Windows | crispasr-windows-x86_64-cpu.zip | Needs AVX2 (2013+ Intel / 2015+ AMD). Older CPU → …-cpu-legacy.zip |
| Windows + NVIDIA | crispasr-windows-x86_64-cuda.zip | Self-contained; a CUDA Toolkit install is not required. CUDA 12.6 legacy build: …-cuda126.zip (Pascal/Volta and newer, through Hopper); CUDA-13-native build: …-cuda13.zip (Turing+) |
| macOS, Apple Silicon | crispasr-macos-arm64.tar.gz | Metal GPU + Accelerate; crispasr-macos.tar.gz is the arm64 compatibility alias |
| macOS, Intel | crispasr-macos-x86_64.tar.gz | CPU + Accelerate; requires AVX2/FMA/F16C (Haswell or newer). Older Intel Mac → crispasr-macos-x86_64-cpu-legacy.tar.gz |
| Linux | crispasr-linux-x86_64.tar.gz | …-cuda.tar.gz / …-vulkan.tar.gz for GPU |
Prefer to build it yourself? See Install & build. The -vulkan
build requires the Vulkan driver and does not fall back to CPU; the Linux
-cuda and -hip tarballs do fall back.
Check it runs — this should print a version banner and exit:
crispasr --version # Windows: .\crispasr.exe --version
CUDA builds also print cuda toolkit and cuda runtime ABI, so this command
distinguishes the CUDA 12 and CUDA 13 packages without inspecting DLLs.
Windows CUDA packages bundle the runtime they were built against. The CUDA 12.6
legacy CLI and library assets use the -cuda126 suffix; their split packages
require cuda126-runtime.zip from the same release. Use the included SHA-256
manifest when reusing runtime DLLs. Do not mix CUDA 12.8 binaries with CUDA 12.6
DLLs. The standard -cuda build retains CUDA 12.8 and native Blackwell support.
CUDA 12.8 also supports Pascal and Volta in CrispASR; PyTorch's wheel architecture
selection is a separate policy (NVIDIA architecture support).
2. Make it speak
-m auto downloads the model on first use (~135 MB here) and reuses it
afterwards — nothing to find or install. It lands in ~/.cache/crispasr/
(%USERPROFILE%\.cache\crispasr on Windows).
crispasr --backend kokoro -m auto --tts "The quick brown fox jumps over the lazy dog." --tts-output hello.wav
# crispasr: TTS output written to 'hello.wav' (78000 samples @ 24000 Hz, 3.25 sec)
Play hello.wav. That is the TTS half working.
3. Transcribe it back
crispasr --backend parakeet -m auto -f hello.wav -l en
# crispasr: transcribed 3.2s audio in 0.32s (10.1x realtime)
# The quick brown fox jumps over the lazy dog.
(~467 MB on first run. -l en skips language auto-detection, which would
otherwise fetch a small extra model.) Both halves now work — swap in your own
.wav and you are running.
Where to go next
| You want to… | Go to |
|---|---|
| Clone a voice from a recording | docs/tts.md — and read the consent rules first; cloning requires --i-have-rights |
| Pick a better ASR model | Which backend should I pick? |
| Transcribe Japanese with Haas-ja | Haas-ja usage and models |
| Transcribe with word timestamps, SRT/VTT | docs/cli.md |
| Live mic / streaming | docs/streaming.md |
| Run it as an HTTP server | docs/server.md |
| See every backend this binary has | crispasr --list-backends |
If nothing happened
Add -v to any command for verbose progress, and --dry-run-resolve to print
which model files it would open (and whether they're on disk) without loading
anything.
If a command printed its banner and then simply stopped — no error, no output file — that is a crash, not a refusal, and the exit code identifies it in one step. See docs/troubleshooting.md.
Supported backends
CrispASR ships 145 backends (see the generated feature matrix for the authoritative, auto-counted list) — the majority for transcription/translation, and
69 TTS engines for synthesis. It also ships audio-to-audio S2S backends,
including Sidon restoration and the VoxCPM2 AudioVAE speech upscaler; see the feature matrix
for the complete capability list.
Pick at the CLI with --backend NAME, or omit it to let the binary auto-detect
from the GGUF metadata. Jump to the TTS table for the synthesis side.
ASR backends
| Backend | Model | Architecture | Languages | License |
|---|---|---|---|---|
| whisper | ggml-base.en.bin and all OpenAI Whisper variants | Encoder-decoder transformer | 99 | MIT |
| whisper | distil-whisper/distil-large-v3 | Distilled Whisper: 32L encoder + 2L decoder (6.3x faster) | English | MIT |
| dolphin | DataoceanAI1/dolphin-cn-dialect-small-streaming (-m dolphin) | E-Branchformer + Transformer decoder + CTC; CTC prefix beam + attention rescoring | Mandarin + Chinese dialects (lang/region predicted) | Apache-2.0 |
| xasr | GilgameshWind/X-ASR-zh-en (-m xasr) | Streaming Zipformer2 transducer (icefall); 160 / 480 / 960 / 1920 ms chunks, realtime WebSocket session | zh, en (punct + case) | Apache-2.0 |
| parakeet | nvidia/parakeet-tdt-0.6b-v3 | FastConformer + TDT | 25 EU (auto-detect) | CC-BY-4.0 |
| parakeet | oruk/orukeet (-m orukeet) | parakeet-tdt-0.6b-v3 fine-tune, half the encoder's depthwise kernels replaced by fitted Gabor functions | 25 EU (auto-detect) | CC-BY-SA-4.0 |
| parakeet | moondream/parakeet-ultra (-m parakeet-ultra) | parakeet-tdt-0.6b-v3 architecture shipped in transformers format; converted with --hf | 25 EU (auto-detect) | CC-BY-4.0 |
| parakeet | moondream/parakeet-redux (-m parakeet-redux) | parakeet-tdt-0.6b-v3 with a ternary (base-3 packed) encoder, dequantised exactly by the converter | 25 EU (auto-detect) | CC-BY-4.0 |
| phonon2 | FermionResearch/Phonon-2 (-m phonon2) | Parakeet TDT v3 with retrained five-value encoder weights; conversion and validation, architecture | English | CC-BY-4.0 |
| parakeet | nvidia/parakeet-tdt-0.6b-v2 | FastConformer + TDT, original Open ASR Leaderboard topper | en (mixed-case + punct) | CC-BY-4.0 |
| parakeet | nvidia/parakeet-tdt-1.1b | 42L FastConformer + TDT, larger English variant | en (lowercase) | CC-BY-4.0 |
| parakeet | nvidia/parakeet-tdt_ctc-110m | 17L FastConformer + TDT+CTC hybrid; smallest variant, auto-CTC decode | en | CC-BY-4.0 |
| parakeet | nvidia/parakeet-tdt_ctc-1.1b | 42L FastConformer + TDT+CTC hybrid; largest, mixed-case + punct | en | CC-BY-4.0 |
| parakeet | nvidia/parakeet-tdt_ctc-0.6b-ja | FastConformer-TDT-CTC, xscaling, 80 mels | Japanese | CC-BY-4.0 |
| haas | third-intelligence/Haas-ja-v1.0 (--backend haas -m auto; usage and model variants) | FastConformer + Kimi Delta Attention predictor + TDT | Japanese | Apache-2.0 |
| reazonspeech | reazon-research/reazonspeech-nemo-v2 | FastConformer-RNNT, local attn (w=256), 80 mels, 619M params | Japanese | Apache-2.0 |
| fastconformer-ctc | nvidia/parakeet-ctc-0.6b | 24L FastConformer + CTC, 80 mels (same arch as fc-ctc-xlarge) | en | CC-BY-4.0 |
| fastconformer-ctc | nvidia/parakeet-ctc-1.1b | 42L FastConformer + CTC, 80 mels | en | CC-BY-4.0 |
| fastconformer-ctc | grider-transwithai/parakeet-ctc-1.1b-ja | 42L FastConformer + CTC, 80 mels, Japanese fine-tune | Japanese | Apache-2.0 |
| canary | nvidia/canary-1b-v2 | FastConformer + Transformer decoder | 25 EU (explicit -sl/-tl) | CC-BY-4.0 |
| canary | handy-computer/canary-180m-flash-gguf (base nvidia/canary-180m-flash) | 17L FastConformer (d=512) + trained 512→1024 projection + 4L Transformer decoder; existing transcribe.cpp GGUFs load directly (more) | en, de, es, fr (explicit); EN↔DE/ES/FR translation | CC-BY-4.0 |
| canary-qwen | nvidia/canary-qwen-2.5b | FastConformer + Qwen3-1.7B SALM | en | CC-BY-4.0 |
| index-echo | 2B, 9B | AuT + Qwen3.5; bilingual timestamped subtitles (details); 2B F16/Q8 and 9B F16 CPU/CUDA validated; pairs 2.589 GiB (2B Q8), 17.914 GiB (9B F16) | upstream recipe: zh → en/ja/es | Apache-2.0 |
| lfm2-audio | LiquidAI/LFM2.5-Audio-1.5B | FastConformer + LFM2 hybrid conv+attention backbone (ASR+TTS) | en | LFM Open v1.0 |
| lfm2-audio | LiquidAI/LFM2.5-Audio-1.5B-JP | FastConformer + LFM2 hybrid conv+attention backbone (ASR+TTS) | ja | LFM Open v1.0 |
| mini-omni2 | gpt-omni/mini-omni2 | Whisper-small + Qwen2-0.5B (ASR+TTS+S2S) | en | MIT |
| cohere | CohereLabs/cohere-transcribe-03-2026 | Conformer + Transformer | 13 | Apache-2.0 |
| cohere | efwkjn/cohere-asr-ja-v0.1 | Japanese fine-tune of cohere-transcribe-03-2026 (TedX/JSUT-tuned) | Japanese | Apache-2.0 |
| granite | granite-speech-5.0-2b, 3.2/3.3, 4.0 | Conformer + Q-Former + Granite LLM (μP); 5.0 F16/Q4_K validated on CPU/CUDA, native context4096 (more) | en fr de es pt ja | Apache-2.0 |
| granite-4.1 | ibm-granite/granite-speech-4.1-2b | 16L Conformer + Q-Former + Granite LLM; single ggml graph (more) | en fr de es pt ja | Apache-2.0 |
| granite-4.1-plus | ibm-granite/granite-speech-4.1-2b-plus | 4.1 + hidden-state concat; punctuated output (more) | en fr de es pt | Apache-2.0 |
| granite-4.1-nar | ibm-granite/granite-speech-4.1-2b-nar | Non-autoregressive: single LLM forward + slot argmax (more) | en fr de es pt | Apache-2.0 |
| fastconformer-ctc | nvidia/stt_en_fastconformer_ctc_large | FastConformer + CTC (NeMo family, all sizes) | en | CC-BY-4.0 |
| voxtral | mistralai/Voxtral-Mini-3B-2507 | Whisper encoder + Mistral 3B LLM | 8 | Apache-2.0 |
| voxtral4b | mistralai/Voxtral-Mini-4B-Realtime-2602 | Causal encoder + 3.4B LLM, sliding window | 13, realtime streaming | Apache-2.0 |
| qwen3 | Qwen/Qwen3-ASR-0.6B | Whisper-style audio encoder + Qwen3 0.6B LLM | 30 + 22 Chinese dialects | Apache-2.0 |
| qwen3-1.7b | Qwen/Qwen3-ASR-1.7B | Whisper-style audio encoder + Qwen3 1.7B LLM | 30 + 22 Chinese dialects | Apache-2.0 |
| confucius4-r2t2 | netease-youdao/Confucius4-R2T2 | Qwen3-ASR-1.7B streaming fine-tune; append-only realtime session (prefix rollback) | 30 langs | NetEase Youdao Model Use License |
| raon-speech | KRAFTON/Raon-Speech-9B | Qwen3-Omni audio tower + adaptor + Qwen3 36L LLM (speech-to-text subset; 8 s chunks at 24 kHz) | en, ko | CC-BY-NC-4.0 (non-commercial) |
| qwen3-ja-anime | jaykwok/Qwen3-ASR-1.7B-JA-Anime-Galgame-hf | Qwen3-ASR-1.7B fine-tuned for Japanese anime/galgame speech | ja + 30 langs | Apache-2.0 |
| mega-asr | zhifeixie/Mega-ASR | Qwen3-ASR-1.7B + merged robustness LoRA; always-on robust path | noisy / degraded speech | Apache-2.0 |
| higgs-stt | bosonai/higgs-audio-v3-stt | Whisper-large-v3 encoder (4 s chunked) + Qwen3-1.7B LLM (more) | en | Apache-2.0 |
| wav2vec2 | jonatasgrosman/wav2vec2-large-xlsr-53-english | CNN + 24L transformer + CTC head (any Wav2Vec2ForCTC) | per-model | Apache-2.0 |
| wav2vec2 | facebook/data2vec-audio-base-960h | Data2Vec Audio (79 MB Q4_K) | English | Apache-2.0 |
| wav2vec2 | facebook/hubert-large-ls960-ft | HuBERT Large (212 MB Q4_K) | English | Apache-2.0 |
| glm-asr | zai-org/GLM-ASR-Nano-2512 | Whisper encoder + 4-frame projector + Llama 1.5B (GQA) | Mandarin (+ Chinese dialects), English, Cantonese | MIT |
| hikari | sbintuitions/hikari-medium — hosted as cstr/hikari-medium-GGUF (f16 + q8_0 + Silero; -m auto) | Whisper-medium enc-dec with a causal encoder; one token (or WAIT) per 80 ms — simultaneous translation, --stream emits while the speaker talks (more) | English speech → DE / JA / RU text, or English ASR (--tr-tl de) | MIT |
| kyutai-stt | kyutai/stt-1b-en_fr | Mimi codec (SEANet + RVQ) + 16L causal LM | en, fr | MIT |
| kyutai-stt | kyutai/stt-2.6b-en | Mimi codec + 48L causal LM (2.6B, English-only; 3.5 s lookahead) | en | MIT |
| firered-asr | FireRedTeam/FireRedASR2-AED | Conformer + CTC + beam search; also LID (120 langs) | Mandarin, English, 20+ Chinese dialects | Apache-2.0 |
| moonshine | UsefulSensors/moonshine-{tiny,base} | Conv + 6L enc + 6L dec; multilingual variants | English + 6 langs | MIT |
| moonshine‑de | fidoriel/moonshine-base-de | German fine-tune of moonshine-base (6.9% WER CV22) | German | CC‑BY‑NC‑SA‑4.0 |
| moonshine‑tiny‑de | fidoriel/moonshine-tiny-de | German fine-tune of moonshine-tiny (11.4% WER CV22) | German | CC‑BY‑NC‑SA‑4.0 |
| moonshine-streaming | UsefulSensors/moonshine-streaming-{tiny,small,medium} | Streaming: sliding-window encoder + AR decoder (34–245M) | English | MIT |
| moonshine-streaming-de-onnx | Official Tiny/Small exports | Optional CPU ONNX Runtime; int8 or f32 five-graph streaming | German | MIT |
| moonshine-tiny-de-dattazigzag | dattazigzag/moonshine-tiny-de | Tiny German checkpoint; GGUF or legacy two-graph ONNX export | German | MIT |
| gemma4-e2b | google/gemma-4-E2B-it | USM Conformer 12L + Gemma4 LLM 35L (GQA, PLE) | 140+ langs | Apache-2.0 |
| gemma4-e4b | google/gemma-4-E4B-it | Same USM Conformer 12L + larger Gemma4 LLM 42L (GQA, PLE); runs on --backend gemma4-e2b | 140+ langs | Apache-2.0 |
| omniasr | omniASR-CTC-1B-v2 | wav2vec2 CNN + 48L transformer + CTC (more) | 1600+ | Apache-2.0 |
| omniasr‑300m | omniASR-CTC-300M-v2 | Same arch, 24L, ~194 MB Q4_K; auto-chunks >7 s (more) | 1600+ | Apache-2.0 |
| omniasr-llm | omniASR-LLM-300M-v2 | Same encoder + 12L LLaMA decoder (more) | 1600+ | Apache-2.0 |
| omniasr-llm | omniASR-LLM-Unlimited-300M-v2 | Streaming: 15s segment protocol, unlimited audio (more) | 1600+ | Apache-2.0 |
| vibevoice | microsoft/VibeVoice-ASR | σ-VAE ConvNeXt + Qwen2.5-7B (more) | 50+ | MIT |
| vibevoice-streaming | microsoft/VibeVoice-ASR-Streaming-1.5B | σ-VAE ConvNeXt + Qwen2.5-1.5B; persistent-KV 2.93 s chunks with 0.53 s lookahead (more) | multilingual | MIT |
| vibevoice-bitnet | VibeVoice-ASR-BitNet | Same arch, TQ2_0 ternary LM (1.6 GB) (more) | 7+ | MIT |
| mimo-asr | XiaomiMiMo/MiMo-V2.5-ASR | 6L transformer + 36L Qwen2 LM + RVQ codec (more) | Mandarin + dialects + English | MIT |
| ark-asr ⚠️experimental/WIP | cstr/ark-asr-3b-GGUF (base AutoArk-AI/ARK-ASR-3B) | Whisper-large-v3 enc (partial RoPE) + Qwen2.5-3B LM (more) | 19 (zh, en, de, ja, fr, ko, es, pl, it, ro, hu, cs, nl, fi, hr, sk, sl, et, lt) | see base |
| moss-audio | OpenMOSS-Team/MOSS-Audio-4B-Instruct | 32L Whisper encoder + DeepStack 3-tap + 36L Qwen3 LM; audio understanding + ASR (more) | zh, en | Apache-2.0 |
| hojo-asr | HojoAI/Hojo-ASR-Multi-V1 | Qwen3-Omni audio tower (32L) + 2-block WeNet Conformer adapter + Qwen3-4B LM; multilingual ASR, beam 4 by default as upstream (more) | de, fr, it, pt, es, ja, ar, ko, ru | Apache-2.0 |
| hojo-asr (V1) | HojoAI/Hojo-ASR-V1 (-m hojo-asr-v1) | Same architecture; the Chinese + English checkpoint (works better than Multi-V1 on English) | zh, en | Apache-2.0 |
| moss-transcribe | OpenMOSS-Team/MOSS-Transcribe-preview-2B | Qwen3-Omni audio encoder (32L, windowed attn) + GatedMLP adapter + Qwen3-1.7B LM; ASR (more) | zh, en | Apache-2.0 |
| moss-diarize | OpenMOSS-Team/MOSS-Transcribe-Diarize-0.9B | Stock Whisper encoder (24L, 80 mel) + 4x merge + VQAdaptor + Qwen3-0.6B LM; joint ASR + speaker diarization + timestamps | multi | Apache-2.0 |
| whisper (tiron) ⚠️experimental | Trelis/tiron (base Trelis/tiron) | Whisper large-v3 with an extended vocab: emits inline `< | speakerN | >` markers + 20 ms timestamps for joint transcription + per-window speaker attribution, via a constrained-decoding grammar; cross-window linking to stable speakers (#295) |
| funasr | FunAudioLLM/Fun-ASR-Nano-2512 | 70-block SANM encoder + 2-block Transformer adaptor + Qwen3-0.6B LLM | zh, yue, en, ja, ko | FunASR Model License v1.1 (commercial OK w/ attribution) |
| fun-asr-mlt-nano | FunAudioLLM/Fun-ASR-MLT-Nano-2512 | Same architecture, multilingual decoder | 31 langs incl. de, fr, es, pt, ru, ar, hi, vi, th, ko | FunASR Model License v1.1 |
| paraformer | funasr/paraformer-zh | 50-block SANM encoder + CIF predictor + 16-block NAR decoder (single-pass, non-autoregressive); character-level vocab (8404); 220M params | zh, en | FunASR Model License (commercial OK w/ attribution) |
| foxnose (speaker diarization) | Wespeaker/wespeaker-voxceleb-resnet34-LM | Speaker diarization via --diarize-method foxnose: WeSpeaker ResNet34-LM 256-d embeddings + GMM/BIC speaker counting + spectral clustering + Viterbi temporal smoothing (more). 3.18 % DER on VoxConverse dev vs the upstream reference implementation's 3.07 % | any | weights CC-BY-4.0 |
| gigaam | ai-sage/GigaAM-v3 (base ai-sage/GigaAM-v3) | 16-layer rotary Conformer (220M) + CTC or RNN-T head; four revisions — e2e_rnnt / e2e_ctc emit punctuation + casing + ITN from a SentencePiece vocab, rnnt / ctc emit bare lowercase Cyrillic (more) | en ru | MIT |
| sensevoice | FunAudioLLM/SenseVoiceSmall | 70-block SANM encoder + CTC head; emits transcript + language ID + audio-event in one forward pass (non-AR, 15× faster than Whisper-Large); structured C ABI + -oj JSON expose the tags as separate fields. Upstream's emotion classifier is not exposed — see EU AI Act | 50+ langs; native LID + audio-event tags | FunASR Model License v1.1 |
Speech-to-speech audio upscaling and restoration
| Backend | Model | Architecture | Input / output | License |
|---|---|---|---|---|
| sidon | KevinAHM/Sidon-GGUF (base sarulab-speech/sidon-v0.1) | w2v-BERT 2.0 predictor + continuous DAC decoder (more) | 16 kHz mono → restored 48 kHz mono | MIT |
| voxcpm2-vae | AudioVAE V2 from openbmb/VoxCPM2, converted with --vae-only | Isolated causal AudioVAE encoder + decoder (more) | 16 kHz mono → upscaled 48 kHz mono | Apache-2.0 |
huggingface-cli download KevinAHM/Sidon-GGUF sidon-v0.1-f16.gguf --local-dir models
crispasr -m models/sidon-v0.1-f16.gguf -f input.wav --s2s --s2s-output restored.wav
python models/convert-voxcpm2-to-gguf.py --input openbmb/VoxCPM2 \
--output models/voxcpm2-vae-f32.gguf --vae-only
crispasr -m models/voxcpm2-vae-f32.gguf -f input.wav --s2s \
--s2s-output upscaled.wav
Text-to-Speech models
Synthesis backends, driven by the --tts flag and a --tts-output PATH.wav.
See the dedicated Text-to-Speech section below for
quick-start commands and engine selection guidance.
| Backend | Models | Architecture | Languages | License |
|---|---|---|---|---|
| bt2-tts | breeze-tts-2 | T5Gemma2 text encoder + Qwen3 backbone + 12L depth decoder over 16 codebooks @ 12.5 Hz; voice cloning, plus voice design / direction via --tts-instruct (strengthen with --tts-cfg-scale 4). Codec companion is the shipped qwen3-tts tokenizer. NON-COMMERCIAL weights — needs --accept-license other. Derived from Breeze TTS 2 by BreezeBlue and licensed for research and non-commercial use only. | en, zh | other (BreezeBlue Research & Non-Commercial) |
| miotts | MioTTS-0.6B | Qwen3 LLM + MioCodec-v2 FSQ codec (25 Hz, 44.1 kHz output) | ja, en | Apache-2.0 |
| arktts | Edge0/Audio8-TTS-Realistic-0.6b | 24L AR backbone + 4L RAS fast code predictor + Snake 44.1 kHz vocoder | multilingual | Apache-2.0 |
| vibevoice-tts | VibeVoice-Realtime-0.5B, VibeVoice-1.5B | DPM-Solver++ + σ-VAE decoder; voice presets or cloning | en, zh | MIT |
| kugelaudio | kugelaudio-0-open | Qwen2.5-7B LM + 4L DiT diffusion + acoustic VAE decoder; voice cloning | multilingual | Apache-2.0 |
| qwen3-tts | Qwen3-TTS-12Hz-0.6B-Base, 1.7B-Base, 1.7B-VoiceDesign | Qwen3 talker LM + 12 Hz RVQ (more) | multilingual | Apache-2.0 |
| qwen3-tts-customvoice | 1.7B-CustomVoice | Same talker + 9 premium built-in speakers (--voice <name>); optional style via --instruct (e.g. "spoke very slowly") (more) | multilingual | Apache-2.0 |
| moss-tts | OpenMOSS-Team/MOSS-TTS-v1.5 | Qwen3-8B backbone emitting 32 RVQ audio codebooks under a delay pattern, decoded by a 1.6B pure-transformer codec companion; voice cloning via --voice ref.wav; --backend moss-tts -m <backbone> --codec-model <codec> | multilingual | Apache-2.0 |
| moss-tts-local | OpenMOSS-Team/MOSS-TTS-Local-Transformer-v1.5 | Qwen3-4B backbone; a 1-layer local/depth transformer autoregressively emits 12 RVQ codebooks per frame (RQ-Transformer, no delay), decoded to 48 kHz by MOSS-Audio-Tokenizer-v2 (downmixed to mono); --backend moss-tts-local -m <backbone> --codec-model <codec> | multilingual | Apache-2.0 |
| omnivoice | k2-fsa/OmniVoice | Qwen3-0.6B + masked iterative 8-codebook TTS (SoundStorm-style); voice cloning; 600+ languages (more) | 600+ langs | CC-BY-NC weights + custom tokenizer terms; explicit bundle acceptance, review pending |
| arktts | Edge0/Audio8-TTS-Realistic-0.6b | Dual transformer (24L Slow LM + 4L Fast Subnetwork) + 44.1 kHz Snake causal vocoder; 10 acoustic codebooks; 1.2 GB Q4_K | en, zh | Apache-2.0 |
| melotts | myshell-ai/MeloTTS EN_V2 | VITS2 (6L transformer + SDP/DP + transformer coupling flow + HiFi-GAN); 44.1 kHz, 102 MB + 238 MB F16 BERT companion (340 MB total); neural G2P; 4 EN speakers (more) | en | MIT (Melo); Apache-2.0 (BERT) |
| piper | rhasspy/piper community voices | VITS (6L transformer + SDP + 4-block coupling flow + HiFi-GAN); 22 kHz mono, 30 MB F16 per voice; built-in G2P for EN/DE/FR/ES/RU (--g2p-dict) | 30+ langs (built-in + espeak dlopen) | MIT |
| kokoro | hexgrad/Kokoro-82M + German backbones | StyleTTS2 / iSTFTNet (82M); per-voice GGUF (more) | en, es, fr, hi, it, ja, pt, zh, de | Apache-2.0 |
| orpheus | Orpheus-3B-FT + SNAC 24 kHz | Llama-3.2-3B + SNAC RVQ codec; 8 speakers (more) | en, de | Llama 3.2 Community License / MIT |
| chatterbox | cstr/chatterbox-GGUF + Nano/turbo/fine-tune variants | T3 AR + S3Gen flow-matching (more) | 23 multilingual; separate Arabic, German, and Finnish (chatterbox-finnish-nano) fine-tunes | MIT |
| indextts | cstr/indextts-1.5-GGUF | GPT-2 AR (24L/1280d) + Conformer conditioning + BigVGAN vocoder; voice cloning via reference audio | zh, en | Apache-2.0 |
| voxcpm2-tts | cstr/voxcpm2-GGUF | Tokenizer-free CFM diffusion AR (TSLM + RALM + LocDiT) at 48 kHz native; zero-shot + voice cloning via --voice <wav> | 30 languages | Apache-2.0 |
| voxtral-tts | mistralai/Voxtral-4B-TTS-2603 | Ministral-3B AR (26L GQA) + 3L FM acoustic transformer (7-step Euler ODE) + Voxtral codec decoder at 24 kHz; 20 preset voices; SOTA French technical text | en, fr, de, es, it, pt, nl, ar, hi | CC‑BY‑NC‑4.0 |
| cosyvoice3-tts | cstr/cosyvoice3-0.5b-2512-GGUF | Qwen2-0.5B AR speech-token LM + DiT-CFM (10-step Euler) + HiFT (NSF + iSTFT) at 24 kHz; baked-voice zero-shot cloning via --voice <name>, or any WAV via --voice ref.wav --ref-text "<exact transcript>". --backend cosyvoice3-tts-rl selects upstream's RL-tuned talker (same companions) | 9 langs + 18 zh dialects | Apache-2.0 |
| csm | cstr/csm-1b-GGUF | Sesame CSM-1B conversational TTS: Llama-3.2 1B backbone + 100M depth decoder (32-codebook RVQ) + Kyutai Mimi codec at 24 kHz (more) | en | Apache-2.0 |
| lfm2-audio | cstr/lfm2-audio-1.5b-GGUF + jp | LFM2.5-Audio ASR+TTS+S2S: FastConformer enc + LFM2 hybrid backbone + depthformer (8-codebook Mimi) + ISTFT detokenizer at 24 kHz; interleaved text+audio generation | en, ja | LFM Open v1.0 |
| dia | nari-labs/Dia-1.6B | Byte-level text encoder (12L) + AR audio decoder (18L GQA + CFG) → 9 delayed DAC codebooks + 44.1 kHz DAC codec; dialogue style with [S1]/[S2] tags (use >100-char prompts) | en | Apache-2.0 |
| zonos-tts | cstr/zonos-v0.1-transformer-GGUF + cstr/dac-44khz-GGUF | Zyphra Zonos-v0.1: 26L GQA AR transformer (2B) + 9-codebook DAC @ 44.1 kHz; CFG-guided; voice cloning via reference WAV (more) | en | Apache-2.0 |
| bark | cstr/bark-small-GGUF | Suno Bark 3-stage GPT-2 TTS: text→semantic (12L) → coarse EnCodec (12L, 2 codebooks) → fine (12L, 8 codebooks) → EnCodec 24 kHz decoder; speaker conditioning via .npz prompts (--voice <file.npz>) | multilingual | MIT |
| speecht5 | cstr/speecht5-tts-GGUF | SpeechT5 80M: char-level encoder (12L) + AR mel decoder (6L) + 5-layer conv postnet + HiFi-GAN at 16 kHz; speaker via 512-d x-vector (--voice <xvector.bin>) | en | MIT |
| fastpitch | cstr/fastpitch-en-GGUF | NVIDIA FastPitch 60M: non-autoregressive parallel TTS — 6L encoder + duration/pitch predictors + 6L decoder + HiFi-GAN at 22 kHz; deterministic, single forward pass (more) | en | CC-BY-4.0 |
| bananamind-tts | Banaxi-Tech/BananaMind-TTS-V2.1-Preview | BananaMind-TTS 13M: Tacotron-lite char-level encoder (Conv+BN+BiLSTM) + AR GRU decoder with location-sensitive attention + postnet + HiFi-GAN at 22 kHz; fixed voice per locale (more) | en, de | Apache-2.0 |
| parler-tts | cstr/parler-tts-mini-v1.1-GGUF | Parler TTS Mini v1.1 (~900M): T5 encoder + MusicGen decoder + DAC 44.1 kHz; prompt-conditioned (describe voice in text via --instruct) | en | Apache-2.0 |
| outetts | cstr/outetts-0.3-1b-GGUF | OLMo-1B talker + WavTokenizer single-codebook VQ-GAN at 24 kHz; voice cloning via speaker profile JSON (--voice <speaker.json>) | en | CC-BY-NC-SA-4.0 |
| pocket-tts | cstr/pocket-tts-GGUF | Kyutai Pocket TTS 100M: continuous-latent AR at 12.5 Hz + one-step LSD flow + Mimi VAE 24 kHz; voice cloning via ref audio or official prepared .safetensors voices (more) | en, de, es, it, pt; fr (24L preview) | CC-BY-4.0 + gated-use conditions |
| tada | cstr/tada-tts-1b-GGUF + HumeAI/tada-3b-ml | Llama-3.2 1B/3B backbone + per-token FM diffusion head + TADA codec at 24 kHz; 1:1 text-to-acoustic alignment; default prompt via tada-ref.gguf, custom voices via --voice <tada-ref.gguf> built with models/convert-tada-ref-to-gguf.py (more) | en | Llama 3.2 Community License |
| Backend | Voice cloning | Sampling | kHz | Auto-download | Flash attn |
|---|---|---|---|---|---|
| vibevoice-tts | yes | temp | 24 | yes | yes |
| qwen3-tts | yes* | temp | 24 | yes | yes |
| omnivoice | yes | temp | 24 | — | — |
| kokoro | — | — | 24 | yes | — |
| orpheus | — | temp | 24 | yes | yes |
| chatterbox | yes | temp | 24 | yes | yes |
| outetts | yes (JSON) | temp | 24 | yes | yes |
| indextts | yes | temp | 24 | yes | yes |
| voxcpm2-tts | yes | — | 48 | yes | — |
| cosyvoice3-tts | yes | temp | 24 | yes | yes |
| f5-tts | yes | — | 24 | yes | — |
| irodori-tts | yes (WAV) | VoiceDesign: --instruct | 48 | yes | — |
| supertonic | presets F1-F5/M1-M5 | --tts-speed, --tts-steps | 44.1 | yes | — |
| csm | — | temp | 24 | yes | — |
| dia | — | temp | 44 | yes | — |
| bark | yes (.npz) | temp | 24 | yes | — |
| speecht5 | yes (xvec) | — | 16 | yes | — |
| parler-tts | — | temp | 44 | yes | — |
| fastpitch | — | — | 22 | — | — |
| piper | — | — | 22 | — | — |
| pocket-tts | yes | temp | 24 | yes | — |
| tada | yes | temp | 24 | yes | — |
| dots-tts | yes (--voice ref.wav) | 16-step CFG Euler | 48 | yes | — |
| fireredtts3 | yes (--voice ref.wav --ref-text "...") | 10-step CFG Euler | 24 | yes | — |
| confucius4-tts | yes (--voice ref.wav) | 25-step CFG Euler | 22.05 | yes | — |
* CustomVoice variant only; Base uses baked speakers via --voice <name>.
Output language. -tl <lang> (or -l) selects the language to speak;
cosyvoice3-tts, qwen3-tts and moss-tts act on it natively. For
cross-lingual cloning — an English reference clip speaking German, the
subtitle-dubbing case — also pass -sl <lang> for the language the reference is
spoken in, so cosyvoice3 drops the reference transcript instead of carrying its
accent. Over HTTP: "language" + "source_lang" on POST /v1/audio/speech.
See docs/tts.md.
Translation
Text-to-text translation, distinct from the audio-side --translate
flag (which routes audio → English text on whisper / canary / etc.).
Driven by --text "..." -sl <src> -tl <tgt>.
| Backend | Models | Architecture | Languages | License |
|---|---|---|---|---|
| m2m100 | facebook/m2m100_418M | 12L enc + 12L dec transformer, SentencePiece 128K (more) | 100 langs, any-to-any | MIT |
| m2m100-wmt21 | facebook/wmt21-dense-24-wide-en-x + facebook/wmt21-dense-24-wide-x-en | Same as m2m100, scaled to 4.7B (24L enc) (more) | English ↔ 7 langs (separate en-x / x-en checkpoints) | MIT |
| marian | Helsinki-NLP/opus-mt-de-en, opus-mt-en-de — hosted as cstr/opus-mt-<src>-<tgt>-GGUF (f16 + q8_0) for 24 directions: de↔en, fr↔de, fr↔en, ar↔de, ar↔en, it↔de, it↔en, es↔de, es↔en, he↔de, en→he, he→en, tr→en, en→tr (he→en and en→tr are the larger tc-big models); other pairs via models/convert-marian-to-gguf.py | MarianMT 6L enc + 6L dec transformer, d=512, ~75M parameters, SentencePiece unigram + 58K joint vocab (more) | one direction per checkpoint (de→en, en→de) | CC-BY-4.0 (OPUS-MT; attribution required) |
| madlad | google/madlad400-3b-mt | T5 enc-dec (12L+12L, d=2048, gated-GELU, RMSNorm) (more) | 419 languages | Apache-2.0 |
# m2m100 base (production-ready)
./build/bin/crispasr --backend m2m100 -m auto \
--text "Hello world, how are you today?" \
-sl en -tl de
# → Hallo Welt, wie bist du heute?
# WMT21 dense (English ↔ X, 4.7B — auto-downloads ~2.5 GB).
# Two separate checkpoints: en-x for English-source, x-en for
# English-target. Pick the one matching your `-sl`/`-tl` direction
# (or pass an explicit `-m <path>` to load the other manually).
./build/bin/crispasr --backend m2m100-wmt21 -m auto \
--text "The president said he would not attend." \
-sl en -tl de # uses wmt21-dense-24-wide-en-x
./build/bin/crispasr --backend m2m100-wmt21 \
-m models/wmt21-dense-24-wide-x-en-q4_k.gguf \
--text "Le président a dit qu'il ne serait pas présent." \
-sl fr -tl en # uses wmt21-dense-24-wide-x-en
# Opus-MT / MarianMT (one small model per direction: `-m auto` is de→en,
# `-m opus-mt-en-de` the other way; ~84 MB, CC-BY-4.0)
./build/bin/crispasr --backend marian -m auto \
--text "Die Konferenz findet am 3. Oktober in Berlin statt." \
-sl de -tl en --beam-size 1
# → The conference will take place on 3 October in Berlin.
# MADLAD-400 3B (419 languages, bit-token-identical to Python SP)
./build/bin/crispasr --backend madlad -m auto \
--text "Hello world." \
-sl en -tl ta
For 2-stage pipelines (e.g., ASR → m2m100), use the dedicated
--tr-sl / --tr-tl flags; they fall back to -sl / -tl when
unset, so single-stage standalone usage is just -sl/-tl.
Post-processing models
Work with all backends.
| Model | Task | Architecture | Languages | License | HuggingFace |
|---|---|---|---|---|---|
| FireRedPunc | Punctuation restoration | BERT-base (12L, d=768), 5 classes | Chinese + English | Apache-2.0 | cstr/fireredpunc-GGUF |
| fullstop-punc | Punctuation restoration | XLM-RoBERTa-large (24L, d=1024), 6 classes | EN, DE, FR, IT | MIT | cstr/fullstop-punc-multilang-GGUF |
| punctuate-all | Punctuation restoration | XLM-RoBERTa-base (12L, d=768), 6 classes | 12 languages | MIT | cstr/punctuate-all-GGUF |
| PCS | Punc + truecase + SBD | XLM-RoBERTa-base (12L), 4 heads | 47 languages | Apache-2.0 | --punc-model pcs |
| truecaser‑lstm | German truecasing (best) | BiLSTM char-level (2×150, 3.2 MB, 97.9% F1) | German | Apache-2.0 | --truecase-model lstm |
| truecaser‑crf | German truecasing | CRF + context features (8.5 MB) | German | MIT | --truecase-model crf |
| truecaser‑de | German truecasing (simple) | Statistical word-frequency (71K entries, 1.7 MB) | German | MIT | --truecase-model auto |
| CLD3 | Text language ID | Embedding-bag → FC + ReLU → softmax (~1.5 MB F32) | 109 ISO 639-1 | Apache-2.0 | cstr/cld3-GGUF |
| GlotLID-V3 | Text language ID | fastText supervised, flat softmax | 2102 ISO 639-3 + script | Apache-2.0 | cstr/glotlid-GGUF |
| LID-176 | Text language ID | fastText supervised, hierarchical softmax | 176 ISO 639-1 | CC-BY-NC-4.0 | cstr/fasttext-lid176-GGUF |
Audio codecs
Shared codec modules used by TTS backends. Also available standalone for encode/decode.
| Model | Architecture | Sample Rate | Token Rate | License | HuggingFace |
|---|---|---|---|---|---|
| MioCodec v2 | WavLM encoder → FSQ(12800) → Transformer decoder + AdaLN-Zero + SnakeBeta upsampler + iSTFT | 44.1 kHz | 25 Hz (341 bps) | MIT | cstr/miocodec-v2-44k-GGUF |
| SNAC 24 kHz | 3-codebook RVQ + decoder blocks (stride 8/8/4/2) | 24 kHz | 3×12.5 Hz | MIT | cstr/snac-24khz-GGUF |
All runtimes share ggml-based inference. The speech-LLM backends (qwen3, voxtral, voxtral4b, granite, glm-asr, kyutai-stt) inject audio encoder frames directly into an autoregressive language model's input embeddings, instead of using a dedicated CTC/transducer/seq2seq decoder. The fastconformer-ctc backend hosts the NeMo FastConformer-CTC standalone ASR family — stt_en_fastconformer_ctc_{large,xlarge,xxlarge} and the architecturally-identical parakeet-ctc-{0.6b,1.1b} (different training data + tokenizer, same encoder + head shape) — with greedy CTC decoding. Same C++ runtime as the canary-ctc aligner.
Music & audio analysis
Beyond speech, CrispASR runs several music/audio analysis tasks — each a small
GGUF with the architecture auto-detected, no Python. See docs/cli.md
for the per-task flags and output formats.
- Source separation (
--separate) — split a mix into stems (<input>_<stem>.wav) via mel-band-roformer (vocal/instrumental, MIT), htdemucs (4-stem), or mini-bs-roformer (HiDolen V2.5, 46.2M parameters, stereo bass/drums/other/vocals at 44.1 kHz).--stems vocals,drumsselects a subset;--sep-output-dirsets the output location. Mini BS RoFormer uses an explicitly converted local GGUF. The SCNet / SCNet-large candidate backend adds native four-stem separation with local F16/Q8_0/Q4_K GGUFs; original-checkpoint fidelity and paired performance remain qualification gates. - Piano transcription (
--backend piano-transcription) — piano audio → note events (88 keys @ 100 fps, ByteDance/Kong CRNN; F16 GGUF ≈ 77 MB). - Polyphonic note events (
--backend basic-pitch) — Spotify Basic Pitch, any instrument → note events (~110 KB model). - Multi-instrument transcription (
--backend mt3, aliasmusic-transcription) — MT3's T5 encoder/decoder emits note events with per-instrument programs (F16 GGUF ≈ 96 MB). - Onsets & Frames (
--backend onsets-and-frames) — Hawthorne et al.'s piano transcriber (MIT), the best solo-piano model here per megabyte: 69.0% note F1 on MusicNet's piano pieces against Basic Pitch's 57.5%, and F1-identical to its ONNX export at f32 and Q8_0. Q4_0 GGUF 18.6 MiB, Q8_0 30.8 MiB, F32 101.9 MiB. See docs/music-transcription/ONSETS_AND_FRAMES.md. - hFT-Transformer (
--backend hft-transformer) — Toyama et al.'s hierarchical frequency-time transformer (MIT), the most accurate solo-piano model here and by far the smallest: 70.5% note F1 on MusicNet's piano pieces from 5.5 M parameters, Q8_0 GGUF 7.0 MiB, Q4_0 4.5 MiB, F32 21.8 MiB. It is also much the most expensive to run — 249 GFLOP of matrix multiply per 2 s of audio, and quantisation makes it slower, not faster, on a CPU without int8 dot-product instructions. Read docs/music-transcription/HFT_TRANSFORMER.md before choosing it overonsets-and-frames. - All five take
--piano-format text|json|midi;midiwrites a Standard MIDI File. - Guitar tablature (
--tab) — per-frame fret-per-string grid via TabCNN (Wiggins & Kim, ISMIR 2019; CC BY 4.0 weights). The backend emits per-string emission scores, not a decided tablature — run your own constrained Viterbi viacrispasr_session_tab_emissions()for playable output. - Beat / downbeat tracking (
--beats) — beat grid via Beat This! (CPJKU, ISMIR 2024; MIT for code and weights, no patent-encumbered DBN). - Chord recognition (
--chords) — chord timeline (.lab) via BTC (ISMIR 2019). Weights are CC-BY-NC-SA, gated behind--accept-license cc-by-nc-sa-4.0. - Pitch / F0 estimation (
--pitch) — monophonic pitch track via CREPE (MIT).
Feature matrix
Run crispasr --list-backends to see it live. Each backend declares capabilities at runtime; if you ask for a feature the selected backend does not support, CrispASR prints a warning and silently ignores the flag.
Sortable / filterable view: docs/feature-matrix.html — click any column header to sort, type to filter rows, click cap pills to require a capability. Generated from crispasr --list-backends-json (single source of truth — drift impossible). Regenerate via python tools/gen-feature-matrix.py. A Markdown twin lives at docs/feature-matrix.md.
The static table below is a curated subset focusing on the ASR backends and the cross-cutting features that matter for ASR pipelines. The full 119-backend × 27-cap surface is in the generated views.
| Feature | whisper | parakeet | canary | cohere | granite | granite‑4.1 | voxtral | voxtral4b | qwen3 | fc‑ctc | wav2vec2 | glm‑asr | kyutai‑stt | firered | moonshine | moon‑stream | omniasr | omniasr‑llm | vibevoice | gemma4‑e2b | mimo‑asr | funasr | paraformer | sensevoice |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Native timestamps | ✔ | ✔ | ✔ | ✔ | ✔ | |||||||||||||||||||
| CTC timestamps | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ||||
| Word-level timing | ✔ | ✔ | ✔ | ✔ | -am | ✔† | -am | -am | -am | -am | -am | -am | ✔ | -am | -am | -am | -am | -am | -am | -am | -am | -am | ||
| Per-token confidence | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ||||
| Language auto-detect | ✔ | ✔ | LID | LID | LID | LID | LID | LID | ✔ | LID | LID | ✔ | LID | LID | LID | LID | LID | LID | LID | ✔ | ✔ | LID | LID | ✔ |
| Speech translation | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ||||||||||||||||||
| Speaker diarization | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
| Grammar (GBNF) | ✔ | |||||||||||||||||||||||
| Temperature sampling | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |||||
| Beam search | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |||||||||||||
| Flash attention | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ||
| Punctuation toggle | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |||||||||
| Punc restoration | pp | pp | pp | pp | pp | pp | pp | pp | pp | pp | pp | pp | pp | pp | pp | pp | pp | pp | pp | pp | pp | pp | pp | pp |
| Source / target language | ✔ | ✔ | ✔ | ✔ | ✔ | |||||||||||||||||||
Audio Q&A (--ask) | * | * | ✔ | * | * | * | * | |||||||||||||||||
| Streaming | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
Auto-download (-m auto) | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
KV quant (CRISPASR_KV_QUANT, plus per-half _K / _V) | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ||||||||||||||
mmap weights (CRISPASR_GGUF_MMAP) | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |
| TTS | ✔ |
The matrix above covers 24 ASR backends. Additional ASR backends not shown: nemotron (39-lang streaming ASR with cache-aware FastConformer + RNN-T), lfm2-audio (ASR + TTS + S2S in one model), moss-audio (audio understanding + ASR), moss-transcribe (Qwen3-Omni encoder + Qwen3-1.7B ASR), hojo-asr (Qwen3-Omni encoder + Conformer adapter + Qwen3-4B multilingual ASR), mini-omni2 (ASR + TTS + S2S), kugelaudio (7B audio understanding). See docs/feature-matrix.md for the full 109-backend matrix. TTS-only backends (kokoro, qwen3-tts + variants, vibevoice-tts, orpheus + DE variants, chatterbox / chatterbox-turbo / chatterbox-nano / kartoffelbox-turbo / lahgtna-chatterbox, dia, bark, outetts, zonos, csm, f5-tts, irodori-tts, supertonic, parler-tts, speecht5, piper, fastpitch, pocket-tts, melotts, cosyvoice3, voxcpm2, tada-tts) all carry the TTS, AUTO_DOWNLOAD, TEMPERATURE, and FLASH_ATTN caps; per-backend cloning + voice-pack support is documented in the Text-to-Speech models table above and docs/tts.md. The vibevoice and lfm2-audio columns mark dual-mode (ASR + TTS) backends.
Nemotron managed downloads use pinned F16 (~1.3 GB); the former Q4 default fails the fixed CPU/T4 original-reference controls. See the default qualification and existing-release usage.
Key: ✔ = native/built-in, -am = via CTC forced aligner (-am canary-ctc-aligner.gguf or -am qwen3-forced-aligner.gguf), LID = via external language identification pre-step (-l auto), pp = via --punc-model post-processor (FireRedPunc or fullstop-punc), * = experimental or partial support, † = PLUS variant only (native [T:N] word timestamps with -owts; base uses -am). granite-4.1 covers both the regular and -plus variants; granite-4.1-nar is a non-autoregressive variant with encoder+projector only (no LLM decode features). The KV quant row marks backends that honor CRISPASR_KV_QUANT={f16,q8_0,q4_0} — CTC-style backends without a KV cache (parakeet, fc-ctc, wav2vec2, kyutai-stt, firered, moonshine variants, omniasr-CTC) don't apply. The same backends also honor the per-half CRISPASR_KV_QUANT_K / CRISPASR_KV_QUANT_V overrides (llama.cpp --cache-type-k / --cache-type-v parity) for asymmetric K-vs-V precision; common recipe K=q8_0 V=q4_0 saves ~40 % more KV memory than symmetric Q8_0. The mmap weights row marks backends consuming core_gguf::load_weights() and therefore honoring CRISPASR_GGUF_MMAP=1; whisper itself uses upstream's loader and is unaffected. See docs/cli.md Memory footprint for usage + recommended combos.
Speaker diarization as a post-processing step via --diarize:
energy/xcorr— stereo-only, no extra depsfoxnose— best accuracy, no external deps: WeSpeaker ResNet34-LM embeddings + GMM/BIC speaker counting + spectral clustering + Viterbi smoothing. Estimates the speaker count rather than needing it up front;--diarize-embedder autofetches the GGUF (24 MB, CC-BY-4.0). 7.3 % DER on VoxConverse dev wherepyannote+ TitaNet scores 7.8 %, and 3.18 % vs the upstream reference's 3.07 % when scored on turns (more)sortformer— NVIDIA Nemotron-3-Diarization (streaming Sortformer v3, #466): one end-to-end network, up to 8 speakers in order of appearance, overlap-aware, no embedder or clustering.--diarize-model autofetches NVIDIA's 107 MB q8_0 GGUF (OpenMDW-1.1, commercial use allowed). Matches transformers exactly on every p > 0.5 decision (more)pyannote— native GGUF (no Python, no sherpa-onnx); add--diarize-embedder auto(TitaNet) or--diarize-embedder indextts(ECAPA-TDNN) for globally stable speaker IDs across long filessherpa/ecapa— external [sherpa-