readme: rebrand as ARRFLIX brand-facing landing

This commit is contained in:
s8n 2026-05-08 16:36:43 +01:00
parent db101769fc
commit ce949d99c5

121
README.md
View file

@ -1,83 +1,72 @@
# ARRFLIX <p align="center">
<img src="assets/logo.png" alt="ARRFLIX" width="420">
</p>
Self-hosted Jellyfin media server on nullstone, LAN-only. <h3 align="center">Premium home streaming, my way.</h3>
> **Start here** → [`ADMIN-GUIDE.md`](ADMIN-GUIDE.md) — the single page that ---
> tells you what to do day-to-day. Everything else is a reference doc you only
> read when the admin guide tells you to.
## Endpoint ARRFLIX is my personal premium streaming service. One library, hand-curated, no
filler — every show and film is the best version I could put together. Where
the source allows, masters are 4K. Where it doesn't, they're AI-upscaled until
they look better than the disc ever did. The reference example: my **Rick and
Morty Season 1** is a 4K HDR upscale that beats the original broadcast. That's
the standard for everything that lands here.
- `https://arrflix.s8n.ru` — accessible only from LAN (192.168.0.0/24) and Tailscale admin/infra tags via Traefik `no-guest@file` middleware. It's not a clone of a public streamer. It's the version I wished existed: the
- DNS resolved internally by Pi-hole (`/opt/docker/pihole/etc-pihole/custom.list`). quality bar of a boutique release group, the polish of a flagship app, and a
- TLS via Let's Encrypt DNS-01 (Gandi). library I actually want to watch.
## Storage ## What you get
| Path | Purpose | - **Best-quality everything.** 4K where the source supports it, AI-upscaled
|-----------------------------------|-------------------------------| masters where it doesn't. No 480p filler, no junk encodes.
| `/home/docker/jellyfin/config/` | Jellyfin config + DB (writable, UID 1000) | - **Curated, not crawled.** Every title is hand-imported, hand-cleaned, and
| `/home/docker/jellyfin/cache/` | Transcode + image cache | hand-checked before it goes live. Junk files, sample clips, and stray
| `/home/user/media/movies/` | Movies library (mounted RO) | artwork never make it in.
| `/home/user/media/tv/` | TV library (mounted RO) | - **Polished metadata.** Posters, backdrops, episode stills, cast, and
descriptions are all locked to the canonical source — no wrong-show
matches, no broken artwork, no foreign-language drift.
- **English-first UI, every account.** No surprise German Play buttons, no
browser-locale roulette. Every user is pinned to a consistent experience.
- **Custom theming.** ARRFLIX wordmark, ARRFLIX-red accent (`#E50914`),
loading splash, and a Netflix-grade dark UI. Jellyfin's stock chrome is
hidden — the brand is the surface.
- **Per-user home layouts.** Resume, Next Up, and Latest Media tuned the way
I actually use the app. No "My Media" tile clutter.
- **Subtitles done right.** Sidecar files named to spec, OpenSubtitles
integration, ffmpeg-extracted tracks where embedded.
## Routing ## Live at
Traefik docker-label provider does NOT pick up the labels on this container - <https://arrflix.s8n.ru>
(unknown reason — file-provider routing for the same backend works). The - <https://tv.s8n.ru>
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 Both endpoints are **LAN / tailnet only**. There is no public exposure — if
you're not on the network, you're not getting in. By design.
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 ## How it works (technical)
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
```
…and enable NVENC in Jellyfin's Playback → Transcoding settings. ARRFLIX runs on self-hosted infrastructure on **nullstone**. The repo you're
looking at is also the deploy source-of-truth: the compose file, library
structure, theming overrides, and operational playbooks all live here. The
streaming engine itself is unbranded plumbing — invisible behind the
ARRFLIX surface.
## First-run setup Operators / future-me, the technical reference is split across:
1. Browse to `https://arrflix.s8n.ru` from the LAN. - [`ADMIN-GUIDE.md`](ADMIN-GUIDE.md) — single-page day-to-day ops: adding users,
2. Create the admin user (Jellyfin onboarding wizard). importing media, fixing scrapes, theme breakage, emergency rollback.
3. Add libraries pointing at `/media/movies` and `/media/tv` inside the - [`ROADMAP.md`](ROADMAP.md) — what's done, what's open, what's deferred.
container (these map to `/home/user/media/{movies,tv}`). - [`docs/`](docs/) — research-grade reference docs (artwork, metadata,
4. (Optional) Apply Netflix-style theme — see `docs/04-theming-and-users.md`. subtitles, theming, file-structure rules, per-library themes, cleanup,
filename normalization, force-English, branding leaks, splash, audits).
## Operations docs Repo lives at <https://git.s8n.ru/s8n/ARRFLIX> (mirror:
<https://flexhub.s8n.ru/s8n/ARRFLIX>).
Detailed playbooks (research-grade, with API curls, failure modes, recovery): ---
| File | Topic | <p align="center"><sub>ARRFLIX — a one-person streaming service that punches above its weight.</sub></p>
|------|-------|
| [`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 |
| [`docs/05-file-structure-rules.md`](docs/05-file-structure-rules.md) | Authoritative folder/filename rules for movies, TV, anime, stand-up, concerts, docs, extras, NFO, artwork overrides |
| [`docs/06-per-library-themes.md`](docs/06-per-library-themes.md) | Per-library theming research: JS-injector plugin shim + scoped CSS for Movies/Anime/Music looks |
## 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
```