Skip to content

v2.4.1

Choose a tag to compare

@github-actions github-actions released this 19 May 20:57
· 616 commits to main since this release

New features

  • Audio quality and format control (#18): Settings, Media now exposes audio codec (MP3 or Opus) and bitrate (32 to 320 kbps). Defaults to MP3 at 192 kbps; opt in to Opus for roughly half the file size at comparable speech quality (useful for the AnkiWeb media quota).
  • Multi-dictionary export (#17): new optional Glossary Anki field receives every enabled offline dictionary's hit as Yomitan-format HTML (Senren toggle-UI compatible). MainDefinition keeps first-hit-wins. Jisho is fallback-only. Opt in via Settings, Anki Settings, Glossary Field.
  • Bold target word in subtitle sentence (#20): the mined morpheme is wrapped in <b>…</b> in Sentence and SentenceFurigana fields. Uses the exact MeCab span, so duplicate surfaces in one sentence only bold the mined token. Opt in via Settings, Word Filtering.
  • Match animated screenshot duration to audio (#13 follow-up): new Media Settings toggle clips animated screenshots to the full audio range instead of the fixed cap. Only active when animated screenshots are enabled.
  • Contributing improved: SECURITY.md, PR template, CODEOWNERS, dependabot config, YAML issue forms (bugs/feature ideas) instead of MD, TESTING.md, RELEASING.md.

Changes

  • Verbs and adjectives now mine as the dictionary form / lemma (#19). 胸のとこ破れそう now creates 破れる, not 破れ. Nouns continue to mine as the surface form (preserves the #5 fix for unidic-lite homograph quirks like 豪腕 mapping to 剛腕). Legacy surface-form cards in user collections are not migrated; re-mining a previously surface-mined verb will create a second card until you reconcile.
  • AnkiConnect existing-vocabulary lookup is now cached per session. Mining is noticeably faster on episodes with many candidate words. Undo and re-mine invalidate the cache so state stays fresh.
  • CONTRIBUTING.md rewritten around workflow (branches, conventional commits, changelog, pre-commit) with cross-links to TESTING / SECURITY / CODE_OF_CONDUCT.
  • Black and ruff line-length raised from 100 to 120 in pyproject.toml; codebase reformatted. No behavior changes.

Fixes

  • AnkiConnect "duplicate" error no longer aborts batch card creation: the shared cached vocabulary set drops duplicates client-side before the batch endpoint sees them.
  • Glossary field label: corrected a helper-text typo on the Glossary field input.

Removed

  • Dead-code sweep: FolderProcessor and same-folder pairing, unused HistoryService query methods, StatsService.get_series_stats / get_series_progress, the orphan queue_changed signal, ~20 unused widget setters/properties, single-card AnkiService.create_card (batch is canonical), service lookup_batch test-only methods, DictionaryRegistry.list_dicts, WordListService.get_blacklist / get_whitelist, WordFilterService.filter_by_length, orphan config_exists / delete_config / reset_cancellation, the never-raised NoJapaneseSubsError, and the obsolete use_offline_dict config field (legacy values silently stripped on load).

Upgrade notes

  • Existing surface-form verb cards are not migrated by #19. Re-mining will create a second card with the lemma; reconcile manually if it matters.
  • Opus audio requires ffmpeg built with libopus. The extractor probes once per session and hard-fails with a clear error if the encoder is missing. 5.1 input is downmixed to stereo for Opus only.

Full Changelog: v2.4.0...v2.4.1