From b0a8b6b3fce48176c25e71e27e9cd855bf8c1f90 Mon Sep 17 00:00:00 2001 From: sudacode Date: Sat, 24 Oct 2026 21:56:02 -0700 Subject: [PATCH] chore(release): prepare v0.21.0 --- CHANGELOG.md | 45 ++++++++++++++ changes/e2e-harness.md | 4 -- changes/fix-timing-review-playback-hold.md | 4 -- changes/hachidori-backend.md | 7 --- changes/hachidori-fork.md | 4 -- changes/hachidori-setup-docs.md | 4 -- changes/jellyfin-cli-running-app.md | 7 --- changes/jellyfin-startup-connect-docs.md | 4 -- changes/jellyfin-subtitle-generation.md | 4 -- changes/keyboard-mode-modal-input.md | 4 -- changes/macos-login-shell-path.md | 4 -- changes/macos-mpv-discovery-docs.md | 4 -- changes/macos-mpv-discovery.md | 5 -- changes/overlay-modal-first-open.md | 4 -- ...atched-electron-undici-follow-redirects.md | 4 -- changes/prefetch-startup-restarts.md | 5 -- changes/remove-dead-code-docs.md | 4 -- changes/remove-dead-code.md | 5 -- changes/remove-dead-ipc.md | 4 -- changes/setup-launcher-badge-label.md | 4 -- changes/sidebar-snapshot-poll.md | 4 -- changes/stats-mining-history-line.md | 4 -- changes/stats-widen-halfwidth-kana.md | 5 -- changes/tracker-async-poll.md | 5 -- changes/widen-halfwidth-kana.md | 4 -- docs-site/changelog.md | 56 ++++++++++++++++- package.json | 2 +- release/release-notes.md | 60 +++++++++++++++++++ 28 files changed, 159 insertions(+), 111 deletions(-) delete mode 100644 changes/e2e-harness.md delete mode 100644 changes/fix-timing-review-playback-hold.md delete mode 100644 changes/hachidori-backend.md delete mode 100644 changes/hachidori-fork.md delete mode 100644 changes/hachidori-setup-docs.md delete mode 100644 changes/jellyfin-cli-running-app.md delete mode 100644 changes/jellyfin-startup-connect-docs.md delete mode 100644 changes/jellyfin-subtitle-generation.md delete mode 100644 changes/keyboard-mode-modal-input.md delete mode 100644 changes/macos-login-shell-path.md delete mode 100644 changes/macos-mpv-discovery-docs.md delete mode 100644 changes/macos-mpv-discovery.md delete mode 100644 changes/overlay-modal-first-open.md delete mode 100644 changes/patched-electron-undici-follow-redirects.md delete mode 100644 changes/prefetch-startup-restarts.md delete mode 100644 changes/remove-dead-code-docs.md delete mode 100644 changes/remove-dead-code.md delete mode 100644 changes/remove-dead-ipc.md delete mode 100644 changes/setup-launcher-badge-label.md delete mode 100644 changes/sidebar-snapshot-poll.md delete mode 100644 changes/stats-mining-history-line.md delete mode 100644 changes/stats-widen-halfwidth-kana.md delete mode 100644 changes/tracker-async-poll.md delete mode 100644 changes/widen-halfwidth-kana.md create mode 100644 release/release-notes.md diff --git a/CHANGELOG.md b/CHANGELOG.md index da526ce2..ef8adc04 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,50 @@ # Changelog +## v0.21.0 (2026-10-24) + +### Added +- **Hachidori Dictionary Backend**: + - Hachidori is now bundled as an alternative to Yomitan. Select it with `dictionaryBackend`, then restart SubMiner. + - It works with subtitle scanning, popups, frequency highlighting, character dictionaries, Anki mining, and stats dashboard mining. + - First-run setup builds Hachidori's Anki template from your SubMiner settings. It can also link an external Hachidori app, browser, or Docker host. + - The tray and dictionary-settings shortcut open settings for the active backend. Use `--hachidori` or `--yomitan` to open a specific one. +- **Jellyfin Subtitle Generation**: You can now generate Japanese subtitles while playing a Jellyfin episode, with both direct play and transcoded playback. + +### Fixed +- **Jellyfin**: + - `subminer jellyfin -p` now lists libraries and shows image previews when SubMiner is already running. Real errors are shown instead of an empty list. + - Watch progress from terminal playback is reported to Jellyfin even with cast discovery off. + - When `subminer jellyfin -p` starts SubMiner, the app shows its tray icon and quits when mpv closes. + - Casting on macOS now finds mpv when SubMiner is opened from Finder, the Dock, or Spotlight. +- **Halfwidth Katakana**: Halfwidth katakana in subtitles now displays as fullwidth, including in mined cards and older stats lines. Stats sentence search matches katakana in either width. +- **Media Timing Review**: The review opens on the first attempt instead of after a delay. Playback stays paused while it is open. +- **Subtitle Annotations**: Lines shown while two cues overlap now get annotations right away. Prefetching no longer restarts during startup. +- **Keyboard-Only Mode**: `h`, `l`, and the arrow keys now work for typing in modal text fields instead of seeking mpv. +- **Stats Dashboard Mining**: Cards mined from the stats dashboard keep the selected history line and media. +- **Hyprland and Sway**: The app no longer freezes when `hyprctl` or `swaymsg` is slow or hangs. +- **Subtitle Sidebar**: The open sidebar does much less background work during playback. +- **macOS Launcher Status**: The command-line launcher no longer shows "Not on PATH" when SubMiner is opened from Finder or the Dock. +- **Security Updates**: Updated Electron, undici, and follow-redirects to address security advisories. + +### Docs +- **Hachidori Setup**: Documented backend selection, Hachidori dictionary and Anki setup, settings shortcuts, and external host linking. +- **Jellyfin Casting**: Explained when SubMiner joins the cast menu at startup, and how casting finds mpv on each platform. Added a troubleshooting entry for casts that never start mpv. +- **Jimaku Key**: Removed environment variables that never had any effect. Set the key with `jimaku.apiKey` or `jimaku.apiKeyCommand`. + +
+Internal changes + +### Internal +- **End-to-End Harness**: Added a headless e2e harness (`bun run test:e2e`, `bun run e2e`) with real mpv, a fixture dictionary, and a fake AnkiConnect. +- **Hachidori Fork**: The bundled Hachidori integration lives in a pinned fork submodule. +- **Dead Code Removal**: + - Removed the unused launcher Jimaku client, the mpv plugin hover-highlight module, and the unused character dictionary config keys. + - Removed 16 unused overlay IPC methods. SubMiner no longer forwards every ASS line to the overlay. + - Typecheck now runs with `noUnusedLocals`. +- **Setup Launcher Label**: First-run setup now labels a missing launcher "Not set up" instead of "Not installed". + +
+ ## v0.20.1 (2026-10-03) ### Added diff --git a/changes/e2e-harness.md b/changes/e2e-harness.md deleted file mode 100644 index be395a81..00000000 --- a/changes/e2e-harness.md +++ /dev/null @@ -1,4 +0,0 @@ -type: internal -area: testing - -- Added a headless end-to-end harness (`bun run test:e2e`, `bun run e2e`) that boots the built app with a real mpv, a synthetic clip, a fixture Yomitan dictionary, and a fake AnkiConnect on an offscreen display. diff --git a/changes/fix-timing-review-playback-hold.md b/changes/fix-timing-review-playback-hold.md deleted file mode 100644 index 96fc820a..00000000 --- a/changes/fix-timing-review-playback-hold.md +++ /dev/null @@ -1,4 +0,0 @@ -type: fixed -area: anki - -- Media timing review now keeps playback paused while it is open when the dictionary popup or subtitle hover pause ends, as with Hachidori popups closing when the review appears. Playback resumes after the review closes unless a dictionary popup is still open. diff --git a/changes/hachidori-backend.md b/changes/hachidori-backend.md deleted file mode 100644 index 26e140ef..00000000 --- a/changes/hachidori-backend.md +++ /dev/null @@ -1,7 +0,0 @@ -type: added -area: dictionary - -- Added a bundled Hachidori dictionary backend as an alternative to the default Yomitan backend. Select it with `dictionaryBackend` and restart SubMiner. Each backend keeps its own dictionaries and settings, and switching back does not repeat first-run setup. -- Hachidori works with subtitle scanning, popup controls, frequency highlighting, character dictionaries, Anki media enrichment, and stats dashboard mining. -- First-run setup fills in Hachidori's first Anki template from SubMiner's deck, tags, and field mappings. It can also link an external Hachidori host (app, browser, or Docker container) while Anki mining stays in SubMiner. Character dictionaries reach a linked host with Hachidori 0.2.3 or later. -- The tray and dictionary-settings shortcut open settings for the selected backend. `--hachidori` and `--yomitan` open a specific one. diff --git a/changes/hachidori-fork.md b/changes/hachidori-fork.md deleted file mode 100644 index 6efce29a..00000000 --- a/changes/hachidori-fork.md +++ /dev/null @@ -1,4 +0,0 @@ -type: internal -area: dictionary - -- The bundled Hachidori integration is maintained in a pinned fork submodule using upstream HoshiDicts and WASM binaries. diff --git a/changes/hachidori-setup-docs.md b/changes/hachidori-setup-docs.md deleted file mode 100644 index 30697ac0..00000000 --- a/changes/hachidori-setup-docs.md +++ /dev/null @@ -1,4 +0,0 @@ -type: docs -area: dictionary - -- Documented backend selection, separate Hachidori dictionary and Anki setup, the settings flags and shortcuts, and external host linking with local Anki mining and the running requirements for each host type. diff --git a/changes/jellyfin-cli-running-app.md b/changes/jellyfin-cli-running-app.md deleted file mode 100644 index e8489300..00000000 --- a/changes/jellyfin-cli-running-app.md +++ /dev/null @@ -1,7 +0,0 @@ -type: fixed -area: jellyfin - -- Fixed `subminer jellyfin -p` reporting "No Jellyfin libraries found." when SubMiner was already running (for example right after `subminer jellyfin` login). The app now hands library, item, and preview-auth results to the launcher directly instead of through log files, so picker image previews work again and real errors (expired session, unreachable server) are shown instead of an empty list. -- The rofi "Jellyfin Search (optional)" step after picking a library is now a compact input box with a "Type to search, or press Enter to browse all" hint instead of a blank list. -- Playing from the terminal (`subminer jellyfin -p`) now reports watch progress to Jellyfin even when cast discovery is off, so Jellyfin remembers where you stopped and marks finished episodes as played. Previously progress was only sent while the cast connection was active. -- When `subminer jellyfin -p` has to start SubMiner itself, the app now shows its tray icon and quits when you close mpv, the same as playing a local file. Before, it had no tray icon and kept running hidden after playback. A SubMiner that was already running is still reused and left running. diff --git a/changes/jellyfin-startup-connect-docs.md b/changes/jellyfin-startup-connect-docs.md deleted file mode 100644 index 98baf975..00000000 --- a/changes/jellyfin-startup-connect-docs.md +++ /dev/null @@ -1,4 +0,0 @@ -type: docs -area: jellyfin - -- Corrected the Jellyfin docs: SubMiner only joins the cast menu at startup when `startupWarmups.jellyfinRemoteSession` is on (off by default) along with `jellyfin.remoteControlAutoConnect`. Otherwise tick **Jellyfin Discovery** in the tray. diff --git a/changes/jellyfin-subtitle-generation.md b/changes/jellyfin-subtitle-generation.md deleted file mode 100644 index 40880547..00000000 --- a/changes/jellyfin-subtitle-generation.md +++ /dev/null @@ -1,4 +0,0 @@ -type: added -area: subtitles - -- Japanese subtitle generation now works while playing a Jellyfin episode. SubMiner reads the original file from the server, saves the subtitles to a cache folder, and loads them into mpv. Direct-play and transcoded playback are both supported. diff --git a/changes/keyboard-mode-modal-input.md b/changes/keyboard-mode-modal-input.md deleted file mode 100644 index 91086069..00000000 --- a/changes/keyboard-mode-modal-input.md +++ /dev/null @@ -1,4 +0,0 @@ -type: fixed -area: overlay - -- Keyboard-only mode no longer swallows `h`, `l`, and the left/right arrows while a modal is open or a text field has focus, so typing into fields like the Jimaku or TsukiHime title works and no longer seeks mpv. Pressing `Ctrl/Cmd+Shift+Y` (or the controller toggle) inside a modal no longer turns on a hidden keyboard-only mode in the modal window. diff --git a/changes/macos-login-shell-path.md b/changes/macos-login-shell-path.md deleted file mode 100644 index d74b8069..00000000 --- a/changes/macos-login-shell-path.md +++ /dev/null @@ -1,4 +0,0 @@ -type: fixed -area: setup - -- Fixed the command-line launcher showing "Not on PATH" on macOS when SubMiner was opened from Finder or the Dock, even though the launcher directory was already on your terminal PATH. diff --git a/changes/macos-mpv-discovery-docs.md b/changes/macos-mpv-discovery-docs.md deleted file mode 100644 index b39dd2bf..00000000 --- a/changes/macos-mpv-discovery-docs.md +++ /dev/null @@ -1,4 +0,0 @@ -type: docs -area: docs - -- Documented how casting finds mpv on every platform, added a troubleshooting entry for casts that never start mpv, and noted that macOS 27 renames the Accessibility privacy list to "Device Control and Data Access". diff --git a/changes/macos-mpv-discovery.md b/changes/macos-mpv-discovery.md deleted file mode 100644 index 79fa6a56..00000000 --- a/changes/macos-mpv-discovery.md +++ /dev/null @@ -1,5 +0,0 @@ -type: fixed -area: jellyfin - -- Fixed casting from Jellyfin on macOS when SubMiner is opened from Finder, the Dock, or Spotlight. SubMiner now honors `mpv.executablePath` and `SUBMINER_MPV_PATH` on macOS and Linux, and on macOS also finds mpv in `/opt/homebrew/bin`, `/usr/local/bin`, and `/Applications/mpv.app` instead of failing with `connect ENOENT /tmp/subminer-socket`. -- The subtitle timing preview uses the same mpv lookup. diff --git a/changes/overlay-modal-first-open.md b/changes/overlay-modal-first-open.md deleted file mode 100644 index 88adb937..00000000 --- a/changes/overlay-modal-first-open.md +++ /dev/null @@ -1,4 +0,0 @@ -type: fixed -area: overlay - -- Overlay modals such as the media timing review open on the first attempt when their dedicated window is created on demand, instead of after a four-second retry. diff --git a/changes/patched-electron-undici-follow-redirects.md b/changes/patched-electron-undici-follow-redirects.md deleted file mode 100644 index 11954c4e..00000000 --- a/changes/patched-electron-undici-follow-redirects.md +++ /dev/null @@ -1,4 +0,0 @@ -type: fixed -area: dependencies - -- Updated Electron to 43.8.3 and undici to 7.30.1, and pinned follow-redirects to 1.16.1, to resolve new security advisories. diff --git a/changes/prefetch-startup-restarts.md b/changes/prefetch-startup-restarts.md deleted file mode 100644 index dc8c5d5c..00000000 --- a/changes/prefetch-startup-restarts.md +++ /dev/null @@ -1,5 +0,0 @@ -type: fixed -area: annotations - -- Subtitle lines shown while two cues overlap (common in Jimaku and Jellyfin SRTs, and usually the long lines) are now prefetched, so their annotations appear immediately instead of after a delay. -- Subtitle prefetching no longer restarts each time the same subtitle file is re-selected during startup, and a line tokenized before a restart or seek is kept instead of discarded. diff --git a/changes/remove-dead-code-docs.md b/changes/remove-dead-code-docs.md deleted file mode 100644 index dda0f1dd..00000000 --- a/changes/remove-dead-code-docs.md +++ /dev/null @@ -1,4 +0,0 @@ -type: docs -area: launcher - -- Removed `SUBMINER_JIMAKU_API_KEY`, `SUBMINER_JIMAKU_API_KEY_COMMAND`, and `SUBMINER_JIMAKU_API_BASE_URL` from the development docs' environment variable table. The launcher never used them; set the Jimaku key with `jimaku.apiKey` / `jimaku.apiKeyCommand` in the config instead. diff --git a/changes/remove-dead-code.md b/changes/remove-dead-code.md deleted file mode 100644 index cb0291c9..00000000 --- a/changes/remove-dead-code.md +++ /dev/null @@ -1,5 +0,0 @@ -type: internal -area: cleanup - -- Removed dead code: the unused launcher Jimaku client (the `SUBMINER_JIMAKU_*` env vars it read were documented but had no effect), the mpv plugin's hover-highlight module (no sender since Overlay 2.0; custom mpv scripts that still send `subminer-hover-token` or `yomipv-hover-token` are now ignored), the never-read `anilist.characterDictionary.refreshTtlHours` / `evictionPolicy` config keys, unused root dependencies (eslint, geist fonts), and a committed draft plan doc. -- Typecheck now runs with `noUnusedLocals`; removed the unused locals, imports, and the Windows overlay focus-handoff values they fed, which were computed but never used. diff --git a/changes/remove-dead-ipc.md b/changes/remove-dead-ipc.md deleted file mode 100644 index 5b8146e7..00000000 --- a/changes/remove-dead-ipc.md +++ /dev/null @@ -1,4 +0,0 @@ -type: internal -area: overlay - -- Removed 16 overlay preload/IPC methods that nothing called, plus their main-process handlers. SubMiner no longer observes mpv's `sub-text/ass` or sends every ASS line to overlay windows that never listened. diff --git a/changes/setup-launcher-badge-label.md b/changes/setup-launcher-badge-label.md deleted file mode 100644 index 4bacad90..00000000 --- a/changes/setup-launcher-badge-label.md +++ /dev/null @@ -1,4 +0,0 @@ -type: internal -area: setup - -- First-run setup now labels a missing command-line launcher "Not set up" instead of "Not installed" so the AppImage catalog test no longer reads the setup window as an error screen. diff --git a/changes/sidebar-snapshot-poll.md b/changes/sidebar-snapshot-poll.md deleted file mode 100644 index d3272ab8..00000000 --- a/changes/sidebar-snapshot-poll.md +++ /dev/null @@ -1,4 +0,0 @@ -type: fixed -area: overlay - -- The open subtitle sidebar no longer re-fetches the whole subtitle list and re-queries mpv about 12 times a second. It polls only the current time and line, and reloads the list when the subtitle track, file, or parsed cues change (plus a slow ~2 s fallback), cutting idle sidebar IPC and renderer work during playback. diff --git a/changes/stats-mining-history-line.md b/changes/stats-mining-history-line.md deleted file mode 100644 index c3c480ee..00000000 --- a/changes/stats-mining-history-line.md +++ /dev/null @@ -1,4 +0,0 @@ -type: fixed -area: stats - -- Cards mined from the stats dashboard keep the selected history line and media instead of being rebuilt from the current mpv subtitle. Stats cards carry a `SubMiner::Stats` tag so polling mode preserves their context too. diff --git a/changes/stats-widen-halfwidth-kana.md b/changes/stats-widen-halfwidth-kana.md deleted file mode 100644 index 7daa6217..00000000 --- a/changes/stats-widen-halfwidth-kana.md +++ /dev/null @@ -1,5 +0,0 @@ -type: fixed -area: stats - -- Subtitle lines recorded before halfwidth katakana widening now show fullwidth katakana in the stats dashboard (word/kanji occurrences, sentence search), and cards mined from stats history get the fullwidth sentence and word. -- Sentence search matches katakana in either width, so searching アンタ also finds older lines stored as アンタ. diff --git a/changes/tracker-async-poll.md b/changes/tracker-async-poll.md deleted file mode 100644 index 21a116de..00000000 --- a/changes/tracker-async-poll.md +++ /dev/null @@ -1,5 +0,0 @@ -type: fixed -area: overlay - -- Hyprland and Sway window tracking no longer freezes the app when `hyprctl` or `swaymsg` is slow or hangs: polls now run in the background with a timeout and no longer pile up. -- The Hyprland/Sway trackers read each mpv process's command line once instead of spawning `ps` on every poll. diff --git a/changes/widen-halfwidth-kana.md b/changes/widen-halfwidth-kana.md deleted file mode 100644 index f28066a2..00000000 --- a/changes/widen-halfwidth-kana.md +++ /dev/null @@ -1,4 +0,0 @@ -type: fixed -area: overlay - -- Halfwidth katakana in subtitles (common in broadcast-derived Japanese subs, e.g. アンタ, ダキニ) now displays as normal fullwidth katakana, so lines no longer mix squashed and normal-width text. Mined sentences and stats get the fullwidth form too. diff --git a/docs-site/changelog.md b/docs-site/changelog.md index 0eac81a4..4c02c132 100644 --- a/docs-site/changelog.md +++ b/docs-site/changelog.md @@ -1,6 +1,56 @@ # Changelog -## v0.20.1 (2026-10-03) +## v0.21.0 (2026-10-24) + +**Added** +- **Hachidori Dictionary Backend**: + - Hachidori is now bundled as an alternative to Yomitan. Select it with `dictionaryBackend`, then restart SubMiner. + - It works with subtitle scanning, popups, frequency highlighting, character dictionaries, Anki mining, and stats dashboard mining. + - First-run setup builds Hachidori's Anki template from your SubMiner settings. It can also link an external Hachidori app, browser, or Docker host. + - The tray and dictionary-settings shortcut open settings for the active backend. Use `--hachidori` or `--yomitan` to open a specific one. +- **Jellyfin Subtitle Generation**: You can now generate Japanese subtitles while playing a Jellyfin episode, with both direct play and transcoded playback. + +**Fixed** +- **Jellyfin**: + - `subminer jellyfin -p` now lists libraries and shows image previews when SubMiner is already running. Real errors are shown instead of an empty list. + - Watch progress from terminal playback is reported to Jellyfin even with cast discovery off. + - When `subminer jellyfin -p` starts SubMiner, the app shows its tray icon and quits when mpv closes. + - Casting on macOS now finds mpv when SubMiner is opened from Finder, the Dock, or Spotlight. +- **Halfwidth Katakana**: Halfwidth katakana in subtitles now displays as fullwidth, including in mined cards and older stats lines. Stats sentence search matches katakana in either width. +- **Media Timing Review**: The review opens on the first attempt instead of after a delay. Playback stays paused while it is open. +- **Subtitle Annotations**: Lines shown while two cues overlap now get annotations right away. Prefetching no longer restarts during startup. +- **Keyboard-Only Mode**: `h`, `l`, and the arrow keys now work for typing in modal text fields instead of seeking mpv. +- **Stats Dashboard Mining**: Cards mined from the stats dashboard keep the selected history line and media. +- **Hyprland and Sway**: The app no longer freezes when `hyprctl` or `swaymsg` is slow or hangs. +- **Subtitle Sidebar**: The open sidebar does much less background work during playback. +- **macOS Launcher Status**: The command-line launcher no longer shows "Not on PATH" when SubMiner is opened from Finder or the Dock. +- **Security Updates**: Updated Electron, undici, and follow-redirects to address security advisories. + +**Docs** +- **Hachidori Setup**: Documented backend selection, Hachidori dictionary and Anki setup, settings shortcuts, and external host linking. +- **Jellyfin Casting**: Explained when SubMiner joins the cast menu at startup, and how casting finds mpv on each platform. Added a troubleshooting entry for casts that never start mpv. +- **Jimaku Key**: Removed environment variables that never had any effect. Set the key with `jimaku.apiKey` or `jimaku.apiKeyCommand`. + +
+Internal changes + +**Internal** +- **End-to-End Harness**: Added a headless e2e harness (`bun run test:e2e`, `bun run e2e`) with real mpv, a fixture dictionary, and a fake AnkiConnect. +- **Hachidori Fork**: The bundled Hachidori integration lives in a pinned fork submodule. +- **Dead Code Removal**: + - Removed the unused launcher Jimaku client, the mpv plugin hover-highlight module, and the unused character dictionary config keys. + - Removed 16 unused overlay IPC methods. SubMiner no longer forwards every ASS line to the overlay. + - Typecheck now runs with `noUnusedLocals`. +- **Setup Launcher Label**: First-run setup now labels a missing launcher "Not set up" instead of "Not installed". + +
+ +## Previous Versions + +
+v0.20.x + +

v0.20.1 (2026-10-03)

**Added** - **YouTube Browser Window**: @@ -50,7 +100,7 @@
-## v0.20.0 (2026-09-23) +

v0.20.0 (2026-09-23)

**Added** - **Japanese Subtitle Generation**: @@ -171,7 +221,7 @@ -## Previous Versions +
v0.19.x diff --git a/package.json b/package.json index ca138b9d..1bc87195 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "subminer", "productName": "SubMiner", "desktopName": "SubMiner.desktop", - "version": "0.20.1", + "version": "0.21.0", "description": "All-in-one sentence mining overlay with AnkiConnect and dictionary integration", "packageManager": "bun@1.3.5", "main": "dist/main-entry.js", diff --git a/release/release-notes.md b/release/release-notes.md new file mode 100644 index 00000000..0ee4fbf6 --- /dev/null +++ b/release/release-notes.md @@ -0,0 +1,60 @@ +## Highlights +### Added +- **Hachidori Dictionary Backend**: Bundled Hachidori backend as an alternative to Yomitan. Select it with `dictionaryBackend` and restart SubMiner. + - Works with subtitle scanning, popups, frequency highlighting, character dictionaries, Anki mining, and stats dashboard mining. + - First-run setup builds Hachidori's Anki template from your existing SubMiner deck, tags, and field mappings. + - Can link an external Hachidori app, browser, or Docker host while Anki mining stays in SubMiner. + - The tray and dictionary-settings shortcut open the selected backend's settings. `--hachidori` and `--yomitan` open a specific one. +- **Jellyfin Subtitle Generation**: Japanese subtitle generation now works while playing Jellyfin episodes, with both direct-play and transcoded playback. + +### Fixed +- **Media Timing Review**: Opens on the first try and keeps playback paused while open, even when a dictionary popup closes. +- **Jellyfin Terminal Playback**: + - `subminer jellyfin -p` lists libraries when SubMiner is already running, and picker image previews work again. + - Real errors, like an expired session or an unreachable server, now appear instead of an empty list. + - Watch progress and played status reach Jellyfin even when cast discovery is off. + - When it starts SubMiner itself, SubMiner now shows a tray icon and quits when mpv closes. + - The rofi search step is now a compact input box. +- **macOS Casting**: Jellyfin casting finds mpv when SubMiner is opened from Finder, the Dock, or Spotlight. `mpv.executablePath` and `SUBMINER_MPV_PATH` are now honored on macOS and Linux. +- **macOS Launcher PATH**: The command-line launcher no longer shows "Not on PATH" when SubMiner is opened from Finder or the Dock. +- **Keyboard-Only Mode**: `h`, `l`, and the arrow keys type normally in modals and text fields instead of seeking mpv. Toggling the mode inside a modal no longer turns on a hidden keyboard-only mode. +- **Halfwidth Katakana**: Halfwidth katakana in subtitles now displays as fullwidth, including in mined cards and the stats dashboard. Stats sentence search matches katakana in either width. +- **Subtitle Annotations**: Lines shown while two cues overlap now get annotations right away. Prefetching no longer restarts during startup. +- **Subtitle Sidebar**: The open sidebar does far less work during playback. +- **Hyprland and Sway**: A slow or hung `hyprctl` or `swaymsg` no longer freezes the app. +- **Stats Mining**: Cards mined from the stats dashboard keep the selected history line and media. +- **Security Updates**: Updated Electron, undici, and follow-redirects to fix new security advisories. + +### Docs +- **Hachidori Setup**: Covers backend selection, Hachidori dictionary and Anki setup, settings flags and shortcuts, and linking an external host. +- **Jellyfin**: The docs now say SubMiner joins the cast menu at startup only when both `startupWarmups.jellyfinRemoteSession` and `jellyfin.remoteControlAutoConnect` are on. Otherwise, enable **Jellyfin Discovery** in the tray. +- **Casting and mpv**: Added how casting finds mpv on each platform, a troubleshooting entry for casts that never start mpv, and a note on the macOS 27 Accessibility list rename. +- **Jimaku Environment Variables**: Removed the unused `SUBMINER_JIMAKU_*` variables from the docs. Set the key with `jimaku.apiKey` or `jimaku.apiKeyCommand` instead. + +## What's Changed + +- feat(dictionary): add Hachidori backend support by @ksyasuda in #266 +- fix(jellyfin): make terminal play work with a running app and report progress by @ksyasuda in #288 +- fix(overlay): stop Hyprland/Sway tracker polls from blocking the main thread by @ksyasuda in #289 +- fix(overlay): poll cheap playback state in the open subtitle sidebar by @ksyasuda in #290 +- fix(overlay): keep keyboard mode from swallowing modal and text-field keys by @ksyasuda in #291 +- refactor: remove dead code and enable noUnusedLocals by @ksyasuda in #292 +- feat(subtitles): generate Japanese subtitles during Jellyfin playback by @ksyasuda in #294 +- fix(subtitles): widen halfwidth katakana where subtitle text enters the app by @ksyasuda in #295 +- fix(jellyfin): find mpv when SubMiner is launched from Finder by @ksyasuda in #298 + +## Installation + +See the README and docs/installation guide for full setup steps. + +## Assets + +- Linux: `SubMiner.AppImage` +- macOS: `SubMiner-*.dmg` and `SubMiner-*.zip` +- Windows: `SubMiner-*.exe` and `SubMiner-*-win.zip` +- Optional extras: `subminer-assets.tar.gz`, the `subminer` launcher, and the Windows `subminer.cmd` launcher +- Bun corresponding source: `bun-v1.3.5-source.tar.gz` and its `.sha256` file + +Both launcher downloads use Bun included with the SubMiner app. Download `subminer` on Linux or macOS and `subminer.cmd` on Windows. + +The app bundles an unmodified Bun 1.3.5 runtime. Bun is MIT licensed and statically links JavaScriptCore (LGPL 2.0) and TinyCC (LGPL 2.1). License texts and third-party notices ship inside the app under `resources/bun/licenses`, and the source archive above contains the matching Bun, WebKit, and dependency sources for relinking.