Ultra efficient push-to-talk dictation for Windows that runs entirely on the Intel NPU.
I built EZSTT to replace the bloated default Windows Copilot. The dedicated Copilot key on my laptop keyboard was wired to an assistant I never used, so EZSTT take over that key over and turns it into a push-to-talk dictation button instead.
The other reason is efficiency. Dictation runs entirely on the Intel NPU, so it never hogs the GPU or CPU. It's also easy on the battery and super fast.
- Check the driver: Device Manager → Neural processors should list an Intel NPU. If missing, install the Intel NPU driver and reboot. If you device does not have an NPU, you can still run in CPU mode but it is not recommended.
- Download, run
EZSTT_<version>_x64-setup.exe, and following the intallation procedures. - First run opens Settings → Models. Here you can chose a speech-to-text model to download. Parakeet TDT 0.6B is recommended; see Models below for the full list. After the download, the model is optimized for your NPU once (about a minute for Parakeet, ~15 min for the large Whisper models, ~20 s for Base); later startups load from cache in ~2 s.
- Chose a Hokey in Settings → Models, note that the Copilot key is supported for those looking to replace Windows 11 Copilot with EZSST.
- Hold [Hotkey] → speak → release. The text is pasted from your cursor.
Everything user-owned lives in %APPDATA%\EZSTT (config.json, models, cache, logs) and survives uninstall; delete that folder to reclaim the space.
EZSTT lives in the system tray and dictates into whatever window has focus.
- Dictate (push-to-talk): hold your hotkey (Right Ctrl by default), speak, and release. The transcribed text is inserted at the cursor of the focused app. Transcription runs on your NPU and is typically ready within a fraction of a second of releasing the key.
- Toggle mode: for longer dictation, switch Settings → General → Mode to Toggle.
- Tray icon: the colored star shows status (ready, listening, transcribing, loading, error). Left-click it to open Settings; right-click for Settings… and Quit EZSTT.
- Status overlay: a small on-screen pill appears while listening and transcribing so you get feedback without watching the tray. Hide it or change its opacity under Settings → General.
Very short taps and clips with no speech are ignored on purpose (so a stray key-press or silence never doesn't paste hallucinate model text); the tuning thresholds are in Configuration.
Download, switch between, and delete models. Choose NPU or CPU under Settings → Models. Every model runs fully on-device.
| Model | Size | Notes |
|---|---|---|
| Parakeet TDT 0.6B ★ | ~1.2 GB | Best for English — top accuracy and the fastest dictation; never hallucinates on silence. English only. |
| Distil-Whisper Large v3 | ~780 MB | Whisper Large v3 accuracy at ~2× the speed. English only. |
| Whisper Large v3 Turbo | ~830 MB | Multilingual — best accuracy for non-English. |
| Whisper Small (English) | ~260 MB | Fast and light, tuned for English. |
| Whisper Base | ~85 MB | Small and fast — a quick start; accuracy is basic. |
Each model is optimized for your NPU once after download (about a minute for Parakeet, ~15 min for the large Whisper models, ~20 s for Base); later startups load from the compiled cache in ~2 s.
| tool | install | notes |
|---|---|---|
| Python 3.12 | winget install Python.Python.3.12 |
must be reachable as py -3.12 |
| Node 18+ | winget install OpenJS.NodeJS.LTS |
provides npm |
| Rust (stable, MSVC) | winget install Rustlang.Rustup |
then rustup default stable-msvc |
| MSVC Build Tools | winget install Microsoft.VisualStudio.2022.BuildTools |
select Desktop development with C++ |
| WebView2 runtime | preinstalled on Windows 11 | evergreen installer otherwise |
git clone <repo-url> EZSTT
cd EZSTT
# Python engine venv + runtime deps
py -3.12 -m venv engine\.venv
engine\.venv\Scripts\pip install -r engine\requirements.txt
# frontend + Tauri deps
npm install.\scripts\dev.ps1 # engine only, prints status to the console
npm run tauri dev # full app (debug builds spawn engine\.venv directly).\scripts\build.ps1build.ps1 runs the full pipeline: PyInstaller bundles the engine
(engine\dist\ezstt-engine\, using engine\requirements-build.txt, installed
automatically if missing) → a CPU smoke test → stages it into
src-tauri\binaries\engine\ → npm run tauri build → NSIS installer at:
src-tauri\target\release\bundle\nsis\EZSTT_<version>_x64-setup.exe
| script | proves |
|---|---|
test_protocol.py |
protocol conversation: validation, persistence, model swap, shutdown |
test_e2e.py [--serve] |
hook → NPU → injection into a scratch window |
test_focus.py |
foreground never changes while the overlay lives (the fatal failure mode) |
test_hotkey_swap.py |
live hotkey swap incl. copilot-chord F23 suppression |
test_model_download.py [--model id] |
first-run download → NPU verify → READY (network + NPU) |
test_parakeet_decode.py |
Parakeet greedy TDT decode loop (pure Python, no hardware) |
test_restart.py |
supervisor respawns a killed engine |
test_installed.py |
NSIS silent install → first-run → orphan check → uninstall |
- No GPU support (NPU and CPU only).
- Windows only.
- Handy (handy.computer) — a free, open-source, offline dictation app. EZSTT's settings UI is inspired by Handy's.
- Built on Tauri, with on-device inference by OpenVINO GenAI on the Intel NPU.
- Speech models: Whisper (OpenAI) and Parakeet (NVIDIA).
MIT License - see LICENSE file for details.
EZSTT (EZ Speech-to-text) is open-source software, but the name, logo, icon, and brand assets are not open-source. Unofficial forks, rewrites, and redistributions must use their own branding and must not imply endorsement or affiliation.
The remixed app icon ("Microphone with Sparkle") is from MingCute Icons (Apache-2.0) via Freepixel, and is licensed separately.
