Skip to content

Releases: sprawf/hotkeys

v3.3.1 - Ask Docs toolbar tab + retrieval overhaul + 3rd Groq key

Choose a tag to compare

@sprawf sprawf released this 18 Jul 17:50

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)

Choose a tag to compare

@sprawf sprawf released this 17 Jul 18:44

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-v2 ONNX 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-whisper small 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.py grew 3 new checks (ask_docs subpackage, MiniLM ONNX ≥80MB, tokenizer.json). Build fails non-zero if any missing.
  • hotkeys.spec bundles 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)

Choose a tag to compare

@sprawf sprawf released this 17 Jul 09:01

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)
  • Retired zai-glm-4.7 (deprecating Aug 17). Config migration silently upgrades any existing user config naming these models to gpt-oss-120b on 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.py shipped 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

Choose a tag to compare

@sprawf sprawf released this 17 Jul 08:30

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 TextPattern is 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 GetGUIThreadInfo and 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.py verified present in every dist via verify_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-reshaper bundled 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)

Choose a tag to compare

@sprawf sprawf released this 16 Jul 23:58

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+Space works as a second STT hotkey alongside Ctrl+Enter

Quick Notes

  • Bare Home key as a second toggle hotkey alongside Shift+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_cffi bundled: 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.py to 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)

Choose a tag to compare

@sprawf sprawf released this 16 Jul 21:49

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.py sets WEBVIEW2_BROWSER_EXECUTABLE_FOLDER env 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

Choose a tag to compare

@sprawf sprawf released this 16 Jul 20:36

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, .aup3 file-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

Choose a tag to compare

@sprawf sprawf released this 16 Jul 19:33

What's new in v3.2.4

Voice-to-text

  • New: Alt+Space works as a second STT hotkey alongside Ctrl+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, or Cloud 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_cffi bundled: 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 .aup3 files 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

Choose a tag to compare

@sprawf sprawf released this 05 Jul 04:48

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

Choose a tag to compare

@sprawf sprawf released this 03 Jul 07:54

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.