Wyoming Faster Whisper
Wyoming protocol server for the faster-whisper speech to text system.
Home Assistant Add-on
Local Install
Clone the repository and set up Python virtual environment:
git clone https://github.com/rhasspy/wyoming-faster-whisper.git
cd wyoming-faster-whisper
script/setup
Run a server anyone can connect to:
script/run --model tiny-int8 --language en --uri 'tcp://0.0.0.0:10300' --data-dir /data --download-dir /data
The --model can also be a HuggingFace model like Systran/faster-distil-whisper-small.en
NOTE: Models are downloaded to the first --data-dir directory.
Biasing Toward Your Home Assistant Names
Whisper has never heard of your thermostat. "What's the temperature of the Ecobee?" comes back as "What's the temperature of the incubi?" — the acoustics were fine, the model just has no reason to think that word exists.
Given a long-lived access token, the server reads the names in your home over the Home Assistant websocket API and feeds them to the model as a prompt, which fixes exactly that class of error:
script/run --uri 'tcp://0.0.0.0:10300' --data-dir /data \
--hass-token "$TOKEN" --hass-api 'http://homeassistant.local:8123/api'
Requires the hass extra:
pip install 'wyoming-faster-whisper[hass]'
It collects the names of conversation-exposed entities and their aliases, plus your area and floor names — the names a speaker can actually say. Nothing else is read, and no service is ever called.
The fetch is free in latency terms: it starts when the audio starts, while the speaker is still talking, and the names are ready by the time the audio stops. Home Assistant being slow or unreachable only costs freshness — the previous names are used, or none at all, and the transcript still comes back.
| Option | Default | Purpose |
|---|---|---|
--hass-token |
Long-lived access token. Enables everything above. | |
--hass-api |
http://homeassistant.local:8123/api |
Where to find Home Assistant. |
--hass-refresh-seconds |
0 |
Minimum seconds between refreshes. 0 refreshes every utterance, so a rename takes effect immediately. |
--hass-prompt-max-tokens |
200 |
Token budget for names. Whisper's hard cap is 223 and quality falls off before it. |
--hass-prompt-timeout |
1.0 |
How long to wait on an unfinished refresh before transcribing with the names already on hand. |
A large home has more names than the budget holds. They are added in priority
order — areas, floors, entity names, then aliases — and cut off when the budget
runs out; run with --debug to see how many were dropped and the exact prompt
used. --initial-prompt still works and is kept at the front of the prompt, ahead
of anything discovered from Home Assistant.
This biases faster-whisper and qwen3-asr, the backends that take a prompt.
Others ignore it.
Prompt cost on qwen3-asr
For qwen3-asr the prompt is not free: the model has to read it before it starts
decoding, at roughly 2.8ms per token, so a 50-name list can double the time for a
short command.
The default model avoids this. The prompt sits ahead of the audio in the chat
template, so its state depends only on the prompt and is computed once, then
reused for every later utterance. The layout is chosen from the files present, so
older model directories with decoder_init/decoder_step keep working as before
— pass --model rhasspy/qwen3-asr-0.6b-onnx-int4 to use one.
Measured on a Pi 5 (4 threads, 3.2s command, 50 names):
| split | merged (default) | |
|---|---|---|
| latency | 3.42s | 2.20s |
| peak RSS | 2.25 GB | 1.55 GB |
| on disk | 1407 MB | 785 MB |
The latency win is for short commands. Long-form audio gains little (~1.04x on a 30s clip), because the cached prompt is a small share of that work — though the memory saving grows with length.
Accuracy is unchanged: on LibriSpeech test-other (n=200) the two produce byte-identical transcripts with no prompt (5.35% WER for both), and 5.33% vs 5.43% with a 50-name prompt.
Docker Image
docker run -it -p 10300:10300 -v /path/to/local/data:/data rhasspy/wyoming-whisper \
--model tiny-int8 --language en
NOTE: Models are downloaded to /data, so make sure this points to a Docker volume.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file wyoming_faster_whisper-3.6.0.tar.gz.
File metadata
- Download URL: wyoming_faster_whisper-3.6.0.tar.gz
- Upload date:
- Size: 53.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
df2551c2f12baca8c0c1eb3d07e3bf6ac18e1f1184f63d4a87e75302eb85883b
|
|
| MD5 |
bc8a588802bd2f7b13697a3b0797e04c
|
|
| BLAKE2b-256 |
d07aa7fe3960c69f78e752527a6893b5ee1501b950f7ff7b3d0c3f6302b2c63f
|
Provenance
The following attestation bundles were made for wyoming_faster_whisper-3.6.0.tar.gz:
Publisher:
publish.yml on OHF-Voice/wyoming-faster-whisper
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
wyoming_faster_whisper-3.6.0.tar.gz -
Subject digest:
df2551c2f12baca8c0c1eb3d07e3bf6ac18e1f1184f63d4a87e75302eb85883b - Sigstore transparency entry: 2468768457
- Sigstore integration time:
-
Permalink:
OHF-Voice/wyoming-faster-whisper@3f54e56f91d7b36718ce0e23af4c4aaeaaae5f08 -
Branch / Tag:
refs/tags/v3.6.0 - Owner: https://github.com/OHF-Voice
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@3f54e56f91d7b36718ce0e23af4c4aaeaaae5f08 -
Trigger Event:
push
-
Statement type:
File details
Details for the file wyoming_faster_whisper-3.6.0-py3-none-any.whl.
File metadata
- Download URL: wyoming_faster_whisper-3.6.0-py3-none-any.whl
- Upload date:
- Size: 43.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8f6daefcdb366ae460fc6c389b04b467689f6c55959bd528a32566cfdb2103a2
|
|
| MD5 |
5c04eae35200873a6711224db925dc54
|
|
| BLAKE2b-256 |
852f81d4f90aea4f3d81237e8ef1bbda169201fc9afd26e7319c53fd74340a79
|
Provenance
The following attestation bundles were made for wyoming_faster_whisper-3.6.0-py3-none-any.whl:
Publisher:
publish.yml on OHF-Voice/wyoming-faster-whisper
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
wyoming_faster_whisper-3.6.0-py3-none-any.whl -
Subject digest:
8f6daefcdb366ae460fc6c389b04b467689f6c55959bd528a32566cfdb2103a2 - Sigstore transparency entry: 2468768474
- Sigstore integration time:
-
Permalink:
OHF-Voice/wyoming-faster-whisper@3f54e56f91d7b36718ce0e23af4c4aaeaaae5f08 -
Branch / Tag:
refs/tags/v3.6.0 - Owner: https://github.com/OHF-Voice
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@3f54e56f91d7b36718ce0e23af4c4aaeaaae5f08 -
Trigger Event:
push
-
Statement type: