diff --git a/README.md b/README.md index 82f9083d..41d04cc9 100644 --- a/README.md +++ b/README.md @@ -92,7 +92,7 @@ Browse sibling episode files and the active mpv queue in one overlay modal. Open alass / ffsubsync - Automatic subtitle retiming — requires alass or ffsubsync on your PATH (optional; subtitle syncing is disabled without them) + Manual subtitle retiming — requires alass or ffsubsync on your PATH (optional; subtitle syncing is disabled without them) WebSocket diff --git a/changes/config-load-preserves-user-files.md b/changes/config-load-preserves-user-files.md new file mode 100644 index 00000000..5ab26e50 --- /dev/null +++ b/changes/config-load-preserves-user-files.md @@ -0,0 +1,4 @@ +type: fixed +area: config + +- Preserved user config files during legacy config compatibility handling. diff --git a/changes/default-opt-in-warmup-name-highlighting.md b/changes/default-opt-in-warmup-name-highlighting.md new file mode 100644 index 00000000..9c326dc3 --- /dev/null +++ b/changes/default-opt-in-warmup-name-highlighting.md @@ -0,0 +1,4 @@ +type: changed +area: config + +- Defaulted Jellyfin remote-session startup warmup and character-name subtitle highlighting to off. diff --git a/changes/subsync-manual-only.md b/changes/subsync-manual-only.md new file mode 100644 index 00000000..41cb3fbd --- /dev/null +++ b/changes/subsync-manual-only.md @@ -0,0 +1,4 @@ +type: changed +area: subtitles + +- Subsync now always opens the manual picker and the `subsync.defaultMode` config/settings option has been removed. diff --git a/config.example.jsonc b/config.example.jsonc index 13c34826..5d6059ad 100644 --- a/config.example.jsonc +++ b/config.example.jsonc @@ -155,7 +155,7 @@ "mecab": true, // Warm up MeCab tokenizer at startup. Values: true | false "yomitanExtension": true, // Warm up Yomitan extension at startup. Values: true | false "subtitleDictionaries": true, // Warm up subtitle dictionaries at startup. Values: true | false - "jellyfinRemoteSession": true // Warm up Jellyfin remote session at startup. Values: true | false + "jellyfinRemoteSession": false // Warm up Jellyfin remote session at startup. Values: true | false }, // Background warmup controls for MeCab, Yomitan, dictionaries, and Jellyfin session. // ========================================== @@ -336,12 +336,11 @@ }, // Dual subtitle track options. // ========================================== - // Auto Subtitle Sync + // Subtitle Sync // Subsync engine and executable paths. // Hot-reload: subsync changes apply to the next subtitle sync run. // ========================================== "subsync": { - "defaultMode": "auto", // Subsync default mode. Values: auto | manual "alass_path": "", // Optional absolute path to the alass binary used by subsync. Leave empty to auto-discover from PATH. "ffsubsync_path": "", // Optional absolute path to the ffsubsync binary used by subsync. Leave empty to auto-discover from PATH. "ffmpeg_path": "", // Optional absolute path to the ffmpeg binary used by subsync. Leave empty to auto-discover from PATH. @@ -384,7 +383,7 @@ "preserveLineBreaks": false, // Preserve line breaks in visible overlay subtitle rendering. When false, line breaks are flattened to spaces for a single-line flow. Values: true | false "autoPauseVideoOnHover": true, // Automatically pause mpv playback while hovering subtitle text, then resume on leave. Values: true | false "autoPauseVideoOnYomitanPopup": true, // Automatically pause mpv playback while Yomitan popup is open, then resume when popup closes. Values: true | false - "nameMatchEnabled": true, // Enable subtitle token coloring for matches from the SubMiner character dictionary. Values: true | false + "nameMatchEnabled": false, // Enable subtitle token coloring for matches from the SubMiner character dictionary. Values: true | false "nameMatchColor": "#f5bde6", // Hex color used when a subtitle token matches an entry from the SubMiner character dictionary. "nPlusOneColor": "#c6a0f6", // Color used for the single N+1 target token subtitle highlight. "knownWordColor": "#a6da95", // Color used for known-word subtitle highlights. diff --git a/docs-site/character-dictionary.md b/docs-site/character-dictionary.md index 82e1857e..9de139a2 100644 --- a/docs-site/character-dictionary.md +++ b/docs-site/character-dictionary.md @@ -88,7 +88,7 @@ Name matching runs inside Yomitan's scanning pipeline during subtitle tokenizati 1. Yomitan receives subtitle text and scans for dictionary matches. 2. Entries from "SubMiner Character Dictionary" are checked with exact primary-source matching — the token must match the entry's `originalText` with `isPrimary: true` and `matchType: 'exact'`. 3. Matched tokens are flagged `isNameMatch: true` and forwarded to the renderer. -4. The renderer applies the name-match highlight color (default: `#f5bde6`). +4. If `subtitleStyle.nameMatchEnabled` is enabled, the renderer applies the name-match highlight color (default: `#f5bde6`). Name matches are visually distinct from [N+1 targeting, frequency highlighting, and JLPT tags](/subtitle-annotations) so you can tell at a glance whether a highlighted word is a character name or a vocabulary target. @@ -96,7 +96,7 @@ Name matches are visually distinct from [N+1 targeting, frequency highlighting, | Option | Default | Description | | -------------------------------- | --------- | ---------------------------------- | -| `subtitleStyle.nameMatchEnabled` | `true` | Toggle character-name highlighting | +| `subtitleStyle.nameMatchEnabled` | `false` | Toggle character-name highlighting | | `subtitleStyle.nameMatchColor` | `#f5bde6` | Highlight color for matched names | ## Dictionary Entries @@ -228,7 +228,7 @@ merged.zip | `anilist.characterDictionary.collapsibleSections.description` | `false` | Start Description section expanded | | `anilist.characterDictionary.collapsibleSections.characterInformation` | `false` | Start Character Information section expanded | | `anilist.characterDictionary.collapsibleSections.voicedBy` | `false` | Start Voiced By section expanded | -| `subtitleStyle.nameMatchEnabled` | `true` | Toggle character-name highlighting in subtitles | +| `subtitleStyle.nameMatchEnabled` | `false` | Toggle character-name highlighting in subtitles | | `subtitleStyle.nameMatchColor` | `#f5bde6` | Highlight color for character-name matches | ## Reference Implementation diff --git a/docs-site/configuration.md b/docs-site/configuration.md index 55893d4e..a192951d 100644 --- a/docs-site/configuration.md +++ b/docs-site/configuration.md @@ -171,7 +171,7 @@ The configuration file includes several main sections: **External Integrations** - [**Jimaku**](#jimaku) - Jimaku API configuration and defaults -- [**Auto Subtitle Sync**](#auto-subtitle-sync) - Sync current subtitle with `alass`/`ffsubsync` +- [**Subtitle Sync**](#subtitle-sync) - Sync current subtitle with `alass`/`ffsubsync` - [**AniList**](#anilist) - Optional post-watch progress updates - [**Yomitan**](#yomitan) - Reuse an external read-only Yomitan profile via `yomitan.externalProfilePath` - [**Jellyfin**](#jellyfin) - Optional Jellyfin auth, library listing, and playback launch @@ -258,7 +258,7 @@ Control which startup warmups run in the background versus deferring to first re "mecab": true, "yomitanExtension": true, "subtitleDictionaries": true, - "jellyfinRemoteSession": true + "jellyfinRemoteSession": false } } ``` @@ -271,7 +271,7 @@ Control which startup warmups run in the background versus deferring to first re | `subtitleDictionaries` | `true`, `false` | Warm up JLPT + frequency dictionaries at startup | | `jellyfinRemoteSession` | `true`, `false` | Warm up Jellyfin remote session at startup (still requires Jellyfin remote auto-connect settings) | -Defaults warm everything (`true` for all toggles, `lowPowerMode: false`). Setting a warmup toggle to `false` defers that work until first usage. +Defaults warm local tokenizer/dictionary work (`true` for `mecab`, `yomitanExtension`, and `subtitleDictionaries`) with `lowPowerMode: false`; Jellyfin remote session warmup is opt-in (`false` by default). Setting a warmup toggle to `false` defers that work until first usage. ### WebSocket Server @@ -391,7 +391,7 @@ See `config.example.jsonc` for detailed configuration options. | `autoPauseVideoOnYomitanPopup` | boolean | Pause playback while the Yomitan popup is open, then resume when the popup closes (`true` by default). | | `hoverTokenColor` | string | Hex color used for hovered subtitle token highlight in mpv (default: catppuccin mauve) | | `hoverTokenBackgroundColor` | string | CSS color used for hovered subtitle token background highlight (default: `"transparent"`); `hoverBackground` is accepted as an alias | -| `nameMatchEnabled` | boolean | Enable subtitle token coloring for matches from the SubMiner character dictionary (`true` by default) | +| `nameMatchEnabled` | boolean | Enable subtitle token coloring for matches from the SubMiner character dictionary (`false` by default) | | `nameMatchColor` | string | Hex color used for subtitle tokens matched from the SubMiner character dictionary (default: `#f5bde6`) | | `knownWordColor` | string | Hex color used for known-word subtitle highlights (default: `#a6da95`) | | `nPlusOneColor` | string | Hex color used for the single N+1 target subtitle highlight (default: `#c6a0f6`) | @@ -1111,17 +1111,16 @@ Jimaku is rate limited; if you hit a limit, SubMiner will surface the retry dela Set `openBrowser` to `false` to only print the URL without opening a browser. -### Auto Subtitle Sync +### Subtitle Sync -Sync the active subtitle track using `alass` (preferred) or `ffsubsync`. Both are **optional external tools** that must be installed separately and available on your `PATH` (or configured via the path options below). Subtitle syncing is silently skipped if neither is found. +Sync the active subtitle track from the overlay picker using `alass` or `ffsubsync`. Both are **optional external tools** that must be installed separately and available on your `PATH` (or configured via the path options below). - [`alass`](https://github.com/kaegi/alass) — fast, audio-independent sync using a secondary subtitle as reference -- [`ffsubsync`](https://github.com/smacke/ffsubsync) — audio-based sync using the video file as reference (fallback) +- [`ffsubsync`](https://github.com/smacke/ffsubsync) — audio-based sync using the video file as reference ```json { "subsync": { - "defaultMode": "auto", "alass_path": "", "ffsubsync_path": "", "ffmpeg_path": "", @@ -1132,7 +1131,6 @@ Sync the active subtitle track using `alass` (preferred) or `ffsubsync`. Both ar | Option | Values | Description | | ---------------- | -------------------- | ------------------------------------------------------------------------------------------------------------------------- | -| `defaultMode` | `"auto"`, `"manual"` | `auto`: try `alass` against secondary subtitle, then fallback to `ffsubsync`; `manual`: open overlay picker | | `alass_path` | string path | Path to `alass` executable. Empty or `null` resolves from `PATH`. `alass` must be installed separately. | | `ffsubsync_path` | string path | Path to `ffsubsync` executable. Empty or `null` resolves from `PATH`. `ffsubsync` must be installed separately. | | `ffmpeg_path` | string path | Path to `ffmpeg` (used for internal subtitle extraction). Empty or `null` falls back to `/usr/bin/ffmpeg`. | diff --git a/docs-site/demos.md b/docs-site/demos.md index a9f5a1f6..ae034e5c 100644 --- a/docs-site/demos.md +++ b/docs-site/demos.md @@ -25,7 +25,7 @@ Mine vocabulary cards from Yomitan or directly from subtitle lines. SubMiner aut ## Subtitle Download & Sync -Search and download subtitles from Jimaku, then automatically synchronize them with alass or ffsubsync — all from within SubMiner. +Search and download subtitles from Jimaku, then retime them with alass or ffsubsync — all from within SubMiner.