readme: rebrand as ARRFLIX brand-facing landing
This commit is contained in:
parent
db101769fc
commit
ce949d99c5
1 changed files with 55 additions and 66 deletions
121
README.md
121
README.md
|
|
@ -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.
|
||||
- DNS resolved internally by Pi-hole (`/opt/docker/pihole/etc-pihole/custom.list`).
|
||||
- TLS via Let's Encrypt DNS-01 (Gandi).
|
||||
It's not a clone of a public streamer. It's the version I wished existed: the
|
||||
quality bar of a boutique release group, the polish of a flagship app, and a
|
||||
library I actually want to watch.
|
||||
|
||||
## Storage
|
||||
## What you get
|
||||
|
||||
| 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) |
|
||||
- **Best-quality everything.** 4K where the source supports it, AI-upscaled
|
||||
masters where it doesn't. No 480p filler, no junk encodes.
|
||||
- **Curated, not crawled.** Every title is hand-imported, hand-cleaned, and
|
||||
hand-checked before it goes live. Junk files, sample clips, and stray
|
||||
artwork never make it in.
|
||||
- **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
|
||||
(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.
|
||||
- <https://arrflix.s8n.ru>
|
||||
- <https://tv.s8n.ru>
|
||||
|
||||
## 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
|
||||
deploy:
|
||||
resources:
|
||||
reservations:
|
||||
devices:
|
||||
- driver: nvidia
|
||||
count: all
|
||||
capabilities: [gpu]
|
||||
```
|
||||
## How it works (technical)
|
||||
|
||||
…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.
|
||||
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`.
|
||||
- [`ADMIN-GUIDE.md`](ADMIN-GUIDE.md) — single-page day-to-day ops: adding users,
|
||||
importing media, fixing scrapes, theme breakage, emergency rollback.
|
||||
- [`ROADMAP.md`](ROADMAP.md) — what's done, what's open, what's deferred.
|
||||
- [`docs/`](docs/) — research-grade reference docs (artwork, metadata,
|
||||
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 |
|
||||
|------|-------|
|
||||
| [`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), S01–S03, 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
|
||||
```
|
||||
<p align="center"><sub>ARRFLIX — a one-person streaming service that punches above its weight.</sub></p>
|
||||
|
|
|
|||
Loading…
Reference in a new issue