Release v2026.9.0
Downloads
| OS | Download |
|---|---|
| Windows | GameSentenceMiner-Setup-2026.9.0.exe |
| Windows (unpacked) | GameSentenceMiner-2026.9.0-win-unpacked.zip |
| Linux | GameSentenceMiner-2026.9.0.AppImage |
| macOS (Apple Silicon) | GameSentenceMiner-2026.9.0-arm64.dmg |
Intel Mac builds are no longer provided. If you need GSM on Intel Mac, run it from source.
What's Changed
GameSentenceMiner 2026.9.0 leads with Linux/Wine text hooking, adds an opt-in Overlay text-presence check and experimental Windows Speech Recognition, then expands OCR-area editing, game and text-hook support, controller-driven mining, local transport recovery, and troubleshooting across NVL games, Wayland, and Windows.
Highlights
- Added Linux Wine/Proton text hooking for supported games, with stronger window/process resolution and Wayland compatibility.
- Added an opt-in Overlay text-presence check that clears stale lookups when the last OCR text is no longer visible, without issuing another OCR request.
- Added experimental Windows Speech Recognition for English and Japanese game audio. You can enable this in the Settings Tab by selecting that tab. It's pretty niche since most games have subtitles and OCR is 1000x more accurate.
- Added a hosted OCR Area Selector at
/select_areasthat can edit scene configurations from any browser connected to the GSM server, using a live OBS frame or a local image. - Improved NVL and controller-driven mining: appended dialogue stays separated, the latest line receives focus, Anki can identify the correct captured line from context, Yomitan lookups are more stable.
- Mouse side-button bindings are available to use in the overlay.
- Updated Agent to use QuickJS which is much faster and more reliable, and added an option to detach agent sessions (useful for emulators in case you need to restart GSM)
Try it: clear stale Overlay lookups when text disappears
This experimental Overlay option watches the tight crop of the last OCR result. When that text is no longer visible, GSM invalidates its lookup target, so the Overlay no longer treats an old line as if it were still on screen. No additional OCR request is made.
Why enable it?
- Lookups disappear with the text, freeing the mouse to move around the game without selecting a stale result.
- Yomitan and controller lookups cannot act on dialogue that has already advanced.
- It makes rapid scene changes, menus, and auto-advancing dialogue feel less "sticky."
- The capture stays focused on the last text crop instead of re-scanning the whole screen.
Trade-offs
- A visual change near the text can occasionally look like the text disappeared, causing a false positive.
- The image comparison runs in the background while a result is active, so it uses a small amount of additional CPU.
- If you prefer persistent lookups while reading slowly, leave it off.
Enable stale-lookup invalidation
Keep stale-lookup invalidation disabled
Windows Speech Recognition
- Added native Windows process-loopback audio capture plus embedded Microsoft speech and SAPI helper backends.
- Added an opt-in Windows Speech tab with scene selection, per-scene settings, start/stop controls, status, and a session-local recognition log.
- Recognition stays attached to the GSM/OBS target while another app has focus, and it invalidates immediately when the OBS scene changes.
- Partial hypotheses revise one text-feed record until the final result arrives, avoiding a trail of duplicate fragments.
- The embedded backend downloads its model/runtime bundle on first use (about 358 MB compressed and 492 MB extracted), reuses the local cache afterward, and supports advanced path and license overrides.
- Packaged Windows builds now compile and include the Rust audio helper and C++ recognition helpers automatically.
Windows Speech Recognition demo
Text Capture, Overlay, and Mining
- Added a hosted OCR Area Selector at
/select_areas. It lists scene and overlay configs, can capture the current OBS frame or open a local image, supports normal, exclusion, secondary, exclusive, and black-hole regions, and saves changes back in the format used by GSM. Saving invalidates the OCR caches so the running process can use the updated areas. - Made the hosted selector fit its complete toolbar inside the available screen work area and tolerate maximize/snap resizes without distorting the capture geometry.
- Preserved recent overlay block boundaries so NVL games can append new dialogue without merging it into older visible text.
- Matched mined lines using the bold expression occurrence and aligned surrounding context, including cases where OCR or hooks transliterate part of the sentence.
- Added a default-on General option to remove the matching cumulative prefix from subsequent text-hook lines, so hooks that repeatedly send a growing buffer produce only the newly appended text.
- Suppressed consecutive duplicate observations and centralized skip-spam filtering across text sources.
- Local OCR1 now compares the active text crop against recent frames, keeps the initial warm-up calls, and skips redundant OCR work until the crop changes. The gate falls back to running OCR when the crop or frame cannot be compared safely.
- Avoided stale Yomitan lookups after overlay token refreshes.
- Game-library artwork is excluded from Yomitan scans, preventing images and controls on the library page from becoming accidental lookup targets.
- Improved OWocr ordering and reduced OCR runtime and memory overhead.
- Replay-buffer expiry events now update the TextFeed state without restarting a paused-feed timer; active authoritative lines still resume it when configured to do so.
Hooks, Controllers, and Automation
- Enabled Linux Wine/Proton text hooking and improved window/process resolution for supported hooks.
- Added the Unity/TextMeshPro Aokana engine hook and supporting decoder/probe tooling. (Untested, Thanks @manhao)
- The VLR Zero Escape hook now emits plain text when glyph layout extraction fails, so dialogue remains mineable even when positioned overlay data is unavailable.
- Switched Frida Agent scripts to QuickJS and improved script matching from captured game titles.
- Windows Agent hooks can run in a detached host process that survives GSM closing and restarting; the Text Hook tab reconnects to the session when GSM starts again and exposes its detached status.
- Added opt-in gamepad actions to Anki confirmation, made button choices explicit, and stabilized Yomitan navigation.
- Gamepad overlay navigation now focuses the latest captured line, with an NVL fallback that chooses the lowest block in the current appended dialogue chain.
- Anki confirmation warns when a gamepad audio choice conflicts with completed voice-activity detection; the warning can be confirmed or cancelled with the configured gamepad buttons.
- Added mouse side-button hotkeys and improved automatic scene/window handling.
- OBS scene switching now rechecks the foreground window and actual OBS scene continuously, retries unverified switches, and releases stale manual holds when focus returns to GSM.
- Stopped Discord waiting-status updates and consistently used the master Discord settings.
Linux and Wayland
- Added Wayland-compatible OBS and overlay capture paths, plus clearer guidance for optional PipeWire cropping.
- Installed a stable hidden desktop identity for AppImage profiles and supported Electron 42's desktop identity behavior.
- Made Wayland portal prerelease packaging more deterministic.
Desktop, Library, and Stats
- Organized optional tools into focused tabs, expanded settings search, and compacted OCR controls.
- Added renderer development previews for faster UI iteration.
- Expanded game-library status, detail, completion, difficulty, and reading-statistics presentation.
- Daily hour goals retain minutes in their progress and required values instead of rounding a short goal up to a full hour.
- Improved Tadoku synchronization time handling and hid completed live goals.
Reliability and Release Engineering
- Reduced memory pressure and refreshed npm and Python lock metadata across the beta line.
- Prevented the Discord RPC worker from holding Python open after GSM or the test suite finishes.
- Preserved Python post-release version suffixes during version synchronization.
- Moved development releases to
main, improved prerelease workflows, and repaired cross-platform release-test fixtures. - Let CMake select the installed Windows toolchain when building speech-recognition helpers.
- The Rust input server now asks the OS for an available port, announces the bound loopback endpoint after binding, and passes that exact endpoint to Electron and overlay children, avoiding check-then-bind races and hard-coded-port conflicts.
- Overlay and TextHooker WebSockets now discover the live direct ingress when the single-port gateway fails. The Advanced
Direct WebSocket Port (Fallback)setting can reserve a stable direct port;0uses automatic fallback discovery, and conflicting primary/input-server ports are rejected. - Missing legacy OWOCR config files now use in-memory defaults without creating a hidden file or downloading one. Existing files remain readable for compatibility.
- Pinned
aiohttpto 3.14.1 for a consistent runtime dependency. - Added
scripts/GSM-Troubleshoot.ps1, a Windows collector that records redacted config, environment, process, port, HTTP/WebSocket, graphics, Defender, and log diagnostics. It can also perform reversible OneOCR-cache and OBS-backend repairs with backups. - Updated star-history automation and its generated chart.
Commit Inventory
d0f396cf- Add Unity/TextMeshPro engine hook for Aokana/Aokana EXTRA1/Aokana EXTRA2 (#559)02927479- Tadoku sync time, OWocr ordering, UI & tests455fb9f6- Suppress consecutive duplicate text observationsaf5f647b- Improve text hook guidanceae7c11e7- Compact OCR controlsa09f38b5- Add renderer development previews953d6b62- Use master Discord settings for activity updatesf51095d0- Preserve Python post-release versions during sync40a475ad- Avoid lookups after overlay token refreshes17c69143- Improve Agent script search from captured titles1f13361e- Add opt-in gamepad controls to Anki confirmationf90569b6- Expand game library status and detail statisticsfe425bf8- Organize optional features into focused tabs3d6a9246- Expand the settings search cataloguea76e5958- ci: use write token for star history push2f5d1edf- chore: update star history chart [skip ci]63a939c6- Merge branch 'main' of https://github.com/bpwhelan/GameSentenceMiner58b047e4- fix: stabilize gamepad Yomitan lookups674f3791- feat: support mouse side-button hotkeys8bda3320- feat: hide completed live goals055e3226- fix: centralize skip-spam filtering67794745- feat: make Anki gamepad choices explicitdc101f74- fix: stop Discord waiting status updatescc7d1814- chore: refresh uv lock metadata9c1c0e3a- feat: enable Linux Wine text hooking (#561)140ee2cd- Run development release workflow from main65d41e86- fix: add Wayland compatibility for overlay and OBS5acd7f51- fix: explain optional PipeWire capture cropping6fd8aa83- fix: support Electron 42 desktop identityba859689- fix: make Wayland portal prereleases reliable2b70be65- memory fixes, npm bumps180e5d60- chore: update star history chart [skip ci]65f734c0- fix: preserve appended NVL overlay blocksacc9002c- fix: match mined lines by highlighted context3f1d3ccb- feat: add opt-in Windows speech recognition04fe7cdc- chore: rely on default NSIS one-click modef0ae8ddb- fix: run Frida agent scripts with QuickJS42241bb5- test: repair cross-platform release checksa286242b- fix: let Discord RPC exit with the app532ab50d- chore: ignore native extension swap files3e93da4b- fix: detect the installed Windows build toolchainef9a8aa8- Add hosted OCR area selector73b49ad1- feat: strip cumulative text hook prefixes2d068047- fix: confirm conflicting gamepad audio choices432df422- feat: focus overlay controls on the latest texte2c8c0a7- fix: exclude game artwork from Yomitan scansdd6e77a4- style: format Yomitan manifest27b38e9d- fix: retain minutes in daily goal displays5049c9e9- fix: emit VLR text when layout extraction fails767c2c87- feat: keep Agent hooks running across GSM restartscb598468- fix: continuously reconcile OBS scene switching4e191bb0- chore: sync package version in uv lockfile26fb89b8- Add overlay text presence monitoring59664e0c- chore: pin aiohttp to 3.14.197c78953- fix: publish the input server's bound endpoint07286f73- fix: skip redundant OCR frames safely1a84fa8e- fix: keep replay expiry from restarting textfeeddd2fd6ca- chore: add GSM troubleshooting collector89b9f7f5- Remove legacy owocr config, fix texthooker unpausing, websocket fallback + config
Release Metadata
- Stable baseline:
v2026.8.2, published 2026-08-20. - Repository comparison:
v2026.8.2...main. - New-release commit window:
v2026.8.2..main. - Reviewed head:
mainat89b9f7f5. - Reviewed behavior and CI scope: 59 commits across 279 changed files, excluding the release-prep metadata commits
f62daa92and7f9d49bf.


