* fix: harden preload argv parsing for popup windows * fix: align youtube playback with shared overlay startup * fix: unwrap mpv youtube streams for anki media mining * docs: update docs for youtube subtitle and mining flow * refactor: unify cli and runtime wiring for startup and youtube flow * feat: update subtitle sidebar overlay behavior * chore: add shared log-file source for diagnostics * fix(ci): add changelog fragment for immersion changes * fix: address CodeRabbit review feedback * fix: persist canonical title from youtube metadata * style: format stats library tab * fix: address latest review feedback * style: format stats library files * test: stub launcher youtube deps in CI * test: isolate launcher youtube flow deps * test: stub launcher youtube deps in failing case * test: force x11 backend in launcher ci harness * test: address latest review feedback * fix(launcher): preserve user YouTube ytdl raw options * docs(backlog): update task tracking notes * fix(immersion): special-case youtube media paths in runtime and tracking * feat(stats): improve YouTube media metadata and picker key handling * fix(ci): format stats media library hook * fix: address latest CodeRabbit review items * docs: update youtube release notes and docs * feat: auto-load youtube subtitles before manual picker * fix: restore app-owned youtube subtitle flow * docs: update youtube playback docs and config copy * refactor: remove legacy youtube launcher mode plumbing * fix: refine youtube subtitle startup binding * docs: clarify youtube subtitle startup behavior * fix: address PR #31 latest review follow-ups * fix: address PR #31 follow-up review comments * test: harden youtube picker test harness * udpate backlog * fix: add timeout to youtube metadata probe * docs: refresh youtube and stats docs * update backlog * update backlog * chore: release v0.9.0
9.4 KiB
SubMiner
Turn mpv into a sentence-mining workstation.
Look up words with Yomitan, export to Anki in one key, track your immersion — all without leaving mpv.
How It Works
SubMiner runs as an invisible Electron overlay on top of mpv. Subtitles render as an interactive layer. Move your cursor over any word and trigger a Yomitan lookup. Press one key to snapshot the sentence, audio, and screenshot into Anki via AnkiConnect.
Features
Dictionary Lookups
Yomitan runs inside the overlay. Trigger a lookup on any word for full dictionary popups — definitions, pitch accent, frequency data — without ever leaving mpv.
Instant Anki Mining
Create an Anki card with the sentence, audio clip, screenshot, and machine translation from the exact playback moment with one key press, click, or controller input.
Reading Annotations
Real-time subtitle annotations with frequency highlighting, JLPT tags, N+1 targeting, and a character name dictionary. Known words fade back; new words stand out. Grammar-only tokens render as plain text so you focus on what matters.
Immersion Dashboard
Local stats dashboard — watch time, anime library, vocabulary growth, mining throughput, session history, and trends. All stored locally, no third-party tracking.
Integrations
| YouTube | Auto-loaded yt-dlp subtitle tracks at startup with a manual overlay picker on demand (Ctrl+Alt+C) |
| AniList | Automatic episode tracking and progress sync |
| Jellyfin | Browse and launch media from your Jellyfin server |
| Jimaku | Search and download Japanese subtitles |
| alass / ffsubsync | Automatic subtitle retiming |
| WebSocket | Annotated subtitle feed for external clients (texthooker pages, custom tools) |
Requirements
| Required | Optional | |
|---|---|---|
| Player | mpv with IPC socket |
— |
| Processing | ffmpeg, mecab + mecab-ipadic |
guessit (AniSkip) |
| Media | — | yt-dlp, chafa, ffmpegthumbnailer |
| Selection | — | fzf / rofi |
Note
bunis required if building from source or using the CLI wrapper:subminer. Pre-built releases (AppImage, DMG, installer) do not require it.
Platform-specific:
| Linux | macOS | Windows |
|---|---|---|
hyprctl or xdotool + xwininfo |
Accessibility permission | No extra deps |
Arch Linux
paru -S --needed mpv ffmpeg mecab-git mecab-ipadic
# Optional
paru -S --needed yt-dlp fzf rofi chafa ffmpegthumbnailer xdotool xorg-xwininfo
# X11 / XWAYLAND
paru -S --needed xdotool xorg-xwininfo
macOS
brew install mpv ffmpeg mecab mecab-ipadic
# Optional
brew install yt-dlp fzf rofi chafa ffmpegthumbnailer
Grant Accessibility permission to SubMiner in System Settings > Privacy & Security > Accessibility.
Windows
Install mpv and ffmpeg and ensure both are on your PATH.
For MeCab, install MeCab for Windows with the UTF-8 dictionary.
Quick Start
1. Install
Arch Linux (AUR)
paru -S subminer-bin
Or manually:
git clone https://aur.archlinux.org/subminer-bin.git && cd subminer-bin && makepkg -si
Linux (AppImage)
mkdir -p ~/.local/bin
wget https://github.com/ksyasuda/SubMiner/releases/latest/download/SubMiner.AppImage -O ~/.local/bin/SubMiner.AppImage \
&& chmod +x ~/.local/bin/SubMiner.AppImage
wget https://github.com/ksyasuda/SubMiner/releases/latest/download/subminer -O ~/.local/bin/subminer \
&& chmod +x ~/.local/bin/subminer
Note
The
subminerwrapper uses a Bun shebang. Make surebunis on yourPATH.
macOS
Download the latest DMG or ZIP from GitHub Releases and drag SubMiner.app into /Applications.
Windows
Download the latest installer or portable .zip from GitHub Releases. Make sure mpv is on your PATH.
From source
See the build-from-source guide.
2. First Launch
Run the app. On first launch SubMiner starts in the system tray, creates a default config, and opens a setup popup to install the mpv plugin and configure Yomitan dictionaries.
3. Mine
subminer video.mkv # play video with overlay
subminer --start video.mkv # explicit overlay start
subminer stats # open immersion dashboard
subminer stats -b # stats daemon in background
subminer stats -s # stop background stats daemon
Documentation
Full guides on configuration, Anki setup, Jellyfin, immersion tracking, and more: docs.subminer.moe
Acknowledgments
SubMiner builds on the work of these open-source projects:
| Project | Role |
|---|---|
| Anacreon-Script | Inspiration for the mining workflow |
| asbplayer | Inspiration for subtitle sidebar and logic for YouTube subtitle parsing |
| Bee's Character Dictionary | Character name recognition in subtitles |
| GameSentenceMiner | Inspiration for Electron overlay with Yomitan integration |
| jellyfin-mpv-shim | Jellyfin integration |
| Jimaku.cc | Japanese subtitle search and downloads |
| Renji's Texthooker Page | Base for the WebSocket texthooker integration |
| Yomitan | Dictionary engine powering all lookups and the morphological parser |
| yomitan-jlpt-vocab | JLPT level tags for vocabulary |





