remove junk

This commit is contained in:
ponzischeme89
2026-04-18 07:42:52 +12:00
parent f4293b5f46
commit fd3be1af19
11 changed files with 0 additions and 946 deletions
-47
View File
@@ -1,47 +0,0 @@
name: Build & Publish Sublogue Docker Image
on:
push:
branches: [ "master" ]
tags: [ "v*" ]
permissions:
contents: read
packages: write
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to GHCR
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Docker Metadata
id: meta
uses: docker/metadata-action@v5
with:
images: ghcr.io/${{ github.repository }}
tags: |
type=raw,value=latest
type=ref,event=branch
type=semver,pattern={{version}}
- name: Build and Push
uses: docker/build-push-action@v5
with:
context: .
push: true
platforms: linux/amd64,linux/arm64
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
-12
View File
@@ -1,12 +0,0 @@
# Sublogue
**Sublogue** appends rich metadata, ratings, and plot summaries directly into subtitle files — cleanly, safely, and without breaking sync.
---
## Features
- 🎬 Plot + ratings injection
- ⏱ Sync-safe subtitle processing
- 🧠 OMDb + TMDb fallback logic
- 🖥 CLI + Web UI
-7
View File
@@ -1,7 +0,0 @@
- Introduction
- [Overview](/)
- [Getting Started](getting-started.md)
- Usage
- [CLI](cli.md)
- [Configuration](configuration.md)
-380
View File
@@ -1,380 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Sublogue Documentation</title>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600&family=Inter:wght@400;500;600;700&family=Space+Grotesk:wght@400;500;600;700&display=swap"
rel="stylesheet" />
<style>
[x-cloak] {
display: none !important;
}
</style>
<script src="https://cdn.tailwindcss.com"></script>
<script defer src="https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js"></script>
<script>
tailwind.config = {
theme: {
extend: {
fontFamily: {
body: ["Inter", "sans-serif"],
display: ["Space Grotesk", "sans-serif"],
mono: ["IBM Plex Mono", "monospace"],
},
colors: {
night: {
900: "#000000",
800: "#07090d",
700: "#0c1018",
600: "#121826",
500: "#182235",
},
ember: {
500: "#ff6b3d",
600: "#e95a2e",
},
},
boxShadow: {
glow: "0 0 30px rgba(255, 107, 61, 0.25)",
},
},
},
};
</script>
<script src="https://unpkg.com/lucide@latest"></script>
</head>
<body class="bg-night-900 text-slate-100 font-body overflow-x-hidden">
<div class="min-h-screen bg-night-900">
<header class="border-b border-white/10" x-data="{ open: false }">
<div
class="mx-auto flex max-w-6xl flex-col gap-4 px-4 py-5 sm:px-6 md:flex-row md:items-center md:justify-between">
<div class="flex w-full items-center justify-between gap-4 md:w-auto">
<a href="index.html" class="flex items-center gap-3">
<img src="sublogue_v2.png" alt="Sublogue" class="h-10 w-auto max-w-full sm:h-12" />
<div class="min-w-0">
<p class="text-lg font-semibold tracking-wide font-display">Sublogue</p>
<p class="text-sm text-slate-400 truncate">Subtitle metadata orchestration</p>
</div>
</a>
<button
class="ml-auto inline-flex h-10 w-10 items-center justify-center rounded-full border border-white/10 bg-night-800/80 text-slate-200 transition hover:border-ember-500/60 hover:text-white md:hidden"
type="button" aria-label="Toggle menu" aria-controls="mobile-menu" :aria-expanded="open.toString()"
@click="open = !open">
<i data-lucide="menu" class="h-5 w-5"></i>
</button>
</div>
<div class="hidden flex-wrap items-center justify-start gap-3 md:flex md:justify-end">
<a class="text-sm text-slate-300 hover:text-white" href="index.html">Overview</a>
<a class="text-sm text-slate-300 hover:text-white" href="#features">Features</a>
<a class="text-sm text-slate-300 hover:text-white" href="#integrations">Integrations</a>
<a class="text-sm text-slate-300 hover:text-white" href="#getting-started">Getting started</a>
</div>
<div id="mobile-menu" x-show="open" x-cloak x-transition.scale.origin.top.duration.200ms
class="flex flex-col gap-3 rounded-2xl border border-white/10 bg-night-800/90 p-4 text-sm shadow-2xl md:hidden">
<a class="text-slate-200 hover:text-white" href="index.html" @click="open = false">Overview</a>
<a class="text-slate-200 hover:text-white" href="#features" @click="open = false">Features</a>
<a class="text-slate-200 hover:text-white" href="#integrations" @click="open = false">Integrations</a>
<a class="text-slate-200 hover:text-white" href="#getting-started" @click="open = false">Getting started</a>
</div>
</div>
</header>
<main class="mx-auto max-w-6xl px-4 sm:px-6">
<section class="grid gap-8 pb-10 pt-12 md:pb-12 md:pt-16 lg:grid-cols-[1.1fr_0.9fr]">
<div>
<p class="text-sm uppercase tracking-[0.3em] text-ember-500">Documentation</p>
<h1 class="mt-4 text-3xl font-semibold leading-tight font-display sm:text-4xl md:text-5xl">
Sublogue usage and setup
</h1>
<p class="mt-5 text-base text-slate-300 sm:text-lg">
Sublogue is a lightweight, open source tool that enriches subtitle files with metadata and plot
summaries. It keeps timing intact, respects safe insertion windows, and lets you choose the metadata
provider per scan or per folder.
</p>
<p class="mt-4 text-sm text-slate-400">
This page mirrors the README but adds extra context, limits, and setup notes so you can move from
install to first scan without guesswork.
</p>
</div>
<div class="rounded-3xl border border-white/10 bg-night-800/70 p-6 shadow-xl sm:p-7">
<div class="flex items-center gap-3">
<i data-lucide="file-text" class="h-6 w-6 text-ember-500"></i>
<h2 class="text-lg font-semibold font-display">Quick checklist</h2>
</div>
<ul class="mt-5 space-y-3 text-sm text-slate-300">
<li class="flex items-start gap-3">
<i data-lucide="check" class="mt-1 h-4 w-4 text-ember-500"></i>
Install the container and map /config + /media volumes.
</li>
<li class="flex items-start gap-3">
<i data-lucide="check" class="mt-1 h-4 w-4 text-ember-500"></i>
Enable integrations and add API keys where required.
</li>
<li class="flex items-start gap-3">
<i data-lucide="check" class="mt-1 h-4 w-4 text-ember-500"></i>
Scan a folder and review matches before applying.
</li>
<li class="flex items-start gap-3">
<i data-lucide="check" class="mt-1 h-4 w-4 text-ember-500"></i>
Use per-folder rules for language and formatting differences.
</li>
</ul>
</div>
</section>
<section id="features" class="mb-12 md:mb-16">
<div class="flex items-center gap-3">
<i data-lucide="sparkles" class="h-6 w-6 text-ember-500"></i>
<h2 class="text-2xl font-semibold font-display">Features</h2>
</div>
<p class="mt-4 text-sm text-slate-300 sm:text-base">
Sublogue focuses on safe subtitle enrichment. It never shifts existing timecodes, and only inserts
content when there is a safe gap at the start or end of the file.
</p>
<div class="mt-6 grid gap-6 md:grid-cols-2">
<div class="rounded-2xl border border-white/10 bg-night-800/70 p-6">
<h3 class="text-lg font-semibold font-display">Metadata injection</h3>
<p class="mt-3 text-sm text-slate-300">
Pull plot, runtime, ratings, and credits from OMDb, TMDb, TVmaze, or Wikipedia and insert them in a
clean, readable format.
</p>
</div>
<div class="rounded-2xl border border-white/10 bg-night-800/70 p-6">
<h3 class="text-lg font-semibold font-display">Safe timing</h3>
<p class="mt-3 text-sm text-slate-300">
Sublogue refuses to insert if there is not enough gap, so subtitle timing stays intact.
</p>
</div>
<div class="rounded-2xl border border-white/10 bg-night-800/70 p-6">
<h3 class="text-lg font-semibold font-display">Folder rules</h3>
<p class="mt-3 text-sm text-slate-300">
Override metadata source, language, and formatting per directory for mixed media libraries.
</p>
</div>
<div class="rounded-2xl border border-white/10 bg-night-800/70 p-6">
<h3 class="text-lg font-semibold font-display">Web UI</h3>
<p class="mt-3 text-sm text-slate-300">
Scan folders, batch process results, and track history from a lightweight Svelte UI.
</p>
</div>
</div>
</section>
<section id="integrations" class="mb-12 md:mb-16">
<div class="flex items-center gap-3">
<i data-lucide="plug" class="h-6 w-6 text-ember-500"></i>
<h2 class="text-2xl font-semibold font-display">Integrations</h2>
</div>
<p class="mt-4 text-sm text-slate-300 sm:text-base">
Each provider has a different signup and usage policy. Wikipedia is strict by design: exact title
matches with year validation are required to reduce false matches from an open encyclopedia.
</p>
<div class="mt-6 overflow-x-auto rounded-2xl border border-white/10 bg-night-800/70">
<table class="min-w-full text-sm text-slate-200">
<thead class="bg-night-900/60 text-xs uppercase tracking-wide text-slate-400">
<tr>
<th class="px-4 py-3 text-left">Provider</th>
<th class="px-4 py-3 text-left">Signup or API key</th>
<th class="px-4 py-3 text-left">Rate limits</th>
<th class="px-4 py-3 text-left">Notes</th>
</tr>
</thead>
<tbody class="divide-y divide-white/10">
<tr>
<td class="px-4 py-3 font-semibold">OMDb</td>
<td class="px-4 py-3">
<a class="text-ember-500 hover:text-ember-600" href="https://www.omdbapi.com/apikey.aspx"
target="_blank" rel="noopener noreferrer">Get an API key</a>
</td>
<td class="px-4 py-3">Free tier has a daily cap</td>
<td class="px-4 py-3">Best for movie matching</td>
</tr>
<tr>
<td class="px-4 py-3 font-semibold">TMDb</td>
<td class="px-4 py-3">
<a class="text-ember-500 hover:text-ember-600" href="https://www.themoviedb.org/settings/api"
target="_blank" rel="noopener noreferrer">Request an API key</a>
</td>
<td class="px-4 py-3">Per-second rate limit</td>
<td class="px-4 py-3">Great for localization and posters</td>
</tr>
<tr>
<td class="px-4 py-3 font-semibold">TVmaze</td>
<td class="px-4 py-3">
<a class="text-ember-500 hover:text-ember-600" href="https://www.tvmaze.com/api" target="_blank"
rel="noopener noreferrer">View API docs</a>
</td>
<td class="px-4 py-3">Polite usage limits</td>
<td class="px-4 py-3">No API key required</td>
</tr>
<tr>
<td class="px-4 py-3 font-semibold">Wikipedia</td>
<td class="px-4 py-3">
<a class="text-ember-500 hover:text-ember-600" href="https://www.mediawiki.org/wiki/API:Main_page"
target="_blank" rel="noopener noreferrer">MediaWiki API</a>
</td>
<td class="px-4 py-3">No hard limits, be polite</td>
<td class="px-4 py-3">Strict title matching</td>
</tr>
</tbody>
</table>
</div>
</section>
<section id="screenshots" class="mb-12 md:mb-16">
<div class="flex items-center gap-3">
<i data-lucide="image" class="h-6 w-6 text-ember-500"></i>
<h2 class="text-2xl font-semibold font-display">Screenshots</h2>
</div>
<p class="mt-4 text-sm text-slate-300 sm:text-base">
The interface is designed for fast scans and quick metadata validation. These screenshots show the scan
results and settings panels.
</p>
<div class="mt-6 grid gap-6 lg:grid-cols-2">
<img src="screenshots/screenshot_scan.png" alt="Scan results"
class="rounded-2xl border border-white/10 shadow-lg" />
<img src="screenshots/screenshot_settings.png" alt="Settings panel"
class="rounded-2xl border border-white/10 shadow-lg" />
</div>
</section>
<section id="getting-started" class="mb-12 md:mb-16">
<div class="flex items-center gap-3">
<i data-lucide="rocket" class="h-6 w-6 text-ember-500"></i>
<h2 class="text-2xl font-semibold font-display">Getting started</h2>
</div>
<p class="mt-4 text-sm text-slate-300 sm:text-base">
Sublogue runs as a single container. Map /config for settings and /media for subtitles, then open the web
UI at http://localhost:5000.
</p>
<div class="mt-6 grid gap-6 lg:grid-cols-3">
<div class="rounded-2xl border border-white/10 bg-night-800/70 p-6">
<h3 class="text-lg font-semibold font-display">Docker Compose</h3>
<p class="mt-3 text-sm text-slate-300">
Create data/ and media/ folders next to your compose file.
</p>
<pre
class="mt-4 overflow-x-auto whitespace-pre-wrap break-words rounded-2xl border border-white/10 bg-night-900/90 p-4 text-xs font-mono leading-relaxed text-emerald-200 shadow-[0_12px_30px_rgba(0,0,0,0.45)]"><code>version: "3.9"
services:
sublogue:
image: ghcr.io/ponzischeme89/sublogue:latest
container_name: sublogue
restart: unless-stopped
environment:
- TZ=Pacific/Auckland
volumes:
- ./data:/config
- ./media:/media
ports:
- "5000:5000"</code></pre>
</div>
<div class="rounded-2xl border border-white/10 bg-night-800/70 p-6">
<h3 class="text-lg font-semibold font-display">Unraid</h3>
<p class="mt-3 text-sm text-slate-300">
Use the bundled template and map host paths into /config and /media.
</p>
<div class="mt-4 rounded-2xl border border-white/10 bg-night-900/70 p-4 text-sm text-slate-200">
<p>/mnt/user/appdata/sublogue -&gt; /config</p>
<p class="mt-2">/mnt/user/appdata/sublogue/media -&gt; /media</p>
</div>
</div>
<div class="rounded-2xl border border-white/10 bg-night-800/70 p-6">
<h3 class="text-lg font-semibold font-display">Komodo</h3>
<p class="mt-3 text-sm text-slate-300">
Create a new stack and attach your external network.
</p>
<pre
class="mt-4 overflow-x-auto whitespace-pre-wrap break-words rounded-2xl border border-white/10 bg-night-900/90 p-4 text-xs font-mono leading-relaxed text-emerald-200 shadow-[0_12px_30px_rgba(0,0,0,0.45)]"><code>version: "3.9"
services:
sublogue:
image: ghcr.io/ponzischeme89/sublogue:latest
container_name: sublogue
ports:
- "5000:5000"
environment:
- TZ=Etc/UTC
- PUID=1000
- PGID=1000
volumes:
- /volume1/Docker/sublogue/data:/config
- /volume1/Media:/media
restart: unless-stopped
networks:
- npm_network
networks:
npm_network:
external: true</code></pre>
</div>
</div>
</section>
<section id="limitations" class="mb-12 md:mb-16">
<div class="flex items-center gap-3">
<i data-lucide="alert-triangle" class="h-6 w-6 text-ember-500"></i>
<h2 class="text-2xl font-semibold font-display">Limitations</h2>
</div>
<ul class="mt-4 space-y-2 text-sm text-slate-300 sm:text-base">
<li>API limits vary per provider and can throttle large scans.</li>
<li>Metadata gaps appear when providers do not have a title or plot.</li>
<li>Only TMDb supports localization. OMDb and TVmaze are English-first.</li>
<li>Long plots are inserted as-is. TVs may split them across screens.</li>
<li>Only .srt files are supported.</li>
<li>Reprocessing a file can insert multiple plot blocks.</li>
</ul>
</section>
<section id="roadmap" class="mb-12 md:mb-16">
<div class="flex items-center gap-3">
<i data-lucide="map" class="h-6 w-6 text-ember-500"></i>
<h2 class="text-2xl font-semibold font-display">Roadmap</h2>
</div>
<ul class="mt-4 grid gap-2 text-sm text-slate-300 sm:grid-cols-2 sm:text-base">
<li>More UI themes and high contrast variants</li>
<li>Poster and backdrop previews in results</li>
<li>Duplicate plot detection and auto-avoidance</li>
<li>Automatic backoff and retry logic</li>
<li>Short plot mode for long summaries</li>
<li>Expanded localization for plots and cast</li>
<li>Subtitle format support beyond SRT</li>
<li>Optional local cache for metadata lookups</li>
</ul>
</section>
<section id="support" class="mb-12 md:mb-16">
<div class="rounded-3xl border border-ember-500/30 bg-night-800/70 p-6 sm:p-8">
<div class="flex items-center gap-3">
<i data-lucide="message-circle" class="h-6 w-6 text-ember-500"></i>
<h2 class="text-2xl font-semibold font-display">Support</h2>
</div>
<p class="mt-4 text-sm text-slate-300 sm:text-base">
If Sublogue helps your library, consider starring the repo or sharing it with someone who cares about
clean subtitles. Bug reports and feature requests are welcome.
</p>
</div>
</section>
</main>
<footer class="border-t border-white/10">
<div
class="mx-auto flex max-w-6xl flex-col gap-4 px-4 py-8 text-sm text-slate-400 sm:px-6 md:flex-row md:items-center md:justify-between">
<p>&copy 2026 ponzischeme89. Released under AGLPL-3.0 licence.</p>
<div class="flex items-center gap-3">
<i data-lucide="github" class="h-4 w-4"></i>
<span>github.com/ponzischeme89/Sublogue</span>
</div>
</div>
</footer>
</div>
<script>
lucide.createIcons();
</script>
</body>
</html>
-454
View File
@@ -1,454 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Sublogue</title>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600&family=Inter:wght@400;500;600;700&family=Space+Grotesk:wght@400;500;600;700&display=swap"
rel="stylesheet" />
<style>
[x-cloak] {
display: none !important;
}
</style>
<script src="https://cdn.tailwindcss.com"></script>
<script defer src="https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js"></script>
<script>
tailwind.config = {
theme: {
extend: {
fontFamily: {
body: ["Inter", "sans-serif"],
display: ["Space Grotesk", "sans-serif"],
mono: ["IBM Plex Mono", "monospace"],
},
colors: {
night: {
900: "#000000",
800: "#07090d",
700: "#0c1018",
600: "#121826",
500: "#182235",
},
ember: {
500: "#ff6b3d",
600: "#e95a2e",
},
},
boxShadow: {
glow: "0 0 30px rgba(255, 107, 61, 0.25)",
},
},
},
};
</script>
<script src="https://unpkg.com/lucide@latest"></script>
</head>
<body class="bg-night-900 text-slate-100 font-body overflow-x-hidden">
<div class="min-h-screen bg-night-900">
<header class="border-b border-white/10" x-data="{ open: false }">
<div
class="mx-auto flex max-w-6xl flex-col gap-4 px-4 py-5 sm:px-6 md:flex-row md:items-center md:justify-between">
<div class="flex w-full items-center justify-between gap-4 md:w-auto">
<img src="sublogue_v2.png" alt="Sublogue" class="h-10 w-auto max-w-full sm:h-12" />
<div class="min-w-0">
<p class="text-lg font-semibold tracking-wide font-display">Sublogue</p>
<p class="text-sm text-slate-400 truncate">Subtitle metadata orchestration</p>
</div>
<button
class="ml-auto inline-flex h-10 w-10 items-center justify-center rounded-full border border-white/10 bg-night-800/80 text-slate-200 transition hover:border-ember-500/60 hover:text-white md:hidden"
type="button" aria-label="Toggle menu" aria-controls="mobile-menu" :aria-expanded="open.toString()"
@click="open = !open">
<i data-lucide="menu" class="h-5 w-5"></i>
</button>
</div>
<div class="hidden flex-wrap items-center justify-start gap-3 md:flex md:justify-end">
<a class="text-sm text-slate-300 hover:text-white" href="#install">Install</a>
<a class="text-sm text-slate-300 hover:text-white" href="#integrations">Integrations</a>
<a class="text-sm text-slate-300 hover:text-white" href="documentation.html">Documentation</a>
<a class="rounded-full border border-ember-500/60 px-4 py-2 text-sm font-semibold text-ember-500 hover:bg-ember-500 hover:text-night-900"
href="#quickstart">Quickstart</a>
</div>
<div id="mobile-menu" x-show="open" x-cloak x-transition.scale.origin.top.duration.200ms
class="flex flex-col gap-3 rounded-2xl border border-white/10 bg-night-800/90 p-4 text-sm shadow-2xl md:hidden">
<a class="text-slate-200 hover:text-white" href="#install" @click="open = false">Install</a>
<a class="text-slate-200 hover:text-white" href="#integrations" @click="open = false">Integrations</a>
<a class="text-slate-200 hover:text-white" href="documentation.html" @click="open = false">Documentation</a>
<a class="rounded-full border border-ember-500/60 px-4 py-2 text-center font-semibold text-ember-500 hover:bg-ember-500 hover:text-night-900"
href="#quickstart" @click="open = false">Quickstart</a>
</div>
</div>
</header>
<main class="mx-auto max-w-6xl px-4 sm:px-6">
<section class="grid gap-10 pb-12 pt-12 md:pb-14 md:pt-16 lg:grid-cols-[1.2fr_0.8fr]">
<div>
<h1 class="mt-5 text-3xl font-semibold leading-tight font-display sm:text-4xl md:text-5xl">
Add metadata to your subtitles with Sublogue
</h1>
<p class="mt-6 text-base text-slate-300 sm:text-lg">
Sublogue inserts story context into your subtitle files using OMDb, TMDb, and TVMaze. It can also
clean out ad blocks like YTS promo text while preserving timing, so every subtitle reads cleanly.
</p>
<div class="mt-8 flex flex-wrap gap-3">
<span class="rounded-full border border-white/15 px-4 py-2 text-xs font-mono uppercase">SRT safe</span>
<span class="rounded-full border border-white/15 px-4 py-2 text-xs font-mono uppercase">Multi-source</span>
<span class="rounded-full border border-white/15 px-4 py-2 text-xs font-mono uppercase">Batch scans</span>
<span class="rounded-full border border-white/15 px-4 py-2 text-xs font-mono uppercase">Web UI</span>
</div>
</div>
<div class="rounded-3xl border border-white/10 bg-night-800/70 p-6 shadow-xl sm:p-7">
<div class="flex items-center gap-3">
<i data-lucide="sparkles" class="h-6 w-6 text-ember-500"></i>
<h2 class="text-lg font-semibold font-display">Overview</h2>
</div>
<p class="mt-4 text-sm text-slate-300">
Sublogue scans your subtitle folders, pulls metadata from OMDb, TMDb, and TVMaze, then injects plots,
ratings, and credits directly into SRT files without touching timing.
</p>
<ul class="mt-5 space-y-3 text-sm text-slate-300">
<li class="flex items-start gap-3">
<i data-lucide="check" class="mt-1 h-4 w-4 text-ember-500"></i>
Preserve original subtitle timing while enriching content.
</li>
<li class="flex items-start gap-3">
<i data-lucide="check" class="mt-1 h-4 w-4 text-ember-500"></i>
Remove ad text and promo lines from SRT files (YTS and similar).
</li>
<li class="flex items-start gap-3">
<i data-lucide="check" class="mt-1 h-4 w-4 text-ember-500"></i>
Choose preferred metadata sources per scan.
</li>
<li class="flex items-start gap-3">
<i data-lucide="check" class="mt-1 h-4 w-4 text-ember-500"></i>
Monitor integration usage and cache clearing in settings.
</li>
</ul>
</div>
</section>
<section id="quickstart" class="mb-12 rounded-3xl border border-white/10 bg-night-800/60 p-6 sm:p-8 md:mb-16">
<div class="flex items-center gap-3">
<i data-lucide="terminal" class="h-6 w-6 text-ember-500"></i>
<h2 class="text-2xl font-semibold font-display">Quickstart</h2>
</div>
<p class="mt-4 text-sm text-slate-300 sm:text-base">
Launch the container, point Sublogue at your media folder, then open the UI and run a scan.
</p>
<div class="mt-6 grid gap-6 lg:grid-cols-2">
<div class="rounded-2xl border border-white/10 bg-night-900/80 p-5">
<p class="text-xs font-mono uppercase text-slate-400">Docker CLI</p>
<pre
class="mt-4 overflow-x-auto whitespace-pre-wrap break-words rounded-2xl border border-white/10 bg-night-900/90 p-4 text-xs font-mono leading-relaxed text-emerald-200 shadow-[0_12px_30px_rgba(0,0,0,0.45)] sm:text-sm sm:whitespace-pre"><code>docker run -d \
--name sublogue \
-p 5000:5000 \
-e TZ=Etc/UTC \
-e PUID=1000 -e PGID=1000 \
-v ./data:/config \
-v ./media:/media \
ponzischeme89/sublogue:latest</code></pre>
</div>
<div class="rounded-2xl border border-white/10 bg-night-900/80 p-5">
<p class="text-xs font-mono uppercase text-slate-400">Open UI</p>
<div class="mt-4 flex items-center gap-3 text-sm text-slate-200">
<i data-lucide="globe" class="h-5 w-5 text-ember-500"></i>
http://localhost:5000
</div>
<p class="mt-4 text-sm text-slate-300">
Head to Settings -> Integrations to add your metadata providers and start scanning.
</p>
</div>
</div>
</section>
<section id="install" class="mb-12 md:mb-16">
<div class="flex items-center gap-3">
<i data-lucide="download" class="h-6 w-6 text-ember-500"></i>
<h2 class="text-2xl font-semibold font-display">Install</h2>
</div>
<div class="mt-6 grid gap-6 lg:grid-cols-3">
<div class="rounded-2xl border border-white/10 bg-night-800/70 p-6">
<h3 class="text-lg font-semibold font-display">🐳 Docker Compose</h3>
<p class="mt-3 text-sm text-slate-300">
Ideal for Portainer, Synology, or homelab setups.
</p>
<pre
class="mt-4 overflow-x-auto whitespace-pre-wrap break-words rounded-2xl border border-white/10 bg-night-900/90 p-4 text-[0.7rem] font-mono leading-relaxed text-emerald-200 shadow-[0_12px_30px_rgba(0,0,0,0.45)] sm:text-xs sm:whitespace-pre"><code>version: "3.9"
services:
sublogue:
image: ponzischeme89/sublogue:latest
container_name: sublogue
restart: unless-stopped
environment:
- TZ=Etc/UTC
- PUID=1000
- PGID=1000
volumes:
- ./data:/config
- ./media:/media
ports:
- "5000:5000"</code></pre>
</div>
<div class="rounded-2xl border border-white/10 bg-night-800/70 p-6">
<h3 class="text-lg font-semibold font-display">🧰 Unraid</h3>
<p class="mt-3 text-sm text-slate-300">
Use the bundled template and map volumes into /config and /media.
</p>
<div class="mt-4 rounded-2xl border border-white/10 bg-night-900/70 p-4 text-sm text-slate-200">
<p>/mnt/user/appdata/sublogue -> /config</p>
<p class="mt-2">/mnt/user/media -> /media</p>
</div>
</div>
<div class="rounded-2xl border border-white/10 bg-night-800/70 p-6">
<h3 class="text-lg font-semibold font-display">🐲 Komodo</h3>
<p class="mt-3 text-sm text-slate-300">
Paste a stack template and attach the NPM network.
</p>
<pre
class="mt-4 overflow-x-auto whitespace-pre-wrap break-words rounded-2xl border border-white/10 bg-night-900/90 p-4 text-[0.7rem] font-mono leading-relaxed text-emerald-200 shadow-[0_12px_30px_rgba(0,0,0,0.45)] sm:text-xs sm:whitespace-pre"><code>version: "3.9"
services:
sublogue:
image: ponzischeme89/sublogue:latest
container_name: sublogue
environment:
- TZ=Etc/UTC
ports:
- "5000:5000"
volumes:
- /volume1/Docker/sublogue/data:/config
- /volume1/Media:/media
restart: unless-stopped
networks:
- npm_network
networks:
npm_network:
external: true</code></pre>
</div>
</div>
</section>
<section id="clean-srts" class="mb-12 md:mb-16">
<div class="flex items-center gap-3">
<i data-lucide="eraser" class="h-6 w-6 text-ember-500"></i>
<h2 class="text-2xl font-semibold font-display">Clean SRTs</h2>
</div>
<p class="mt-3 text-sm text-slate-300 sm:text-base">
Remove ad blocks like YTS and other promo lines without touching timing. Sublogue keeps subtitle order
intact while cleaning the text.
</p>
<div class="mt-6 grid gap-6 lg:grid-cols-2">
<div class="rounded-2xl border border-white/10 bg-night-800/70 p-6">
<div class="flex items-center justify-between">
<p class="text-xs font-mono uppercase text-slate-400">Before</p>
<span
class="rounded-full border border-white/10 px-3 py-1 text-[0.65rem] font-mono uppercase text-slate-400">
YTS
</span>
</div>
<pre
class="mt-4 overflow-x-auto whitespace-pre-wrap break-words rounded-2xl border border-white/10 bg-night-900/90 p-4 text-[0.7rem] font-mono leading-relaxed text-slate-300 shadow-[0_12px_30px_rgba(0,0,0,0.45)] sm:text-xs sm:whitespace-pre"><code>1
00:00:01,000 --> 00:00:04,000
Visit YTS.mx for more movies
2
00:00:05,000 --> 00:00:07,200
Grab the latest releases</code></pre>
</div>
<div class="rounded-2xl border border-white/10 bg-night-800/70 p-6">
<div class="flex items-center justify-between">
<p class="text-xs font-mono uppercase text-slate-400">After</p>
<span
class="rounded-full border border-ember-500/40 bg-ember-500/10 px-3 py-1 text-[0.65rem] font-mono uppercase text-ember-500">
Clean
</span>
</div>
<pre
class="mt-4 overflow-x-auto whitespace-pre-wrap break-words rounded-2xl border border-white/10 bg-night-900/90 p-4 text-[0.7rem] font-mono leading-relaxed text-emerald-200 shadow-[0_12px_30px_rgba(0,0,0,0.45)] sm:text-xs sm:whitespace-pre"><code>1
00:00:08,000 --> 00:00:10,200
You are early.</code></pre>
<p class="mt-4 text-sm text-slate-300">
Ad-only blocks are removed, while the rest of the subtitle content remains untouched.
</p>
</div>
</div>
</section>
<section id="examples" class="mb-12 md:mb-16">
<div class="flex items-center gap-3">
<i data-lucide="sparkles" class="h-6 w-6 text-ember-500"></i>
<h2 class="text-2xl font-semibold font-display">Metadata Examples</h2>
</div>
<p class="mt-3 text-sm text-slate-300 sm:text-base">
Sublogue can insert plots, runtimes, directors, and ratings right into the subtitle header for quick
context before the dialogue begins.
</p>
<div class="mt-6 grid gap-6 lg:grid-cols-3">
<div class="rounded-2xl border border-white/10 bg-night-800/70 p-6">
<div class="flex items-center gap-3">
<i data-lucide="film" class="h-5 w-5 text-ember-500"></i>
<h3 class="text-lg font-semibold font-display">Plot + Runtime</h3>
</div>
<div class="mt-4 rounded-2xl border border-white/10 bg-night-900/80 p-4 text-sm text-slate-200">
<p class="text-xs font-mono uppercase text-slate-400">Injected Header</p>
<p class="mt-3 font-semibold">Plot</p>
<p class="mt-2 text-slate-300">
A retired detective returns for one last case and uncovers a hidden network in the city.
</p>
<p class="mt-3 text-xs font-mono uppercase text-ember-500">Runtime: 112 min</p>
</div>
</div>
<div class="rounded-2xl border border-white/10 bg-night-800/70 p-6">
<div class="flex items-center gap-3">
<i data-lucide="clapperboard" class="h-5 w-5 text-ember-500"></i>
<h3 class="text-lg font-semibold font-display">Director + Cast</h3>
</div>
<div class="mt-4 rounded-2xl border border-white/10 bg-night-900/80 p-4 text-sm text-slate-200">
<p class="text-xs font-mono uppercase text-slate-400">Injected Header</p>
<p class="mt-3 font-semibold">Director</p>
<p class="mt-2 text-slate-300">Ava Solomon</p>
<p class="mt-3 font-semibold">Cast</p>
<p class="mt-2 text-slate-300">J. Harper, L. Chen, M. Brooks</p>
</div>
</div>
<div class="rounded-2xl border border-white/10 bg-night-800/70 p-6">
<div class="flex items-center gap-3">
<i data-lucide="star" class="h-5 w-5 text-ember-500"></i>
<h3 class="text-lg font-semibold font-display">Ratings</h3>
</div>
<div class="mt-4 rounded-2xl border border-white/10 bg-night-900/80 p-4 text-sm text-slate-200">
<p class="text-xs font-mono uppercase text-slate-400">Injected Header</p>
<div class="mt-4 flex flex-wrap items-center gap-3">
<span
class="flex items-center gap-2 rounded-full border border-white/10 bg-night-800/60 px-3 py-1 text-xs font-semibold">
IMDb 7.8
</span>
<span
class="flex items-center gap-2 rounded-full border border-emerald-500/40 bg-emerald-500/10 px-3 py-1 text-xs font-semibold text-emerald-200">
RT 94%
</span>
</div>
<div class="mt-4 flex items-center gap-2 text-ember-500">
<i data-lucide="star" class="h-4 w-4 fill-current"></i>
<i data-lucide="star" class="h-4 w-4 fill-current"></i>
<i data-lucide="star" class="h-4 w-4 fill-current"></i>
<i data-lucide="star" class="h-4 w-4 fill-current"></i>
<i data-lucide="star" class="h-4 w-4"></i>
</div>
</div>
<div class="mt-4 flex items-center gap-3 text-xs text-slate-400">
<img src="sublogue_v2.png" alt="Sublogue" class="h-5 w-auto sm:h-6" />
<span>Sublogue metadata branding</span>
</div>
</div>
</div>
</section>
<section id="integrations" class="mb-12 grid gap-6 lg:grid-cols-[1fr_1.2fr] md:mb-16">
<div class="rounded-3xl border border-white/10 bg-night-800/70 p-6 sm:p-8">
<div class="flex items-center gap-3">
<i data-lucide="plug" class="h-6 w-6 text-ember-500"></i>
<h2 class="text-2xl font-semibold font-display">Integrations</h2>
</div>
<p class="mt-4 text-sm text-slate-300">
Start with zero providers enabled. Add OMDb, TMDb, or TVMaze when you have keys ready. Each scan can
choose its preferred source.
</p>
<div class="mt-6 space-y-4 text-sm text-slate-300">
<div class="rounded-2xl border border-white/10 bg-night-900/70 p-4">
<div class="flex items-center gap-3">
<i data-lucide="film" class="h-5 w-5 text-ember-500"></i>
OMDb - Fast movie metadata
</div>
</div>
<div class="rounded-2xl border border-white/10 bg-night-900/70 p-4">
<div class="flex items-center gap-3">
<i data-lucide="clapperboard" class="h-5 w-5 text-ember-500"></i>
TMDb - Rich cast and ratings
</div>
</div>
<div class="rounded-2xl border border-white/10 bg-night-900/70 p-4">
<div class="flex items-center gap-3">
<i data-lucide="tv" class="h-5 w-5 text-ember-500"></i>
TVMaze - Series and episodes
</div>
</div>
</div>
</div>
<div class="rounded-3xl border border-white/10 bg-night-800/70 p-6 sm:p-8">
<div class="flex items-center gap-3">
<i data-lucide="wand-2" class="h-6 w-6 text-ember-500"></i>
<h2 class="text-2xl font-semibold font-display">API Notes</h2>
</div>
<p class="mt-4 text-sm text-slate-300">
Sublogue expects your media folders to be readable by the container. Large scans stream results to the
UI while the API continues processing in the background.
</p>
<div class="mt-6 space-y-4 text-sm text-slate-300">
<div class="flex items-start gap-3">
<i data-lucide="folder" class="mt-1 h-5 w-5 text-ember-500"></i>
<div>
<p class="font-semibold">Volumes</p>
<p>Map /config for settings and /media for subtitle files.</p>
</div>
</div>
<div class="flex items-start gap-3">
<i data-lucide="activity" class="mt-1 h-5 w-5 text-ember-500"></i>
<div>
<p class="font-semibold">Status</p>
<p>Scan progress appears in the UI with streaming rows as files are processed.</p>
</div>
</div>
<div class="flex items-start gap-3">
<i data-lucide="settings" class="mt-1 h-5 w-5 text-ember-500"></i>
<div>
<p class="font-semibold">Settings</p>
<p>Integrations remain disabled until you add keys in the Settings tab.</p>
</div>
</div>
</div>
</div>
</section>
<section id="community" class="mb-12 md:mb-16">
<div class="rounded-3xl border border-ember-500/30 bg-night-800/70 p-6 sm:p-8">
<div class="flex items-center gap-3">
<i data-lucide="message-circle" class="h-6 w-6 text-ember-500"></i>
<h2 class="text-2xl font-semibold font-display">Join the Community</h2>
</div>
<p class="mt-4 text-sm text-slate-300 sm:text-base">
Jump into the ponzischeme89 Discord and visit <span
class="font-semibold text-slate-200">#sublogue-support</span>
for help, updates, and feature requests.
</p>
<div
class="mt-5 inline-flex items-center gap-3 rounded-full border border-ember-500/40 bg-ember-500/10 px-4 py-2 text-sm font-semibold text-ember-500">
<i data-lucide="hash" class="h-4 w-4"></i>
#sublogue-support
</div>
</div>
</section>
</main>
<footer class="border-t border-white/10">
<div
class="mx-auto flex max-w-6xl flex-col gap-4 px-4 py-8 text-sm text-slate-400 sm:px-6 md:flex-row md:items-center md:justify-between">
<p>&copy 2026 ponzischeme89. Released under AGLPL-3.0 licence.</p>
<div class="flex items-center gap-3">
<i data-lucide="github" class="h-4 w-4"></i>
<span>github.com/ponzischeme89/Sublogue</span>
</div>
</div>
</footer>
</div>
<script>
lucide.createIcons();
</script>
</body>
</html>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 854 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 190 KiB

-46
View File
@@ -1,46 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Container>
<Name>sublogue</Name>
<Repository>ponzischeme89/sublogue:latest</Repository>
<Network>npm_network</Network>
<MyIP/>
<Shell>bash</Shell>
<Privileged>false</Privileged>
<Config Name="WebUI" Target="http://[IP]:[PORT:5000]" Default="http://[IP]:5000" Mode="http"/>
<Port>
<HostPort>5000</HostPort>
<ContainerPort>5000</ContainerPort>
<Protocol>tcp</Protocol>
<Name>Web UI + API</Name>
</Port>
<Volume>
<HostDir>/mnt/user/appdata/sublogue</HostDir>
<ContainerDir>/config</ContainerDir>
<Mode>rw</Mode>
</Volume>
<Volume>
<HostDir>/mnt/user/appdata/sublogue/media</HostDir>
<ContainerDir>/media</ContainerDir>
<Mode>rw</Mode>
</Volume>
<Environment>
<Name>TZ</Name>
<Value>Etc/UTC</Value>
</Environment>
<Environment>
<Name>PUID</Name>
<Value>1000</Value>
</Environment>
<Environment>
<Name>PGID</Name>
<Value>1000</Value>
</Environment>
</Container>