Skip to content

Repository files navigation

Subby

A GTK4 desktop toolkit for Japanese anime subtitles.

Download from Jimaku · generate with Whisper · align read-alongs · sync · send to asbplayer.

CI License: MIT


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.

Features

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.

Install

Arch Linux (AUR)

# with your favourite AUR helper, once published:
paru -S subby     # or: yay -S subby

Flatpak

flatpak install io.github.mikkel_mouridsen.Subby

Transcription runs on CPU inside the Flatpak sandbox.

AppImage

Grab the .AppImage from the latest release, chmod +x it, and run. (Experimental — prefer the AUR/Flatpak builds.)

From source

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.sh

Requirements

Subby 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.

Configuration

  • 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).

Development

./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.

License

MIT © Mikkel Mouridsen.

Subby stands on Jimaku, faster-whisper, ffsubsync, SubPlz, yt-dlp, and asbplayer.

About

GTK4 desktop toolkit for Japanese anime subtitles: download from Jimaku, generate with Whisper, align read-alongs, sync, and send to asbplayer.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages