Repository navigation
feat: transcribe on this computer, offline and free - #1
Conversation
A third way to dictate, next to Parler Cloud and your own API key: a speech model that runs on the computer itself, so the voice never leaves it and Parler works offline. It stays as simple as the rest of Parler: - One recommended model, picked from the language: Parakeet Ultra (25 European languages, 740 MB), or Whisper Large v3 Turbo for every other language (620 MB, uses the vocabulary). "Advanced options" lets people pick the other one; nothing more to configure. - Onboarding and Settings say plainly that it uses the computer's power, can be slower when it's busy, and is a little less accurate than Parler Cloud. The download shows its progress, can be cancelled and resumes where it stopped, from pinned Hugging Face files checked by SHA-256. - It runs where each computer is fastest, through transcribe.cpp (MIT): Metal on Apple Silicon, the CPU on Intel Macs, Vulkan on Windows and Linux graphics cards and integrated chips, and otherwise the CPU build matching the processor. A GPU that fails falls back to the CPU, and one that crashed Parler isn't used again until the next version. Settings shows quietly where the model runs. - A local dictation is saved before the engine runs, so even a crash of the engine never loses it. The model loads in the background and is let go after 15 idle minutes. - On an M4, 11 s of speech takes 0.18 s with Parakeet on Metal. Credits for transcribe.cpp, Parakeet Ultra (NVIDIA, Moondream, CC BY 4.0) and Whisper are in THIRD_PARTY_NOTICES.md and Settings → About.
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 09fb9c7c9e
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| if settings.provider != local::ID { | ||
| return None; | ||
| } | ||
| Some(pending.save(speech.wav.clone(), speech.duration_ms, local::interrupted())) |
There was a problem hiding this comment.
Keep temporary crash backups outside the pending eviction quota
When the pending store already contains 20 unsent dictations, recording a local dictation now permanently deletes the oldest unsent recording even if the new dictation succeeds or is cancelled. Pending::save immediately invokes prune, enforcing both the 20-item and 50 MB limits, whereas this temporary entry is subsequently removed by forget_kept; removing it cannot restore the recording evicted to make room. Keep in-flight crash backups separately, or exclude them from eviction accounting until transcription actually fails.
Useful? React with 👍 / 👎.
| if session != self.session || !matches!(self.phase, Phase::Transcribing) { | ||
| return; // cancelled | ||
| // Cancelled: what was kept meanwhile goes with it. | ||
| self.forget_kept(kept); |
There was a problem hiding this comment.
Delete the local crash backup when cancellation is requested
If a user cancels a slow local transcription and then quits Parler before inference finishes, the cancelled recording remains on disk and reappears as an unsent dictation on the next launch. Cleanup here only runs when Event::Finished arrives, but cancel() merely invalidates the session and the blocking native transcription continues running. Track the backup ID in the controller and remove it during cancellation rather than relying exclusively on eventual completion.
Useful? React with 👍 / 👎.
What and why
Parler 0.1.8 adds a third way to dictate, On this computer, next to Parler Cloud and "own API key or server". A speech model runs on the computer itself: the voice never leaves it, it works offline and it's free. It stays as simple as the rest of Parler — one recommended model, a plain download with progress, and an "Advanced options" choice of a second model. No model manager.
THIRD_PARTY_NOTICES.mdand Settings → About (Parakeet Ultra is CC BY 4.0, NVIDIA and Moondream).How it was tested
Both models downloaded through the app's code, including a resumed download.
Transcribed French and English speech:
The Intel slice ran under Rosetta.
The universal release
.appbuilds (31 MB vs 20 MB in 0.1.7).cargo test: 100 passed, 4 ignored. The ignored tests download real models (docs/contributing.mdsays how to run them).Screenshots
Onboarding download step, Settings model card, Home download banner: see the preview (
pnpm dev→/preview.html?lang=fr&local=downloading, params indocs/contributing.md).Checklist
pnpm typecheck && pnpm buildpass;pnpm testpasses once the translations land (next commit).cargo fmt --all -- --check && cargo clippy --all-targets -- -D warnings && cargo testpass on macOS (CI covers Windows and Linux).README.md,README.fr.md,docs/architecture.md,docs/contributing.md,THIRD_PARTY_NOTICES.md).