Simple voice transcription for android phones with Whisper and local models
See the code
Free, open-source, on-device push-to-talk dictation for Android — a free alternative to Wispr Flow.
Speak naturally into any app and OpenWispr turns your raw speech into clear, polished text: filler words removed, punctuation and formatting fixed automatically, then inserted straight into whatever field you're already typing in. Tap the floating button, speak, tap again — done.
It's completely free to run. Cloud transcription and cleanup use your own Groq API key, and Groq's free tier is generous enough for everyday dictation without paying anything. Prefer to keep everything on-device? Local transcription needs no API key or internet connection at all.
This is a fork of kafkasl/phone-whisper, originally built around OpenAI. This fork switches cloud transcription and cleanup to Groq and adds a round of reliability and UX work on top — see below for the full list. If you find the original project useful, consider sponsoring the original author.
It supports:
whisper-1 (OpenAI) → whisper-large-v3 (Groq), via https://api.groq.com/openai/v1/audio/transcriptionsgpt-4o-mini (OpenAI) → openai/gpt-oss-120b (Groq), via https://api.groq.com/openai/v1/chat/completionsgsk_...) instead of an OpenAI key (sk-...), with a direct link to get onemain and publishes it to a version-tagged GitHub ReleaseLocal on-device transcription is untouched — it never called OpenAI in the first place.
Grab the latest debug APK from the Releases page on this fork. A GitHub Actions workflow builds and publishes a new version-tagged release automatically on every push to main.
Open it on your phone, install it, then launch the app once to finish setup.
Requires JDK 17 and Android SDK.
git clone https://github.com/EdiBianco/OpenWhispr.git && cd OpenWhispr
make build
APK output:
app/build/outputs/apk/debug/app-debug.apk
If you use ADB:
make adb-install
Say "Whisper Command" at the start of a recording, followed by one of five whitelisted operations, and OpenWispr applies it to whatever's already in the focused field (or to text you dictate right after the command, if you give it fresh content):
"Whisper Command, summarize this in two sentences" -- summarize, with an optional length or limit"Whisper Command, enhance the flow" -- rewrite for smoother, more natural flow without changing meaning"Whisper Command, translate to Italian" -- translate to the named language"Whisper Command, make this more formal" -- change tone (formal, casual, professional, friendly, ...)"Whisper Command, turn this into a list" -- reformat as a bulleted or numbered listYou can chain more than one in the same command, and they're applied in the order you say them -- e.g. "Whisper Command, translate to Italian and turn it into a list" translates first, then lists the result.
Anything outside these five is deliberately refused rather than attempted -- the same strict-contract approach as the default cleanup prompt, just inverted: this mode exists to act on instructions, but only these ones.
Off by default -- enable it under Voice Commands in the app, where you can also change the trigger phrase and see the same examples list.
Once setup is done, the floating button is ready.
Android is aggressive about killing background services to save battery, and an Accessibility Service is no exception. OpenWispr does a few things to stay running:
Settings → Battery optimization in the app, or the OS dialog it opens) the first time it detects the Accessibility Service is on but the exemption isn't grantedA "Background service" switch in the app lets you pause dictation (hide the overlay, stop reacting to taps) without revoking the Accessibility permission — handy if you want to quiet it temporarily instead of walking through Android's accessibility settings.
Some phone manufacturers (Samsung, Xiaomi, OnePlus, and others) layer their own battery/app-sleep managers on top of stock Android and may still kill the service even after you grant the exemption above. If the overlay keeps disappearing, check your phone's own battery/app management settings for an "autostart" or "keep in background" option for OpenWispr.
OpenWispr uses Android Accessibility Service for one narrow reason: to insert dictated text into the currently focused text field across apps.
It does not replace your keyboard. It does not run background automation. It only acts after you explicitly tap the overlay button.
OpenWispr supports two modes:
I don't run a backend for this app. In cloud mode, requests go straight from your phone to Groq using your own API key.
Full policy: PRIVACY.md
Models are stored in app storage under:
/data/data/com.edib.openwhispr/files/models/
Current catalog:
| Model | Size | Notes |
|---|---|---|
| Parakeet 110M | 100 MB | Best default |
| Whisper Base | 199 MB | Solid baseline |
| Parakeet 0.6B | 465 MB | Best quality |
| Moonshine Tiny | 103 MB | Fastest |
The app downloads and extracts models directly from the sherpa-onnx release archives.
make build # build debug APK
make test # run unit tests
make adb-install # build + install via ADB
make clean # clean build artifacts
OpenWispr works best in apps that use standard Android text fields. Some apps use custom text surfaces or terminal-style views, which may not support direct accessibility paste. When insertion is not possible, OpenWispr falls back to copying the transcript to the clipboard.
Termux's main terminal area is not a standard Android text field, so direct insertion may not work there.
To use OpenWispr in Termux:
ESC, CTRL, ALT, arrows, etc.) left or rightOnce text is inserted into the native input box, Termux sends it to the terminal normally.
OpenWispr itself is free — if the underlying project it's forked from saves you time, you can sponsor the original author on GitHub:
Personal project. Do whatever you want with it.
21 commits
Kotlin
99.1%
Simple voice transcription for android phones with Whisper and local models
See the code
Free, open-source, on-device push-to-talk dictation for Android — a free alternative to Wispr Flow.
Speak naturally into any app and OpenWispr turns your raw speech into clear, polished text: filler words removed, punctuation and formatting fixed automatically, then inserted straight into whatever field you're already typing in. Tap the floating button, speak, tap again — done.
It's completely free to run. Cloud transcription and cleanup use your own Groq API key, and Groq's free tier is generous enough for everyday dictation without paying anything. Prefer to keep everything on-device? Local transcription needs no API key or internet connection at all.
This is a fork of kafkasl/phone-whisper, originally built around OpenAI. This fork switches cloud transcription and cleanup to Groq and adds a round of reliability and UX work on top — see below for the full list. If you find the original project useful, consider sponsoring the original author.
It supports:
whisper-1 (OpenAI) → whisper-large-v3 (Groq), via https://api.groq.com/openai/v1/audio/transcriptionsgpt-4o-mini (OpenAI) → openai/gpt-oss-120b (Groq), via https://api.groq.com/openai/v1/chat/completionsgsk_...) instead of an OpenAI key (sk-...), with a direct link to get onemain and publishes it to a version-tagged GitHub ReleaseLocal on-device transcription is untouched — it never called OpenAI in the first place.
Grab the latest debug APK from the Releases page on this fork. A GitHub Actions workflow builds and publishes a new version-tagged release automatically on every push to main.
Open it on your phone, install it, then launch the app once to finish setup.
Requires JDK 17 and Android SDK.
git clone https://github.com/EdiBianco/OpenWhispr.git && cd OpenWhispr
make build
APK output:
app/build/outputs/apk/debug/app-debug.apk
If you use ADB:
make adb-install
Say "Whisper Command" at the start of a recording, followed by one of five whitelisted operations, and OpenWispr applies it to whatever's already in the focused field (or to text you dictate right after the command, if you give it fresh content):
"Whisper Command, summarize this in two sentences" -- summarize, with an optional length or limit"Whisper Command, enhance the flow" -- rewrite for smoother, more natural flow without changing meaning"Whisper Command, translate to Italian" -- translate to the named language"Whisper Command, make this more formal" -- change tone (formal, casual, professional, friendly, ...)"Whisper Command, turn this into a list" -- reformat as a bulleted or numbered listYou can chain more than one in the same command, and they're applied in the order you say them -- e.g. "Whisper Command, translate to Italian and turn it into a list" translates first, then lists the result.
Anything outside these five is deliberately refused rather than attempted -- the same strict-contract approach as the default cleanup prompt, just inverted: this mode exists to act on instructions, but only these ones.
Off by default -- enable it under Voice Commands in the app, where you can also change the trigger phrase and see the same examples list.
Once setup is done, the floating button is ready.
Android is aggressive about killing background services to save battery, and an Accessibility Service is no exception. OpenWispr does a few things to stay running:
Settings → Battery optimization in the app, or the OS dialog it opens) the first time it detects the Accessibility Service is on but the exemption isn't grantedA "Background service" switch in the app lets you pause dictation (hide the overlay, stop reacting to taps) without revoking the Accessibility permission — handy if you want to quiet it temporarily instead of walking through Android's accessibility settings.
Some phone manufacturers (Samsung, Xiaomi, OnePlus, and others) layer their own battery/app-sleep managers on top of stock Android and may still kill the service even after you grant the exemption above. If the overlay keeps disappearing, check your phone's own battery/app management settings for an "autostart" or "keep in background" option for OpenWispr.
OpenWispr uses Android Accessibility Service for one narrow reason: to insert dictated text into the currently focused text field across apps.
It does not replace your keyboard. It does not run background automation. It only acts after you explicitly tap the overlay button.
OpenWispr supports two modes:
I don't run a backend for this app. In cloud mode, requests go straight from your phone to Groq using your own API key.
Full policy: PRIVACY.md
Models are stored in app storage under:
/data/data/com.edib.openwhispr/files/models/
Current catalog:
| Model | Size | Notes |
|---|---|---|
| Parakeet 110M | 100 MB | Best default |
| Whisper Base | 199 MB | Solid baseline |
| Parakeet 0.6B | 465 MB | Best quality |
| Moonshine Tiny | 103 MB | Fastest |
The app downloads and extracts models directly from the sherpa-onnx release archives.
make build # build debug APK
make test # run unit tests
make adb-install # build + install via ADB
make clean # clean build artifacts
OpenWispr works best in apps that use standard Android text fields. Some apps use custom text surfaces or terminal-style views, which may not support direct accessibility paste. When insertion is not possible, OpenWispr falls back to copying the transcript to the clipboard.
Termux's main terminal area is not a standard Android text field, so direct insertion may not work there.
To use OpenWispr in Termux:
ESC, CTRL, ALT, arrows, etc.) left or rightOnce text is inserted into the native input box, Termux sends it to the terminal normally.
OpenWispr itself is free — if the underlying project it's forked from saves you time, you can sponsor the original author on GitHub:
Personal project. Do whatever you want with it.
21 commits
Kotlin
99.1%