Files
SubMiner/docs-site/launcher-script.md
T
sudacode 8825cca642 docs: rewrite docs site pages to be shorter and easier to scan
- Pages now start with setup and usage, and reference material is in compact tables
- Configuration reference gives each config block a short explanation and a key/default table
- Internal detail removed from user pages, and docs that had drifted from current behavior fixed
- The status line shows today's date, set on the client, instead of the page's last-updated date
- Add changelog fragment
2026-09-24 16:20:42 -07:00

13 KiB

Launcher script

subminer is the command-line entry point for SubMiner. It starts mpv with the socket and options SubMiner needs, opens file pickers, and runs helper commands. This page is the reference for its subcommands and flags. For everyday use, start with Usage.

You do not need Bun or anything else installed to run it. It uses the runtime bundled with the app. On Windows, the SubMiner mpv shortcut is the simpler way to play files (see Windows mpv shortcut).

subminer [options] [file | directory | URL]
subminer <subcommand> [options]

Run subminer -h or subminer <subcommand> -h for built-in help.

Options

Flag Description
-d, --directory Directory to browse (default: current directory)
-r, --recursive Search subdirectories
-R, --rofi Use rofi instead of fzf
-H, --history Browse watch history
-b, --backend Window backend: auto, hyprland, sway, x11, macos, windows
-p, --profile mpv profile to load
-a, --args Extra mpv options as one quoted string, e.g. --args "--volume=80"
--start Start the overlay after mpv launches. Only needed if mpv.autoStartSubMiner is off
-S, --start-overlay Show the overlay on start
-T, --no-texthooker Do not start the texthooker server
--settings Open the settings window
--log-level debug, info, warn, or error
-u, --update Check for and install updates
-v, --version Print the launcher's version

The target can be a video file, a directory (opens the picker there), a URL, or ytsearch:"query" for the first YouTube search result.

App flags such as --setup and --dev are not launcher flags. Pass them through with subminer app, for example subminer app --setup.

Subcommands

Command What it does
subminer stats Start the stats dashboard server. Opens your browser if stats.autoOpenBrowser is on
subminer stats -b / -s Start (or reuse) the stats server in the background / stop it
subminer stats cleanup Backfill vocabulary metadata and prune stale rows (same as -v)
subminer stats cleanup -l Rebuild lifetime totals from the retained sessions
subminer stats cleanup -d Collapse repeated lines from typeset subtitles. Add --dry-run to preview, --lookback-days <n> to limit the range
subminer stats rebuild / backfill Same as stats cleanup -l
subminer sync <host> Sync stats and watch history with another machine. See below
subminer doctor Check the app, mpv, ffmpeg, yt-dlp, pickers, config, and mpv socket
subminer doctor --refresh-known-words Refresh the known-word cache from Anki
subminer settings Open the settings window
subminer generate-subs [video] Generate Japanese subtitles with whisper.cpp
subminer jellyfin / jf Jellyfin actions: setup, login, logout, play, discovery
subminer dictionary <path> / dict Build a character dictionary for a file or directory
subminer dictionary --candidates <path> List AniList matches for that target
subminer dictionary --select <id> <path> Pin an AniList ID for that target
subminer texthooker Run only the texthooker server. -o opens it in your browser
subminer logs -e Export a sanitized log ZIP and print its path
subminer config path / show Print the config file path or its contents
subminer mpv status Exit 0 if the mpv socket is ready, 1 if not
subminer mpv socket Print the mpv socket path
subminer mpv idle Start an idle mpv in the background with SubMiner's options
subminer app / bin Pass arguments to the SubMiner app, e.g. subminer app --stop

stats cleanup runs one mode at a time. --lookback-days must be at least 1. Without it, cleanup scans all history.

generate-subs options: --download-model, --model <name>, --model-path <file>, --output <file>, and --audio-stream <index> (an ffprobe stream index). --model-path cannot be combined with --model or --download-model.

A texthooker is a web page that shows the current subtitle as plain text, so browser extensions and other tools can read along.

Video picker

With no file argument, subminer opens a picker for the current directory, or for -d <dir>. Add -r to include subdirectories.

  • fzf (default) runs in the terminal. With chafa installed, it shows thumbnail previews.
  • rofi (-R, Linux) opens a graphical menu with thumbnails.

Thumbnails come from your system thumbnail cache, or are generated with ffmpegthumbnailer or ffmpeg.

The launcher installs its rofi theme automatically. To use your own, set SUBMINER_ROFI_THEME:

SUBMINER_ROFI_THEME=/path/to/theme.rasi subminer -R

Watch history

subminer -H lists the shows you have watched, most recent first. Add -R to use rofi. Pick a show, then choose:

  • Previous episode or Next episode, moving into the neighboring season folder when needed
  • Replay last watched
  • Browse episodes, with a season menu first if the show has several season folders
  • Quit SubMiner

When an episode ends, the menu comes back for the same show. Press Escape to leave.

History comes from the immersion stats database, which SubMiner fills during playback. Shows whose folders are not reachable, such as an unmounted network drive, are hidden.

mpv options and profiles

The launcher starts mpv with these options:

--input-ipc-server=/tmp/subminer-socket
--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
--sub-visibility=no
--secondary-sub-visibility=no

mpv's own subtitles are hidden because the overlay draws them. Add more options with -a, or load an mpv profile with -p <name> or mpv.profile in the config. No profile is loaded by default.

To launch mpv yourself with the same setup, put the options in a profile in ~/.config/mpv/mpv.conf:

[subminer]
input-ipc-server=/tmp/subminer-socket
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

Launches through subminer start the overlay automatically unless mpv.autoStartSubMiner is off. mpv started outside SubMiner does not start the overlay on its own.

Sync between machines

subminer sync <host> merges immersion stats and watch history between two computers over SSH. Both end up with the combined sessions, totals, vocabulary, charts, and -H history. <host> is anything ssh accepts, such as user@hostname or an alias from your SSH config.

Both machines need the same SubMiner version. The remote only needs the app. The subminer command is optional there.

subminer sync macbook                    # two-way sync
subminer sync macbook --push             # send local data to macbook only
subminer sync macbook --pull             # bring macbook data here only
subminer sync macbook --check            # test SSH and the remote install, change nothing
subminer sync macbook --remote-cmd ~/Apps/SubMiner.AppImage   # SubMiner in a custom place on the remote
subminer sync --ui                       # open the sync window

Syncing only adds data. It never overwrites or double-counts, so you can run it as often as you like. --push and --pull do not delete anything on the receiving side.

Before a command-line sync, close SubMiner on both machines and stop the stats server with subminer stats -s, or pass --force. The sync window does not need this. It syncs while SubMiner and playback are running, and skips the session in progress until it finishes.

Transfers are compressed. When both machines have rsync (macOS and Linux), later syncs send only what changed. Windows machines use scp.

Known-word status from Anki does not sync. Each machine reads it from its own Anki collection.

More sync options
Option Description
-f, --force Skip the check that SubMiner is closed
--db <file> Use a different local stats database
--json Print progress as NDJSON
--snapshot <file> Write a snapshot of the local database, e.g. to copy by USB
--merge <file> Merge a snapshot file into the local database

A Windows remote needs the built-in OpenSSH Server enabled. SubMiner finds itself in the default install location there.

If the remote cannot find SubMiner, point --remote-cmd at the app or launcher, or link it as SubMiner somewhere on the remote PATH.

Received snapshots are cached in sync-transfer-cache/ in the config directory to speed up later syncs. Deleting it is safe.

Sync window

subminer sync --ui, or Sync Stats & History in the tray, opens a window where you can:

  • Save devices, each with a direction (two-way, push, or pull), and run Sync now or Test.
  • Turn on Auto-sync for a device. It syncs in the background every 60 minutes by default, including during playback.
  • Watch progress and see what was merged on each machine.
  • Create, merge, or delete database snapshots.

Saved devices live in sync-hosts.json in the config directory.

Environment variables

Variable Use
SUBMINER_BINARY_PATH Path to the SubMiner app, if it is not in a standard install location
SUBMINER_APPIMAGE_PATH Same, for an AppImage (Linux)
SUBMINER_ROFI_THEME Path to a custom rofi theme

Logging

The default log level is warn. Change it for one run with --log-level, or permanently with logging.level in the config. The app's --dev and --debug flags turn on developer mode. They do not change the log level.