Read a text aloud and see which words came out wrong.
Download for macOS, Windows and Linux · Website
Parrot is a free, open-source desktop app for practising spoken English. Paste anything you need to say out loud (a job interview introduction, a talk, a script), listen to it read correctly, record yourself, and Parrot shows you word by word what came out wrong, how each word should sound, and lets you hear yours and the correct one side by side. Transcription runs on your device (Whisper, offline): your voice is never uploaded.
- Listen. Your text is split into sentences or short parts, and each one is read to you at the speed you choose, with the word being spoken lit up. The voice is Parrot's own (Kokoro, offline, the same on every computer; eight of its voices to choose from in Settings), or any English voice your system has. A text is read ahead as you open it, so Listen plays at once.
- Record. Read the part aloud. Parrot checks it two ways:
- Speech recognition (Whisper through whisper.cpp) writes down what it heard, without knowing the text. A word it heard as something else, or not at all, turns red, with what it heard.
- Forced alignment finds each word of the text in your recording and scores how well the sounds match it. A word that scores clearly low turns amber: the listener guessed it, but it didn't sound right. The aligner is a wav2vec2 model trained on Mozilla Common Voice, so accents are expected, not marked down.
- Fix. Click any word to see how it sounds (a respelling like sik·STEEN and its IPA, from the CMU Pronouncing Dictionary), hear it alone or slowly, hear your own, or both one after the other. The card also shows your take of the word: its sound match as a percentage, and its letters grouped into the sounds they spell (th·i·ng·s), each green, amber or red (half green when it was right but not sure), with the weakest one named and a tip on how to make it. You can also record just that word, as often as you like: each try gets its own sound match and history, without touching the sentence's score. Every try is kept, so you can watch your score go up. A long pause (over a second) between two words is marked with its length.
- Just talk. Tell a story or answer an interview question with nothing to read, for up to 30 minutes; for something to talk about, pick a set of prompts (interview, small talk, presentations). Parrot writes down what it heard as you talk, so it is ready moments after you stop, and shows how each word came out. Where it wrote a word other than the one you meant, fix it: that word then shows as misheard, with what was heard, which is the word to work on. Save it, and the talk becomes a text with your recording as its first take, to practise by reading: whole, or sentence by sentence, each sentence with its first try cut from the talk. Going Home from the check leaves the talk, with your fixes, on the Just talk card to come back to; a talk not saved when Parrot quits or crashes is offered again the next time it starts, to write down or discard.
- Names. Speech recognition writes a name it doesn't know as some other word, every time. Mark a word as a name from its card and it is never counted as misheard, in any text; Settings lists them.
- Edit a text. Fix its words at any time, from the pencil beside its title. The tries of each part you change are scored again from their recordings, against its words now; the other parts keep theirs as they are.
Get Parrot from the website or the latest release.
| System | File | Needs |
|---|---|---|
| macOS, Apple chip (M1 and newer) | Parrot-macOS-Apple-chip.dmg |
macOS 11 Big Sur or later |
| macOS, Intel | Parrot-macOS-Intel.dmg |
macOS 13.4 Ventura or later |
| Windows | Parrot-Windows-setup.exe or Parrot-Windows.msi |
Windows 10 or 11, 64-bit |
| Linux | Parrot-Linux.AppImage, Parrot-Linux.deb or the .rpm |
64-bit; Ubuntu 24.04, Fedora 40, Debian 13 or newer |
The installers are not signed with paid developer certificates yet, so the first time you open Parrot:
- macOS: if it says Apple cannot check Parrot, right-click the app and choose Open, or go to System Settings → Privacy & Security → Open Anyway. Once is enough.
- Windows: if SmartScreen says it protected your PC, click More info → Run anyway.
Parrot downloads its models once, about 930 MB, then works offline: two to listen with and one to read with.
| Model | Size | Source | Licence |
|---|---|---|---|
| Whisper small (English), for speech recognition | 488 MB | ggerganov/whisper.cpp | MIT |
| wav2vec2 large XLSR-53, English, for the sound scores | 317 MB | jonatasgrosman/wav2vec2-large-xlsr-53-english, exported to ONNX and quantised to 8 bits; served from this repository's models-v1 release |
Apache 2.0 |
| Kokoro-82M, the reading voice, with its 54 voices | 92 MB + 28 MB | hexgrad/Kokoro-82M, exported to ONNX and quantised to 8 bits by thewh1teagle/kokoro-onnx; served from this repository's models-v2 release |
Apache 2.0 |
The pronunciation dictionary (CMUdict, BSD-style licence) is built in, and so are the voice's lexicon (misaki, Apache 2.0) and the Naval Research Laboratory's letter-to-sound rules (public domain) for a word it lacks.
Texts and recordings are plain files in the app's data folder (macOS:
~/Library/Application Support/io.github.qwertymuzaffar.parrot, Windows: %APPDATA%\io.github.qwertymuzaffar.parrot,
Linux: ~/.local/share/io.github.qwertymuzaffar.parrot). The models are in its models folder, except on Windows,
where they stay out of the roaming profile, in %LOCALAPPDATA%\io.github.qwertymuzaffar.parrot\models. A deleted
text goes to its trash folder and is erased for good 30 days later; Settings opens the folder and empties the trash.
Parrot looks for a new version only when you click Check for updates in Settings: it asks GitHub for the latest release, and sends nothing else.
Requirements: Node 22+, Rust, and CMake (to build whisper.cpp).
npm install
npx tauri dev # the desktop app, with the engine built in
npm test # interface tests
cd src-tauri && cargo test --lib # engine testsThe engine (src-tauri/src): store.rs keeps texts and tries, audio.rs cleans a take, asr.rs runs Whisper,
align.rs places each word and scores it and its letters, text.rs compares what was read with what was heard,
sounds.rs respells a word. Opened in a plain browser (npx ng serve), the interface runs on a demo engine kept in
memory (src/app/core/demo-engine.ts): sample texts and tries, and made-up scores, for working on it and for screenshots.
On macOS the tauri dev build can be refused the microphone without a prompt (it logs Could not create a 'com.apple.webkit.microphone' sandbox extension, and every take is "only silence"). Reset the decision with
tccutil reset Microphone io.github.qwertymuzaffar.parrot and restart it, or record in a built app
(npx tauri build --bundles app).
ONNX Runtime publishes no Intel Mac build after 1.23, so Parrot asks only for the 1.23 API and the Intel build links Microsoft's ONNX Runtime 1.23.2, shipped inside the app. To build it on a Mac (an Apple chip Mac runs the result through Rosetta):
curl -sSL https://github.com/microsoft/onnxruntime/releases/download/v1.23.2/onnxruntime-osx-x86_64-1.23.2.tgz | tar xz
mv onnxruntime-osx-x86_64-1.23.2 .ort-intel
rustup target add x86_64-apple-darwin
ORT_LIB_LOCATION=$PWD/.ort-intel/lib ORT_PREFER_DYNAMIC_LINK=1 MACOSX_DEPLOYMENT_TARGET=13.4 \
npx tauri build --target x86_64-apple-darwin --config src-tauri/tauri.intel.conf.json- Set the version in
src-tauri/tauri.conf.jsonandsrc-tauri/Cargo.toml. - Create the draft release first (the workflow's token was refused creating one for 0.1.1):
gh release create v0.1.2 --draft --title "Parrot v0.1.2" --notes "draft". - Tag and push:
git tag -a v0.1.2 -m "Parrot 0.1.2" && git push origin v0.1.2. TheReleaseworkflow builds all four installers into the draft, each also under a fixed name (Parrot-macOS-Apple-chip.dmg, ...). - Check the files, write the notes, and publish the draft.
- Sound scores measured against the reference reading, now that every text has one.
- More languages than English.
The download page is docs/, served by GitHub Pages. Its download buttons link to the fixed file names through
releases/latest/download/, so they start the download directly and nothing on the page needs changing for a new
version. When site.css changes, raise the ?v= number on its links so browsers don't mix an old stylesheet with a new
page.
MIT. The models keep their own licences (above). The app builds in whisper.cpp
(MIT), ONNX Runtime (MIT), the ort crate
(MIT), CMUdict (BSD-style), misaki's lexicon and rules (Apache 2.0) and the
Naval Research Laboratory's letter-to-sound rules (public domain); their notices are in
THIRD-PARTY-NOTICES, which ships with every installer. The app and the website use the
DM Sans font (SIL Open Font License, docs/fonts/OFL-dm-sans.txt).
