ARRFLIX — my own premium streaming service: AI-upscaled masters, best-quality everything, no compromise. https://arrflix.s8n.ru
Find a file
s8n 452ce68d7a isolate video player against opaque-bg regressions (recurring INC class)
Two-layer defense for the recurring "black screen during playback"
bug class (5+ occurrences in 24h per doc 26/28/30):

L1 (prevention): scope every black-bg rule with
:not(:has(.htmlVideoPlayer)):not(:has(#videoOsdPage)) so the rules
self-disable while a player is in the DOM. Covers body,
#reactRoot, .skinBody, .backgroundContainer, .mainAnimatedPage,
.mainAnimatedPages, .pageContainer.

L2 (override): when JS-toggled body.arrflix-video-active is set,
high-specificity (0,3,2 + tag) transparent rule wins against any
ancestor opaque-bg rule (including future regressions someone adds
without scoping). Covers all known wrappers, the
videoPlayerContainer + videoPlayerContainer-onTop, #videoOsdPage,
.libraryPage, .htmlVideoPlayer.

L3 (z-index lift): force .htmlVideoPlayer + child <video> to
z-index:9999 + isolation:isolate during playback so it floats above
any opaque ancestor that still leaks through.

Verified in playwright: with arrflix-video-active + .htmlVideoPlayer
mounted, all 7 ancestors return rgba(0,0,0,0). Without — all 7
return rgb(0,0,0). Self-disabling works.

Lesson reinforced (doc 30 roadmap open): add darkPct assertion to
bin/headless-test-v2.py + xmllint CI gate. Five recurrences without
those gates says we keep relearning this. TODO next.
2026-05-09 22:18:31 +01:00
assets readme: add 3 ARRFLIX screenshots (detail, playback, search) 2026-05-09 10:10:38 +01:00
bin isolate video player against opaque-bg regressions (recurring INC class) 2026-05-09 22:18:31 +01:00
compose-dev doc 14: theme audit + detail-page backdrop diagnosis (read-only) 2026-05-08 04:27:28 +01:00
docs doc 30 v6-stable success + snapshot save state 2026-05-09 12:52:44 +01:00
snapshots/2026-05-09-v6-stable isolate video player against opaque-bg regressions (recurring INC class) 2026-05-09 22:18:31 +01:00
web-overrides isolate video player against opaque-bg regressions (recurring INC class) 2026-05-09 22:18:31 +01:00
.gitignore doc 26 INC4: black band + 4K HDR slow transcode + v2 test + methodology audit 2026-05-09 01:46:47 +01:00
ADMIN-GUIDE.md Rename: nasflix → ARRFLIX + apply Cineplex theme 2026-05-08 02:57:34 +01:00
docker-compose.yml Branding fixes: triple-logo overlap + Quick Connect disable + index.html override 2026-05-08 03:09:25 +01:00
README.md readme: add 3 ARRFLIX screenshots (detail, playback, search) 2026-05-09 10:10:38 +01:00
ROADMAP.md ROADMAP: action owner = s8n 2026-05-08 17:25:56 +01:00

ARRFLIX

My own premium streaming service. No compromise.


ARRFLIX is my personal 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.

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.


ARRFLIX detail page — The Mandalorian
Detail page — full-bleed backdrop, ARRFLIX wordmark, Netflix-grade dark UI

ARRFLIX playback — Sassy the Sasquatch
Playback — Jellyfin chrome hidden, ARRFLIX-red scrubber + clean OSD

ARRFLIX search
Search — pinned suggestions, ARRFLIX-red accents, no filler


What you get

  • 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.

Live at

Endpoint is LAN / tailnet only. There is no public exposure — if you're not on the network, you're not getting in. By design.


How it works (technical)

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.

Operators / future-me, the technical reference is split across:

  • ADMIN-GUIDE.md — single-page day-to-day ops: adding users, importing media, fixing scrapes, theme breakage, emergency rollback.
  • ROADMAP.md — what's done, what's open, what's deferred.
  • docs/ — research-grade reference docs (artwork, metadata, subtitles, theming, file-structure rules, per-library themes, cleanup, filename normalization, force-English, branding leaks, splash, audits).

Repo lives at https://git.s8n.ru/s8n/ARRFLIX (mirror: https://flexhub.s8n.ru/s8n/ARRFLIX).


ARRFLIX — a one-person streaming service that punches above its weight.