sudacode
64534299ed
fix(subtitles): collapse duplicate ASS events and decode text once
...
- Drop vector drawing runs (\p1...\p0) and collapse duplicate/animation-burst cue events (karaoke frames, layered shadow copies) so typeset ASS scripts stop flooding the subtitle sidebar
- Add ass-text.ts to decode ASS text once at ingestion, mirroring mpv's ass_to_plaintext (\N/\n/\h handling, unclosed braces, no \{ \} \\ escapes)
- Renderer, timing tracker, tokenizer, and tokenization cache now consume the already-decoded plain text instead of each re-deriving it, fixing mismatched cache keys for the same authored line
2026-08-04 22:59:42 -07:00
sudacode
fe4dacc1e7
fix(overlay): show plain subtitle line immediately on tokenization cache miss ( #184 )
2026-08-04 01:55:52 -07:00
sudacode
b08cd0db35
fix(streaming): keep subtitle tokenization prefetch warm for full episodes ( #183 )
2026-08-03 21:22:18 -07:00
sudacode
bffb1c5982
fix(logging): surface subtitle processing debug/warn logs ( #182 )
2026-08-03 20:44:39 -07:00
sudacode
5b8848518a
feat(subsync): add reference and target subtitle track picker ( #181 )
2026-08-03 01:00:14 -07:00
sudacode
4d65dec340
fix(youtube): prevent playlist URLs from stalling yt-dlp probes ( #180 )
2026-08-01 22:56:28 -07:00
sudacode
b204d4dd6e
feat(anki): add configurable word card type for Kiku/Lapis ( #175 )
2026-07-31 17:17:29 -07:00
sudacode
6d2a72e13b
feat(stats): add library entry deletion and app-wide delete progress ( #174 )
2026-07-29 02:00:16 -07:00
sudacode
0d7084c8aa
fix(anilist): resolve later seasons via sequel relations, not title guessing ( #173 )
2026-07-28 22:56:26 -07:00
sudacode
95e0abc7b7
test(immersion): apply runtime SQLite pragmas in query tests
...
The query test suite opened each temp database with SQLite's defaults
(rollback journal, synchronous=FULL) while the runtime opens them via
applyPragmas (WAL, synchronous=NORMAL). Every statement therefore ran as
its own fsync-ing transaction.
That is unnoticeable on a fast local disk but dominates on CI: the file
took 40.6s there versus 0.5s locally, and the 106-insert case
'getVocabularyStats pages past hidden rows' crossed the 5s per-test
timeout and failed the quality gate.
Open test databases through a helper that applies the same pragmas as
production, so the tests exercise the runtime's actual SQLite
configuration instead of a slower one.
2026-07-28 02:23:16 -07:00
sudacode
987b325edb
Anki maturity-based known-word highlighting ( #172 )
2026-07-27 23:58:02 -07:00
sudacode
deae61b211
refactor: split anki-connect and stats-server resolvers into modules ( #169 )
2026-07-17 23:05:59 -07:00
sudacode
2398f5c030
refactor(main): eliminate local pass-through wrappers in main.ts ( #168 )
2026-07-15 03:22:03 -07:00
sudacode
2e2ee3f028
refactor(tsukihime): swap Animetosho backend for TsukiHime API ( #165 )
2026-07-13 22:03:35 -07:00
sudacode
49b926e08c
Sync Stats & History window, headless --sync-cli, and Windows remote support ( #160 )
2026-07-13 18:56:51 -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
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
8acc78cc1c
test(tokenizer): add golden-file regression corpus with 11 fixtures ( #157 )
2026-07-11 00:50:03 -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
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
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
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
187f68e5b6
fix(tokenizer): prevent grammar tokens from borrowing known-word highlight via unrelated readings ( #147 )
2026-07-07 23:57:47 -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
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
a042b04357
fix(overlay): prevent field grouping modal from freezing overlay on Hyprland ( #138 )
2026-07-06 22:13:14 -07:00
sudacode
b14f977e33
fix(tokenizer): stop partial furigana readings from marking words known ( #137 )
2026-07-05 17:02:44 -07:00
sudacode
359cb0a301
Normalize generated Anki audio by default ( #135 )
2026-07-02 00:34:16 -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
5326ad32f5
feat(youtube): add mediaCache mode and safer stream media extraction ( #130 )
2026-06-27 19:20:18 -07:00
sudacode
70da3ee8bd
Fix Windows Anki startup and overlay regressions ( #128 )
2026-06-14 20:51:56 -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
33e767458f
refactor(main): split main.ts into focused runtime modules ( #123 )
2026-06-12 17:35:46 -07:00
sudacode
0a384a22c9
Replace subtitle delay actions with native mpv keybindings ( #120 )
2026-06-12 00:03:06 -07:00
sudacode
131b23efa9
chore(release): prepare v0.16.0
2026-06-10 23:05:37 -07:00
sudacode
7be1843c41
feat(notifications): add overlay notifications with position config ( #110 )
2026-06-10 22:46:52 -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