Vosk
Vosk is an offline, open-source speech recognition toolkit for 20+ languages. Skip the install: WhipScribe transcribes it in your browser. Packs: $4 for 500 minutes, $12 for 2,000, $24 for 5,000; Workspace $19 a month. Up to 10 hours or 5 GB per file. Measured turnaround: about 2 minutes per audio hour. 99 languages. Checked 25 Oct 2026.
Don’t want to install Vosk? Drop the file here.
Every recording starts with a free preview of its opening minutes. Credits never expire.
Lightweight offline speech recognition for 25+ languages, runs on a Raspberry Pi or behind Home Assistant. Per-region cards, copy-and-run recipes, and the full small-model list below.
Vosk on your computer, or upload the file to WhipScribe
| Vosk | WhipScribe | |
|---|---|---|
| Install | pip3 install vosk (Python 3.5 to 3.9), then a language model you download; runs offline3 | Nothing to install: upload the file in a browser. Transcribed on our own servers. |
| Model download | Small models around 50 MB (vosk-model-small-en-us-0.15 is 40 MB); the big US English model is 1.8 GB4 | None |
| Platforms | Linux (x86_64, arm64), Raspberry Pi 3/4, macOS (x86 and M1), Windows x86/x64; Android library; iOS on request3 | Web, API, MCP |
| Speakers | Speaker identification, listed as a feature2 | Named in the summary, key quotes and chapters |
| Languages | 20+ languages and dialects12 | 99+, detected automatically |
| Export formats | The vosk-transcriber command writes TXT or SRT3 | TXT, DOCX, SRT, VTT, JSON |
| Price | Free; Apache 2.0 toolkit (some models carry other licences)14 | A free preview of the opening minutes, then $4 for 500 minutes, $12 for 2,000 minutes, $24 for 5,000 minutes; Workspace $19 a month. Credits never expire. |
Vosk column: the project’s own pages, numbered in the table.
- alphacep/vosk-api · README and licence (GitHub), fetched 25 Oct 2026
- Vosk project site (alphacephei.com), fetched 25 Oct 2026
- Vosk installation page, fetched 25 Oct 2026
- Vosk model list (sizes and licences), fetched 25 Oct 2026
WhipScribe column: pricing and measured turnaround.
Vosk small models: size, accuracy and download link
All 35 vosk-model-small checkpoints on the official model list, 30 languages. Each link is the official .zip on alphacephei.com. The list describes most of them as lightweight models for Android, iOS or a Raspberry Pi. Error rates are word error rate in %, unless marked CER, on the benchmarks the list names; lower is better.
Unzip next to your script and point Vosk at the folder: vosk-transcriber -m vosk-model-small-es-0.42 -i audio.wav -o audio.txt. Input should be 16 kHz mono PCM; convert other files with ffmpeg first.
The same page lists larger models for most languages, mostly 1 to 2 GB each (the German Tuda model is 4.4 GB). They are more accurate and need far more memory.
| Language | Model (.zip download) | Size | Published WER (%) | Licence |
|---|---|---|---|---|
| English (US) | vosk-model-small-en-us-0.15 | 40 MB | 9.85 (librispeech test-clean), 10.38 (tedlium) | Apache 2.0 |
| English (US) | vosk-model-small-en-us-zamia-0.5 | 49 MB | 11.55 (librispeech test-clean), 12.64 (tedlium) | LGPL-3.0 |
| Indian English | vosk-model-small-en-in-0.4 | 36 MB | 49.05 (NPTEL Pure) | Apache 2.0 |
| Chinese | vosk-model-small-cn-0.22 | 42 MB | 23.54 (SpeechIO-02), 38.29 (SpeechIO-06), 17.15 (THCHS) | Apache 2.0 |
| Russian | vosk-model-small-ru-0.22 | 45 MB | 22.71 (openstt audiobooks), 31.97 (openstt youtube) | Apache 2.0 |
| French | vosk-model-small-fr-0.22 | 41 MB | 23.95 (cv test), 19.30 (mtedx), 27.25 (podcast) | Apache 2.0 |
| French | vosk-model-small-fr-pguyot-0.3 | 39 MB | 37.04 (cv test), 28.72 (mtedx) | CC-BY-NC-SA 4.0 |
| German | vosk-model-small-de-0.15 | 45 MB | 13.75 (Tuda-de test), 30.67 (podcast) | Apache 2.0 |
| German | vosk-model-small-de-zamia-0.3 | 49 MB | 14.81 (Tuda-de test); marked not recommended | LGPL-3.0 |
| Spanish | vosk-model-small-es-0.42 | 39 MB | 16.02 (cv test), 16.72 (mtedx test), 11.21 (mls) | Apache 2.0 |
| Portuguese / Brazilian | vosk-model-small-pt-0.3 | 31 MB | 68.92 (coraa dev), 32.60 (cv test) | Apache 2.0 |
| Italian | vosk-model-small-it-0.22 | 48 MB | 16.88 (cv test), 25.87 (mls), 17.01 (mtedx) | Apache 2.0 |
| Dutch | vosk-model-small-nl-0.22 | 39 MB | 22.45 (cv test), 25.84 (mls) | Apache 2.0 |
| Turkish | vosk-model-small-tr-0.3 | 35 MB | not published | Apache 2.0 |
| Vietnamese | vosk-model-small-vn-0.4 | 32 MB | 15.70 (Vivos test) | Apache 2.0 |
| Catalan | vosk-model-small-ca-0.4 | 42 MB | not published | Apache 2.0 |
| Arabic (Tunisian) | vosk-model-small-ar-tn-0.1-linto | 158 MB | 16.06 (TARIC set) | Apache 2.0 |
| Farsi | vosk-model-small-fa-0.42 | 53 MB | 23.4 (CV17), 14.0 (Fleurs) | Apache 2.0 |
| Farsi | vosk-model-small-fa-0.5 | 60 MB | 31.2 (CV17), 26.2 (Fleurs) | Apache 2.0 |
| Ukrainian | vosk-model-small-uk-v3-nano | 73 MB | not published | Apache 2.0 |
| Ukrainian | vosk-model-small-uk-v3-small | 133 MB | not published | Apache 2.0 |
| Kazakh | vosk-model-small-kz-0.42 | 58 MB | 21.10 (fleurs), 30.0 (CV17) | Apache 2.0 |
| Swedish | vosk-model-small-sv-rhasspy-0.15 | 289 MB | not published | MIT |
| Japanese | vosk-model-small-ja-0.22 | 48 MB | 9.52 CER (csj), 17.07 CER (ted10k) | Apache 2.0 |
| Esperanto | vosk-model-small-eo-0.42 | 42 MB | 7.24 (CV Test) | Apache 2.0 |
| Hindi | vosk-model-small-hi-0.22 | 42 MB | 20.89 (IITM Challenge), 24.72 (MUCS Challenge) | Apache 2.0 |
| Czech | vosk-model-small-cs-0.4-rhasspy | 44 MB | 21.29 (CV Test) | MIT |
| Polish | vosk-model-small-pl-0.22 | 50 MB | 18.36 (CV Test), 16.88 (MLS Test) | Apache 2.0 |
| Uzbek | vosk-model-small-uz-0.22 | 49 MB | 13.54 (CV Test) | Apache 2.0 |
| Korean | vosk-model-small-ko-0.22 | 82 MB | 28.1 (Zeroth Test) | Apache 2.0 |
| Gujarati | vosk-model-small-gu-0.42 | 100 MB | 20.49 (MS Test) | Apache 2.0 |
| Tajik | vosk-model-small-tg-0.22 | 50 MB | 38.4 (Fleurs test) | Apache 2.0 |
| Telugu | vosk-model-small-te-0.42 | 58 MB | 87.9 (Fleurs test) | Apache 2.0 |
| Kyrgyz | vosk-model-small-ky-0.42 | 49 MB | 18.95 (Fleurs), 16.96 (CV17) | Apache 2.0 |
| Georgian | vosk-model-small-ka-0.42 | 45 MB | 18.0 (Fleurs), 14.2 (CV17) | Apache 2.0 |
Sources:
- Vosk models · alphacephei.com/vosk/models, fetched 26 Oct 2026
Apache-2.0 offline ASR. ≈50 MB models, real-time streaming on a Pi 3/4, plugs into Home Assistant Assist via Wyoming. Strong language coverage — including Hindi, Mandarin, Ukrainian, German, Russian, Japanese, Korean, Turkish — that most cloud STT either skips, charges for, or transcribes badly.
Best for privacy-first home automation, edge hardware, on-device IoT/kiosk UX, and language coverage outside English. Free.
What it is
Vosk is a practical, production-friendly offline recognizer built on Kaldi. Predates the Whisper era but still the go-to for true streaming on constrained hardware, IoT, kiosks, and embedded devices. Apache-2.0 licensed.
Watch out for: WER trails Whisper on most languages; older Kaldi-based architecture; smaller community now.
Install / use
pip install vosk
Python 3.5–3.12. Audio must be PCM 16 kHz 16-bit mono — use ffmpeg to convert anything else. Pi Zero / ARMv6 are not supported; Pi 3/4 are.
Setting Vosk up or fixing an error? Vosk setup guide and common fixes.
Where Vosk shines · 12 regions, 1 toolkit
Vosk's adoption isn't uniform — it's strongest where one or more of {privacy regulation, weak cloud-STT language coverage, maker-scene density, infrastructure constraints} dominate the build calculus. Pick the card closest to your context — recommended model is on each.
GDPR-shaped instincts plus a "no Alexa in my house" community. Home Assistant + Rhasspy / Wyoming setups are huge in DE, and Vosk is one of the standard STT backends.
45 MB · WER 13.75 · Pi-ok
Most cloud STT skips Ukrainian, charges for it, or does it badly. Wartime makes "no foreign cloud, no foreign payments" the default — Vosk runs on a Pi, no account.
73 MB · Pi-ok · v3 series
Cloud STT charges per-minute and Indic coverage is uneven. Vosk has a dedicated Indian-English acoustic model and small Hindi/Telugu/Tamil/Gujarati models that fit on cheap ARM boards.
~50 MB each · Pi-ok
Foreign cloud STT is intermittently reachable. Vosk's Mandarin small model gives a no-network fallback for kiosks, in-vehicle UX, and IoT firmware shipping into mainland markets.
42 MB · Pi-ok
Cloud STT priced in USD bites hard at BRL revenue. Vosk's Portuguese models give per-minute cost = $0 once the device is bought, which makes consumer-app voice features economically viable.
31 MB · Pi-ok
Strong embedded / robotics culture and a deep aversion to cloud-leaking household audio. Vosk's small Japanese model + streaming API is well-suited to robotics SDKs and consumer-electronics firmware.
48 MB · Pi-ok
Public-sector and regulated-industry buyers need French-soil or on-premise STT — "souveraineté numérique" is policy. Vosk runs on the customer's own hardware with no telemetry.
41 MB · Pi-ok
Korea's hardware-first culture treats latency and offline-capability as table stakes. Vosk's streaming API gives sub-200 ms partial transcripts on a Cortex-A53.
82 MB · Pi-ok
Spanish-language SaaS is price-sensitive; Vosk's free Spanish model means voice features ship without per-minute STT cost. Same calculus across LatAm.
39 MB · Pi-ok
Italian SMB manufacturing puts voice control on machines that often have no internet uplink. Vosk on industrial Linux boxes is the path of least resistance.
48 MB · Pi-ok
Lira-priced products + USD-priced cloud STT = unworkable. Vosk's Turkish small model is one of very few free options that handle vowel harmony and agglutinative morphology decently.
35 MB · Pi-ok
Strong Home Assistant / DIY voice-control community in NL. Dutch is well-covered by Vosk; pairs cleanly with Piper TTS for an end-to-end offline voice loop.
39 MB · Pi-ok
Setup recipes · pick one and copy
Three working configurations covering the most common Vosk deployments. Each block is copy-and-run — no hidden steps.
Pi 3 or 4 · any of the 25+ Vosk languages · pure pip + ffmpeg.
# system deps (Raspberry Pi OS Bookworm/Bullseye)
sudo apt update && sudo apt install -y \
python3-pip python3-pyaudio ffmpeg unzip
# install Vosk
pip3 install vosk sounddevice
# small model — German shown; swap the URL for any
# language at alphacephei.com/vosk/models
wget https://alphacephei.com/vosk/models/vosk-model-small-de-0.15.zip
unzip vosk-model-small-de-0.15.zip
# transcribe a file
vosk-transcriber -m vosk-model-small-de-0.15 \
-i sample.wav -o sample.txt
# or stream from the default mic
python3 vosk-api/python/example/test_microphone.py \
-m vosk-model-small-de-0.15
Replace HA's default cloud STT with offline Vosk. wyoming-vosk is the protocol bridge.
# run wyoming-vosk in Docker (en + de + uk loaded;
# add --model-for-language flags for more)
mkdir -p ~/wyoming-vosk-data
docker run -d --name wyoming-vosk \
--restart unless-stopped \
-p 10300:10300 \
-v ~/wyoming-vosk-data:/data \
rhasspy/wyoming-vosk:latest \
--uri tcp://0.0.0.0:10300 \
--data-dir /data \
--model-for-language en vosk-model-small-en-us-0.15 \
--model-for-language de vosk-model-small-de-0.15 \
--model-for-language uk vosk-model-small-uk-v3-nano
# in Home Assistant:
# Settings → Devices & Services → Add Integration
# → Wyoming Protocol
# Host: <host-ip> Port: 10300
# then wire it into Assist:
# Settings → Voice assistants → new pipeline
# Speech-to-text: Vosk · Text-to-speech: Piper
Python · partial transcripts at zero latency · drop-in for kiosks & live captions.
import json, sounddevice as sd, queue
from vosk import Model, KaldiRecognizer
q = queue.Queue()
def cb(indata, frames, time, status):
q.put(bytes(indata))
# any unzipped model dir
model = Model("vosk-model-small-de-0.15")
rec = KaldiRecognizer(model, 16000)
with sd.RawInputStream(samplerate=16000,
blocksize=8000,
dtype="int16", channels=1,
callback=cb):
print("Listening — Ctrl-C to quit")
while True:
data = q.get()
if rec.AcceptWaveform(data):
print(json.loads(rec.Result())["text"])
else:
p = json.loads(rec.PartialResult()).get("partial")
if p: print(f"… {p}", end="\r")
Features
| Speaker diarization | Yes |
| Word-level timestamps | Yes |
| Streaming / real-time | Yes |
| Languages supported | 20 |
| HIPAA eligible | No |
Links
- alphacep/vosk-api ↗ — main repo (Python / Node / Java / C# / Go / Rust)
- alphacephei.com/vosk/models ↗ — full model registry (all 25+ languages, sizes + WER)
- rhasspy/wyoming-vosk ↗ — Wyoming protocol server for Home Assistant Assist
- alphacep/vosk-android-demo ↗ — Android sample app
- egorsmkv/speech-recognition-uk ↗ — community-maintained Ukrainian models
- uhh-lt/vosk-model-tuda-de ↗ — alternative German wideband model
- Home Assistant local Assist setup ↗ — pipeline that consumes
wyoming-vosk
Vosk vs Whipscribe
| Feature | Vosk | Whipscribe |
|---|---|---|
| Category | Open source | Transcription APIs |
| Pricing | free | packs from $4 for 500 min · credits never expire |
| Speaker diarization | Yes | Speakers named in the summary, key quotes and chapters |
| Word timestamps | Yes | Yes |
| Streaming | Yes | No |
| Languages | 20 | 99 |
| Platforms | Linux, macOS, Windows, iOS, Android, Edge | Web, API, MCP |
Alternatives to Vosk
Whipscribe is a hosted transcription service. If you want transcripts without running infrastructure, paste a URL or drop a file in the form below — you'll have a transcript in seconds.
Related
- Vosk models are trained on 16 kHz mono audio; convert a recording to 16 kHz mono WAV in your browser first.
- To see a file's sample rate, channels and codec before you run a model, drop it in the audio file inspector.
- Long pauses only slow a recognizer down: remove silence from audio without uploading the file.
- Whisper's own translate task writes English text only; to keep the original transcript and get English subtitles on the same timestamps, see translate Russian audio to English.
Long recording to get through?
One file up to 10 hours, as an upload or a link: see MP3 to text for long recordings, transcribing a podcast episode and an SRT subtitle file from any recording.
Rather have it done for you?
Free tools cost setup time. When you want a finished transcript instead: see transcription services from $4.