Releases: sprawf/hotkeys
Release list
v3.3.1 - Ask Docs toolbar tab + retrieval overhaul + 3rd Groq key
Plug-and-play zip: extract anywhere, run Hotkeys.exe. No installer, no admin.
Highlights
- Ask Docs toolbar tab: Shift+F11 opens Ask Docs, now with a proper 📚 tab in the main toolbar (was showing as a placeholder). Same NotebookLM-style Q&A workspace.
- 3 Groq keys in rotation (was 2). Cerebras still 2 free-tier keys. All bundled, works out of the box.
- Retrieval overhaul in Ask Docs: IDF-weighted lexical search with log-saturation, location anchors (Surah N / verse S:V), hybrid semantic+lex round-robin merge, char_budget 20k→50k for exhaustive queries, ultra-compact one-line-per-verse output format, CJK bracket normalisation. 8+ additional retrieval fixes.
- Cerebras max_tokens 4096→16384 so reasoning models have headroom for long enumerated answers.
- Prewarm 2000ms → 1000ms — first Shift+F11 press opens Ask Docs faster.
Hotkey reminder (unchanged; safeguarded)
- refine: Alt+Shift+W
- library: Alt+Shift+E
- undo refine: Alt+Shift+Z
- whisper (STT): Ctrl+Enter (primary), Alt+Space (secondary)
- Quick notes: Shift+F7 or Home
- Ask Docs: Shift+F11
Bundled + verified
18/18 critical assets present including all 5 API keys, ask_docs subpackage, MiniLM embedding model, Magika file-detector models, WebView2 runtime, Whisper models, Tenacity audio editor.
Size: 1.8 GB zip → ~3.3 GB extracted.
v3.3.0 - Ask Docs (NotebookLM-style Q&A, Shift+F11)
v3.3.0 — Ask Docs (NotebookLM-style document Q&A)
New feature: Shift+F11 → Ask Docs
A full NotebookLM-inspired document Q&A workspace, bundled directly into Hotkeys.
Press Shift+F11 anywhere to open it.
What you can do:
- Load PDFs, Word docs (.docx), PowerPoint (.pptx), Excel (.xlsx), HTML, EPUB, images (with OCR), audio (transcribed via bundled Whisper), YouTube URLs, and pasted text
- Ask questions about your sources; answers arrive with inline numbered citation chips that link back to the exact passage
- Auto-generated summary + suggested follow-up questions on first source added
- Per-notebook artifacts: Summary, FAQ, Study Guide, Timeline
- Chat history persisted per notebook
Under the hood:
- Local
all-MiniLM-L6-v2ONNX embedding model + per-notebook SQLite vector index (fully offline retrieval) - Chat inference via Groq (
openai/gpt-oss-120b), automatic fallback to local Qwen if Groq unreachable - MarkItDown for universal document parsing (dozens of formats)
- OCR fallback via Groq vision (
qwen/qwen3.6-27b) for scanned PDFs and images - Audio transcription via Hotkeys' bundled
faster-whispersmall model
Startup:
- Prewarmed at app launch — first Shift+F11 press opens the window instantly
- markitdown import ~2s + MiniLM ONNX load ~250 ms happens in the background thread while you use other Hotkeys features
Data location:
%APPDATA%\Hotkeys\ask_docs\<notebook-uuid>\ — sources, chats, vectors, artifacts
Build integrity
verify_dist.pygrew 3 new checks (ask_docs subpackage, MiniLM ONNX ≥80MB, tokenizer.json). Build fails non-zero if any missing.hotkeys.specbundles the full ask_docs subpackage + MiniLM (86 MB) + tokenizer +collect_all('markitdown')for its dynamic converter backends
Size
Zip: 1.76 GB (+~150 MB over v3.2.9). Extracted dist: 3.3 GB.
Ship as Hotkeys-Windows.zip — extract anywhere, run Hotkeys.exe.
v3.2.9 - Cerebras: gpt-oss-120b primary (fixes 404 on llama-3.3-70b + preps for Aug 17 glm-4.7 deprecation)
What's new in v3.2.9
Cerebras model migration ahead of their 2026-08-17 deprecation.
Cerebras (chat/refine primary)
- Retired
llama-3.3-70b(has been 404-ing for weeks). Replaced with:- Primary:
gpt-oss-120b— same 120B model as our Groq fallback, on Cerebras' faster infrastructure. Verified 200 OK end-to-end from the built dist. - Fallback:
gemma-4-31b(Gemma 4)
- Primary:
- Retired
zai-glm-4.7(deprecating Aug 17). Config migration silently upgrades any existing user config naming these models togpt-oss-120bon next launch.
Everything else unchanged
- Groq continues to serve: whisper-large-v3-turbo (STT), qwen/qwen3.6-27b (vision/OCR), openai/gpt-oss-120b (chat fallback)
- All features remain free-tier (Cerebras Developer + Groq Developer)
- 4 bundled API keys (2 Groq + 2 Cerebras) rotate on 429 rate limits
End-to-end verification of this dist
verify_dist.py: 14/14 critical assets present + valid_bundled_keys.pyshipped inside_internal/(341 bytes, contains real gsk_ and csk- keys)- Fresh launch: no "BUNDLED KEYS MISSING" warning
- Fresh launch: no Cerebras 404 (was constant before this release)
- Fresh launch: live
POST api.cerebras.ai/v1/chat/completions HTTP/1.1 200 OK
Ship as Hotkeys-Windows.zip — extract anywhere, run Hotkeys.exe.
v3.2.8 - Paste-verify rewrite + RTL Arabic/Urdu + Home key + STT cold-start
What's new in v3.2.8
Paste flow, RTL rendering, hotkeys, robustness — a big cleanup pass.
Paste-then-open-notepad fallback (the big one)
Complete rewrite of the "did the paste actually land?" logic around a universal signal:
- Editable detection:
UIA TextPatternis the discriminator for Chromium/Electron apps (Claude, VS Code, Discord, Slack) — editable inputs expose it, read-only content areas don't. Was falsely trusting message-history areas as editable before. - Caret movement: for Win32-native apps (Notepad, Word, Explorer rename), we watch the caret rect via
GetGUIThreadInfoand confirm it moved after Ctrl+V. - UIA text-in-after: strong-proof check that the pasted text appears in the focused element's snapshot.
- Chrome omnibox / autocomplete popup case handled without special-casing: if focus vanishes to a no-caret popup after paste, we trust it.
Result: dictate → paste lands in real input → no MiniNotepad. Dictate with cursor on desktop / read-only page / message history → paste doesn't land → MiniNotepad opens with the text.
Quick Notes: bare Home key as secondary hotkey
SHIFT+F7 still works; HOME also toggles Quick Notes (open on first press, save+close on second press). Notes tab description updated to show both.
Arabic / Hebrew / Urdu in MiniNotepad
Tk's Text widget doesn't apply the Unicode BiDi Algorithm, so RTL scripts came out with words reversed and characters scrambled. Fixed via arabic-reshaper + python-bidi preprocessing:
- Display: right-to-left reading order, right-aligned at the widget edge (native RTL layout)
- Ctrl+C / Ctrl+X copies the ORIGINAL logical-order Unicode, so pasting into any BiDi-aware app (Word, browsers, Notepad) renders correctly on their end
- Paste and typing INTO MiniNotepad also get transformed + realigned automatically (not just the initial content)
- Save-to-file writes original logical bytes
- Mixed content (English + Arabic in same note): each line aligned per its script
Cloud STT for slow-internet users
- Cloud transcription timeout raised from 3s to 15s (only affects the failure/offline case — successful calls unchanged)
- Reachability probe timeout 0.5s -> 3s
- Every cloud-fallback case now shows a diagnostic pill:
Cloud too slow,Cloud unreachable (DNS),Antivirus blocked cloud,Cloud failed (Type). No more silent falls to local model. - Mic pre-warm at app startup: first Ctrl+Enter / Alt+Space captures your speech from the very first syllable instead of eating 200-500ms of WASAPI cold-start latency
- Mic-open retry: escalating backoff (up to 2.6s total) for Bluetooth headset HFP switches, WASAPI handle release, transient PortAudio busy
Bulletproof bundled resources
_bundled_keys.pyverified present in every dist viaverify_dist.py(post-build check that fails the build if anything critical is missing). Was silently missing from every dist since v3.1 — all users had been running with NO API keys, silent fall to local models for every cloud feature. Fixed for good.python-bidi+arabic-reshaperbundled for RTL rendering.
Ship as Hotkeys-Windows.zip — extract anywhere, run Hotkeys.exe.
v3.2.7 - CRITICAL: fixes bundled API keys (was silently missing since v3.1)
What's new in v3.2.7
CRITICAL FIX: bundled API keys are actually shipped now. Since v3.1 the dist has been shipping WITHOUT _bundled_keys.py, causing every user (including your dad) to silently fall back to local-only for STT/refine/vision. Fixed the packaging bug and added a build-time verifier so this class of drift can't happen again.
Voice-to-text
- Mic pre-warm at app startup: first Ctrl+Enter / Alt+Space captures your speech from the very first syllable instead of eating 200-500ms of WASAPI cold-start latency
- Escalating-backoff retry: transient PortAudio busy conditions (Bluetooth HFP switch, WASAPI handle release, another app briefly holding the mic) retry silently across 4 attempts / 2.6s before showing an error
- Every cloud-failure case now shows a diagnostic pill:
Cloud too slow (internet slow?),Cloud unreachable (DNS),Antivirus blocked cloud,Cloud failed (Type). No more silent fallback to local. Alt+Spaceworks as a second STT hotkey alongsideCtrl+Enter
Quick Notes
- Bare
Homekey as a second toggle hotkey alongsideShift+F7(1st press opens, 2nd press saves + closes) - No more spurious MiniNotepad: pasting into Quick Notes (or any Hotkeys-owned window) no longer triggers the fallback popup
Audio Editor (Shift+F10)
- Suppresses every known first-launch dialog: update-check, welcome, what's-new, analytics, crash-survivor, file-association prompt
- Hidden-dialog rescue: any first-launch dialog we haven't catalogued gets force-brought-to-front so it can't hide behind the main window and silently steal every click
Whiteboard (Shift+F8)
- Bundled Microsoft WebView2 Runtime Fixed Version 150.0.4078.65 — whiteboard opens instantly on any Windows 10/11 PC without needing separate installers
- Friendly error dialog with fix links if underlying .NET runtime is missing
Downloads (Ctrl+Alt+D)
curl_cffibundled: Dailymotion, Reddit, X (Twitter) now work- Playlist detection dialog: "Just this video" / "Entire playlist" / "Cancel"
- Post-error rescue: if merged file exists on disk despite yt-dlp error, we report success
- Friendlier failure pills with plain-language causes
- yt-dlp's own logger routed into app.log for future diagnosis
Reliability
- Root close guard: hidden root window can no longer take the app down via stray WM_DELETE_WINDOW events
- Deep 40-frame stack trace when
_quit()fires, so any future close cause is traceable - Hourly heartbeat log
Build system
verify_dist.py: post-build script that checks every critical asset (bundled API keys, diarize worker, whiteboard, audio editor, WebView2 runtime, whisper models with min-size validation, tessdata, etc.). Build now FAILS if any asset is missing — preventing the class of silent-drift bug that caused_bundled_keys.pyto hide from every release for months.
Ship as Hotkeys-Windows.zip — extract anywhere, run Hotkeys.exe.
v3.2.6 - Whiteboard works on any PC (WebView2 Fixed bundled)
What's new in v3.2.6
Whiteboard just works on every PC now
- Bundled Microsoft WebView2 Runtime Fixed Version 150.0.4078.65 (x64) inside the app. Whiteboard uses the bundled runtime always, never relies on system-installed WebView2. Result: Shift+F8 opens instantly on any Windows 10 / 11 PC, no separate installer needed.
whiteboard.pysetsWEBVIEW2_BROWSER_EXECUTABLE_FOLDERenv var before webview.start() so pywebview picks up the bundled binaries.
Size trade-off
- Zip grew from 1.32 GB (v3.2.5) to 1.61 GB (+290 MB). Extracted dist ~3.12 GB.
- One-time bloat, paid for by zero-config whiteboard on every user's PC.
Note
- WebView2 Runtime version 150.0.4078.65 is Microsoft's stable release (support through 2027). Future Hotkeys releases will update to newer WebView2 versions as Microsoft ships them.
- .NET Framework 4.7.2+ is still required (pywebview uses pythonnet). Windows 10 1903+ and all Windows 11 machines have it pre-installed. On the rare PC without it, the whiteboard is silently disabled (no crash, no popup) - every other feature works.
Ship as Hotkeys-Windows.zip — extract anywhere, run Hotkeys.exe.
v3.2.5 - Audio editor: no first-launch popups, no hidden dialogs
What's new in v3.2.5
Fixes reported by real users on v3.2.4.
Audio Editor (Shift+F10)
- Suppress every known first-launch dialog via cfg: update-check prompt, "check for updates" itself (audio editor is fully offline, never phones home), analytics / crash-report / usage-info consent, Welcome, What's New, crash-survivor scan.
- Hidden-dialog rescue: if a first-launch dialog we haven't catalogued still fires, the walker now force-brings it to the front (AttachThreadInput trick) so it can't hide behind the main window and silently steal every click.
- Previous suppressions still active: Splash, FirstProjectSave, MissingExtension, MixMono/Stereo/Unknown,
.aup3file-associations popup. - Net: first launch goes straight to a functional editor OR a visible dialog you can dismiss with one click. No more "clicks do nothing."
Ship as Hotkeys-Windows.zip — extract anywhere, run Hotkeys.exe.
v3.2.4 - Alt+Space + slow-internet STT + reliability
What's new in v3.2.4
Voice-to-text
- New:
Alt+Spaceworks as a second STT hotkey alongsideCtrl+Enter. Easier one-handed. Both always active. - Slow-internet fix: cloud transcription now waits up to 15s (was 3s) so upload can complete on weak connections. Fast connections unaffected.
- Reachability probe bumped 0.5s to 3s (helps first-attempt on slow WiFi).
- Every cloud-fallback case now shows a diagnostic pill:
Cloud too slow (internet slow?),Cloud unreachable (DNS),Antivirus blocked cloud - add api.groq.com to AV exceptions, orCloud failed (Type). No more silent local fallbacks.
Reliability
- Root close guard: hidden root window can no longer take the app down via stray WM_DELETE_WINDOW events.
- Hook self-heal no longer thrashes on mouse activity (5-min silence threshold).
- Flood guard: no longer punishes users spamming the same hotkey.
- Deep 40-frame stack trace logged when
_quit()fires, so any future close cause is traceable. - Heartbeat log every hour.
Downloads (Ctrl+Alt+D)
curl_cffibundled: Dailymotion, Reddit, X (Twitter) now work.- Playlist detection dialog: pick "Just this video", "Entire playlist", or "Cancel".
- Post-error rescue: if the merged file exists on disk despite a yt-dlp error, we report success instead of failure.
- Friendlier failure pills (plain-language cause, not raw yt-dlp text).
- Progress-pill coverage for every stage: Reading URL, Downloading, Merging, Saved.
- yt-dlp's own logger routed into app.log for future diagnosis.
Whiteboard / Audio editor
- Whiteboard preflight: if .NET Framework is missing/broken on the user's PC, silently skip pre-warm (no scary Python traceback popup at launch).
- If Shift+F8 is pressed on such a PC, friendly dialog with direct download URLs for the two Microsoft installers.
- Audio editor no longer prompts to associate
.aup3files on first launch.
Distribution
- Every download link on the sprawf/hotkeys profile page now uses
/releases/latest/download/pattern, always resolves to newest release automatically.
v3.2.3 - Hotkey self-heal + flood guard fix
Fixes
- Hotkey self-heal: WH_KEYBOARD_LL hook can be silently unhooked by Windows (LowLevelHooksTimeout, session lock/unlock, sleep). The watchdog now cross-checks GetLastInputInfo against our last hook callback tick and reinstalls the hook within 2s if Windows saw input we did not. No more spam-then-dead hotkeys.
- Flood guard: no longer trips on same-hotkey spam (user impatience). Only pauses on 3+ DIFFERENT hotkey events in 2s.
Also carries the v3.2.2 Groq model migration (gpt-oss-120b text, qwen/qwen3.6-27b vision).
v3.2.2 - Groq model migration
What's new since v3.2.1
Migrated off Groq models being decommissioned:
- llama-4-scout-17b-16e-instruct (decommission: 2026-07-17)
- llama-3.3-70b-versatile (decommission: 2026-08-16)
New Groq model chain
- Text default: `openai/gpt-oss-120b` (was llama-3.3-70b-versatile)
- Vision: `qwen/qwen3.6-27b` (was llama-4-scout-17b-16e-instruct)
- Fallback: llama-3.1-8b-instant kept for speed cases
Also fixed
- `vision.py` now strips `...` reasoning tags from Qwen's OCR responses so extracted text doesn't get polluted with the model's chain-of-thought.
- `settings.py` Test-API-Key button now pulls the model from `GROQ_MODELS[0]` instead of hardcoding, so future model rotations don't break the test.
Cerebras untouched
Their `llama-3.3-70b` is a separate model, not affected by Groq's deprecation.
Installation
Same as v3.2.1: download the zip, extract anywhere, run Hotkeys.exe. If upgrading, replace the folder.