mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-05-29 00:55:15 -07:00
14 KiB
14 KiB
Highlights
Breaking Changes
- Subsync: The
subsync.defaultModeconfig 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 -uupdate checks with app update prompts, launcher and Linux rofi theme auto-updates, checksum verification, configurable notifications, and an opt-in prerelease channel viaupdates.channel: "prerelease". - Settings Window: New dedicated Settings window via
subminer --settingsorsubminer 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 -vprints the installed app version;mpv.profileconfig 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
subminerCLI on Linux, macOS, and Windows, including a Windowssubminer.cmdPATH shim sosubminerworks without manually addingSubMiner.exeto 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.primaryVisibleOnYomitanPopupoption 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, andsubtitleSidebar.css; known-word and N+1 annotation colors moved tosubtitleStyle.knownWordColorandsubtitleStyle.nPlusOneColor; subtitle font defaults updated toHiragino 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
topXdefault raised to10000. - 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+Dmanager 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.nameMatchEnabledis 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.enabledis 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-ttoggle; delayed Japanese subtitle selection, later-loading foreign track hijacking, and long-lived sidebar ffmpeg extractor leaks fixed; resume corrected when a remote play command sendsStartPositionTicks: 0despite 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-ttoggle 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-rrestart 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 settingson macOS exits cleanly when the window is closed;subminer appon Linux returns terminal control immediately; Linux first-run installs build with a valid Bun shebang;subminer app --setupopens 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.markWatchedKeywired 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.levelforwarded 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-componentlogging.filestoggles 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 -uperforms release updates independently of any running tray app using GitHub release metadata; macOS update dialogs fromsubminer -ureliably appear in the foreground with a manual-install message for builds that cannot apply native updates; macOS and Linuxelectron-updaterroutes through/usr/bin/curlto 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/scriptsand bundled, preventing fallback to slow Swift source startup; stale Windows helper resource entry removed; one-shotmake clean build installAppImage 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 includingsubtitleStyle.primaryDefaultMode,stats.markWatchedKey,immersionTracking.lifetimeSummaries.*, and all sevenmpv.*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-*.dmgandSubMiner-*.zip - Windows:
SubMiner-*.exeandSubMiner-*-win.zip - Optional extras:
subminer-assets.tar.gzand thesubminerlauncher
Note: the subminer wrapper script uses Bun (#!/usr/bin/env bun), so bun must be installed and on PATH.