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).
5.9 KiB
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.list → 192.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
- Drop source into
/home/admin/Downloads/<show or movie>/on onyx. - Run cleanup: strip junk per docs/07. Use
bin/cleanup-import.shonce written; for now follow the rules in that doc by hand. - Normalize filenames per docs/08. Use
bin/normalize.pyonce written. - Stage to
/home/admin/staging-jelly-<title>/<canonical-name>/. scp -rtonullstone:/home/user/media/<lib>/.- Trigger refresh:
curl -X POST -H "Authorization: MediaBrowser Token=$TOKEN" https://arrflix.s8n.ru/Library/Refresh. - Verify: hit the URL, check artwork + titles + episode counts.
- 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)
- Wrapper-only user creation. Don't create users in the Dashboard UI. Always run
bin/add-jellyfin-user.shso the layout + prefs are consistent. Doc 04. - Stage before import. Never drop raw downloads into
/home/user/media/. Always clean + normalize first. Docs 05/07/08. - Verify before delete. Don't delete source downloads or old library entries until the new content is confirmed playing in the Jellyfin UI.
- No bind-mount drift. If you change
docker-compose.yml, commit + push togit.s8n.ru/s8n/ARRFLIXin the same step. The repo is the source of truth for the deploy. Doc memory:feedback_always_commit_to_my_git.md. - No public DNS.
arrflix.s8n.ruresolves 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), S01–S04, 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, password123, change recommended) - Home layout (per-user, applied to both): resume / resumeaudio / nextup / latestmedia (My Media tile row dropped)
Last verified: 2026-05-08