ARRFLIX/ADMIN-GUIDE.md
s8n 1f5ba31483 Rename: nasflix → ARRFLIX + apply Cineplex theme
Domain + repo rename: nasflix.s8n.ru → arrflix.s8n.ru, NASFLIX → ARRFLIX
(Forgejo repo, Pi-hole DNS, Traefik file+label routes, compose env+labels,
onyx /etc/hosts, branding LoginDisclaimer, all repo refs, logo asset).

Theme: ElegantFin → Cineplex v1.0.6 (MRunkehl, pinned). Picked by research
agent over JellyFlix (halted), DarkFlix (10.8.x only), Theme Park (no
Netflix preset). Real #E50914 + Netflix Sans webfont + transform:scale
hover + gradient login backdrop. Doc 04 updated with full candidate
matrix, theme-history subsection, rollback-to-ElegantFin snippet.

Logo asset saved at assets/logo.png (235x85 RGBA).

Live: https://arrflix.s8n.ru → 302. tv.s8n.ru + nasflix.s8n.ru retired (404).
2026-05-08 02:57:34 +01:00

5.9 KiB
Raw Permalink Blame History

Admin Guide — arrflix.s8n.ru

The single page that tells you what to do and where to read more. Anything not on this page lives in docs/ — links inline.

What's next on this deploy → ROADMAP.md.


Where things live

Thing Where
Compose file docker-compose.yml (this repo) → deployed at nullstone:/opt/docker/jellyfin/
Config + cache nullstone:/home/docker/jellyfin/{config,cache}/
Media root nullstone:/home/user/media/{movies,tv}/
Traefik route /opt/docker/traefik/config/jellyfin-test.yml (file-provider — see docs/04 § routing-quirk)
Pi-hole DNS pin /opt/docker/pihole/etc-pihole/custom.list192.168.0.100 arrflix.s8n.ru
User wrapper bin/add-jellyfin-user.sh (always use this)

Daily ops

Add a new user

Always use the wrapper. UI signup skips the canonical home layout + subtitle/audio prefs.

JELLYFIN_TOKEN=<admin-token> ./bin/add-jellyfin-user.sh <username> <password>

What it does → docs/04 § friend playbook. Why it exists (Jellyfin has no native global default) → see same doc.

Add new media

  1. Drop source into /home/admin/Downloads/<show or movie>/ on onyx.
  2. Run cleanup: strip junk per docs/07. Use bin/cleanup-import.sh once written; for now follow the rules in that doc by hand.
  3. Normalize filenames per docs/08. Use bin/normalize.py once written.
  4. Stage to /home/admin/staging-jelly-<title>/<canonical-name>/.
  5. scp -r to nullstone:/home/user/media/<lib>/.
  6. Trigger refresh: curl -X POST -H "Authorization: MediaBrowser Token=$TOKEN" https://arrflix.s8n.ru/Library/Refresh.
  7. Verify: hit the URL, check artwork + titles + episode counts.
  8. Only after confirmed working: delete the source download + the staging dir.

Naming + folder rules: docs/05.

Library not scraping right

Symptoms → fix:

Symptom Cause Fix doc
No posters / backdrops EnableInternetProviders=false or wrong fetcher name docs/01
Episode titles blank or filenames Series has empty ProviderIds (never matched) docs/02 § Identify flow
Wrong show matched Auto-match picked sequel/reboot docs/02 § locking the right show
Polish/wrong language Library PreferredMetadataLanguage mismatch docs/02 § language cascade

Subtitles not auto-downloading

docs/03 § OpenSubtitles plugin setup. Owner needs an opensubtitles.com account (NOT .org). Free tier = 20/day.

Theme broke after Jellyfin upgrade

ElegantFin imports from cdn.jsdelivr.net/gh/lscambo13/ElegantFin@main/... — auto-fixes itself most of the time. If the upstream theme breaks on a JF version bump, pin to a known-good tag. Procedure: docs/04 § maintenance.


Operational rules (these are non-negotiable)

  1. Wrapper-only user creation. Don't create users in the Dashboard UI. Always run bin/add-jellyfin-user.sh so the layout + prefs are consistent. Doc 04.
  2. Stage before import. Never drop raw downloads into /home/user/media/. Always clean + normalize first. Docs 05/07/08.
  3. Verify before delete. Don't delete source downloads or old library entries until the new content is confirmed playing in the Jellyfin UI.
  4. No bind-mount drift. If you change docker-compose.yml, commit + push to git.s8n.ru/s8n/ARRFLIX in the same step. The repo is the source of truth for the deploy. Doc memory: feedback_always_commit_to_my_git.md.
  5. No public DNS. arrflix.s8n.ru resolves only via Pi-hole locally. Do NOT add a Gandi A record. LAN-only is the threat model.

Reference docs (read on demand)

Doc When to read
01-artwork-and-images Artwork missing or wrong; want to install Fanart.tv
02-metadata-and-titles Wrong show matched; bad titles; multi-episode files
03-subtitles OpenSubtitles config; sidecar .srt naming; ffmpeg extraction
04-theming-and-users Theme tweaks; multi-user policies; SyncPlay
05-file-structure-rules What folder/filename to use for any new media
06-per-library-themes Want Movies-as-Netflix vs Anime-as-Crunchyroll skins
07-pre-import-cleanup What to strip from a download before import
08-filename-normalization How to rename files into canonical form

Emergency rollback

Operation Rollback
Bad CustomCss change curl -X POST .../System/Configuration/branding with prior backup
Compose change broke startup git checkout HEAD~ docker-compose.yml && docker compose up -d
Library scan loop stuck Settings → Dashboard → Scheduled Tasks → cancel "Scan Media Library"
New media import wrong Don't panic. The source download is still in /home/admin/Downloads/. Delete the bad import dir on nullstone, redo cleanup/normalize step

Current state (snapshot)

  • Library: TV Shows → Futurama (1999), S01S04, 72 episodes + 9 featurettes, English audio, 1080p HEVC, locked to TMDB 615 / TVDB 73871 / IMDb tt0149460. Polish set deleted 2026-05-08.
  • Disk: nullstone /home 109G free
  • Theme: ElegantFin v25.12.31
  • Plugins: OpenSubtitles v20 (creds pending — see docs/03)
  • Users: s8n (admin), guest (non-admin, password 123, change recommended)
  • Home layout (per-user, applied to both): resume / resumeaudio / nextup / latestmedia (My Media tile row dropped)

Last verified: 2026-05-08