One C++ binary, 119 backends — 62 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/.
| Project | What it does |
|---|---|
| CrispASR | This repo — C++ speech engine. 119 backends (62 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. |
-hip / -vulkan builds require the matching GPU driver and do not fall back to CPU (the -cuda tarballs do, since v0.8.30)--no-gpu bisect, which Windows zip--server-workers), bulk offline transcription, replicas behind a load balancerCRISPASR_<BACKEND>_<FEATURE> convention, global knobs, and every per-backend variablesrc/core/ primitives, regression disciplinetools/test-all-backends.py capability tierscrispasr-quantize for all backendsEverything 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.
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 -hip
and -vulkan builds require the matching driver and do not fall back to CPU;
the Linux -cuda 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).
-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.
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.
| 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 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 |
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.
CrispASR sh
| 日期 | 榜单 | 排名 | 周期新增 | 总 STAR |
|---|