Files
SubMiner/release/release-notes.md
T
2026-05-28 19:46:05 -07:00

14 KiB

Highlights

Breaking Changes

  • Subsync: The subsync.defaultMode config option has been removed; Subsync now always opens the manual subtitle picker regardless of any previously set default mode.

Added

  • Auto-Updater: Adds tray and subminer -u update checks with app update prompts, launcher and Linux rofi theme auto-updates, checksum verification, configurable notifications, and an opt-in prerelease channel via updates.channel: "prerelease".
  • Settings Window: New dedicated Settings window via subminer --settings or subminer settings, organized into Appearance, Behavior, Anki, Input, and Integration sections; click-to-learn keybinding controls including the AniSkip button key; AnkiConnect-backed deck, field, and note-type pickers that auto-fill from the configured Anki deck; cross-category search; and live save for most options including subtitle CSS, stats keys, logging level, Jimaku, Subsync, and Anki mappings. AI and translation settings remain config-file only.
  • Inline Character Portraits: Optional AniList character portraits appear inline for name-matched subtitle text; manual AniList overrides scoped per parent media directory so separate season folders maintain separate character dictionary selections.
  • Log Export: Sanitized log ZIP export from the tray menu and via subminer logs -e, with home-directory usernames redacted from exported contents.
  • Launcher CLI: subminer --version / subminer -v prints the installed app version; mpv.profile config and Settings support passes a named mpv profile to managed launches; bundled mpv plugin startup options are now configurable from SubMiner config.
  • First-Run Setup: Optional installer for Bun and the subminer CLI on Linux, macOS, and Windows, including a Windows subminer.cmd PATH shim so subminer works without manually adding SubMiner.exe to PATH; setup recognizes existing Homebrew or user PATH installs and avoids writing into Homebrew-owned paths; includes an Open SubMiner Settings button; standalone setup app quits after completing, returning terminal control.
  • Primary Subtitle Visibility on Yomitan Popup: New subtitleStyle.primaryVisibleOnYomitanPopup option keeps hover-mode primary subtitles visible while a Yomitan popup is open.

Changed

  • Subtitle Appearance Config: Primary and secondary subtitle appearance now use color controls plus CSS declaration editors, saved as subtitleStyle.css, subtitleStyle.secondary.css, and subtitleSidebar.css; known-word and N+1 annotation colors moved to subtitleStyle.knownWordColor and subtitleStyle.nPlusOneColor; subtitle font defaults updated to Hiragino Sans, M PLUS 1, Source Han Sans JP, Noto Sans CJK JP. Existing configs migrate automatically; legacy Anki color keys still accepted with deprecation warnings.
  • Subtitle Style Defaults: Stronger outline-style text shadow, thicker JLPT underlines, and frequency topX default raised to 10000.
  • Character Dictionary: Entries scoped to the current AniList media for name matching and inline portraits; generates Japanese-only name aliases so raw romanized/English aliases no longer surface as separate results; new Ctrl/Cmd+D manager modal to remove, reorder, or override loaded entries; in-app AniList selector waits for an explicit search with the box prefilled from the current filename; subtitleStyle.nameMatchEnabled is now the sole switch for dictionary sync and builds.
  • Electron Runtime: Updated from 39.8.6 to 42.2.0, returning SubMiner to a supported Electron release line.
  • N+1 Highlighting Default: ankiConnect.nPlusOne.enabled is no longer implicitly enabled when known-word highlighting is on; existing configs that already had N+1 enabled are unchanged, but new configs must set it explicitly.
  • Linux Auto-Update Flow: Linux tray "Check for Updates" now installs the new AppImage automatically, matching macOS and Windows; AppImages managed by a system package (e.g. AUR) and non-AppImage launches still use the GitHub-asset flow.
  • Jellyfin Setup: Removed the server presets dropdown; setup now shows a single editable server URL field.
  • Jellyfin Cast Identity: Device identity now derived from the OS hostname and always reported as SubMiner; previously configurable identity fields are ignored, preventing multiple installs from sharing a remote-session identity.
  • Startup Defaults: Jellyfin remote-session startup warmup and character-name subtitle highlighting now default to off.
  • Setup Appearance: Removed the bundled mpv runtime plugin readiness card from the setup flow.

Fixed

  • AniList Progress: Progress updates fire correctly when playback reaches or skips past the watched threshold using fresh mpv timing events; season-specific results preferred for multi-season files with a clear message when the matched season is not in Planning or Watching; repeated missing-token checks no longer exhaust retry attempts or duplicate dead-letter entries.
  • Anki Mining: Sentence-audio padding is opt-in by default; animated AVIF freeze-frame duration aligned to word audio length without double-counting; multi-line sentence alignment fixed for repeated subtitle text; Kiku duplicate-card detection, auto-merge, modal acknowledgment race, and field/tag ordering corrected; YouTube playback cards use mpv's resolved stream URLs; sentence cards refresh the secondary subtitle before saving; known-word cache appends correctly with multiple deck field mappings.
  • Jellyfin Discovery: Startup, subtitle track selection, and duplicate ready-signal handling all fixed; paused mpv no longer misreported as playing; startup unpause no longer repeats after a manual pause or y-t toggle; delayed Japanese subtitle selection, later-loading foreign track hijacking, and long-lived sidebar ffmpeg extractor leaks fixed; resume corrected when a remote play command sends StartPositionTicks: 0 despite saved progress; picker library discovery kept working regardless of app log level.
  • Jellyfin Remote: Tray checkbox stays in sync on Linux after tray, CLI, or startup changes; stale discovery sessions restarted when the server no longer lists the SubMiner cast target; remote controller visibility and progress sync fixed for seeks, stops, startup path changes, and Linux websocket reconnect windows; Play and Resume now behave correctly (Play from beginning, Resume from saved position); final progress reports reuse SubMiner's last known position when mpv resets on stop; Windows setup login flow fixed with an IPC bridge, immediate feedback, and a timeout with inline error for unreachable servers.
  • Jellyfin Subtitles and Overlay: Subtitle overlay shown automatically during Jellyfin playback; y-t toggle made reliable and sticky across stream redirects; managed subtitle defaults re-armed on redirect; passive Linux/Hyprland overlay shows no longer steal keyboard focus from mpv; subtitle timing improved with preferred embedded streams over external sidecars, correct Japanese-vs-English cue offset handling, per-stream delay shift restoration, and transient track-list read failure tolerance.
  • Overlay (macOS): Overlay hides when mpv loses focus, is minimized, or is no longer the foreground app; stable through transient window geometry disappearances from macOS APIs and when clicking from the overlay back into mpv; stats overlay opened inactive so it appears over fullscreen mpv without switching Spaces; passthrough fixed so mpv controls stay clickable before hovering a subtitle bar; window-tracker polling reduced while mpv is stably focused.
  • Overlay (Linux / Hyprland): Placement refreshes after leaving fullscreen; overlay stays above mpv after focus changes from clicks or movement; Settings and Yomitan windows promoted above the subtitle overlay instead of opening behind it; overlay hides when the character dictionary modal opens, including during AniList lookup.
  • Overlay Lifecycle: First startup subtitle primed before autoplay resumes so the overlay renders text before playback begins; overlay and subtitle stream kept alive after y-r restart with correct Linux bounds reapplication; launcher-owned playback quits SubMiner on end while background/tray sessions stay alive; subtitle sync modal fixed on macOS so it no longer flashes on first attempt or leaves stale state; Windows managed mpv launches from a background instance now correctly receive the start command, retarget the new socket, bind to the player window, and receive startup overlay options.
  • Yomitan Sidebar: Playback stays paused for sidebar-opened Yomitan popups when auto-pause is enabled; fixed popups not opening when startup races the Yomitan extension load; sidebar mining cards use audio and images from the clicked sidebar line instead of the current primary subtitle.
  • Launcher: Warm launches reuse a running background instance, reapply preferred subtitles, and close launcher-owned tray apps after playback ends; videos stay paused until subtitle priming and tokenization readiness complete; subminer settings on macOS exits cleanly when the window is closed; subminer app on Linux returns terminal control immediately; Linux first-run installs build with a valid Bun shebang; subminer app --setup opens the setup flow when SubMiner is already running in background.
  • YouTube Playback: Selected subtitles downloaded to local temp files so the primary bar and sidebar read the same source, with cleanup on reload and quit; false load-failure notifications suppressed; tray icon created on launcher-managed playback that attaches to an already-running process; mpv plugin no longer starts a second SubMiner instance for app-owned YouTube playback.
  • Shortcuts: Native mpv menu shortcuts disabled during managed macOS playback so configured SubMiner shortcuts work while mpv has focus; custom session shortcuts including stats.markWatchedKey wired through mpv; multi-line copy/mine overlay correctly focused so number keys choose the line count on macOS and Windows.
  • Controller Bindings: Controller config and debug shortcuts stay closed while controller support is disabled; binding learn mode starts from the edit pencil; remaps saved per controller profile; binding badges also start learn mode; row reset buttons restore individual bindings to defaults.
  • Logging: logging.level forwarded to launcher-started and Windows shortcut-started mpv sessions covering mpv log verbosity, plugin logging, and plugin-launched app logging; logging.rotation (default 7 days) and per-component logging.files toggles added with mpv logs disabled by default; repeated IPC socket warning spam suppressed while waiting for mpv to recreate the socket; Windows mpv IPC, subtitle track, and Yomitan diagnostics added.
  • Updater: Linux subminer -u performs release updates independently of any running tray app using GitHub release metadata; macOS update dialogs from subminer -u reliably appear in the foreground with a manual-install message for builds that cannot apply native updates; macOS and Linux electron-updater routes through /usr/bin/curl to avoid Electron network crashes; Windows automatic updates keep the native NSIS install path while routing updater HTTP through main-process fetch to avoid delayed exit after launch.
  • In-Player Stats: Layering fixed so delete confirmations, overlay modals, and update-check dialogs appear above the stats window; Jellyfin playback stats grouped by item metadata so watched episodes merge with matching local library titles and keep clean display names.
  • Tray: Tray stays running when Yomitan settings are closed; settings loading no longer blocks other tray actions; Yomitan extension refreshes serialized at startup; embedded popup preview disabled to prevent renderer hangs during sidebar navigation; Windows "Open SubMiner Setup" action opens the setup window correctly after first-run is complete; session help modal close fixed without mpv running.
  • Discord Rich Presence: No longer falls back to Jellyfin stream URLs; Jellyfin playback titles primed before stream loading so presence shows the show/episode title instead of a URL.
  • WebSocket Annotations: Annotation spans and token metadata stay on the annotation WebSocket; the regular subtitle WebSocket is plain-text only.
  • Subtitle Frequency Highlighting: Frequency annotations kept for determiner-led noun compounds like その場 while still filtering standalone determiners; fixed for Yomitan single-token compounds with internal particles such as 目の前 while keeping pure grammar/kana helper spans unannotated.
  • Subtitle Annotation Prefetching: Cached colored annotations and character images ready sooner for live subtitle changes without delaying raw subtitle display.
  • Packaging: macOS compiled mpv window helper correctly built into dist/scripts and bundled, preventing fallback to slow Swift source startup; stale Windows helper resource entry removed; one-shot make clean build install AppImage flows fixed so install picks up the AppImage built earlier in the same invocation.
  • Windows Startup Errors: Fatal startup failures now show a native error dialog and write details to the app log instead of exiting silently.

Docs

  • Documentation Site: Published stable docs at the site root with current development docs under /main/; fixed versioned docs navigation, archived page link handling, and local dev version routing; documented all previously undocumented config options including subtitleStyle.primaryDefaultMode, stats.markWatchedKey, immersionTracking.lifetimeSummaries.*, and all seven mpv.* launcher options; added Playback Startup Flow and Runtime Sockets diagrams to the architecture docs with cross-reference pointers in the MPV Plugin and Troubleshooting pages.

Installation

See the README and docs/installation guide for full setup steps.

Assets

  • Linux: SubMiner.AppImage
  • macOS: SubMiner-*.dmg and SubMiner-*.zip
  • Windows: SubMiner-*.exe and SubMiner-*-win.zip
  • Optional extras: subminer-assets.tar.gz and the subminer launcher

Note: the subminer wrapper script uses Bun (#!/usr/bin/env bun), so bun must be installed and on PATH.