A GTK4 desktop toolkit for Japanese anime subtitles.
Download from Jimaku · generate with Whisper · align read-alongs · sync · send to asbplayer.
Subby is a single, polished app for the chores around learning Japanese with anime: finding the right subtitle, making one when none exists, lining text up with audio, fixing timing, and getting it into your player. It's built with GTK4 / libadwaita and is native on the GNOME desktop.
| Tab | What it does |
|---|---|
| Download | Search Jimaku for a show, match its subtitles to your episodes by episode number, extract .zip/.7z bundles, and (optionally) sync on download. |
| Generate | Transcribe Japanese subtitles from local audio/video or a YouTube URL with faster-whisper — GPU-accelerated when CUDA is available, CPU otherwise. |
| Read-Along | Align an audiobook with its text into a synced .srt using SubPlz. |
| Library | Browse everything you've generated, re-send it to asbplayer, and skip re-transcribing YouTube videos you've already done. |
Plus: a built-in asbplayer WebSocket server (Send-to-asbplayer from any row), drag-and-drop, a per-item job queue with live progress and retry, atomic settings, and a first-run health check.
# with your favourite AUR helper, once published:
paru -S subby # or: yay -S subbyflatpak install io.github.mikkel_mouridsen.SubbyTranscription runs on CPU inside the Flatpak sandbox.
Grab the .AppImage from the latest release,
chmod +x it, and run. (Experimental — prefer the AUR/Flatpak builds.)
Needs uv and the system GTK4 / libadwaita /
PyGObject packages.
git clone https://github.com/mikkel-mouridsen/subby.git
cd subby
./install.sh # user-level install + desktop entry + icon
# or just run it in place:
./run.shSubby checks these on first launch (Setup check… in the menu re-runs it):
- ffmpeg — required, for audio extraction and syncing.
- deno or node — for YouTube downloads (yt-dlp's challenge solver).
- GTK4 / libadwaita / PyGObject — from your system packages.
- A CUDA runtime — optional, for fast GPU transcription.
- uv — optional, only to install SubPlz for the Read-Along tab.
- Jimaku API key — generate one on your jimaku.cc account page; paste it into
the first-run screen or Set API key…. Stored owner-only in
~/.config/subby/config.json. - asbplayer — in asbplayer's settings enable the WebSocket client and point
it at
ws://127.0.0.1:8766/ws(Subby picks the next free port if 8766 is taken and tells you which). Then Send to asbplayer loads a subtitle onto the attached video. - YouTube cookies — for age/bot-gated videos, set a cookies file or browser in Settings (see the in-app hints).
./run.sh # launch from the source tree
python -m unittest discover -s tests # run the test suite (no GTK needed)The codebase splits cleanly: pure logic in subby/ (network, parsing,
transcription, archives) and the GTK UI in subby/ui/ (one self-contained
widget per tab, talking to the window through a small service surface). The
tests cover the logic modules and run headless.
See packaging/ for the AUR, Flatpak, and AppImage recipes.
MIT © Mikkel Mouridsen.
Subby stands on Jimaku, faster-whisper, ffsubsync, SubPlz, yt-dlp, and asbplayer.