RealtimeSTT lets you choose the transcription and wake-word dependencies you want to install.
Recommended default local Whisper install:
pip install "realtimestt[recommended]"
Main ASR backend only, without the faster packaged Silero ONNX Runtime VAD:
pip install "realtimestt[faster-whisper]"
Base recorder/audio runtime, without a transcription engine or wake-word backend:
pip install realtimestt
The base install still includes microphone/audio support, WebRTC VAD, recorder
VAD logic, websocket client/server dependencies, and shared audio utilities. It
does not install faster-whisper, Porcupine, OpenWakeWord, or another optional
ASR/wake-word backend unless you request the matching extra.
Install multiple extras by separating them with commas:
pip install "realtimestt[faster-whisper,porcupine]"
pip install "realtimestt[whisper-cpp,openwakeword]"
Available extras include:
- faster-whisper: default CTranslate2 Whisper backend
- whisper-cpp: whisper.cpp backend through pywhispercpp
- transcribe-cpp: first-party transcribe.cpp Python binding; add the matching CUDA provider separately
- openai-whisper: original OpenAI Whisper Python backend
- sherpa-onnx: sherpa-onnx CPU backends
- server/production-server: versioned FastAPI HTTP and WebSocket ASR server
- silero-vad: packaged Silero model assets and PyTorch wrapper
- silero-onnx/silero-onnx-cpu: fastest Silero VAD CPU ONNX Runtime backend
- silero-onnx-gpu: installs Silero's ONNX GPU runtime extra for experiments
- parakeet: NVIDIA NeMo Parakeet backend
- omnilingual/omnilingual-asr: Meta Omnilingual ASR backend for Linux/WSL2 with Python 3.11.x only; uses omnilingual-asr>=0.2.0 with matching torch/torchaudio builds
- transformers: shared Transformers dependency for Moonshine, Granite, and Cohere
- moonshine, granite, cohere: aliases for the Transformers dependency set
- qwen: Qwen ASR backend
- qwen-vllm: Qwen ASR with vLLM extras
- funasr: experimental FunASR/SenseVoice backend
- kroko-builder: helper command for building/installing Kroko-ONNX plus Hugging Face model downloads
- porcupine: Porcupine wake-word backend
- openwakeword: OpenWakeWord wake-word backend
- wakewords: both wake-word backends
- recommended/default: faster-whisper backend plus fast Silero CPU ONNX VAD
- all: all PyPI-installable optional backends
Install the pinned Nemotron live and Parakeet final model bundles into a persistent verified cache:
stt-install-sherpa-models --root ./models/sherpa-onnx --model all
WebRTC VAD is installed with the core package. AudioToTextRecorder also initializes a Silero VAD path. Install the recommended/default or silero-onnx-cpu extra for a self-contained local Silero ONNX Runtime backend.
Meta Omnilingual ASR install note: use Linux or WSL2 with Python 3.11.x. Native Windows cannot run the Omnilingual runtime because fairseq2n has no Windows wheel, and Python 3.12.x currently cannot resolve omnilingual-asr>=0.2.0 from PyPI because the upstream package metadata excludes normal 3.12 patch releases.
For live Kroko-ONNX usage, install the builder helper and then build Kroko in the same Python environment:
pip install "realtimestt[kroko-builder,silero-onnx-cpu]"
stt-install-kroko --build
The silero-onnx-cpu extra is not needed to build Kroko-ONNX itself, but recorder-based Kroko smoke tests and live AudioToTextRecorder use need a local VAD backend.
On Windows, use Python 3.12 x64 and start Docker Desktop before running the builder. Check that Docker's Linux engine is available with:
python --version
git --version
docker version
docker version must show a Server section. docker --version only checks
that the Docker CLI is installed.
If the default builder cache is not writable, use a project-local work directory:
stt-install-kroko --build --work-dir .\kroko-builder-work
The kroko-builder extra includes huggingface_hub. Download a public Community model after the builder finishes:
mkdir test-model-cache\kroko-onnx
python -c "from huggingface_hub import hf_hub_download; hf_hub_download(repo_id='Banafo/Kroko-ASR', filename='Kroko-EN-Community-64-L-Streaming-001.data', local_dir='test-model-cache/kroko-onnx')"
RealtimeSTT
License: RealtimeSTT's own code is Apache-2.0. Engines, models, VADs and wake-word backends keep their own licenses, which you must check yourself: license notes.
RealtimeSTT is a Python speech-to-text library for applications that need voice activity detection, fast transcription, optional realtime text updates, wake words, and direct access to audio streams. It is designed for assistants, dictation tools, browser streaming servers, and prototypes that need to turn speech into text with only a few lines of code.
The general-purpose default path uses faster_whisper. Other engines are
available through install extras when their optional dependencies and models
are present.
New in 1.2.0: fast pause transcripts for voice assistants
A voice assistant has to decide, every time the user pauses, whether the turn is over and what was said. The sooner it has a reliable transcript of the words so far, the sooner it can judge the turn, start the language model, and answer. RealtimeSTT 1.2.0 makes that transcript (the Preview) much faster on the production server:
- Live-flush Preview (
--preview-live-flush, newnemotron_ortengine). At a pause the streaming model decodes the audio it has not yet finalized on a copy of its state, so the live stream continues undisturbed. The Preview arrives in tens of milliseconds instead of waiting for a full re-decode. The accurate full-model text follows as a separatepreviewRecordevent, and an optional second flush stage (previewRefined) adds a slightly longer read. - Tail-anchored Preview (
--preview-input-mode tail). Instead of re-decoding the whole turn at every pause, the final model decodes only the newest audio and joins it to the text already recognized. The cost no longer grows with the length of the turn. If the join cannot be proven, the server decodes the full turn. - Orukeet final model (
stt-install-sherpa-models --model orukeet): an optional, hash-verified Parakeet TDT derivative for 25 European languages.
Measured once on the Linux x86-64 production host, on a 12-second English utterance: live-flush Preview 48 ms, tail-mode Preview 149 ms, and a full-turn Preview about 710 ms, from request to event.
These fast paths are CPU only. nemotron_ort runs on ONNX Runtime's CPU
provider, and the tested profile is the CPU Nemotron/Orukeet pair on Linux
x86-64. On GPU, faster_whisper remains the recommended general-purpose path
and does not offer live flush.
A voice-assistant server with all three enabled:
python -m pip install "RealtimeSTT[server,sherpa-onnx,nemotron-ort]"
stt-install-sherpa-models --root ./models/sherpa-onnx --model nemotron
stt-install-sherpa-models --root ./models/sherpa-onnx --model orukeet
stt-server-production \
--engine sherpa_onnx_parakeet --model oruk/orukeet \
--realtime-engine nemotron_ort \
--realtime-model ./models/sherpa-onnx/sherpa-onnx-nemotron-3.5-asr-streaming-0.6b-560ms-int8-2026-06-11 \
--download-root ./models/sherpa-onnx --device cpu \
--preview-only-transcription \
--preview-input-mode tail --preview-live-flush
The client sends {"type":"preview","previewRequestId":"pause-1","pauseTextSource":"live_flush"}
when it detects a pause. Protocol details, fallbacks and events are in the
production server guide.
The nemotron-ort extra pins onnxruntime==1.23.2; do not combine it with the
parakeet-onnx extra in one environment. Full change list:
release notes.
Recommended Engine Profiles
- CUDA / GPU: Keep using the established
faster_whisperCUDA setup. It remains the recommended general-purpose GPU path. - CPU: For production streaming on Linux x86-64, the strongly recommended
profile is
sherpa-onnx-nemotron-3.5-asr-streaming-0.6b-560ms-int8for fast, replaceable realtime text together withsherpa-onnx-nemo-parakeet-tdt-0.6b-v3-int8for the single authoritative final transcript. Nemotron processes only new audio frames during the turn; Parakeet then refines the complete turn once at finalization. This pairing provides substantially better CPU streaming behavior than repeatedly retranscribing a growing audio buffer while preserving a high-quality final.
Install the CPU server stack and both pinned model bundles with:
python -m pip install "RealtimeSTT[server,sherpa-onnx]"
stt-install-sherpa-models --root ./models/sherpa-onnx --model all
See the production server guide for the authenticated HTTP/WebSocket deployment recipe and exact pinned model directories.
Orukeet CPU performance: official runtime tuning
Official sherpa-ONNX 1.13.8 supports disabling CPU worker spinning through a provider configuration file. On the tested Ubuntu 24.04 x86-64 / Python 3.12 host, seven threads with spinning disabled beat our earlier custom build: 107.2 versus 113.3 ms for five-second audio over 20 alternating-order rounds. The same Orukeet INT8 model and CPU affinity were used; transcripts matched.
This configuration uses official PyPI wheels and requires no custom native build. Install and enable it explicitly; the standard extra and model installer do not automatically select a CPU performance profile. Seven threads is a measured setting for one host. See the installation, configuration and benchmark details.
Support RealtimeSTT
If RealtimeSTT saved you time, one GitHub star is a simple way to help make it more stable.
Stars improve visibility and visibility brings more users, more real-world testing, more bug reports, more fixes, and better releases for everyone.
Demo
https://github.com/user-attachments/assets/797e6552-27cd-41b1-a7f3-e5cbc72094f5
CLI demo code (reproduces the video above)
Featured Integration: Kroko/Banafo ASR
RealtimeSTT includes native support for kroko_onnx, the local streaming ASR
engine from the Kroko/Banafo team.
This integration has been on my wishlist for a long time. Kroko is a strong fit for RealtimeSTT's goals: fast, accurate local speech recognition.
Start with the public Community models for local testing, or see Kroko/Banafo's commercial model options if you need production licensing and higher-end models.
pip install "RealtimeSTT[kroko-builder,silero-onnx-cpu]"
stt-install-kroko --build
The silero-onnx-cpu extra gives AudioToTextRecorder a local VAD backend for
recorder-based smoke tests and live microphone use.
See the Kroko-ONNX engine guide, Kroko ASR docs, and kroko-onnx on GitHub.
Install
The current CI matrix covers Python 3.11 and 3.12. Python 3.13 and newer are not release targets until dependency and CI gates are available.
pip install "RealtimeSTT[faster-whisper]"
On Linux, install PortAudio headers before installing the package:
sudo apt-get update
sudo apt-get install python3-dev portaudio19-dev
On macOS:
brew install portaudio
For CUDA, platform notes, and optional engine stacks, see docs/installation.md.
Microphone Example
This waits for speech, stops after the detected utterance, and prints the final transcript:
from RealtimeSTT import AudioToTextRecorder
if __name__ == "__main__":
with AudioToTextRecorder() as recorder:
print("Speak now")
print(recorder.text())
Use the if __name__ == "__main__": guard when running scripts, especially on
Windows, because RealtimeSTT uses multiprocessing for model work.
Automatic Recording Loop
For continuous dictation, pass a callback to text() so transcription work can
complete asynchronously while your loop keeps listening:
from RealtimeSTT import AudioToTextRecorder
def process_text(text):
print(text)
if __name__ == "__main__":
recorder = AudioToTextRecorder()
while True:
recorder.text(process_text)
External Audio
Set use_microphone=False when audio comes from a file, stream, websocket, or
another process. Feed 16-bit mono PCM chunks at 16 kHz, or pass the original
sample rate so RealtimeSTT can resample:
from RealtimeSTT import AudioToTextRecorder
if __name__ == "__main__":
recorder = AudioToTextRecorder(use_microphone=False)
with open("audio_chunk.pcm", "rb") as audio_file:
recorder.feed_audio(audio_file.read(), original_sample_rate=16000)
print(recorder.text())
recorder.shutdown()
More examples are in docs/quick-start.md and docs/external-audio.md.
Configuration Reference
Every AudioToTextRecorder constructor parameter is documented in
docs/configuration.md, including model/engine
selection, realtime transcription, VAD timing, wake words, callbacks, external
audio, logging, and executor injection.
Features
- Voice activity detection with WebRTC VAD and Silero VAD.
- Final and realtime transcription with selectable engines.
- Optional wake word activation through Porcupine or OpenWakeWord.
- Direct microphone input or application-fed audio chunks.
- Event callbacks for recording, VAD, realtime text, transcription, and wake word state.
- A packaged production FastAPI server with versioned HTTP/WebSocket contracts, session isolation, bounded shared inference resources, authentication, and readiness/capabilities endpoints.
- A browser streaming reference app for source checkouts.
Documentation
- Quick start: shortest demos and common recording patterns.
- Installation: platform setup, CUDA notes, and optional dependencies.
- Configuration: complete
AudioToTextRecorderparameter reference. - Transcription engines: engine selection and setup links.
- Custom transcription engines: public base class, executor integration, streaming sessions, and contribution guide.
- Wake words: Porcupine and OpenWakeWord setup.
- External audio: feeding audio without a microphone.
- Testing: maintained unit and opt-in golden test workflow.
- Test scripts: demos, manual tests, regressions, and
legacy experiments under
tests/. - FastAPI server: browser server configuration, protocol, metrics, and deployment notes.
- Production server: packaged remote HTTP/WebSocket API, authentication, limits, and deployment recipe.
- Troubleshooting: common install, audio, CUDA, model, dependency, and runtime errors.
- Engine licenses: license notes for optional engine runtimes and model families.
Engine-specific references:
- faster-whisper
- whisper.cpp
- OpenAI Whisper
- Moonshine
- sherpa-onnx
- Kroko-ONNX
- Parakeet NeMo
- Meta Omnilingual ASR
- Granite/Qwen Transformers engines
- Cohere Transcribe
- FunASR
Production Server
The supported remote server is packaged as an optional install. It binds to loopback by default and exposes versioned health, readiness, capabilities, raw-PCM final transcription, and ordered streaming WebSocket endpoints. Direct non-loopback binds require both a bearer token and Uvicorn TLS certificate/key files; for a reverse-proxy deployment, keep the server on loopback and terminate TLS at the proxy.
python -m pip install "RealtimeSTT[server,faster-whisper]"
stt-server-production --host 127.0.0.1 --port 8010
For CPU INT8 deployment, the recommended pairing is
sherpa-onnx-nemotron-3.5-asr-streaming-0.6b-560ms-int8 for live hypotheses
and sherpa-onnx-nemo-parakeet-tdt-0.6b-v3-int8 for authoritative final
transcription. Install RealtimeSTT[server,sherpa-onnx] and both pinned model
bundles into persistent storage before following the server recipe. The
server extra includes the local Silero ONNX VAD runtime used by legacy
recorder-backed server paths. The versioned production WebSocket path owns its
turn state and does not derive finalization from recorder VAD, so production
startup does not need an interactive Torch Hub download:
stt-install-sherpa-models --root ./models/sherpa-onnx --model all
See PRODUCTION_SERVER.md.
The interactive browser reference app remains in example_fastapi_server for
source checkouts. See docs/fastapi-server.md for its
UI, engine recipes, protocol details, and metrics.
Contributing
Focused tests and small changes are easiest to review. The project keeps fast unit tests separate from opt-in real-model tests; see docs/testing.md.
License
RealtimeSTT's own source code is licensed under the Apache License 2.0; see also NOTICE. Releases up to and including 1.1.2 were published under the MIT License.
This license covers the RealtimeSTT code only. It does not relicense, and does not release you from checking and complying with, the licenses and terms of the transcription engines, VAD and wake-word engines, model weights or hosted services you use through this library. Some of them require attribution, share-alike, a commercial license or a provider agreement. Start with the license notes and verify the upstream terms for the exact package, model and revision you ship.
Author
Kolja Beigel
Metadata
Release files for realtimestt 1.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| realtimestt-1.2.0.tar.gz | 382.4 kB | Without provenance | Details for realtimestt-1.2.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| realtimestt-1.2.0-py3-none-any.whl | Python 3 | none | any | Details for realtimestt-1.2.0-py3-none-any.whl |
Total release size: 772.3 kB
Release files / realtimestt-1.2.0.tar.gz
| Download URL | realtimestt-1.2.0.tar.gz |
|---|---|
| Size | 382.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
665699a9c6fe83ace515020fb33b9bcaf6cf295b3a7fa761245a511fe847df81
|
|
BLAKE2b-256 checksum How to use checksums |
8ecc1e7c1b6b7eaa803074dc5cb0452022c7df4042c5ee121dc477ae29764690
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.0
|
Release files / realtimestt-1.2.0-py3-none-any.whl
| Download URL | realtimestt-1.2.0-py3-none-any.whl |
|---|---|
| Size | 389.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d1032185b6a6abe42a6b8cc69214c7c70dbad64cf6f1b54b654b8aa94f4ad765
|
|
BLAKE2b-256 checksum How to use checksums |
04a6c37beb8d35f2831737c56cfbe79173a311258fe7097eb954c7de697fbe0f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.0
|
Security for realtimestt 1.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.