Free offline push-to-talk speech-to-text: dictation and meeting notes for macOS and Windows. Open-source Wispr Flow and Superwhisper alternative.
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗Free, private, offline speech-to-text for macOS and Windows. Hold a shortcut, talk, let go: your words are typed into any app. Take meeting notes too: Zoom, Meet, Teams and Slack calls become a transcript with speaker names and a summary. A small Whisper model runs on your own laptop. No cloud, no account, no subscription. Free forever. A free, local, open-source alternative to Wispr Flow and Superwhisper.
uvx local-stt
Hands-free: press Fn + Shift + Space (Windows: Ctrl + Alt + Space) to start listening, and press it again to stop. Already holding push-to-talk? Add Space to switch to hands-free without stopping. Esc cancels either way. A single recording stops and pastes after 5 minutes.
Every dictation is kept in a local history you can search and copy from. Click Select to tick the ones you no longer need (one, a whole day, or all of them) and delete them, or switch history off.
Under the hood: a Rust app built with Tauri. A keyboard hook spots your shortcut, the microphone is recorded in memory, Whisper (whisper.cpp) turns it into text on your computer, simple rules tidy it, and the app pastes it. The full tour, written for newcomers, is in docs/architecture.md.
| macOS | Windows | |
|---|---|---|
| Computer | Apple Silicon (M1 or later), macOS 11 or later | 64-bit PC, Windows 10 or 11 |
| Memory | 4 GB for Whisper Small (more for larger models) | 4 GB for Whisper Small (more for larger models) |
| Disk | About 200 MB for the app and Whisper Small | About 200 MB for the app and Whisper Small |
| Graphics | Built-in GPU, always used | Any GPU with a Vulkan driver (Intel, AMD, NVIDIA) is used when present; otherwise the CPU |
| Internet | Once, to download the speech model | Once, to download the speech model |
| Installer | uv | uv |
[!IMPORTANT] uv is the only thing you install yourself. You do not need Python: if your computer has none, uv downloads its own copy the first time. Everything else, the speech model and the microphone and Accessibility permissions, is set up inside the app on first run.
Open Terminal and run:
brew install uv # once; without Homebrew, see the uv link above
uvx local-stt # installs local-stt in Applications and opens it
Open PowerShell and run:
winget install --id=astral-sh.uv -e # once
# close PowerShell and open a new one, so the uv command is found
uvx local-stt # installs local-stt in the Start menu and opens it
If it does not start on Windows:
winget install Microsoft.VCRedist.2015+.x64, then run uvx local-stt again.HTTPS_PROXY before running uvx. If your company inspects HTTPS traffic, also set UV_SYSTEM_CERTS=true so uv trusts the company certificate.[!WARNING] Linux is not supported yet. The shortcut and the paste need code for each desktop system, and that code exists only for macOS and Windows today.
uvx local-stt install # install without opening
local-stt --autostart on # start it when you log in
uvx local-stt demo # a 30-second tour with sample data; nothing is recorded or pasted
local-stt --help # every command
Started from a terminal, local-stt runs as its own app, not as part of the terminal: you can close the terminal, and macOS asks for permissions in local-stt's name. On first start it downloads the default speech model (181 MB, checked against a pinned SHA-256 checksum) and puts a microphone icon in your menu bar or system tray. Settings > General > Install does the same as install, and turning on Start at login installs it first if needed.
A short setup opens the first time, about a minute:
Every step can be skipped, and Settings > General > Run Setup Again brings it back.
macOS asks for two permissions, in local-stt's name. Both are needed and both stay on your Mac:
If the emoji picker opens when you press Fn, set System Settings > Keyboard > Press fn key to "Do Nothing".
Open the Notes tab (or New Note in the menu bar or tray) when a call starts. local-stt records your microphone as Me and what your computer plays as Others, and turns both into a transcript on your computer while the call runs. Click Stop and the note is tidied: "uh" and "um" go, spacing is fixed, spoken lists are numbered, and back-to-back lines from one side are joined.
voice.json, readable only by you. Notes use it to tell you from a person sitting in the room, who then gets a Speaker label instead of Me. It is numbers, never audio, and other people's voices are never stored. Turn it off and the file is deleted.Consent. Recording other people is regulated: several US states and many countries need everyone's consent. local-stt shows a reminder the first time and gives you a line to paste in the meeting chat. This is not legal advice.
The Insights tab shows how dictation is going, kindly and privately:
Insights keep totals only (counts per day, the 200 words you use most), never sentences. They stay on your computer, keep counting when history is off, and Reset Insights deletes them.
Open the app from the menu bar or tray icon.
| Setting | What it does | Default |
|---|---|---|
| Push to talk | Hold to talk, release to paste. Any combo with at least one modifier | Fn + Shift (Mac), Ctrl + Alt (Windows) |
| Hands-free | Press once to start listening, again to stop; can be turned off | Fn + Shift + Space (Mac), Ctrl + Alt + Space (Windows) |
| Output language | English (translate) or keep the language you spoke; see Languages | English |
| Spoken language | Auto-detect or a fixed language | Auto-detect |
| Paste | Paste into the focused app, or only copy to the clipboard | Paste |
| Smart formatting | Numbered lists from spoken markers, mixed freely ("first point ... point two ... number three"); removes "uh", "um" and "er"; fixes spacing. English output only | On |
| Restore clipboard | Put your previous clipboard back after pasting | Off |
| Microphone | System default or a specific input | System default |
| Recording style | Pill, Waveform or Minimal | Pill |
| Live transcription | Shows your words above the pill while you speak (the pasted text is the final, more accurate pass) | On |
| Sounds | Short start and stop sounds | On |
| History | Keep a local history of dictations | On |
| Start at login | Launch quietly when you log in | Off |
| Check for updates | Looks for a new version once a day; an update shows as a menu item and a banner, never a pop-up | On |
| Troubleshooting log | Keeps app events (starts, errors, timings) on this computer, never your words, audio or keys | On |
The recording pill shows on the screen you are typing on. Drag it anywhere: it snaps to corners and edges and keeps that spot, in proportion, on every screen.
local-stt checks your computer (memory, processor, graphics, free disk) and only offers models that will run well on it. The best fit is marked Recommended; models that will not run well are greyed out with the reason.
| Model | Download | Good for | Needs |
|---|---|---|---|
| Whisper Small (default) | 181 MB | Everyday dictation on any modern laptop | 4 GB RAM |
| Whisper Medium | 514 MB | Better accuracy, accents, noisy rooms | 8 GB RAM, Apple Silicon or 8+ CPU threads |
| Whisper Large v3 | 1.0 GB | Best accuracy | 16 GB RAM and Apple Silicon |
Run local-stt doctor to see your hardware and which models fit, right in the terminal.
Each model shows its SHA-256 checksum and a View on Hugging Face button that opens the file's page there, which lists the same checksum, so you can see exactly what the app downloads. Delete removes a downloaded model you no longer use and frees its disk space; the model in use stays until you switch to another.
The files come from the Hugging Face repository of whisper.cpp's author. A CI check rebuilds each one from OpenAI's own Whisper checkpoint and requires the same SHA-256, so they are OpenAI's models converted for whisper.cpp; only a version number in the file header may differ. You cannot add a model by URL: the app's C++ code reads the model file, and a crafted file could attack it.
Speak in any of 99 languages and get English text, ready to paste into Claude, ChatGPT or any other AI assistant. Or keep the language you spoke.
| Output language | You speak | You get |
|---|---|---|
| English (default) | Any of the 99 languages | English, translated on your computer |
| Spoken language | Any of the 99 languages | The same language, every word as spoken |
[!NOTE] Translating to English can shorten what you said. English output uses Whisper's built-in translation, which writes its own English version rather than every word, and can leave parts out, most of all in long dictations and with Whisper Small.
- For every word, set Output language to Spoken language.
- For better translations, pick Whisper Medium or Large v3 on the Model tab.
- If a long translated dictation comes back short, try shorter pieces.
See SECURITY.md to report a vulnerability privately.
Is it really free? Yes. MIT licensed, no paid features, no limits, no account.
Does it work without internet? Yes, after the first model download.
Which languages can I speak? Any language Whisper supports, including English and Hindi. Text comes out in English by default; switch "Output language" to keep the spoken language.
Does smart formatting use an AI model? No. Whisper writes the words and the punctuation. Smart formatting is a set of rules in the app that runs on that text: it removes fillers, fixes spacing and turns spoken list markers into a numbered list. Nothing is sent anywhere, and the same words always format the same way. Small local AI models we tested (350M to 3B parameters) dropped or changed words, so the app keeps rules.
Does it work on Windows? Yes, Windows 10 and 11 on x64. The default shortcut is Ctrl + Alt.
How is this different from built-in dictation? It runs a model you choose, entirely on your device, translates to English if you want, keeps a searchable history, and works the same way on Mac and Windows.
Something not working? Open Settings > Troubleshooting and click Export Report, or run local-stt diagnostics (it works even when the app will not start). You get one text file, opened in Finder or Explorer, and its full path is shown (Settings shows a Show in Finder or Show in Explorer button to open it again). Reports are saved in ~/Library/Application Support/local-stt/diagnostics on a Mac and %LOCALAPPDATA%\local-stt\diagnostics on Windows. Each report holds:
Your home folder shows as ~ and your user name as <user>. Nothing is sent anywhere: read the file, then attach it to an issue or send it to whoever is helping you. Plain text also works well pasted into an AI assistant.
The shortcut does nothing on macOS, though local-stt is switched on. macOS can keep the switch of an older copy. In System Settings > Privacy & Security > Accessibility (Device Control and Data Access on newer macOS), select local-stt, click the minus button and add it again, or use Reinstall below. Settings > General shows Allowed once it works.
Pressing Fn switches your keyboard language instead of recording. With two or more keyboard layouts, macOS makes the Fn (🌐) key change the input source, which swallows an Fn shortcut. In System Settings > Keyboard, set Press 🌐 key to to Do Nothing. local-stt notices this, during setup or any time later, and shows a banner with a button to Keyboard settings.
A shortcut you picked does nothing. The system may use it too: on macOS, Cmd + Space opens Spotlight and Ctrl + Space switches input source; on Windows, Win + Space and Ctrl + Shift switch keyboard layout. local-stt warns under the shortcut field and in a banner when your shortcut matches one of these, including shortcuts you set in System Settings > Keyboard > Keyboard Shortcuts on a Mac. Pick another shortcut, or turn the system one off. Shortcuts that other apps grab cannot be seen; if one still does nothing, try a different combination.
Reinstall. Settings > Troubleshooting > Reinstall (or local-stt reinstall) quits local-stt, installs it again (the newest version when one is out) and opens it. On macOS it also resets local-stt's permissions and opens setup, so you can allow them again; your name, history and insights stay. An update that macOS sees as a new app does the same on its own. Tick the box, or add --clean, to also delete your settings, history, notes, insights, voice fingerprint and logs; downloaded models stay.
local-stt checks for a new version once a day (Settings > General > Check automatically). When one is out you see an "Update to ..." item in the menu bar or tray and a banner in the app with Install and Restart, Release Notes, Later and Skip This Version. From a terminal: local-stt check-update. When the new version starts, its window opens with a short burst of confetti and "Updated to local-stt ..." (no confetti when Reduce Motion is on).
On macOS, releases are signed with local-stt's own certificate, so an update from 0.3.0 or later keeps Microphone and Accessibility allowed, with no setup. Skip 0.4.0: its macOS build was not signed, so installing it asks for permissions again; 0.4.1 replaced it. Updating from a version before 0.3.0, or from 0.4.0, asks once more and opens setup; your history and insights stay.
local-stt uninstall # removes the app, the terminal command and the login item
Your settings, history and models live in ~/Library/Application Support/local-stt (macOS) or %LOCALAPPDATA%\local-stt (Windows, C:\Users\<you>\AppData\Local\local-stt). Delete that folder to remove everything.
On Windows, older versions kept the folder in %APPDATA%\local-stt (Roaming). A newer version moves it to the Local folder on a start when no other copy is running, so models and notes stay off the file server that roaming profiles and FSLogix sync. Until it can move, it keeps using the Roaming folder.
Bug reports, ideas and pull requests are welcome. See CONTRIBUTING.md.
local-stt diagnostics in a terminal. Read it; it never holds audio or dictated text.MIT. Whisper models are released by OpenAI under the MIT license; whisper.cpp is MIT licensed by ggml-org. Telling voices apart uses sherpa-onnx (Apache-2.0, k2-fsa) with ONNX Runtime (MIT, Microsoft) and the CAM++ voice model from 3D-Speaker (Apache-2.0, ModelScope). Echo cancellation uses sonora (BSD-3-Clause), a Rust port of WebRTC's AEC3. Summaries use llama.cpp (MIT, ggml-org) with Granite 4.0 Micro (Apache-2.0, IBM) or Gemma 4 E4B (Apache-2.0, Google).
Full third-party licence notices (Rust crates, bundled native code, downloadable models) are in THIRD_PARTY_NOTICES.md.
Wispr Flow, Superwhisper and other product names mentioned here are trademarks of their owners. local-stt is an independent open-source project and is not affiliated with, endorsed by or sponsored by them; the names are used only to say what local-stt can be used instead of.
Keywords: free speech to text, offline dictation, local Whisper, private voice typing, voice to text for Mac, voice to text for Windows, push to talk dictation, Hindi to English speech translation, open source Wispr Flow alternative, open source Superwhisper alternative, no cloud transcription.