Files
sublogue/README.md
T

168 lines
6.3 KiB
Markdown
Raw Normal View History

2026-01-17 23:47:52 +13:00
<div align="center">
2026-01-17 23:01:41 +13:00
<img src="https://github.com/ponzischeme89/Sublogue/blob/master/docs/sublogue_v2.png" height="256" width="456">
2026-01-17 23:01:41 +13:00
2026-01-17 23:47:52 +13:00
<h4>Your subtitles deserve metadata. Sublogue adds it.</h4>
2026-01-17 23:01:41 +13:00
2026-01-17 23:47:52 +13:00
</div>
2026-01-17 23:01:41 +13:00
2026-01-19 02:41:23 +13:00
Sublogue is a lightweight open-source tool for enriching SRT files. Pull metadata from OMDb, TMDB, or TVMaze and automatically append plot summaries, runtimes, directors, and cast details to the start or end (yes, *end*) of your subtitles.
2026-01-17 23:01:41 +13:00
2026-01-19 02:35:37 +13:00
Additionally, Sublogue can clean junk out of your subtitles — automatically or on demand. Yes, even those “Downloaded from OpenSubtitles” lines that haunt every movie night..
2026-01-18 02:03:45 +13:00
Why? Because if the cast list and IMDb/RT rating show up in the first minute, my wife asks fewer questions and we actually get to watch the movie.
2026-01-18 00:13:29 +13:00
2026-01-18 01:49:34 +13:00
## Features
2026-01-18 01:53:58 +13:00
- Insert plot summaries into existing .srt files without shifting timings
2026-01-19 00:33:07 +13:00
- Fetch metadata (plot, runtime, director, cast, IMDb/RT ratings) using OMDb, TMDb, TVMaze and Wikipedia - add these integrations under Settings before scanning
- Preserve original dialogue and timing with safe insertion logic while cleaning watermarks (YTS, OpenSubtitles, etc.)
- Automation rules can run cleanup-only mode on schedules, or combined cleanup + metadata enrichment
- Folder Rules to have seperate logic for different folders (for example TV shows could have runtime but not actors, etc)
- Clean, fast web UI for scanning and batch processing built with Svelte (frontend) + Python/Flask (server)
2026-01-18 01:53:58 +13:00
- Three themes included: OLED, Ocean, and Dracula White
2026-01-18 00:20:02 +13:00
## Screenshots
<div align="center">
2026-01-18 02:24:25 +13:00
<img src="https://github.com/ponzischeme89/Sublogue/blob/master/docs/screenshots/screenshot_scan.png" height="256" width="456">
2026-01-18 00:20:02 +13:00
<img src="https://github.com/ponzischeme89/Sublogue/blob/master/docs/screenshots/screenshot_settings.png" height="256" width="456">
</div>
2026-01-17 23:47:52 +13:00
## Getting started
To get started installing Sublogue, expand on your posion below. Personally, I recommend **Komodo**. It's great.
2026-01-19 02:25:53 +13:00
**Quick Start with Docker:**
```sh
docker run -d \
--name sublogue \
-p 5050:5000 \
-v /path/to/config:/config \
-v /path/to/media:/media \
ghcr.io/ponzischeme89/sublogue:latest
```
2026-01-19 02:26:54 +13:00
**Installation Methods (Expand sections to see details)**
2026-01-18 00:07:41 +13:00
<details>
<summary>⚓ Docker Compose</summary>
2026-01-17 23:05:02 +13:00
Create `data/` and `media/` folders next to the compose file, then run:
```yaml
version: "3.9"
services:
sublogue:
2026-01-18 00:05:44 +13:00
image: ghcr.io/ponzischeme89/sublogue:latest
2026-01-17 23:05:02 +13:00
container_name: sublogue
restart: unless-stopped
environment:
- TZ=Pacific/Auckland
2026-01-17 23:05:02 +13:00
volumes:
- ./data:/config
- ./media:/media
ports:
- "5000:5000"
```
2026-01-17 23:47:52 +13:00
Start the stack:
2026-01-17 23:05:02 +13:00
```bash
docker compose up -d
```
2026-01-17 23:47:52 +13:00
Open `http://localhost:5000`.
2026-01-18 00:07:41 +13:00
</details>
2026-01-18 00:05:44 +13:00
<details>
<summary>🧡 Unraid</summary>
2026-01-17 23:47:52 +13:00
Use the included template at `unraid-sublogue.xml`.
2026-01-17 23:05:02 +13:00
- `/mnt/user/appdata/sublogue` -> `/config`
- `/mnt/user/appdata/sublogue/media` -> `/media`
Start the container and open `http://<UNRAID-IP>:5000`.
2026-01-18 00:05:44 +13:00
</details>
2026-01-17 23:10:36 +13:00
2026-01-18 00:05:44 +13:00
<details>
<summary>🦎 Komodo</summary>
2026-01-17 23:10:36 +13:00
2026-01-17 23:47:52 +13:00
Create a new stack and paste a Komodo template like this:
2026-01-17 23:10:36 +13:00
```yaml
version: "3.9"
services:
2026-01-17 23:47:52 +13:00
sublogue:
2026-01-18 00:05:44 +13:00
image: ghcr.io/ponzischeme89/sublogue:latest
2026-01-17 23:10:36 +13:00
container_name: sublogue
ports:
2026-01-17 23:47:52 +13:00
- "5000:5000"
2026-01-17 23:10:36 +13:00
environment:
2026-01-17 23:47:52 +13:00
- TZ=Etc/UTC
- PUID=1000
- PGID=1000
2026-01-17 23:10:36 +13:00
volumes:
2026-01-17 23:47:52 +13:00
- /volume1/Docker/sublogue/data:/config
- /volume1/Media:/media
2026-01-17 23:10:36 +13:00
restart: unless-stopped
networks:
- npm_network
networks:
npm_network:
external: true
```
2026-01-18 00:05:44 +13:00
</details>
2026-01-18 00:09:02 +13:00
2026-01-19 02:29:18 +13:00
## Timing And Insertion Logic
Sublogue never shifts existing subtitle timing. It only inserts metadata blocks into safe gaps.
| Decision | What Sublogue checks | Outcome |
| --- | --- | --- |
| Find insertion gap (start) | Time before the first dialogue subtitle (minus a 500ms safety buffer) | Uses that gap for intro blocks |
| Find insertion gap (end) | Time after the last dialogue subtitle (plus a 500ms safety buffer) | Uses that gap for outro blocks |
| Insufficient gap | No space to fit the intro/outro blocks | Skips insertion and reports “Insufficient Gap” |
| Reading speed | Word count vs a 160 WPM target (min 1.2s, max 6.0s per block) | Splits plot into readable blocks |
| Existing Sublogue blocks | Looks for `{SUBLOGUE}` markers or legacy signatures | Removes old blocks before inserting new ones |
2026-01-19 00:33:52 +13:00
## Integrations
| Provider | Signup / API key | Rate limits (see provider for current limits) | Notes |
| --- | --- | --- | --- |
| OMDb | https://www.omdbapi.com/apikey.aspx | Free tier has a daily cap 1000 | Requires API key |
| TMDb | https://www.themoviedb.org/settings/api | Per-second rate limit | Requires API key |
| TVmaze | https://www.tvmaze.com/api | Polite usage limits | No API key required |
| Wikipedia | https://www.mediawiki.org/wiki/API:Main_page | No hard limits, be polite | No API key required; strict title matching |
## Limitations
- API rate limits: OMDb is tight, TMDb is better, TVMaze is polite-but-limited. Heavy scans may hit caps.
- Metadata gaps: If providers dont have it, Sublogue wont either. Ratings/plots can be missing or stale.
- Localisation: Only TMDb supports proper language/region data. OMDb/TVMaze are mostly English-only.
- Long plots: Big summaries go in as-is. Your TV may split them across multiple screens.
- Formats: Only .srt is supported. No WebVTT, ASS/SSA, or embedded subs yet.
- Duplicate inserts: Reprocessing the same file will stack multiple plot blocks.
- Offline use: Requires internet for metadata lookups — no offline mode.
- File access: Read-only or locked files cannot be processed.
2026-01-18 22:31:23 +13:00
## Roadmap
2026-01-18 22:32:45 +13:00
- [x] TVMaze integration
- [ ] More UI themes (OLED variants, Ocean+, and high-contrast)
- [ ] Poster + backdrop previews in results
- [ ] Smart duplicate-detection (dont re-insert plot blocks)
- [ ] Automatic rate-limit backoff + retry logic
- [ ] Optional “short plot mode” for long summaries
- [ ] Expanded localisation using TMDb (title, plot, cast where available)
- [ ] Multi-format subtitle support (WebVTT, ASS/SSA)
- [ ] Offline caching of recent metadata lookups
- [ ] Per-scan analytics: success/fail counts, rate-limit warnings
- [ ] CLI mode for batch operations
2026-01-18 02:06:36 +13:00
2026-01-18 00:09:02 +13:00
## Support
- Help spread the word about Sublogue by telling your friends about this repo
- Give the repo a star (This really helps)
2026-01-18 10:42:49 +13:00
- Check out my other project, which is an open source renamer tool (with a very poor naming choice, but i'll likely change this in future)