v2026.7.2-2
Local (on-device) dictation now streams through overlapping, silence-aligned, prompt-threaded chunks that are merged into the transcript, instead of joining independent 2-second windows.
AI agents and tools can read these release notes as plain Markdown.
This release covers 0 pull requests.
Highlights
- Local (on-device) dictation now streams through overlapping, silence-aligned, prompt-threaded chunks that are merged into the transcript, instead of joining independent 2-second windows.
- The default on-device model is now chosen by hardware, from one resolver used everywhere (startup, tray,
dictate doctor, the UI, and the installers). - Case- and punctuation-only differences at a streamed chunk seam are now de-duplicated, so overlapping words are not typed twice.
- The installed Linux app (
.deb/AppImage) now registers its launcher and start-on-sign-in autostart entry on first run, pointing atdictate-ui-shell. - Clean shutdown on Linux update:
install.sh/update.shstop the running engine before reinstalling, and the.debships apreinstthat stops the engine and desktop shell before unpacking an upgrade. - Autostart/launcher
.desktopentries written by the frozen app now targetdictate-ui-shellinstead of a~/.local/bin/dictateconsole script that does not exist in packaged installs — the cause of "Dictate doesn't start / the hotkey does nothing" after switching from a source install to the.deb.
Changes
- Local (on-device) dictation now streams through overlapping, silence-aligned, prompt-threaded chunks that are merged into the transcript, instead of joining independent 2-second windows. This removes the word-splitting and duplication ("confetti") that made local dictation unreliable: on-device quality now tracks a full-utterance decode while keeping push-to-talk latency low (the perceived wait is the final chunk, not a re-decode of the whole recording).
- The default on-device model is now chosen by hardware, from one resolver used everywhere (startup, tray,
dictate doctor, the UI, and the installers). A CUDA GPU or a capable CPU (~8 GB+ RAM and 8+ cores) defaults to the higher-qualityturbomodel; weaker CPUs default tosmall. No machine is told it runsturbowhile actually runningsmall, and installers no longer force a ~1.5 GBturbodownload onto a box that will runsmall. - On-device decode quality was restored for dictation (beam search + generous VAD padding so word onsets are not clipped at chunk boundaries), while long note recordings keep their lighter, CPU-tuned decode settings unchanged.
- Dictate Pro control-plane baseline (account auth, entitlements, Stripe handling, relay/server). Pre-release scaffolding; the purchase path is not yet wired end-to-end (see
docs/GOALS.md). - The installed Linux app (
.deb/AppImage) now registers its launcher and start-on-sign-in autostart entry on first run, pointing atdictate-ui-shell. Previously only the sourceinstall.shset these up, so packaged installs never started on login despite the docs saying they did. One-time and gated to the frozen app, so it never overrides a user who later disables startup. dictate stopcommand — stops a running engine via its single-instance lock (SIGTERM, then SIGKILL fallback). Updaters use it so a fresh engine can claim the lock cleanly instead of colliding with a stale daemon.- Clean shutdown on Linux update:
install.sh/update.shstop the running engine before reinstalling, and the.debships apreinstthat stops the engine and desktop shell before unpacking an upgrade. Previously the old engine kept running and held the lock, so the newly installed engine could not start (Windowsupdate.ps1already stopped the old process; Linux did not).
Fixes
- The GUI privacy toggle no longer pins
turbointo config on a weak machine (which previously bypassed the hardware-aware default permanently). - Case- and punctuation-only differences at a streamed chunk seam are now de-duplicated, so overlapping words are not typed twice.
- Autostart/launcher
.desktopentries written by the frozen app now targetdictate-ui-shellinstead of a~/.local/bin/dictateconsole script that does not exist in packaged installs — the cause of "Dictate doesn't start / the hotkey does nothing" after switching from a source install to the.deb. dictate doctornow flags launcher/startup entries whoseExectarget is missing (e.g. a stale pip-era~/.local/bin/dictateleft behind after moving to the package) anddictate doctor --fixrepairs them.- Quietened startup log noise: passively enumerating provider key status (done for every backend on startup) no longer logs a validation failure for an unused, optionally-configured backend (e.g. a stale
openaikey while running local faster-whisper). The status is still reported; only the noisy log is suppressed. Explicit user validation and the provider health probe still log.
Contribution record
CHANGELOG/records/2026.7.2-2.md lists every pull request in this release once, with its related issues and thanks.