{"id":45969629,"url":"https://github.com/abrechen2/sublarr","last_synced_at":"2026-05-09T22:27:18.807Z","repository":{"id":341019509,"uuid":"1157886148","full_name":"Abrechen2/sublarr","owner":"Abrechen2","description":"Self-hosted subtitle manager \u0026 LLM translator for anime and media — *arr-compatible, fully local","archived":false,"fork":false,"pushed_at":"2026-04-26T10:33:45.000Z","size":18984,"stargazers_count":13,"open_issues_count":3,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-04-26T11:21:30.180Z","etag":null,"topics":["anime","arr","docker","jellyfin","llm","ollama","radarr","self-hosted","sonarr","subtitle-manager","subtitles","translation"],"latest_commit_sha":null,"homepage":"https://github.com/Abrechen2/sublarr","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Abrechen2.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-14T13:07:56.000Z","updated_at":"2026-04-26T10:33:50.000Z","dependencies_parsed_at":null,"dependency_job_id":"fab8d974-a190-4840-8a52-2d3b00bdc27c","html_url":"https://github.com/Abrechen2/sublarr","commit_stats":null,"previous_names":["abrechen2/sublarr"],"tags_count":44,"template":false,"template_full_name":null,"purl":"pkg:github/Abrechen2/sublarr","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Abrechen2%2Fsublarr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Abrechen2%2Fsublarr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Abrechen2%2Fsublarr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Abrechen2%2Fsublarr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Abrechen2","download_url":"https://codeload.github.com/Abrechen2/sublarr/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Abrechen2%2Fsublarr/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32297939,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T09:34:17.070Z","status":"ssl_error","status_checked_at":"2026-04-26T09:34:00.993Z","response_time":129,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["anime","arr","docker","jellyfin","llm","ollama","radarr","self-hosted","sonarr","subtitle-manager","subtitles","translation"],"created_at":"2026-02-28T15:03:50.054Z","updated_at":"2026-05-09T22:27:18.799Z","avatar_url":"https://github.com/Abrechen2.png","language":"Python","funding_links":["https://www.paypal.com/donate?hosted_button_id=GLXYTD3FV9Y78"],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# Sublarr\n\n\u003cimg src=\"logo.png\" alt=\"Sublarr Logo\" width=\"140\" /\u003e\n\n### Subtitle Manager \u0026 Downloader for Anime and Media\n\n*arr-compatible · Self-hosted · Open Source · LLM translation (⚠️ beta, experimental)\n\n[![Version](https://img.shields.io/badge/version-0.84.0--beta-teal.svg)](https://github.com/Abrechen2/sublarr/releases)\n[![License: GPL-3.0](https://img.shields.io/badge/License-GPL--3.0-blue.svg)](LICENSE)\n[![Python 3.12+](https://img.shields.io/badge/Python-3.12+-3776ab.svg)](https://www.python.org/)\n[![React 19](https://img.shields.io/badge/React-19-61dafb.svg)](https://react.dev/)\n[![Docker](https://img.shields.io/badge/Docker-ghcr.io-2496ed.svg)](https://github.com/Abrechen2/sublarr/pkgs/container/sublarr)\n\n---\n\n**[Quick Start](#-quick-start)** · **[Configuration](#️-configuration)** · **[Integrations](#-integrations)** · **[Website](https://sublarr.de)** · **[Docs](https://sublarr.de/docs/)**\n\n**Community:** [Discord](https://discord.gg/WjatsKzHXz) · [Reddit r/Sublarr](https://www.reddit.com/r/Sublarr/) · [GitHub Issues](https://github.com/Abrechen2/sublarr/issues)\n\n\u003c/div\u003e\n\n---\n\nSublarr is a self-hosted subtitle manager for anime and media libraries. It automatically searches subtitle providers, scores and downloads the best match (ASS-first), and gives you tools to edit, sync and convert subtitles — all on your LAN, no cloud required.\n\nIt follows the *arr-suite design philosophy: connect it to Sonarr/Radarr, set up your language profiles, and let it handle everything automatically via webhooks. Or run it standalone — no *arr setup required.\n\n\u003e [!WARNING]\n\u003e **Active beta.** Configuration formats, database schemas, and API contracts may change between versions. Read the [CHANGELOG](CHANGELOG.md) before upgrading. Always keep backups of your subtitle files before enabling automation. Solo-maintained project — bug reports and contributions welcome.\n\n---\n\n## ✨ Features\n\n### What's core vs. what's beta\n\n| Feature | Status |\n|---------|--------|\n| Subtitle search \u0026 download (22 providers) | Core — most-tested path |\n| ASS-first scoring, deduplication, trust scoring | Core — most-tested path |\n| Sonarr/Radarr webhook integration | Core — most-tested path |\n| Standalone mode (no *arr required) | Core — filesystem watching + NFO metadata |\n| Language profiles (mustContain, cutoff, audioExclude) | Core — functional |\n| Subtitle editor, waveform sync, format conversion | Core — functional, rough edges possible |\n| Post-download processing pipeline | Core — functional |\n| **LLM translation via Ollama / DeepL / Google** | **⚠️ Beta — experimental, quality varies** |\n\n### 🔍 Subtitle Search \u0026 Download\n- **22 providers** — AnimeTosho, Jimaku, OpenSubtitles, SubDL, Subscene, Subf2m, Subsource, SubsDump, Addic7ed, BetaSeries, Titlovi, Titrari, TVSubtitles, Gestdown, Kitsunekko, Napisy24, Podnapisi, YIFY, Zimuku, LegendasDivX, TurkceAltyazi + embedded extraction\n- **ASS-first scoring** — ASS/SSA gets +50 bonus over SRT; format, dialect, sync quality, and uploader reputation scored\n- **Smart deduplication** — avoids re-downloading identical files via SHA-256 hashing\n- **Machine translation detection** — flags OpenSubtitles mt/ai-tagged uploads with an orange badge\n- **Uploader trust scoring** — 0–20 bonus based on provider rank (emerald badge for top uploaders)\n- **Score breakdown** — hover tooltip on score badges shows per-component point breakdown\n- **Parallel provider search** — all providers queried concurrently via `ThreadPoolExecutor`\n- **Circuit breakers** — per-provider CLOSED/OPEN/HALF_OPEN state prevents cascading failures; state persisted across restarts\n- **Language profiles** — per-series/film target language rules; mustContain / mustNotContain filters, cutoff (stop searching once found), audioExclude (skip if audio already matches target)\n\n### 📺 *arr \u0026 Media Server Integration\n- **Sonarr \u0026 Radarr webhooks** — automatically processes new episodes and movies on import\n- **Multi-instance support** — connect multiple Sonarr/Radarr/Jellyfin/Emby instances\n- **Jellyfin / Emby / Plex / Kodi** — triggers library refresh after subtitle completion\n- **Tag-based profile assignment** — Sonarr/Radarr tags automatically assign language profiles\n- **AniDB absolute episode order** — correct episode numbering for anime with alternate orders (e.g. Haruhi)\n- **Anime multi-season fallback** — OpenSubtitles season-1 collapse for anime indexed without season split\n- **Path mapping** — supports remote *arr setups where file paths differ between hosts\n\n### 🗂️ Standalone Mode (no *arr required)\n- **Filesystem watching** — monitors configured folders; automatically adds new video files to the wanted list\n- **NFO metadata** — reads `.nfo` sidecar files to resolve series/movie title, TVDB/TMDB IDs without API calls\n- **Auto-mode** — when no *arr is configured, Sublarr activates standalone mode automatically on startup\n- **Extras skipping** — trailers, samples, featurettes excluded from subtitle discovery\n- **Symlink support** — follows symlinked directories during scan\n\n### 🔧 Subtitle Tools\n- **Waveform editor (Aegisub-class)** — drag region edges to retime cues, click-set start/end (`S` / `D` keys), snap to keyframes / scene cuts / neighbour cues with priority-tied tie-breaking, gap \u0026 overlap quality markers, vertical amplitude zoom (1×–5×), pitch-preserving playback rate (0.5×–2×), sticky time-axis ruler, optional spectrogram overlay, optional audio-scrub-while-dragging, multi-audio-track picker, ASS karaoke syllable overlay\n- **CodeMirror editor** — syntax-highlighted ASS/SRT editing with diff view\n- **Video sync** — ffsubsync \u0026 alass integration for automatic timing correction (install directly from the UI)\n- **Format conversion** — convert between ASS, SRT, VTT, SSA via pysubs2\n- **Post-processing pipeline** — 18 fix functions (HI removal, OCR artifact cleanup, formatting corrections); configurable per-series\n- **Quality fixes** — one-click overlap fix, timing normalization, line merge/split, spell-check\n- **Batch OCR** — extract text from PGS/VobSub image tracks via Tesseract\n- **Whisper fallback** — generate subtitles from audio when no text subs exist\n- **Stream removal** — safely remove embedded subtitle streams from video containers without re-encoding\n\n### 🖥️ Wanted \u0026 Automation\n- **Wanted scanner** — detects all episodes/movies missing subtitles in your library\n- **Event-driven by default** — webhooks, manual triggers, and the file-watcher kick scans; periodic fallback only when `SUBLARR_WANTED_SCAN_INTERVAL_HOURS` \u003e 0\n- **Scheduler admin** — *Settings → System → Scheduler* lists every background job (wanted scanner, search, cleanup, upgrade scan, AniDB sync, history pruning) with run-now / pause / resume / edit-trigger controls. Backed by **APScheduler** with `SQLAlchemyJobStore` — jobs persist across restarts with next-fire-time intact.\n- **Failure details** — failed items show inline error reason, attempt count, and next retry countdown\n- **Subtitle upgrade system** — automatically replaces low-quality subs when a better version appears\n- **Batch search** — run searches across all wanted items with live progress bar\n- **Anime-only mode** — optionally limit wanted scanning to anime series\n\n### 🌐 LLM Translation *(⚠️ Beta — use with caution)*\n\n\u003e **This feature is experimental and not yet reliable enough for production use.** Quality depends heavily on the model, prompt, language pair, and content type. EN→DE anime is the best-tested path. Results can be inconsistent — verify before using.\n\n- **Fully local** — translates via [Ollama](https://ollama.ai/); no external API required\n- **Multiple backends** — Ollama, DeepL, Google Cloud Translate, LibreTranslate, any OpenAI-compatible API\n- **Context-aware batching** — cues grouped into context-window-aware chunks for coherent translations\n- **Translation memory** — SHA-256 + difflib similarity cache avoids retranslating identical/near-identical lines\n- **Per-line quality scoring** — optional LLM pass scores each translated line (0–10), retries low-scoring lines\n- **Prompt presets** — 5 built-in templates (Anime, Documentary, Casual…) + custom presets\n- **Glossary injection** — consistent term translation across episodes via per-series glossary\n\n### 🎨 UI\n- *arr-style dark theme with teal accent — feels at home next to Sonarr, Radarr, Prowlarr\n- Fully redesigned Settings UI — grouped cards, advanced toggles, inline field descriptions, unsaved-changes guard\n- Customizable dashboard with draggable widgets and automation status widget\n- **Plugin marketplace** — `/plugins` page lets you install community subtitle providers from a Git URL allowlist; ships with circuit breakers + rate-limit wiring identical to first-party providers\n- Global search (`Ctrl+K`) across all pages\n- Real-time updates via WebSocket (activity feed, job progress)\n- Onboarding wizard for first-time setup (language, automation, connections)\n- Keyboard shortcuts throughout (`?` to view all)\n\n---\n\n## 🚀 Quick Start\n\n```bash\n# 1. Copy environment file\ncp .env.example .env\n\n# 2. Edit .env — set your media path at minimum\nnano .env\n\n# 3. Start\ndocker compose up -d\n```\n\nOpen **http://localhost:5765** — that's it.\n\n\u003e **First-time setup:** The onboarding wizard will guide you through language selection, provider API keys, and automation settings. Sonarr/Radarr are optional — Sublarr can run standalone.\n\n---\n\n## 🐳 Docker\n\n### Minimal `docker-compose.yml`\n\n```yaml\nservices:\n  sublarr:\n    image: ghcr.io/abrechen2/sublarr:0.84.0-beta\n    container_name: sublarr\n    ports:\n      - \"5765:5765\"\n    volumes:\n      - ./config:/config        # database, backups, logs\n      - /path/to/media:/media   # your media library (same path as Jellyfin/Emby sees)\n    environment:\n      - PUID=1000\n      - PGID=1000\n      - SUBLARR_MEDIA_PATH=/media\n    restart: unless-stopped\n```\n\n### Production Hardening\n\nThe image runs as a non-root user with `cap_drop: ALL` and no new privileges. A full production example with resource limits:\n\n```yaml\nservices:\n  sublarr:\n    image: ghcr.io/abrechen2/sublarr:0.84.0-beta\n    container_name: sublarr\n    ports:\n      - \"5765:5765\"\n    volumes:\n      - ./config:/config\n      - /mnt/media:/media:rw\n    env_file: .env\n    restart: unless-stopped\n    deploy:\n      resources:\n        limits:\n          cpus: '2.0'\n          memory: 4G\n        reservations:\n          cpus: '0.5'\n          memory: 512M\n    cap_drop:\n      - ALL\n    cap_add:\n      - CHOWN\n      - DAC_OVERRIDE\n      - SETGID\n      - SETUID\n    security_opt:\n      - no-new-privileges:true\n    healthcheck:\n      test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:5765/api/v1/health\"]\n      interval: 30s\n      timeout: 10s\n      retries: 3\n    logging:\n      driver: \"json-file\"\n      options:\n        max-size: \"10m\"\n        max-file: \"3\"\n```\n\n### User / Group IDs\n\nSublarr runs as a non-root user inside the container. Set `PUID` and `PGID` to match your host user so volume file permissions work correctly:\n\n```bash\nid $USER          # → uid=1000(you) gid=1000(you)\n# then set PUID=1000 PGID=1000 in .env\n```\n\n---\n\n## ⚙️ Configuration\n\nAll settings use the `SUBLARR_` prefix. They can be set via environment variables, `.env` file, or the Settings UI at runtime (stored in the database).\n\n### Core\n\n| Variable | Default | Description |\n|---|---|---|\n| `SUBLARR_MEDIA_PATH` | `/media` | Root path of your media library |\n| `SUBLARR_DB_PATH` | `/config/sublarr.db` | SQLite database location |\n| `SUBLARR_PORT` | `5765` | HTTP port |\n| `SUBLARR_API_KEY` | *(empty)* | Optional API key for auth (`X-Api-Key` header) |\n| `SUBLARR_LOG_LEVEL` | `INFO` | Log level (`DEBUG`, `INFO`, `WARNING`, `ERROR`) |\n| `PUID` / `PGID` | `1000` | Container user/group IDs |\n\n### Translation *(beta)*\n\n\u003e Translation is disabled by default (`SUBLARR_WANTED_AUTO_TRANSLATE=false`). When disabled, only subtitle download runs — no LLM calls are made. Enable only if you have a working Ollama instance and accept variable quality.\n\n| Variable | Default | Description |\n|---|---|---|\n| `SUBLARR_WANTED_AUTO_TRANSLATE` | `false` | Auto-translate after subtitle download in wanted scanner |\n| `SUBLARR_WEBHOOK_AUTO_TRANSLATE` | `true` | Auto-translate after webhook-triggered download (gated by master `translation_enabled`) |\n| `SUBLARR_OLLAMA_URL` | `http://localhost:11434` | Ollama base URL |\n| `SUBLARR_OLLAMA_MODEL` | `qwen2.5:14b-instruct` | Model for translation |\n| `SUBLARR_SOURCE_LANGUAGE` | `en` | Source subtitle language |\n| `SUBLARR_TARGET_LANGUAGE` | `de` | Default target language |\n| `SUBLARR_BATCH_SIZE` | `15` | Subtitle cues per LLM call |\n| `SUBLARR_TEMPERATURE` | `0.3` | LLM temperature (lower = more consistent) |\n\n### Provider API Keys\n\n| Variable | Provider |\n|---|---|\n| `SUBLARR_OPENSUBTITLES_API_KEY` | [OpenSubtitles](https://www.opensubtitles.com/en/consumers) |\n| `SUBLARR_JIMAKU_API_KEY` | [Jimaku](https://jimaku.cc/) |\n| `SUBLARR_SUBDL_API_KEY` | [SubDL](https://subdl.com/) |\n\nAnimeTosho, Subscene, Subf2m, Subsource, Kitsunekko, and most other providers work without an API key.\n\n### Automation\n\n| Variable | Default | Description |\n|---|---|---|\n| `SUBLARR_WANTED_SCAN_INTERVAL_HOURS` | `0` | Periodic scan interval. `0` = disabled — scan is event-driven (webhook / manual / file-watcher). Set \u003e 0 for a periodic fallback. |\n| `SUBLARR_WANTED_SEARCH_INTERVAL_HOURS` | `24` | How often the search loop revisits unresolved wanted items |\n| `SUBLARR_WANTED_SCAN_ON_STARTUP` | `false` | Run a full scan when the container starts |\n| `SUBLARR_WANTED_ANIME_ONLY` | `true` | Only scan anime series |\n| `SUBLARR_UPGRADE_ENABLED` | `true` | Replace low-quality subs with better versions |\n\n### Path Mapping (remote *arr hosts)\n\nIf your Sonarr/Radarr runs on a different host and uses different paths than Sublarr:\n\n```env\nSUBLARR_PATH_MAPPING=/data/media=/mnt/media\n```\n\nSee [sublarr.de/docs/getting-started/environment-variables](https://sublarr.de/docs/getting-started/environment-variables/) for the complete variable reference.\n\n---\n\n## 🔌 Integrations\n\n### Sonarr \u0026 Radarr\n\n1. In Sonarr/Radarr: *Settings → Connect → Add → Webhook*\n2. URL: `http://sublarr:5765/api/v1/webhook/sonarr` (or `/radarr`)\n3. Events: ✅ On Import, ✅ On Upgrade\n4. (Optional) Set `SUBLARR_SONARR_URL` + `SUBLARR_SONARR_API_KEY` for library refresh\n\nSublarr will automatically search and download subtitles for every new import. Translation only runs if `SUBLARR_WEBHOOK_AUTO_TRANSLATE=true`.\n\n### Standalone (no *arr required)\n\nPoint Sublarr at your media folder in *Settings → Library Sources*. It will watch for new files and add them to the wanted list automatically. Metadata is read from `.nfo` sidecars or parsed from filenames.\n\n### Jellyfin / Emby\n\n1. *Sublarr → Settings → Connections → Add Media Server*\n2. Enter your server URL and API key\n3. Sublarr will trigger a library refresh after each subtitle download\n\n### Ollama (Local LLM — translation beta)\n\n\u003e ⚠️ Translation quality is variable. Only enable if you need it.\n\u003e The custom `anime-translator-*` GGUFs we previously published are\n\u003e currently broken; do not use them. If a stable replacement ships,\n\u003e this section will name it explicitly.\n\nUse a general-purpose instruction-tuned model:\n\n```bash\nollama pull qwen2.5:14b-instruct   # good all-rounder, ~9 GB\nollama pull llama3.1:8b-instruct   # lighter, ~5 GB\n```\n\nThen set in your `.env`:\n```env\nSUBLARR_OLLAMA_MODEL=qwen2.5:14b-instruct\nSUBLARR_WANTED_AUTO_TRANSLATE=true\n```\n\nSet `SUBLARR_OLLAMA_URL` to your Ollama host. For Docker, use `http://host.docker.internal:11434`.\n\n\u003e **Model info:** [huggingface.co/Sublarr](https://huggingface.co/Sublarr) — BLEU-1: 0.281, 7 GB, GGUF Q4_K_M quantization.\n\n---\n\n## 🖥️ UI Overview\n\n| Page | Description |\n|---|---|\n| **Dashboard** | Customizable widget grid — status, queue, recent activity, automation status |\n| **Library** | All series/movies with subtitle progress and bulk actions |\n| **Wanted** | Missing subtitle queue with one-click search, failure details, retry countdown |\n| **Queue** | Live job progress (downloading, translating, syncing) |\n| **Activity** | Real-time event feed |\n| **History** | Past operations with timestamps and results |\n| **Statistics** | Charts — provider success rates, language distribution, quality trends |\n| **Plugins** | Community plugin marketplace — install custom subtitle providers from an allowlisted Git URL |\n| **Settings** | Grouped cards — Connections, Languages \u0026 Subtitles, Providers, Automation, System |\n| **Settings → System → Scheduler** | APScheduler admin — list, run-now, pause/resume, edit-trigger, view history per background job |\n\nThe subtitle editor (accessible from Library/Series Detail) includes:\n- **Preview** — formatted subtitle preview with cue navigation\n- **Editor** — CodeMirror syntax-highlighted ASS/SRT editing\n- **Diff** — side-by-side comparison with the saved version\n- **Waveform** — Aegisub-class timing surface (drag to retime, snap to keyframes / scenes / neighbours, gap \u0026 overlap markers, amplitude + pitch-preserving rate, S/D hotkeys, optional spectrogram + scrub-on-drag)\n\n---\n\n## 💻 Development\n\n```bash\n# First-time setup (installs Python + Node dependencies, optional pre-commit hooks)\nnpm run setup:sh      # Linux/Mac\nnpm run setup:ps1     # Windows PowerShell\n\n# Start backend (:5765) + frontend (:5173) in parallel\nnpm run dev\n\n# Tests\ncd backend \u0026\u0026 python -m pytest\ncd frontend \u0026\u0026 npm test\n\n# Lint \u0026 type check\ncd backend \u0026\u0026 ruff check . \u0026\u0026 ruff format --check .\ncd frontend \u0026\u0026 npm run lint \u0026\u0026 npx tsc --noEmit\n```\n\n---\n\n## 📚 Documentation\n\nFull documentation lives at **[sublarr.de/docs](https://sublarr.de/docs/)**.\n\n### Live API discovery\n\nEvery Sublarr instance ships its own interactive API reference:\n\n| Endpoint | Purpose |\n|---|---|\n| `GET /api/docs` | Swagger UI — browse + try-it-out (anonymous-readable; click \"Authorize\" to inject your `X-Api-Key` for authenticated endpoints) |\n| `GET /api/v1/openapi.json` | Raw OpenAPI 3.0.3 spec — feed into Postman / Insomnia / Bruno or generate a TypeScript client via `openapi-typescript` / `orval` |\n\n\n\n| Topic | Doc Page |\n|---|---|\n| Installation | [Getting Started → Installation](https://sublarr.de/docs/getting-started/installation/) |\n| Configuration reference | [Getting Started → Environment Variables](https://sublarr.de/docs/getting-started/environment-variables/) |\n| Upgrade guide | [Getting Started → Upgrade Guide](https://sublarr.de/docs/getting-started/upgrade-guide/) |\n| FAQ | [Getting Started → FAQ](https://sublarr.de/docs/getting-started/faq/) |\n| Sonarr/Radarr/Jellyfin setup | [User Guide → Integrations](https://sublarr.de/docs/user-guide/integrations/) |\n| Language profiles | [User Guide → Language Profiles](https://sublarr.de/docs/user-guide/language-profiles/) |\n| LLM translation (beta) | [User Guide → Translation \u0026 LLM](https://sublarr.de/docs/user-guide/translation-llm/) |\n| Standalone mode | [Getting Started → Installation (Scenario 2)](https://sublarr.de/docs/getting-started/installation/) |\n| Subtitle scoring algorithm | [User Guide → Settings → Providers (Scoring)](https://sublarr.de/docs/user-guide/settings/providers/#subtitle-scoring) |\n| Provider system | [User Guide → Settings → Providers](https://sublarr.de/docs/user-guide/settings/providers/) |\n| REST API reference | [Development → API Reference](https://sublarr.de/docs/development/api-reference/) |\n| Architecture \u0026 data flow | [Development → Architecture](https://sublarr.de/docs/development/architecture/) |\n| Plugin development | [Development → Plugin Development](https://sublarr.de/docs/development/plugin-development/) |\n| Contributing \u0026 PR workflow | [Development → Contributing](https://sublarr.de/docs/development/contributing/) |\n| Database schema | [Development → Database Schema](https://sublarr.de/docs/development/database-schema/) |\n| Reverse proxy setup | [Troubleshooting → Reverse Proxy](https://sublarr.de/docs/troubleshooting/reverse-proxy/) |\n| Performance tuning | [Troubleshooting → Performance Tuning](https://sublarr.de/docs/troubleshooting/performance-tuning/) |\n| Troubleshooting | [Troubleshooting → General](https://sublarr.de/docs/troubleshooting/general/) |\n| [ROADMAP.md](ROADMAP.md) | Feature roadmap and version planning |\n| [CHANGELOG.md](CHANGELOG.md) | Release notes |\n| [.env.example](.env.example) | Minimal deployment template |\n\n---\n\n## 🤝 Contributing\n\nContributions are welcome — bug reports, feature requests, and pull requests.\n\n1. **Bug reports** → open a GitHub Issue with your log output and config\n2. **Feature requests** → open a Discussion so we can talk through the approach first\n3. **Pull requests** → see [sublarr.de/docs/development/contributing](https://sublarr.de/docs/development/contributing/) for code style, testing requirements, and commit format\n\n## 💬 Community\n\n- **Discord** — [discord.gg/WjatsKzHXz](https://discord.gg/WjatsKzHXz) — live chat, install help, beta testing\n- **Reddit** — [r/Sublarr](https://www.reddit.com/r/Sublarr/) — announcements, showcases, discussions\n- **GitHub Issues** — [bug reports \u0026 feature requests](https://github.com/Abrechen2/sublarr/issues)\n\n---\n\n## 📄 License\n\nGPL-3.0 — see [LICENSE](LICENSE).\n\nSublarr is not affiliated with the *arr project or any subtitle provider.\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\nMade with ☕ for the self-hosting community\n\n\u003ca href=\"https://www.paypal.com/donate?hosted_button_id=GLXYTD3FV9Y78\"\u003e\n  \u003cimg src=\"https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif\" alt=\"Donate via PayPal\" /\u003e\n\u003c/a\u003e\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabrechen2%2Fsublarr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fabrechen2%2Fsublarr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabrechen2%2Fsublarr/lists"}