ARRFLIX/README.md
s8n f7c872d687 Add operations playbooks: artwork, metadata, subtitles, theming/users
Four research-grade docs covering everything four parallel agents found while
fixing the live Futurama deploy:

- 01-artwork-and-images: root-cause of missing posters (EnableInternetProviders=false
  + wrong fetcher names 'The Movie Database' vs 'TheMovieDb' in 10.10.x). Fixed
  in-place. Doc covers image-type matrix, scraper-to-imagetype map, refresh API.
- 02-metadata-and-titles: Futurama series had empty ProviderIds; locked to
  TMDB 615 (1999 original, not 2023 reboot). All 44 eps now have proper titles +
  Polish overviews. Doc covers filename regex, Identify flow, language cascade.
- 03-subtitles: installed OpenSubtitles plugin v20.0.0.0 (v21+ needs JF 10.11
  ABI). User must add opensubtitles.com creds. Doc covers sidecar naming,
  embedded extraction, per-user prefs.
- 04-theming-and-users: applied ElegantFin v25.12.31 via Branding API. Doc covers
  theme rationale, multi-user policy template, SyncPlay, friend playbook.
2026-05-08 01:13:42 +01:00

77 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# jellyfin-stack
Self-hosted Jellyfin media server on nullstone, LAN-only.
## Endpoint
- `https://tv.s8n.ru` — accessible only from LAN (192.168.0.0/24) and Tailscale admin/infra tags via Traefik `no-guest@file` middleware.
- DNS resolved internally by Pi-hole (`/opt/docker/pihole/etc-pihole/custom.list`).
- TLS via Let's Encrypt DNS-01 (Gandi).
## Storage
| Path | Purpose |
|-----------------------------------|-------------------------------|
| `/home/docker/jellyfin/config/` | Jellyfin config + DB (writable, UID 1000) |
| `/home/docker/jellyfin/cache/` | Transcode + image cache |
| `/home/user/media/movies/` | Movies library (mounted RO) |
| `/home/user/media/tv/` | TV library (mounted RO) |
## Routing
Traefik docker-label provider does NOT pick up the labels on this container
(unknown reason — file-provider routing for the same backend works). The
deploy uses **file-provider** routing in
`/opt/docker/traefik/config/jellyfin-test.yml`. If you fix the docker-provider
issue later, flip routing back to labels and remove the file-provider snippet.
## Transcoding
GTX 1660 Ti is present on nullstone but `nvidia-smi` currently fails — driver
is broken or not loaded. Jellyfin runs CPU-only transcode for now. After
fixing the driver, add the standard NVIDIA hwaccel block in compose:
```yaml
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
```
…and enable NVENC in Jellyfin's Playback → Transcoding settings.
## First-run setup
1. Browse to `https://tv.s8n.ru` from the LAN.
2. Create the admin user (Jellyfin onboarding wizard).
3. Add libraries pointing at `/media/movies` and `/media/tv` inside the
container (these map to `/home/user/media/{movies,tv}`).
4. (Optional) Apply Netflix-style theme — see `docs/04-theming-and-users.md`.
## Operations docs
Detailed playbooks (research-grade, with API curls, failure modes, recovery):
| File | Topic |
|------|-------|
| [`docs/01-artwork-and-images.md`](docs/01-artwork-and-images.md) | Posters, backdrops, scrapers (TMDB/TVDB/Fanart), refresh API, language fallback |
| [`docs/02-metadata-and-titles.md`](docs/02-metadata-and-titles.md) | Filename parsing, Identify flow, locking the right show, language cascade, multi-episode files |
| [`docs/03-subtitles.md`](docs/03-subtitles.md) | OpenSubtitles plugin (.com), sidecar naming, ffmpeg/mkvextract extraction, per-user prefs |
| [`docs/04-theming-and-users.md`](docs/04-theming-and-users.md) | ElegantFin theme, branding API, multi-user policies, SyncPlay, friend account playbook |
## State as of 2026-05-08
- **Library**: Futurama 1999 series (TMDB 615), S01S03, 44 episodes, fully scraped (Polish metadata + posters + backdrops + episode stills)
- **Theme**: ElegantFin v25.12.31 applied via `/System/Configuration/branding`
- **Subtitles**: OpenSubtitles plugin v20 installed; user must add opensubtitles.com creds (free tier = 20 dl/day)
- **Users**: 1 admin (`s8n`); friend account creation playbook in doc 04
## Deploy
```bash
cd /opt/docker/jellyfin
docker compose up -d
```