Files
SubMiner/docs-site/usage.md
T
sudacode 430373f010 feat(tokenizer): use Yomitan word classes for subtitle POS filtering (#57)
* feat(tokenizer): use Yomitan word classes for subtitle POS filtering

- Carry matched headword wordClasses from termsFind into YomitanScanToken
- Map recognized Yomitan wordClasses to SubMiner coarse POS before annotation
- MeCab enrichment now fills only missing POS fields, preserving existing coarse pos1
- Exclude standalone grammar particles, して helper fragments, and single-kana surfaces from annotations
- Respect source-text punctuation gaps when counting N+1 sentence words
- Preserve known-word highlight on excluded kanji-containing tokens
- Add backlog tasks 304 (N+1 boundary bug) and 305 (wordClasses POS, done)

* fix(tokenizer): preserve annotation and enrichment behavior

* fix: restore jlpt subtitle underlines

* fix: exclude kana-only n+1 targets

* fix: refresh overlay on Hyprland fullscreen

* fix: address fullscreen and n-plus-one review notes

* fix: address CodeRabbit review comments

* fix: accept modified digits for multi-line sentence mining

* Cancel pending Linux MPV fullscreen overlay refresh bursts

- return a cancel handle from the Linux refresh burst scheduler
- clear pending refresh bursts when overlays hide or windows close
- tighten the burst test polling to wait for the async refresh

* fix: suppress N+1 for kana-only candidates and fix minSentenceWords coun

- Treat kana-only tokens with surrounding subtitle punctuation (…, ―, etc.) as kana-only so they are not promoted to N+1 targets
- Exclude unknown tokens filtered from N+1 targeting from the minSentenceWords count so filtered kana-only unknowns cannot satisfy sentence length threshold
- Add regression tests for kana-only candidate suppression and filtered-unknown padding cases

* Suppress subtitle annotations for grammar fragments

- Hide annotation metadata for auxiliary inflection and ja-nai endings
- Preserve lexical `くれる` forms and add regression coverage

* Fix kana-only N+1 tokenizer regression test

- Use a pure-kana fixture for the subtitle token N+1 case
- Update task notes for the latest CodeRabbit follow-up

* Fix managed playback exit and tokenizer grammar splits

- Ignore background stats daemons during regular app startup
- Split standalone grammar endings before applying annotations
- Clear helper-span annotations for auxiliary-only tokens

* fix: refresh current subtitle after known-word mining

* fix: suppress sigh interjection annotations

* fix: preserve jlpt underline color after lookup

* Replace grammar-ending permutations with shared matcher; preserve word a

- Extract `grammar-ending.ts` with `isStandaloneGrammarEndingText` / `isSubtitleGrammarEndingText` pattern matchers
- Replace `STANDALONE_GRAMMAR_ENDINGS` set in parser-selection-stage with shared matcher
- Replace generated phrase sets in subtitle-annotation-filter with shared matcher
- Remove stale duplicate subtitle-exclusion constants and helpers from annotation-stage
- Manual clipboard card updates now write only to the sentence audio field, leaving word/expression audio untouched

* fix: CI changelog, annotation options threading, and Jellyfin quit

- Add `type: fixed` / `area:` frontmatter to `changes/319` to pass `changelog:lint`
- Thread `TokenizerAnnotationOptions` through `stripSubtitleAnnotationMetadata` so `sourceText` is honored
- Include `jellyfinPlay` in `shouldQuitOnDisconnectWhenOverlayRuntimeInitialized` predicate
- Make mouse test `elementFromPoint` stubs coordinate-sensitive
- Make Lua test `.tmp` mkdir portable on Windows

* Preserve overlay across macOS flaps and mpv playlist changes

- keep visible overlays alive during transient macOS tracker loss
- reuse the running mpv overlay path on playlist navigation
- update regression coverage and changelog fragments

* fix: restore stats daemon deferral

* fix: keep subtitle prefetch alive after cache hits

* Fix JLPT underline color drift and AniList skipped-threshold sync

- Replace JLPT `text-decoration` underlines with `border-bottom` so Chromium selection/hover cannot repaint them to another annotation's color
- Lock JLPT underline color for combined annotation selectors (known, n+1, frequency) and character hover/selection states
- Trigger AniList post-watch check on every mpv time-position update to catch skipped completion thresholds
- Fall back to filename-parser season/episode when guessit omits them

* fix: address coderabbit feedback

* fix: sync AniList after seeked completion

* fix: preserve ordinal frequency annotations

* fix: preserve known highlighting for filtered tokens

* fix: address PR #57 CodeRabbit feedback

- Acquire AniList post-watch in-flight lock before async gating to prevent duplicate writes
- Isolate manual watched mark result from AniList post-watch callback failures
- Report known-word cache clears as mutations during immediate append when state existed
- Add regression tests for each fix

* fix: stop AniList setup reopening on Linux when keyring token exists

- Gate setup success on token persistence: `saveToken` now returns `boolean`; on failure, keeps the setup window open instead of reporting success
- Config reload passes `allowSetupPrompt: false` so playback reloads don't re-open the setup window
- Add regression test for persistence-failure path

* fix: suppress known highlights for subtitle particles

* fix: retry transient AniList safeStorage failures

* fix: hide overlay focus ring

* fix: align Hyprland fullscreen overlays

* fix: restore subtitle playback keybindings

* fix: align Hyprland overlay windows to mpv and stop pinning them

- Force-apply exact Hyprland move/resize/setprop dispatches when bounds are provided
- Stop pinning overlay windows; toggle pin off when Hyprland reports pinned=true
- Compensate stats overlay outer placement for Electron/Wayland content insets
- Make stats overlay window and page opaque so mpv cannot show through transparent insets
- Constrain stats app to h-screen with internal scroll so content covers mpv from y=0
- Lock overlay/stats window titles against page-title-updated events
- Add regression coverage for placement dispatches, inset compensation, and CSS overlay mode

* fix: retain frequency rank for honorific prefix-noun tokens

- Add `shouldAllowHonorificPrefixNounFrequency` to exempt お/ご/御 + noun merged tokens from frequency exclusion
- Add regression test for `ご機嫌` asserting rank 5484 is preserved after MeCab enrichment and annotation
- Close TASK-341

* fix: map openCharacterDictionary session action to --open-character-dict

- Add missing Lua CLI dispatch entry for openCharacterDictionary
- Add regression test for Alt+Meta+A binding and CLI flag forwarding

* fix: keep macOS overlay interactive while mpv remains active

- Overlay no longer hides or becomes click-through during tracker refreshes when mpv is the focused window
- Preserve already-visible overlay when tracker is temporarily not ready but mpv target signal is active
- Add regression tests for active-mpv tracker refresh and transient tracker-not-ready paths

* fix: address coderabbit subtitle follow-ups

* fix: resolve media detail from sessions when lifetime summary is absent

- Change `getMediaDetail` JOIN to LEFT JOIN on `imm_lifetime_media` and fall back to aggregated session metrics when no lifetime row exists
- Add filter `AND (lm.video_id IS NOT NULL OR s.session_id IS NOT NULL)` to keep results valid
- Add regression test covering the session-visible / media-detail-missing mismatch

* fix: address PR-57 CodeRabbit findings and CI failures

- use filtered word counts in media detail session token aggregation
- cancel fullscreen refresh burst on exit via updateLinuxMpvFullscreenOverlayRefreshBurst
- guard Hyprland JSON.parse in try/catch; exclude windowtitle from geometry events
- narrow focus suppression from :focus to :focus-visible
- apply JLPT lock selectors to word-name-match tokens (N1–N5)

* fix: macOS overlay z-order and Yomitan compound token known highlighting

- Release always-on-top when tracked mpv loses foreground on macOS
- Skip visible overlay blur restacking on macOS to avoid covering unrelated windows
- Prefer Yomitan internal parse tokens over fragmented scanner output for known-word decisions
- Add regression tests for both behaviors

* fix: macOS visible-overlay blur no longer invokes Windows-only blur call

- Split win32/darwin branches in handleOverlayWindowBlurred so darwin visible blur returns early without calling onWindowsVisibleOverlayBlur
- Add regression test asserting Windows callback stays inactive on macOS visible overlay blur
- Close TASK-347
2026-05-12 12:08:09 -07:00

21 KiB

Usage

Important

SubMiner requires the bundled Yomitan instance to have at least one dictionary imported for lookups to work. See Yomitan setup for details.

::: tip Just finished first-run setup? If you want Anki card enrichment (sentence, audio, screenshot), the only config you need is ankiConnect with your deck name and field names. Here is a minimal working example:

{
  "ankiConnect": {
    "enabled": true,
    "deck": "Mining",
    "fields": {
      "sentence": "Sentence",
      "audio": "SentenceAudio",
      "image": "Picture",
    },
  },
}

Field names must match your Anki note type exactly (case-sensitive). See Anki Integration for the full reference. :::

How It Works

  1. SubMiner starts the overlay app in the background
  2. MPV runs with an IPC socket at /tmp/subminer-socket
  3. The overlay connects and subscribes to subtitle changes
  4. Subtitles are tokenized with Yomitan's internal parser
  5. Words are displayed as interactive spans in the overlay
  6. Hover a word, then trigger Yomitan lookup with your configured lookup key/modifier to open the Yomitan popup
  7. Optional subtitle annotations (N+1, character-name, frequency, JLPT) highlight useful cues in real time

There are several ways to use SubMiner:

Tip

New users: start with the subminer wrapper script (or the SubMiner mpv shortcut on Windows). It handles mpv launch, IPC socket setup, and overlay lifecycle automatically so you don't need to configure anything in mpv.conf.

Approach Use when How
subminer script You want SubMiner to handle everything — launch mpv, set up the socket, start the overlay. The simplest path and recommended starting point. subminer video.mkv
SubMiner mpv shortcut (Windows) The recommended Windows entry point. Created during first-run setup, launches mpv with SubMiner's defaults directly. Double-click, drag a file onto it, or run SubMiner.exe --launch-mpv
MPV plugin (all platforms) You launch mpv yourself or from another tool (file manager, Jellyfin, etc.). Requires --input-ipc-server=/tmp/subminer-socket in your mpv config. Use y chord keybindings inside mpv

You can use both — the plugin provides in-player controls, while the subminer script (or the Windows shortcut) is convenient for direct playback. The subminer script runs directly via shebang on Linux and macOS (no bun run needed); on Windows it must be invoked with bun run subminer since the shebang is not supported.

Live Config Reload

While SubMiner is running, it watches your active config file and applies safe updates automatically.

Live-updated settings:

  • subtitleStyle
  • keybindings
  • shortcuts
  • secondarySub.defaultMode
  • ankiConnect.ai

Invalid config edits are rejected; SubMiner keeps the previous valid runtime config and shows an error notification. For restart-required sections, SubMiner shows a restart-needed notification.

Commands

On Windows, replace SubMiner.AppImage with SubMiner.exe in the direct packaged-app examples below.

# Browse and play videos
subminer                          # Current directory (uses fzf)
subminer -R                       # Use rofi instead of fzf
subminer -d ~/Videos              # Specific directory
subminer -r -d ~/Anime            # Recursive search
subminer video.mkv                # Play specific file (default plugin config auto-starts visible overlay)
subminer --start video.mkv        # Optional explicit overlay start (use when plugin auto_start=no)
subminer -S video.mkv             # Same as above via --start-overlay
subminer https://youtu.be/...     # Play a YouTube URL
subminer ytsearch:"jp news"       # Play first YouTube search result
subminer --setup                  # Open first-run setup popup
subminer --log-level debug video.mkv # Enable verbose logs for launch/debugging
subminer --log-level warn video.mkv  # Set logging level explicitly
subminer --args '--fs=opengl-hq --ytdl-format=bestvideo*+bestaudio/best' video.mkv  # Pass extra mpv args

# Options
subminer -T video.mkv             # Disable texthooker server
subminer -b x11 video.mkv         # Force X11 backend
subminer video.mkv                # No mpv profile passed by default
subminer -p gpu-hq video.mkv      # Use a specific mpv profile
subminer jellyfin                 # Open Jellyfin setup window (subcommand form)
subminer jellyfin -l --server http://127.0.0.1:8096 --username me --password 'secret'
subminer jellyfin --logout        # Clear stored Jellyfin token/session data
subminer jellyfin -p              # Interactive Jellyfin library/item picker + playback
subminer jellyfin -d              # Jellyfin cast-discovery mode (background tray app)
subminer app --stop               # Stop background app (including Jellyfin cast broadcast)
subminer doctor                   # Dependency + config + socket diagnostics
subminer config path              # Print active config path
subminer config show              # Print active config contents
subminer mpv socket               # Print active mpv socket path
subminer mpv status               # Exit 0 if socket is ready, else exit 1
subminer mpv idle                 # Launch detached idle mpv with SubMiner defaults
subminer dictionary /path/to/file-or-directory  # Generate character dictionary ZIP from target (manual Yomitan import)
subminer dictionary --candidates /path/to/file.mkv
subminer dictionary --select 21355 /path/to/file.mkv
subminer texthooker               # Launch texthooker-only mode
subminer texthooker -o            # Launch texthooker and open it in your browser
subminer app --anilist            # Pass args directly to SubMiner binary (example: AniList login flow)

# Direct packaged app control
SubMiner.AppImage --background             # Start in background (tray + IPC wait, minimal logs)
SubMiner.AppImage --start --texthooker   # Start overlay with texthooker
SubMiner.AppImage --texthooker           # Launch texthooker only (no overlay window)
SubMiner.AppImage --texthooker --open-browser  # Launch texthooker and open browser
SubMiner.AppImage --setup                  # Open first-run setup popup
SubMiner.AppImage --stop                  # Stop overlay
SubMiner.AppImage --start --toggle        # Start MPV IPC + toggle visibility
SubMiner.AppImage --show-visible-overlay              # Force show visible overlay
SubMiner.AppImage --hide-visible-overlay              # Force hide visible overlay
SubMiner.AppImage --toggle-primary-subtitle-bar       # Toggle primary subtitle bar visibility
SubMiner.AppImage --start --dev                         # Enable app/dev mode only
SubMiner.AppImage --start --debug                       # Alias for --dev
SubMiner.AppImage --start --log-level debug             # Force verbose logging without app/dev mode
SubMiner.AppImage --settings              # Open Yomitan settings
SubMiner.AppImage --jellyfin              # Open Jellyfin setup window
SubMiner.AppImage --jellyfin-login --jellyfin-server http://127.0.0.1:8096 --jellyfin-username me --jellyfin-password 'secret'
SubMiner.AppImage --jellyfin-logout       # Clear stored Jellyfin token/session data
SubMiner.AppImage --jellyfin-libraries
SubMiner.AppImage --jellyfin-items --jellyfin-library-id LIBRARY_ID --jellyfin-search anime --jellyfin-limit 20
SubMiner.AppImage --jellyfin-play --jellyfin-item-id ITEM_ID --jellyfin-audio-stream-index 1 --jellyfin-subtitle-stream-index 2  # Requires connected mpv IPC (--start or plugin workflow)
SubMiner.AppImage --jellyfin-remote-announce  # Force cast-target capability announce + visibility check
SubMiner.AppImage --dictionary             # Generate character dictionary ZIP for current anime
SubMiner.AppImage --dictionary-candidates  # List AniList candidates for current character dictionary series
SubMiner.AppImage --dictionary-select --dictionary-anilist-id 21355  # Pin correct AniList media for series
SubMiner.AppImage --open-character-dictionary  # Open in-app AniList selector
SubMiner.AppImage --help                  # Show all options

Once Jellyfin is configured, the tray menu includes Jellyfin Discovery for starting or stopping cast discovery in the current app session without changing config.

Logging and App Mode

  • --log-level controls logger verbosity.
  • --dev and --debug are app/dev-mode switches; they are not log-level aliases.
  • --background defaults to quieter logging (warn) unless --log-level is set.
  • --background launched from a terminal detaches and returns the prompt; stop it with tray Quit or SubMiner.AppImage --stop (SubMiner.exe --stop on Windows).
  • Linux desktop launcher starts SubMiner with --background by default (via electron-builder linux.executableArgs).
  • On Linux, the app now defaults safeStorage to gnome-libsecret for encrypted token persistence. Launcher pass-through commands also support --password-store=<backend> and forward it to the app when present. Override with e.g. --password-store=basic_text.
  • Use both when needed, for example SubMiner.AppImage --start --dev --log-level debug (or SubMiner.exe --start --dev --log-level debug on Windows).

Windows mpv Shortcut

First-run setup creates the config file, then requires the mpv plugin and Yomitan dictionaries before it can finish.

If you enabled the optional Windows shortcut during install, SubMiner creates a SubMiner mpv shortcut in the Start menu and/or on the desktop. On Windows, that shortcut is the recommended way to launch local files with SubMiner because it starts mpv.exe with the right defaults directly. After setup completes, the shortcut is the normal Windows playback entry point.

You can use it three ways:

  • Double-click SubMiner mpv to open mpv with SubMiner's default socket/subtitle args.
  • Drag a video file onto SubMiner mpv to launch that file with the same defaults.
  • Run it directly from Command Prompt or PowerShell with --launch-mpv.
& "C:\Program Files\SubMiner\SubMiner.exe" --launch-mpv
& "C:\Program Files\SubMiner\SubMiner.exe" --launch-mpv "C:\Videos\episode 01.mkv"

This flow requires mpv.exe to be discoverable. Leave mpv.executablePath blank to auto-discover from PATH, or set it to the full mpv.exe path if mpv is installed elsewhere. SUBMINER_MPV_PATH is still honored as a fallback.

Launcher Subcommands

  • subminer jellyfin / subminer jf: Jellyfin-focused workflow aliases.
  • subminer doctor: health checks for core dependencies and runtime paths.
  • subminer config: config helpers (path, show).
  • subminer mpv: mpv helpers (status, socket, idle).
  • subminer dictionary <path>: generates a Yomitan-importable character dictionary ZIP from a file/directory target.
  • Use subminer dictionary --candidates <path> and subminer dictionary --select <id> <path> to correct AniList character-dictionary matches for a whole series.
  • subminer texthooker: texthooker-only shortcut (same behavior as --texthooker).
  • subminer app / subminer bin: direct passthrough to the SubMiner binary/AppImage.
  • Subcommand help pages are available (for example subminer jellyfin -h).

First-Run Setup

Setup popup appears on first launch, or when setup has not been completed.

You can also open it manually:

subminer --setup
SubMiner.AppImage --setup

Setup flow:

  • config file: create the default config directory and prefer config.jsonc
  • plugin status: install the bundled mpv plugin before finishing setup
  • Yomitan shortcut: open bundled Yomitan settings directly from the setup window
  • dictionary check: ensure at least one bundled Yomitan dictionary is available, unless an external Yomitan profile is configured
  • Windows: optionally create or remove SubMiner mpv Start Menu/Desktop shortcuts (SubMiner.exe --launch-mpv)
  • Windows: optionally set mpv.executablePath if mpv.exe is not on PATH
  • refresh: re-check plugin + dictionary state without restarting
  • Finish setup stays disabled until the config, plugin, and dictionary gates are satisfied
  • finish action writes setup completion state and suppresses future auto-open prompts

AniList character dictionary auto-sync (optional):

  • Enable with anilist.characterDictionary.enabled=true in config.
  • SubMiner syncs the currently watched AniList media into a per-media snapshot, then rebuilds one merged SubMiner Character Dictionary from the most recently used snapshots.
  • Rotation limit defaults to 3 recent media snapshots in that merged dictionary (maxLoaded).

Use subcommands for Jellyfin workflows (subminer jellyfin ...). Top-level launcher flags like --jellyfin-* are intentionally rejected.

MPV Profile Example (mpv.conf)

subminer passes the following MPV options directly on launch by default:

  • --input-ipc-server=/tmp/subminer-socket (or your configured socket path)
  • --alang=ja,jp,jpn,japanese,en,eng,english,enus,en-us
  • --slang=ja,jp,jpn,japanese,en,eng,english,enus,en-us
  • --sub-auto=fuzzy
  • --sub-file-paths=.;subs;subtitles
  • --sid=auto
  • --secondary-sid=auto
  • --secondary-sub-visibility=no

You can append additional MPV arguments with launcher -a/--args, for example --args "--ao=alsa --volume=80".

You can define a matching profile in ~/.config/mpv/mpv.conf for consistency when launching mpv manually or from other tools. The Windows SubMiner.exe --launch-mpv shortcut path uses equivalent args directly, but skips the extra current-directory subtitle scan to avoid duplicate sidecar detection when you drag a video onto the shortcut; the optional profile remains useful for manual mpv launches and the subminer wrapper defaults to --profile=subminer (or override with subminer -p <profile> ...):

[subminer]
# IPC socket (must match SubMiner config)
input-ipc-server=/tmp/subminer-socket

# Prefer JP/EN audio + subtitle language variants
alang=ja,jp,jpn,japanese,en,eng,english,enus,en-us
slang=ja,jp,jpn,japanese,en,eng,english,enus,en-us

# Auto-load external subtitles
sub-auto=fuzzy
sub-file-paths=.;subs;subtitles

# Select primary + secondary subtitle tracks automatically
sid=auto
secondary-sid=auto
secondary-sub-visibility=no

Yomitan setup

SubMiner includes a bundled Yomitan extension for overlay word lookup. This bundled extension is separate from any Yomitan browser extension you may have installed.

For SubMiner overlay lookups to work, open Yomitan settings (subminer app --settings or SubMiner.AppImage --settings) and import at least one dictionary in the bundled Yomitan instance.

If you also use Yomitan in a browser, configure that browser profile separately; it does not inherit dictionaries or settings from the bundled instance.

YouTube Playback

subminer accepts direct URLs (for example, YouTube links) and ytsearch: targets. For YouTube playback, SubMiner resolves subtitle selection during startup while mpv is paused: it auto-selects the default primary subtitle track plus a best-effort secondary track, then resumes when primary subtitles are ready.

Notes:

  • Install yt-dlp so mpv can resolve YouTube streams and subtitle tracks reliably.
  • For YouTube URLs, startup no longer requires opening the picker first; SubMiner loads subtitles and keeps the overlay available for retries.
  • Press Ctrl+Alt+C during active YouTube playback to open the manual YouTube subtitle picker and retry track selection.
  • For YouTube URLs, subminer probes available YouTube subtitle tracks, reuses existing authoritative tracks when available, and downloads only missing sides.
  • Native mpv secondary subtitle rendering stays hidden so the overlay remains the visible secondary subtitle surface.
  • Primary subtitle target languages come from youtube.primarySubLanguages (defaults to ["ja","jpn"]).
  • Secondary target languages come from secondarySub.secondarySubLanguages (defaults to English if unset).
  • Configure defaults in $XDG_CONFIG_HOME/SubMiner/config.jsonc (or ~/.config/SubMiner/config.jsonc) under youtube and secondarySub.

For local video files, SubMiner uses the same config-driven language priorities to auto-select the primary and secondary subtitle tracks from internal and external subtitle sources.

Controller Support

SubMiner supports gamepad/controller input for couch-friendly usage via the Chrome Gamepad API. Controller input drives the overlay while keyboard-only mode is enabled.

Getting Started

  1. Connect a controller before or after launching SubMiner.
  2. Enable keyboard-only mode — press Y on the controller (default binding) or use the overlay keybinding.
  3. Press Alt+C in the overlay by default to pick the controller you want to save and remap any action inline.
  4. Click Learn on the overlay action you want, then press the matching button, trigger, or stick direction on the controller.
  5. Use the left stick to navigate subtitle tokens and scroll the popup; use the right stick vertically for popup page jumps.
  6. Press A to look up the selected word, X to mine a card, B to close the popup.

By default SubMiner uses the first connected controller. Alt+C opens the controller config modal, where you can save the preferred controller and remap bindings inline, and Alt+Shift+C opens the live debug modal with raw axes/button values for non-standard pads. Both shortcuts can be changed through shortcuts.openControllerSelect and shortcuts.openControllerDebug.

Default Button Mapping

Button Action
A (South) Toggle lookup
B (East) Close lookup
Y (North) Toggle keyboard-only mode
X (West) Mine card
L1 Play current Yomitan audio
R1 Next Yomitan audio track
L3 (left stick press) Toggle mpv pause
Select / Minus Quit mpv
L2 / R2 Unbound (available for custom bindings)

Analog Controls

Input Action
Left stick horizontal Move token selection left/right
Left stick vertical Scroll Yomitan popup
Right stick vertical Jump through Yomitan popup
D-pad Fallback for stick navigation when configured

Learn mode ignores already-held inputs and waits for the next fresh button press or axis direction, which avoids accidental captures when you open the modal mid-input.

All button and axis mappings are configurable under the controller config block. See Configuration — Controller Support for the full options.

Keybindings

See Keyboard Shortcuts for the full reference, including mining shortcuts, overlay controls, and customization.

Global shortcuts (work system-wide):

Keybind Action
Alt+Shift+O Toggle visible overlay
Alt+Shift+Y Open Yomitan settings

Alt+Shift+Y is fixed and not configurable. All other shortcuts can be changed under shortcuts in your config.

Useful overlay-local default keybinding: Ctrl+Alt+P opens the playlist browser for the current video's parent directory and the live mpv queue so you can append, reorder, remove, or jump between episodes without leaving playback.

Press V to hide or restore the primary SubMiner subtitle bar. The mpv plugin also binds bare v to the same action, overriding mpv's native primary subtitle visibility toggle.

Ctrl/Cmd+/ opens the session help modal with the current overlay and mpv keybindings. If you use the mpv plugin, the same help view is also available through the y-h chord.

Hovering over subtitle text pauses mpv by default; leaving resumes it. Yomitan popups also pause playback by default. Set subtitleStyle.autoPauseVideoOnHover: false or subtitleStyle.autoPauseVideoOnYomitanPopup: false to disable either behavior.

Drag-and-Drop

  • Drop video files onto the overlay to replace current playback.
  • Hold Shift while dropping to append to the playlist instead.

Next: Mining Workflow — word lookup, card creation, and the full mining loop.