GitHub Repositories
This section lists my public GitHub repositories. It includes personal experiments, continuous learning projects and open-source work that reflects my technical growth.
This section lists my public GitHub repositories. It includes personal experiments, continuous learning projects and open-source work that reflects my technical growth.
Languages
Topics
bakasub's core repository for end users
Languages
Topics
Hmph! So you found the real BakaSub repository, not just one of its nerdy internal organs? Good. This is the one end users should actually run on their own machine. It brings the frontend, backend, and PostgreSQL together through Docker Compose so you can translate subtitles without babysitting a Go server, a React app, and a database separately. B-baka!
Listen up! If you just want to use Bakasub, this is the only repository you need. The backend and frontend repositories are developer-facing.
Need a precise split between user settings and infrastructure wiring? See CONFIGURATION.md.
Bakasub is a local subtitle workflow app focused on AI-assisted translation and video subtitle handling.
It lets you:
You do not need to install Go, Node.js, or PostgreSQL on the host machine just to use the product.
You do need:
library/ folder inside this repository containing the videos and subtitles you want Bakasub to see.Important:
Use a tagged release of this repository.
Why? Because public releases pin the backend and frontend container images in release.env. A work-in-progress checkout may still contain placeholder image digests.
library/Create the local library folder if it does not exist yet:
mkdir -p library
Then copy or symlink your media into it. Example:
ln -s /absolute/path/to/your/videos library/videos
The official product stack mounts ./library into the backend container as /videos. The app-level browsing root is then saved in the database through Settings, not via environment variables.
sh scripts/up.sh
This starts:
/api/v1The script prints the exact local URL after startup.
Open the Settings page and configure:
OpenRouter API KeyTMDB Access TokenLibrary Root if you want to limit the browser to a subfolder such as /videos/videosSave both values. Until they are saved, the Translate page stays locked.
The normal flow is:
If you want the cleanest first run, do this:
/videos.Bakasub only sees the folder mounted as ./library, which appears inside the container as /videos.
That means:
library/, it will not show up in the appIf you do not want to copy files, use symlinks from library/ to your actual media directories.
When a new public release comes out:
library/ folder.sh scripts/up.sh
If you want to be explicit, you can pull first:
docker compose --env-file release.env pull
sh scripts/up.sh
Stop the containers without removing persistent data:
docker compose --env-file release.env down
Remove everything, including the PostgreSQL volume used by the app:
docker compose --env-file release.env down -v
Do the second one only if you really want to wipe the local app database.
docker compose --env-file release.env port frontend 80 and open the printed URL.docker compose --env-file release.env logs.sh scripts/up.sh.The product expects both to be configured before translation is enabled.
library/ or inside a symlink created from library/.release.env.docker compose --env-file release.env logs to inspect what failed.If Bakasub saved your weekend release schedule, subtitle backlog, or general sanity, you can support the project here: