diff --git a/package.json b/package.json index 32e20dd0..8e4756f4 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "subminer", "productName": "SubMiner", "desktopName": "SubMiner.desktop", - "version": "0.18.0", + "version": "0.19.0-beta.1", "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/prerelease-notes.md b/release/prerelease-notes.md index d0d96083..18a3bba5 100644 --- a/release/prerelease-notes.md +++ b/release/prerelease-notes.md @@ -1,73 +1,34 @@ > This is a prerelease build for testing. Stable changelog and docs-site updates remain pending until the final stable release. - + ## Highlights ### Added -- **Watch History Browser** - - New `subminer -H` / `--history` command lets you browse your local watch history, replay the last episode, jump to the next one, or pick an episode via fzf or rofi. - - The rofi picker now shows AniList cover art for each show, making it easier to spot the right title at a glance. -- **Card Audio Normalization** - - Audio extracted for Anki cards is now volume-normalized by default, giving more consistent playback loudness across cards. - - Prefer the original source volume? Disable it via the new `ankiConnect.media.normalizeAudio` setting. + +- **Sync Stats & History** + - Keep mining stats and watch history in sync across machines over SSH, from a new **Sync Stats & History** window (tray menu) or the `subminer sync ` command. + - Syncing merges data safely, so nothing is duplicated even if you sync the same machines repeatedly, and hosts with auto-sync enabled sync in the background on a schedule, reporting results as overlay notifications. + - Manual database snapshots (create, merge, reveal, delete) cover one-off transfers, and Windows machines running the built-in OpenSSH Server can be used as sync remotes too. No setup beyond SSH access is required on the remote side. + +- **TsukiHime Subtitle Downloads** + - Download Japanese and secondary-language subtitles for the current video directly from TsukiHime, mirroring the existing Jimaku flow: `Ctrl+Shift+T` opens an in-overlay search modal with separate tabs for the primary and secondary languages. + - Matching releases are found automatically from the video filename; the chosen subtitle downloads and loads straight into mpv, no API key required. ### Changed -- **New App Icon** - - SubMiner now ships pixel-art submarine artwork contributed by an anonymous community member. - - Applied across the app icon, tray icon, notifications, README, docs site, and stats page. -- **Launcher Preview Layout** - - fzf previews in the launcher now sit below the menu instead of beside it, giving long titles and metadata more horizontal room. + +- **Clipboard-Video Shortcut**: The "append clipboard video to queue" shortcut is now configurable (`shortcuts.appendClipboardVideoToQueue`) instead of fixed. ### Fixed -- **Character Name Highlighting in Subtitles** - - Fixed unspaced Japanese names (e.g. 東紫乃, 渡辺真奈美) being split at the wrong point, which left surnames like 東 and 渡辺 without their character portrait or hover lookup. - - Fixed names getting cut off or losing their highlight when caught by the subtitle scanner's punctuation handling, misclassified by grammar tagging, or swallowed entirely by a longer generic dictionary match (e.g. ヨータ disappearing inside a false とヨー match). - - Fixed a single unrecognized word in a subtitle line (like a stray interjection) causing character-name highlighting to drop for the whole line instead of just that word. - - No action needed — existing data upgrades automatically the next time a matching name is seen. -- **Known-Word Highlighting** - - Words are no longer marked "known" (green) just because they share spelling with a known Anki card that actually teaches a different reading (e.g. 床 read as とこ no longer falsely matches a known 床/ゆか card). - - Kanji words are also no longer marked known just because a different mined word happens to share their reading (e.g. 渓谷/けいこく no longer falsely matches a known 警告/けいこく card). - - Single-kana grammar tokens (particles like よ, え) no longer borrow an unrelated card's reading and get falsely painted as known. - - Stats sessions now correctly reflect known-word counts again after the reading-aware matching upgrade, instead of showing 0 everywhere. -- **Annotation Highlighting Refinements** - - Restored frequency/JLPT highlighting and vocabulary-stat counting for words like 確かに and やはり, which were wrongly treated as grammar noise. - - Kanji nouns that MeCab tags as "non-independent" (e.g. 日, 点, 以外) also keep their highlighting and stats counting again. - - Suffix-only tokens (e.g. さん, れる) are now excluded from JLPT/frequency highlighting by default to match how particles and interjections are treated; known-word highlighting for them still works, and this is configurable. -- **Unparsed Subtitle Text** - - Subtitle text the dictionary can't recognize (like a truncated verb form) is now still hoverable for lookup and correctly counted toward a sentence's difficulty, instead of showing as dead, non-interactive text. -- **Kiku Manual Field Grouping** - - Fixed the field-grouping dialog getting stuck invisible behind fullscreen video on Hyprland/Wayland, and failing silently on repeated attempts after the first use. - - Fixed a timed-out or failed grouping request leaving an invisible, stuck dialog covering the video; it now closes automatically so the overlay recovers. - - Fixed a duplicate "Field grouping cancelled" notification appearing when grouping was cancelled via the trigger shortcut, and added a proper error message for the previously-silent case where the original card can no longer be loaded. -- **Secondary Subtitles** - - Karaoke-style secondary subtitles (common in opening/ending songs) no longer spam dozens of lines down the screen; repeated lines are now collapsed and the subtitle area is capped to a strip at the top. -- **YouTube Extraction** - - Fixed direct YouTube stream extraction occasionally corrupting the stream URL and causing failed audio/video capture. -- **Background Stats Server** - - Launching SubMiner in the background now correctly auto-starts the stats server when enabled, and won't start a duplicate if one's already running. -- **Stats Trend Charts** - - All trend chart titles now show by default, with the ability to hide specific titles (remembered across sessions) and cap how many top titles a chart displays. -- **Stats Cover Art** - - Cover art now loads as soon as a series starts playing instead of waiting for your first visit to its detail page, so the stats timeline shows artwork right away. - - Existing series missing art are backfilled automatically the next time you open the stats page. + +- **Word Highlighting Accuracy**: Fixed several cases of incorrect word highlighting and annotations, including inconsistent part-of-speech exclusions on merged quote-particle tokens, missing annotations for rare kanji, katakana punctuation wrongly treated as non-kana noise, and certain kanji vocabulary being skipped for next-level ("N+1") highlighting. +- **Startup Playback Pausing Too Early**: Fixed playback resuming before subtitle processing had finished warming up, which could briefly show untranslated subtitles right after opening a video, most noticeable when resuming mid-episode. +- **Linux AppImage Crash Notification on Quit**: Fixed a spurious "Service Crash" desktop notification appearing after closing a video when running the Linux AppImage. ## What's Changed -- fix(youtube): parse mpv EDL stream URLs with byte-length guards by @ksyasuda in #134 -- Normalize generated Anki audio by default by @ksyasuda in #135 -- feat(launcher): add -H/--history command to browse local watch history by @ksyasuda in #136 -- fix(overlay): prevent field grouping modal from freezing overlay on Hyprland by @ksyasuda in #138 -- fix(overlay): collapse karaoke syllable spam in secondary subtitles by @ksyasuda in #139 -- feat(stats): Trends dashboard overhaul — title visibility, ranking modes, calendar-accurate windows, tooltips by @ksyasuda in #140 -- feat(branding): replace app icon with contributed pixel-art set by @ksyasuda in #141 -- feat(anki): reading-aware known-word matching (cache v3) by @ksyasuda in #142 -- fix(stats): start stats server on background app launch by @ksyasuda in #144 -- fix(tokenizer): keep unparsed Yomitan tokens hoverable by @ksyasuda in #145 -- fix(overlay): resolve unspaced Japanese name splits and scan recovery by @ksyasuda in #146 -- fix(tokenizer): prevent grammar tokens from borrowing known-word highlight via unrelated readings by @ksyasuda in #147 -- fix(stats): fetch cover art eagerly at session start instead of on series page visit by @ksyasuda in #148 -- fix(overlay): keep frequency/JLPT highlight for kanji non-independent nouns by @ksyasuda in #150 -- fix(tokenizer): greedy name pre-pass to prevent generic matches swallowing character names by @ksyasuda in #151 +- feat(shortcuts): make clipboard-video-append shortcut configurable by @ksyasuda in #158 +- refactor(tokenizer): extract subtitle annotation filter into rule table by @ksyasuda in #162 +- refactor(tsukihime): swap Animetosho backend for TsukiHime API by @ksyasuda in #165 ## Installation