Releases: VasenevEA/FastWord
Release list
v0.7.2
Full Changelog: v0.7.1...v0.7.2
v0.7.1
FastWord 0.6.0
Highlights
Optional GigaAM-v3 engine for Russian. Sber's MIT-licensed Conformer-CTC model, ~50% lower WER on Russian than Whisper-large-v3. The ~215 MB model downloads on demand into Application Support. Pick it like any other model in Settings → Models — no language auto-routing, no extra toggle.
Other fixes
- HUD now shows the real sidecar error message instead of the cryptic
(SidecarError error 0.)placeholder.
FastWord 0.5.2 — fix insertion in Slack / browsers / Electron
Fix
Text insertion was failing in Slack, the Comet browser, Threads, Yahoo Finance search — every Chromium/Electron web input.
Root cause: the Accessibility-first path. Chromium/Electron text fields report kAXSelectedTextAttribute as settable and return .success from the set call, but silently drop the write. We treated the insert as done and never fell back to the clipboard, so nothing appeared.
Fix:
- Dropped the AX-first path entirely. Always use clipboard + synthesised ⌘V — works in native and web/Electron apps alike, and the clipboard is still snapshotted and restored so your data is preserved.
- Restore delay 250 ms → 700 ms (Electron paste handlers are async and slower).
- changeCount guard: the previous clipboard is only restored if nothing else wrote to it during the paste window, so we never clobber something you copied mid-dictation.
- ⌘V posted via the HID tap with a 15 ms key-down/up gap so slow Electron apps register the chord.
FastWord 0.5.1 — system-language default, two-key hotkey
Two improvements from user reports.
Default to system language
On first launch the transcription language picker now picks your macOS primary language instead of starting on Auto-detect. When you do keep 'Auto-detect' on, the sidecar passes a short Superwhisper-style initial_prompt in the system language so short Russian / Mandarin clips stop getting detected as English.
Two-key hotkey
Settings → Hotkey → 'Use a second key' lets you bind a second modifier. Pick:
- Either key alone (default) — independent alternative trigger. Useful when switching between two keyboards that have different modifier keys (e.g. external Microsoft keyboard with no ⌘, MacBook internal with no ⌥, and ⌘ already taken by another app).
- Both keys held together — classic chord shortcut.
FastWord 0.5.0 — VAD-light + transcript cleanup
Two new toggles in Settings → Transcription (default on):
Skip empty recordings — sidecar pushes whisper.cpp's no_speech_thold so accidental short taps and silent clips are dropped before they hallucinate.
Clean up transcripts — programmatic post-processor strips known YouTube-credit-style hallucinations across EN/RU/ZH ('Subtitles by Amara.org', 'Подписывайтесь на канал', '感谢观看'), collapses repeat loops, removes bracketed non-speech notes ('[Music]', '(шум)'), normalises whitespace, and trims leading punctuation. Guardrail keeps real transcripts safe — over-aggressive cleaning falls back to the original.
FastWord 0.4.3 — mute system audio for browser playback
New
Settings → Audio → Background audio now has a third option: Mute system audio.
MRMediaRemoteSendCommand only reaches apps registered with the system Now Playing client (Spotify, Apple Music, podcast apps). Browsers like Safari and Chrome don't register YouTube or other HTML5 media — and synthetic NX_KEYTYPE_PLAY events don't reach Safari either. This is a long-standing macOS limitation.
The new option works around it by setting the master output volume to 0 for the duration of the recording and restoring it on stop / cancel / hardware change. It's the only universal mechanism — works for Safari, Chrome, Discord, system sounds, anything that goes through the default output.
Choose your audio handling:
- Do nothing (default)
- Pause / Resume player — precise, for Spotify / Music / podcasts
- Mute system audio — universal, for YouTube in browser / anything else
FastWord 0.4.1 — don't start music from silence
Fix
The v0.3.0 auto-pause feature used a togglePlayPause command. If your music was already paused when you started dictating, the toggle would start playback — exactly the opposite of what you wanted. The matching toggle on recording end then paused it again, leaving the system in the wrong state.
Now:
- Explicit
play/pausecommands viaMRMediaRemoteSendCommandinstead of toggle. - Before pausing, ask
MRMediaRemoteGetNowPlayingApplicationIsPlayingwhether anything is actually playing. If yes, send pause and remember. If no, leave the system alone. - On recording end, send
playonly if we actually paused something.
Dictating during silence no longer hijacks the now-playing session.
FastWord 0.4.0 — dynamic Whisper model picker
New — closes #1
Settings → Models now lets you pick which whisper.cpp ggml model FastWord uses.
Curated list of 9 multilingual variants:
| Model | Size |
|---|---|
| Whisper Tiny | 78 MB |
| Whisper Base | 148 MB |
| Whisper Small | 488 MB |
| Whisper Medium | 1.5 GB |
| Whisper Large v3 Turbo Q5 (bundled, default) | 547 MB |
| Whisper Large v3 Turbo Q8 | 874 MB |
| Whisper Large v3 Turbo (full) | 1.6 GB |
| Whisper Large v3 Q5 | 1.1 GB |
| Whisper Large v3 (full) | 3.1 GB |
The bundled turbo-Q5 stays in the DMG and remains the default. Everything else downloads on demand from huggingface.co/ggerganov/whisper.cpp with a live progress bar into ~/Library/Application Support/FastWord/Models/.
Each row shows an Active / Installed badge. Switching the active model restarts the sidecar transparently. Downloaded models can be deleted; the bundled one and the currently-active one can't.
FastWord 0.3.0 — auto-pause background audio
New — closes #5
Settings → Audio → Background audio: "Pause / Resume player"
When you start dictating, FastWord pauses whatever is currently playing (Spotify, Music, YouTube in a browser, podcast apps) and resumes it the instant the microphone closes — no waiting for transcription to finish.
Implementation
- Uses
MRMediaRemoteSendCommandfrom the privateMediaRemote.framework(the same path NepTunes / Sleeve / Silicio use). Drives the system 'now playing' session reliably, including for Spotify where the documented CGEvent path silently misses on macOS 12+. - NX_KEYTYPE_PLAY system-defined CGEvent remains as a fallback if the private symbol ever gets removed.
- Resume is gated by a flag so we never start music out of nothing.