v2.6.2
New features
- YouTube playlist support (#70). Paste a playlist URL and it expands into the queue. Size cap with confirm dialog (default 100), duplicates skipped, mix/radio URLs treated as plain videos.
- Source field on cards (#69). Stamp show/episode (or YouTube title) + timestamp into a mapped Anki field.
- Card styling presets. Default, Yomitan / Lapis Classic, Minimal / Clean, or None.
- YouTube word curation (#65). Review words before mining, with embedded player and multi-dictionary lookup.
Changed
- Python 3.11+ required for PyPI/source installs. Standalone bundles unaffected. Dependency floors raised.
- Cancel actually cancels in every mining mode; in-flight ffmpeg/yt-dlp killed, subprocess calls time-bounded.
- Closing the window no longer abandons running work.
Fixed
- Anki note type and field mapping validated up front (#52); target deck auto-created.
- Non-ASCII filenames no longer crash extraction on Windows.
- A failed episode in a batch no longer aborts the rest or loses finished cards (#51).
- YouTube reliability: cookies-file works for age-restricted videos, one bad video can't kill the queue, live streams handled, no more close hang mid-curation.
- Security: yt-dlp argument injection blocked; Jisho definitions HTML-escaped.
- Card media no longer silently missing on large sessions; uploads chunked, earlier batches persist on failure.
- Local DBs survive momentary locks; "known" marks survive a DB rebuild.
- Episode-number matching: numeric titles ("86", "Mob Psycho 100") no longer steal the episode slot.
- Dictionary fixes: Yomitan image sizing (#68), UTF-16 surrogate scrub on import (#67), paths with spaces.
- Long tail of settings, batch-queue, deck-builder, and curation fixes in CHANGELOG.md.
Repo
- New app icon: white 鉱 on black.
- ~920 lines of dead code removed, big GUI classes split, ~2900 tests.
- Supply chain pinned; tag workflows gated on green CI.
- Welcomed @Geniusssmit and @cskings14.
Full Changelog: v2.6.1...v2.6.2