sudacode
66f8ca4f80
refactor(renderer): extract modal registry for open/dismiss/active queries ( #166 )
2026-07-13 18:16:39 -07:00
sudacode
6fe1e0fee4
refactor(stats): drop dead IPC handlers, unify stats types over HTTP ( #164 )
2026-07-13 12:09:56 -07:00
sudacode
0ab840b362
refactor(tokenizer): extract subtitle annotation filter into rule table ( #162 )
2026-07-12 23:54:13 -07:00
sudacode
21a06c12fb
refactor(tokenizer): consolidate kana/POS helpers into token-classification ( #161 )
2026-07-12 23:27:25 -07:00
sudacode
14070acceb
fix(overlay): defer autoplay release for untokenized startup priming
...
- Autoplay-ready gate now ignores untokenized subtitle payloads while tokenization warmup is pending, so playback doesn't resume before the first tokenized cue
- Wire isTokenizationReady dep through main.ts and update gate/wiring tests accordingly
- Drop stale release/release-notes.md, add changelog entry under changes/
2026-07-12 02:11:10 -07:00
sudacode
7d81342f0f
fix(app): keep AppImage mount alive until Chromium children finish shutdown
...
Background AppImage launches executed directly from a FUSE mount owned by a
short-lived helper's AppImage runtime. On quit, the runtime unmounted the
squashfs while utility children (network service) were still mid-shutdown,
SIGBUSing them and triggering KDE Service Crash notifications on every video
close. Detach a POSIX-sh supervisor instead: mount via --appimage-mount, run
AppRun from the mount, and release the holder only once no process still
executes from the mount. Falls back to the old direct launch on any failure
or with SUBMINER_NO_APPIMAGE_MOUNT_KEEPALIVE=1.
2026-07-12 02:09:42 -07:00
sudacode
4b7f750919
feat(animetosho): add English/Japanese subtitle download integration ( #159 )
2026-07-12 00:48:12 -07:00
sudacode
6ab3d823a4
feat(shortcuts): make clipboard-video-append shortcut configurable ( #158 )
2026-07-11 23:36:44 -07:00
sudacode
8797719a09
docs(docs-site): correct and clarify docs against current code
...
Comprehensive accuracy pass over docs-site verifying every page against
current source. Fixes wrong/stale claims (AniSkip default, YouTube track
selection, Anki sentence-card requirements, immersion schema v18 + SQL
column names, plugin entrypoint, launcher flags, Cloudflare deploy path,
etc.) and fills gaps (watch history, mediaCache.maxHeight, youtubeSubgen,
character-dictionary refresh/eviction, expanded hot-reload lists).
2026-07-11 00:53:34 -07:00
sudacode
8acc78cc1c
test(tokenizer): add golden-file regression corpus with 11 fixtures ( #157 )
2026-07-11 00:50:03 -07:00
sudacode
321461c50f
feat(launcher): add subminer sync for cross-machine stats/history merge over SSH ( #152 )
2026-07-11 00:40:15 -07:00
sudacode
beeab564b4
chore(release): prepare v0.18.0
2026-07-10 02:03:10 -07:00
sudacode
cab7975a2b
chore(docs): remove implemented plan docs
...
- Drop early-managed-overlay-startup and macos-notification-hover design docs (both implemented, no longer needed)
2026-07-10 01:09:52 -07:00
sudacode
846292809c
docs(changes): consolidate and tighten changelog entries
...
- Merge related fix entries into single files (name-match-span-merge into character-name-split-and-scan-recovery, kanji-non-independent-noun-annotations + lexicalized-expression-frequency into content-adverb-annotation-stop-list, greedy-name-parsing-priority into character-name-split-and-scan-recovery, kiku-field-grouping-cancel-double-toast into kiku-field-grouping-modal-recovery, history-rofi-cover-art into launcher-history-command)
- Rewrite remaining entries for brevity and reclassify stats-trend-title-limits as "changed"
2026-07-10 01:04:01 -07:00
sudacode
8712780d08
fix(tokenizer): keep frequency rank for lexicalized kana expressions ( #156 )
2026-07-10 00:54:17 -07:00
sudacode
7b1a005a65
feat(anki): mirror mpv software volume into generated sentence audio ( #155 )
2026-07-10 00:44:23 -07:00
sudacode
84c75f50aa
fix(release): skip gh attribution without CI token
2026-07-09 02:26:00 -07:00
sudacode
8b838f2c7d
chore(release): prepare 0.18.0-beta.3
2026-07-09 01:20:02 -07:00
sudacode
db4139ba0b
fix(tokenizer): block kanji reading collisions and name/generic length t
...
- Add allowReadingOnlyMatch:false to kanji token known-word lookups so 渓谷/けいこく no longer matches a mined 警告/けいこく card via reading-only index
- Greedy name pre-pass yields when a strictly longer generic word starts at the same position (空 no longer splits 空気; ties still go to the name)
2026-07-09 01:03:58 -07:00
sudacode
6c251502b3
fix(tokenizer): exclude unparsed-run tokens from annotations and N+1 ( #153 )
2026-07-09 00:28:38 -07:00
sudacode
ae40934d3a
fix(tokenizer): greedy name pre-pass to prevent generic matches swallowing character names ( #151 )
2026-07-08 23:53:45 -07:00
sudacode
cdb1475a54
chore(assets): update icons and favicons
2026-07-08 22:35:47 -07:00
sudacode
a2e49b369b
fix(tokenizer): merge scanner metadata per token instead of all-or-nothi
...
- Replace hasSameTokenSpans + full-discard with mergeScannerTokensIntoParseTokens
- Grafts isNameMatch/frequencyRank/etc onto matching parse spans; filler chunks degrade only themselves
- Fixes name annotations dropping for entire subtitle lines containing unmatched interjections
2026-07-08 22:26:34 -07:00
sudacode
7f13aed50a
fix(overlay): keep frequency/JLPT highlight for kanji non-independent nouns ( #150 )
2026-07-08 22:25:32 -07:00
sudacode
8b21a2bca8
fix(overlay): remove content adverbs from annotation stop-word list
...
- 確かに and やはり no longer excluded from frequency/JLPT highlighting and vocab stats
- Stop-word list now covers only interjections, pronouns, and grammar fragments
2026-07-08 20:15:45 -07:00
sudacode
925413adfe
chore(release): prepare 0.18.0-beta.2
2026-07-08 02:31:14 -07:00
sudacode
d0644ab2eb
fix(stats): parse v3 reading-aware known-word cache in stats server ( #149 )
2026-07-08 02:15:58 -07:00
sudacode
d253710c2e
fix(stats): fetch cover art eagerly at session start instead of on series page visit ( #148 )
2026-07-08 00:59:35 -07:00
sudacode
c3df510e4f
docs(release): reclassify audio normalization as added, not fixed
...
- Move card audio normalization entry from Fixed → Added in prerelease notes
- Update changes/audio-normalization.md type: fixed → added
2026-07-08 00:38:38 -07:00
sudacode
187f68e5b6
fix(tokenizer): prevent grammar tokens from borrowing known-word highlight via unrelated readings ( #147 )
2026-07-07 23:57:47 -07:00
sudacode
0e254cbbef
fix(launcher): move fzf previews below menus
2026-07-07 22:36:56 -07:00
sudacode
7b94adafbd
chore(release): prepare 0.18.0-beta.1
2026-07-07 02:40:05 -07:00
sudacode
61f39d1e09
fix(overlay): resolve unspaced Japanese name splits and scan recovery ( #146 )
2026-07-07 02:33:46 -07:00
sudacode
e7739de51c
fix(tokenizer): keep unparsed Yomitan tokens hoverable ( #145 )
2026-07-07 02:01:04 -07:00
sudacode
ad1d240f20
refactor(tests): centralize lane definitions and add per-file isolation ( #143 )
2026-07-07 01:51:05 -07:00
sudacode
8b0ef662bc
chore: remove shipped changelog entries and demo asset
...
- Drop changes/kiku-field-grouping-modal-wiring.md (landed in #138 )
- Drop changes/known-word-partial-reading-highlight.md (landed in #142 )
- Remove assets/minecard.mkv demo video
2026-07-07 00:18:48 -07:00
sudacode
0a58c20ad7
fix(stats): start stats server on background app launch ( #144 )
2026-07-07 00:16:57 -07:00
sudacode
38ddb29aa0
feat(anki): reading-aware known-word matching (cache v3) ( #142 )
2026-07-07 00:13:10 -07:00
sudacode
8b9a70c5a6
feat(stats): Trends dashboard overhaul — title visibility, ranking modes, calendar-accurate windows, tooltips ( #140 )
2026-07-06 23:52:43 -07:00
sudacode
48a084914a
feat(branding): replace app icon with contributed pixel-art set ( #141 )
2026-07-06 23:31:19 -07:00
sudacode
a042b04357
fix(overlay): prevent field grouping modal from freezing overlay on Hyprland ( #138 )
2026-07-06 22:13:14 -07:00
sudacode
35ca2afc6f
fix(overlay): collapse karaoke syllable spam in secondary subtitles ( #139 )
2026-07-06 01:09:06 -07:00
sudacode
b14f977e33
fix(tokenizer): stop partial furigana readings from marking words known ( #137 )
2026-07-05 17:02:44 -07:00
sudacode
eef4500599
feat(launcher): add -H/--history command to browse local watch history ( #136 )
2026-07-05 16:46:05 -07:00
sudacode
73af1451b7
fix(anki): lower audio normalization target to -23 LUFS (EBU R128)
2026-07-05 01:13:54 -07:00
sudacode
36a3704815
fix(youtube): parse mpv EDL stream URLs with byte-length guards ( #134 )
2026-07-02 01:37:37 -07:00
sudacode
359cb0a301
Normalize generated Anki audio by default ( #135 )
2026-07-02 00:34:16 -07:00
sudacode
4b10e85053
chore(release): prepare v0.17.2
2026-06-28 23:03:18 -07:00
sudacode
c942a2cf2d
fFix(youtube): recover source URL for background media cache on direct mpv open ( #132 )
2026-06-28 22:46:11 -07:00
sudacode
f65afa6046
feat(youtube): notify on manual picker open and show success after track load ( #133 )
2026-06-28 22:43:16 -07:00
sudacode
389d8e06e0
chore: remove stale npm artifacts
2026-06-28 20:18:08 -07:00
sudacode
0008b55b70
chore(release): prepare v0.17.1
2026-06-27 22:59:28 -07:00
sudacode
d16ae9c745
chore(release): prepare v0.17.1-beta.1
2026-06-27 22:10:02 -07:00
sudacode
36f94151b8
fix(logs): use local date for log filenames and expand export redaction ( #131 )
2026-06-27 21:08:11 -07:00
sudacode
5326ad32f5
feat(youtube): add mediaCache mode and safer stream media extraction ( #130 )
2026-06-27 19:20:18 -07:00
sudacode
d199376364
chore(release): prepare v0.17.0
2026-06-15 01:58:42 -07:00
sudacode
3aee88c150
chore(release): prepare v0.17.0-beta.2
2026-06-14 20:58:26 -07:00
sudacode
70da3ee8bd
Fix Windows Anki startup and overlay regressions ( #128 )
2026-06-14 20:51:56 -07:00
sudacode
aa8eb753f6
fix: scope prerelease note reuse by version
2026-06-14 18:04:03 -07:00
sudacode
8d73de8731
docs: scope 0.17.0 beta prerelease notes
2026-06-14 17:50:09 -07:00
sudacode
5a98397efe
chore: prepare 0.17.0-beta.1 prerelease
2026-06-14 17:34:05 -07:00
sudacode
a117c5759c
fix(linux): auto-install managed plugin copy; include in asset updates ( #127 )
2026-06-14 17:25:28 -07:00
sudacode
ae7e6f82a8
fix(overlay): restore macOS Yomitan popup focus without breaking click-away ( #125 )
2026-06-14 16:46:13 -07:00
sudacode
1158be5b39
fix(overlay): preserve visible state across playlist item transitions ( #124 )
2026-06-12 23:38:54 -07:00
sudacode
33e767458f
refactor(main): split main.ts into focused runtime modules ( #123 )
2026-06-12 17:35:46 -07:00
sudacode
94a65416ae
fix(stats): strip Season N suffix from AniList title searches ( #121 )
2026-06-12 01:07:11 -07:00
sudacode
0a384a22c9
Replace subtitle delay actions with native mpv keybindings ( #120 )
2026-06-12 00:03:06 -07:00
sudacode
b3b45521b6
fix(release): preserve attribution placement; default update notifs to o
...
- Move What's Changed/New Contributors before Installation in release notes
- Preserve committed attribution when regenerating via writeReleaseNotesForVersion
- Change notificationType default from 'both' to 'overlay' for new installs
2026-06-10 23:53:31 -07:00
sudacode
131b23efa9
chore(release): prepare v0.16.0
2026-06-10 23:05:37 -07:00
sudacode
e2afceb492
fix(anki): write sentence card audio only to sentence audio field ( #118 )
2026-06-10 22:51:19 -07:00
sudacode
7be1843c41
feat(notifications): add overlay notifications with position config ( #110 )
2026-06-10 22:46:52 -07:00
sudacode
c09d009a3e
docs: add ani-skip to credits table in README
2026-06-10 00:01:51 -07:00
sudacode
2007e28be8
feat(aniskip): move intro detection from mpv plugin to app runtime ( #117 )
2026-06-09 23:55:43 -07:00
sudacode
d5bfdcae7b
fix(stats): repair legacy combined-season anime rows on startup ( #116 )
2026-06-09 12:41:07 -07:00
sudacode
311f1e8ee5
feat(stats): speed up session maintenance and improve stats UI ( #111 )
2026-06-08 02:20:52 -07:00
sudacode
e6a16a069b
fix(anilist): mark entry completed when final episode is reached ( #115 )
2026-06-07 23:45:09 -07:00
sudacode
ea79e331fa
build: make deps initializes submodules before installing JS deps
...
- Add `submodules` target that runs `git submodule update --init --recursive`
- `deps` now depends on `submodules` so fresh checkouts work out of the box
- Update docs to replace manual install steps with `make deps`
- Fix Windows build-from-source steps to include stats and submodule init
2026-06-06 01:25:01 -07:00
sudacode
ee89b0c8a9
feat(release): add contributor attribution to release notes ( #114 )
2026-06-06 01:07:47 -07:00
sudacode
f2fd58cd2b
docs(changelog): require reconciled fragments, not just new ones ( #113 )
2026-06-06 00:55:34 -07:00
sudacode
1280a30216
chore(release): prepare 0.15.2
2026-06-02 23:45:03 -07:00
sudacode
a80ed72b2d
docs: replace em-dashes with hyphens across docs-site
2026-06-02 23:36:44 -07:00
sudacode
4cc6c12dc7
chore(vendor): update subminer-yomitan submodule ( #109 )
2026-06-02 00:37:45 -07:00
sudacode
425004879a
fix(anki): align animated AVIF clip bounds to frame boundaries ( #108 )
2026-06-01 15:20:06 -07:00
sudacode
76f99e6518
fix(overlay): correct Hyprland fullscreen overlay alignment on Linux ( #107 )
2026-06-01 02:12:16 -07:00
sudacode
f1e260e996
fix(overlay): fix macOS overlay interactivity and focus after autoplay ( #106 )
2026-06-01 01:34:27 -07:00
sudacode
54e90754ef
chore: release 0.15.1
2026-05-31 22:40:40 -07:00
sudacode
487143802a
feat(keybindings): add mouse button support for mpv keybindings ( #103 )
2026-05-31 22:22:38 -07:00
sudacode
e6a004ab8b
Fix Windows mpv shortcut attachment to background app ( #105 )
2026-05-31 21:46:00 -07:00
sudacode
b510c54875
fix(overlay): restore mpv focus and pointer state on macOS ( #104 )
2026-05-31 21:25:04 -07:00
sudacode
e1ea464bc9
fix(overlay): Linux X11/XWayland stacking, stale pause state, multi-copy selector ( #101 )
2026-05-31 20:59:18 -07:00
sudacode
b46b8dfa41
chore: add issue forms and expand PR template ( #100 )
2026-05-30 23:50:00 -07:00
sudacode
ca067a6ccf
Add FUNDING.yml
2026-05-30 20:15:58 -07:00
sudacode
d719b346e0
fix(overlay): use Lua dispatch syntax for Hyprland 0.55+ Lua configs ( #99 )
2026-05-29 00:13:31 -07:00
sudacode
a1da3dcdc8
docs(troubleshooting): fix Hyprland rules, add character dictionary + see also
...
Rewrite Hyprland overlay window-rule guidance with current Lua (hl.window_rule)
config and legacy hyprland.conf syntax, and note SubMiner's automatic hyprctl
placement. Add a Character Dictionary troubleshooting section (no AniList auth
required) and a See Also index linking each feature's own troubleshooting page.
2026-05-28 23:53:07 -07:00
sudacode
9927ef1581
docs(character-dictionary): correct auth requirement and add portrait do
...
- AniList auth not required for character dictionary; uses public GraphQL
- Document nameMatchImagesEnabled and inline portrait behavior
- Clarify AniList auth is only for watch-progress sync
- Delete stale release/release-notes.md
2026-05-28 23:30:19 -07:00
sudacode
791c993870
docs: reformat changelog entries as nested bullet lists
...
- Convert flat prose entries in CHANGELOG.md and docs-site/changelog.md to bold headers + sub-bullets
- Scope artifact uploads in release/prerelease workflows to `latest*.yml` instead of `*.yml`
- Update release-notes and RELEASING docs to match
- Adjust workflow tests for new nested bullet format
2026-05-28 22:53:22 -07:00
sudacode
38dbce517c
chore(release): 0.15.0
2026-05-28 19:46:05 -07:00
sudacode
889dc9c009
docs: reconcile docs-site with current config schema and defaults
...
- sidebar: migrate flat props to css object (font-family, color, bg, custom vars)
- frequencyDictionary.topX default: 1000 → 10000
- text-shadow default: updated to outline-style multi-shadow
- anki: reset ai model/prompt, imageMaxWidth/Height, animatedMaxHeight to 0; isLapis defaults
- troubleshooting: log default warn (not info), css["font-size"] usage
- shortcuts: add W markWatchedKey; clarify keybindings vs built-in overlay actions
- websocket: clarify all services off by default, fix enabled semantics
- usage: --anilist → --anilist-setup
- AGENTS.md: add Docs Upkeep trigger map, clarify CLAUDE.md symlink, expand PR notes
2026-05-28 19:21:58 -07:00
sudacode
097021072d
chore(release): 0.15.0-beta.12
2026-05-28 02:16:55 -07:00
sudacode
91c8eb8faf
feat(changelog): add nested bullet format for release notes
...
- Prompt now requests short top-level bullets with nested change/benefit/action sub-bullets in release-notes mode
- CHANGELOG mode keeps single-line bullets unchanged
- Tests assert new prompt constraints are present
2026-05-28 02:08:44 -07:00