doc 30 v6-stable success + snapshot save state
Owner pronounced "near perfect". Save current state as the rollback target. Replace older 2026-05-08-pre-elegantfin snapshot. Snapshot md5 364cc890c58f02d07cf50b43b31a48f0 — matches both prod and dev deployed overlay. Doc 30 lists every file/path-of-record + rollback procedure + remaining roadmap items. Tag this commit v6-stable-2026-05-09 after push.
This commit is contained in:
parent
1168ba6479
commit
148b004026
13 changed files with 429 additions and 263 deletions
107
docs/30-v6-stable-success-2026-05-09.md
Normal file
107
docs/30-v6-stable-success-2026-05-09.md
Normal file
|
|
@ -0,0 +1,107 @@
|
|||
# 30 — v6-stable success — 2026-05-09
|
||||
|
||||
> Save state. Owner pronounced "near perfect". Both servers (prod + dev) byte-identical overlay (`md5 364cc890c58f02d07cf50b43b31a48f0`), both branding.xml parses cleanly, both `EnableTonemapping=true`, both serve `/Branding/Css.css` 36 256 B (Cineplex theme delivered to browser), playback verified visually green on dev and prod.
|
||||
|
||||
Tag: `v6-stable-2026-05-09`. Snapshot at `snapshots/2026-05-09-v6-stable/index.html` (md5 matches deployed overlay). Older snapshot `snapshots/2026-05-08-pre-elegantfin/` removed — replaced by this one.
|
||||
|
||||
---
|
||||
|
||||
## What works
|
||||
|
||||
| Surface | State |
|
||||
|---|---|
|
||||
| Logo center | ARRFLIX wordmark dead-center in header (235x85 PNG inlined as data-URL from branding.xml). |
|
||||
| Nav left | `MOVIES` + `SERIES` uppercase links inside `.headerLeft`. Bare `#/movies.html` and `#/tv.html` hrefs (no `topParentId` query). |
|
||||
| Search right | Stock `.headerSearchButton` pushed to flex-end via `.headerRight{justify-content:flex-end}`. |
|
||||
| Login page | Stock-with-Cineplex (auth-gated `body.arrflix-themed`). ARRFLIX top-left red, Manual Login form, Welcome footer. No user picker, no Quick Connect. |
|
||||
| Video player | `.skinHeader` hidden via `body.arrflix-video-active` — no theme bar leaking on top of `<video>`. Specificity (0,4,2) beats Cineplex's `display:flex !important` rule (0,3,2). |
|
||||
| Favicon | A-mark (red Netflix-style "A") in browser tab. Hijack JS removes stock wordmark icon links + pins `data-arrflix-icon="A"` href against the older `lockFavicon()` shim's `setInterval` clobber. |
|
||||
| Streaming | HDR10 sources tonemap correctly (`EnableTonemapping=true` flipped — see doc 21). Doc-28 INC7 transparent-`<video>` rule reaches browsers because branding.xml `<video>` literal is escaped to `<video>` so XML parser stops choking on the CustomCss block. |
|
||||
|
||||
## Files of record
|
||||
|
||||
| File | md5 | Purpose |
|
||||
|------|-----|---------|
|
||||
| `web-overrides/index.html` | `364cc890c58f02d07cf50b43b31a48f0` | The compiled overlay. Deployed to both prod and dev (under different host filenames). |
|
||||
| `snapshots/2026-05-09-v6-stable/index.html` | same as above | Frozen save state for rollback. |
|
||||
| `bin/inject-middle-theme.py` | (current) | Builder. Idempotent. Reads `web-overrides/assets/{arrflix-A.b64,arrflix-wordmark.b64-url}`. Writes a backup `*.bak.pre-middle-v6.<unix-ts>` before overwriting. |
|
||||
| `web-overrides/assets/arrflix-A.png` | (138x180 trimmed, transparent bg) | Source asset — favicon "A" mark. |
|
||||
| `web-overrides/assets/arrflix-A.b64` | 29 192 chars | Inline-ready base64 of the A mark. |
|
||||
| `web-overrides/assets/arrflix-wordmark.b64-url` | 11 350 chars | Inline-ready data-URL of the ARRFLIX wordmark (235x85). Extracted from branding.xml. |
|
||||
|
||||
## Server-side state (not in repo, document for rollback)
|
||||
|
||||
| Path | State |
|
||||
|------|-------|
|
||||
| `/opt/docker/jellyfin/web-overrides/index.html` (prod) | md5 `364cc890`. owned `root:root`. Bind-mounted `/jellyfin/jellyfin-web/index.html:ro`. |
|
||||
| `/opt/docker/jellyfin/web-overrides/index.html.bak.pre-favfix.1778318089` | rollback target — pre-v6+favfix prod overlay. |
|
||||
| `/opt/docker/jellyfin-dev/web-overrides/index-dev.html` (dev) | md5 `364cc890`. owned `user:user`. Same content as prod. |
|
||||
| `/opt/docker/jellyfin-dev/web-overrides/index-dev.html.bak.pre-middle-v6` | rollback target — pre-v6 dev overlay. |
|
||||
| `/home/docker/jellyfin/config/config/branding.xml` | XML-valid (`<video>` escaped). 36 607 B. CustomCss reaches browsers via `/Branding/Css.css`. |
|
||||
| `/home/docker/jellyfin/config/config/branding.xml.bak.pre-middle-v6.1778295444` | rollback target — pre-escape. |
|
||||
| `/home/docker/jellyfin/config/config/encoding.xml` | `EnableTonemapping=true`, `TonemappingAlgorithm=bt2390`, `HardwareAccelerationType=none`. |
|
||||
| `/home/docker/jellyfin/config/config/encoding.xml.bak.pre-tonemap.1778318089` | rollback target — pre-flip. |
|
||||
| `/home/docker/jellyfin-dev/config/config/branding.xml` | Same content as prod. |
|
||||
| `/home/docker/jellyfin-dev/config/config/branding.xml.bak.dev-pre-resync` | rollback target — pre-resync (dev's older minimal branding). |
|
||||
| `/home/docker/jellyfin-dev/config/config/encoding.xml` | `EnableTonemapping=true`. |
|
||||
| Container: `jellyfin` | `jellyfin/jellyfin:10.10.3`, healthy, restart unless-stopped. |
|
||||
| Container: `jellyfin-dev` | same image. |
|
||||
|
||||
## Accounts
|
||||
|
||||
### Prod
|
||||
- `s8n` — admin. Hidden. Password is private.
|
||||
- `marco`, `house`, `guest`, `aloy`, `pet`, `5`, `64bitpotato`, `yummyhunny`, `Jayden`, `IX`, `ferghal` — non-admin, hidden.
|
||||
- `Loseious` — non-admin, hidden, `EnablePlaybackRemuxing=true`. Created 2026-05-09. Password is private.
|
||||
|
||||
### Dev
|
||||
- `test` / `123` — admin, hidden. Single-account theme test sandbox.
|
||||
|
||||
## Roadmap closed in this iteration
|
||||
|
||||
| Item | Status |
|
||||
|------|--------|
|
||||
| Streaming on prod (doc 28) | ✅ closed — branding.xml XML escape was the missing delivery layer. INC7 transparent-`<video>` rule now reaches browsers. |
|
||||
| Theme parity dev↔prod | ✅ overlay md5 identical. |
|
||||
| Favicon = A-mark | ✅ hijack JS pins our `data-arrflix-icon="A"` links against `lockFavicon` clobber. |
|
||||
| Tonemap HDR10 (doc 21) | ✅ `EnableTonemapping=false → true` on both servers. ffmpeg gains `zscale → tonemap → format` stage on next transcode of HDR10 source. |
|
||||
| Quick Connect off + manual login | ✅ both prod and dev (`QuickConnectAvailable=false` in system.xml). All non-admin users `IsHidden=true` so no picker. |
|
||||
| Video page header leak | ✅ `body.arrflix-video-active` toggle hides `.skinHeader` during playback; specificity (0,4,2) beats Cineplex (0,3,2). |
|
||||
| Duplicate "Movies" h3 on library pages | ✅ `body.arrflix-themed .skinHeader .headerLeft > h3.pageTitle:not(.pageTitleWithLogo){display:none!important}`. |
|
||||
|
||||
## Roadmap open (deferred — non-blocking)
|
||||
|
||||
| Item | Note |
|
||||
|------|------|
|
||||
| `compose-dev/docker-compose.yml` in repo lacks the overlay bind-mount | The host has it; repo is drift. |
|
||||
| Locale-en-only chunk JS files (94 of them) bind-mounted on prod, absent on dev | Dev users get stock locale strings. Cosmetic only. |
|
||||
| `xmllint --noout branding.xml` in CI | Silent XML parse failure cost a multi-hour debug cycle. |
|
||||
| `bin/headless-test-v2.py` darkPct assertion | INC7 lesson — element state alone (currentTime, readyState) doesn't catch CSS-overlay-over-video. |
|
||||
| Movies/TV stuck-spinner from cached `?topParentId=movies` URL | Stock Jellyfin `viewContainer.tryRestoreView` quirk. Not a v6 regression. |
|
||||
| Splashscreen blurred-poster login bg | Owner reference image #2 had it. Currently neither prod nor dev renders it. |
|
||||
|
||||
## Lesson
|
||||
|
||||
The whole BLACK-PASS / INC7 / Traefik-SW chain in doc 26 + 28 was correctly diagnosed but the **delivery** layer was broken since 2026-05-08 by a single unescaped `<video>` literal in a CSS comment. `xmllint --noout` would have caught it instantly. **Add it to CI.** Silent XML parse failures with zero UI feedback are the worst class of bug — Jellyfin returned HTTP 200 with empty body for `/Branding/Css.css`, no banner, no admin alert.
|
||||
|
||||
## Rollback
|
||||
|
||||
If anything regresses, restore in this order:
|
||||
|
||||
```bash
|
||||
# Overlay rollback (prod)
|
||||
docker run --rm --userns=host -v /opt/docker/jellyfin/web-overrides:/d:rw alpine \
|
||||
sh -c 'cp /d/index.html.bak.pre-favfix.1778318089 /d/index.html && chown root:root /d/index.html'
|
||||
|
||||
# Branding rollback (prod) — only if XML escape causes new issues
|
||||
docker run --rm --userns=host -v /home/docker/jellyfin/config/config:/d:rw alpine \
|
||||
cp /d/branding.xml.bak.pre-middle-v6.1778295444 /d/branding.xml
|
||||
|
||||
# Tonemap rollback (prod)
|
||||
docker run --rm --userns=host -v /home/docker/jellyfin/config/config:/d:rw alpine \
|
||||
cp /d/encoding.xml.bak.pre-tonemap.1778318089 /d/encoding.xml
|
||||
|
||||
docker restart jellyfin
|
||||
```
|
||||
|
||||
Or git-side rollback to the previous commit `52a7df6` (pre-favfix v6) and re-deploy.
|
||||
|
|
@ -1,119 +0,0 @@
|
|||
# Rollback — 2026-05-08 pre-ElegantFin
|
||||
|
||||
Snapshot captured immediately before the Cineplex → ElegantFin theme migration.
|
||||
Restore one or all of the artefacts below to revert to the Cineplex-themed
|
||||
ARRFLIX deploy as of 2026-05-08 03:58 UTC.
|
||||
|
||||
Tag: `snapshot-2026-05-08-pre-elegantfin`
|
||||
Remote: `git.s8n.ru/s8n/ARRFLIX`
|
||||
|
||||
---
|
||||
|
||||
## Files in this snapshot
|
||||
|
||||
| File | Source | Purpose |
|
||||
|------|--------|---------|
|
||||
| `branding.json` | `GET /System/Configuration/branding` | CustomCss + LoginDisclaimer + SplashscreenEnabled |
|
||||
| `index.html` | `nullstone:/opt/docker/jellyfin/web-overrides/index.html` | Bind-mounted Jellyfin web shim (critical-path CSS, branding, runtime shim include) |
|
||||
| `docker-compose.yml` | `nullstone:/opt/docker/jellyfin/docker-compose.yml` | Compose file driving the jellyfin container |
|
||||
| `users.json` | `GET /Users` | Full user list with policies + configurations |
|
||||
| `libraries.json` | `GET /Library/VirtualFolders` | Library definitions (paths, types, options) |
|
||||
| `displayprefs-<userid>.json` × 5 | `GET /DisplayPreferences/usersettings?userId=<id>&client=emby` | Per-user UI preferences (home sections, theme, etc.) |
|
||||
|
||||
User IDs captured:
|
||||
- `571decc67cdc4ea683b4c936b0a31ff8` — 5
|
||||
- `82dd8542915740c8ae799b6723542c63` — guest
|
||||
- `a4cbcdf95bb34888885af6fbf5c340d1` — house
|
||||
- `d787fbfc373a44119a247e7406b2721e` — marco
|
||||
- `2be0f0d3fe3a45dc9298138a15a01925` — s8n
|
||||
|
||||
---
|
||||
|
||||
## Rollback — three concrete commands
|
||||
|
||||
```bash
|
||||
SNAP=/tmp/ARRFLIX/snapshots/2026-05-08-pre-elegantfin
|
||||
TOKEN="<JELLYFIN_API_TOKEN>"
|
||||
BASE="https://arrflix.s8n.ru"
|
||||
```
|
||||
|
||||
### 1. Restore CustomCss + LoginDisclaimer (branding)
|
||||
|
||||
```bash
|
||||
curl -ksX POST "$BASE/System/Configuration/branding" \
|
||||
-H "Authorization: MediaBrowser Token=$TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
--data-binary @$SNAP/branding.json
|
||||
# Expected: HTTP 204
|
||||
```
|
||||
|
||||
### 2. Restore the bind-mounted index.html on nullstone
|
||||
|
||||
```bash
|
||||
scp $SNAP/index.html user@nullstone:/opt/docker/jellyfin/web-overrides/index.html
|
||||
# No restart needed — Traefik serves the file directly via the bind-mount.
|
||||
```
|
||||
|
||||
### 3. Restore per-user DisplayPreferences
|
||||
|
||||
```bash
|
||||
for uid in 571decc67cdc4ea683b4c936b0a31ff8 \
|
||||
82dd8542915740c8ae799b6723542c63 \
|
||||
a4cbcdf95bb34888885af6fbf5c340d1 \
|
||||
d787fbfc373a44119a247e7406b2721e \
|
||||
2be0f0d3fe3a45dc9298138a15a01925; do
|
||||
curl -ksX POST "$BASE/DisplayPreferences/usersettings?userId=$uid&client=emby" \
|
||||
-H "Authorization: MediaBrowser Token=$TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
--data-binary @$SNAP/displayprefs-$uid.json
|
||||
done
|
||||
# Expected: HTTP 204 each
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## One-shot rollback (all three at once)
|
||||
|
||||
```bash
|
||||
SNAP=/tmp/ARRFLIX/snapshots/2026-05-08-pre-elegantfin
|
||||
TOKEN="<JELLYFIN_API_TOKEN>"
|
||||
BASE="https://arrflix.s8n.ru"
|
||||
|
||||
# 1. branding
|
||||
curl -ksX POST "$BASE/System/Configuration/branding" \
|
||||
-H "Authorization: MediaBrowser Token=$TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
--data-binary @$SNAP/branding.json
|
||||
|
||||
# 2. index.html
|
||||
scp $SNAP/index.html user@nullstone:/opt/docker/jellyfin/web-overrides/index.html
|
||||
|
||||
# 3. per-user displayprefs
|
||||
for uid in 571decc67cdc4ea683b4c936b0a31ff8 82dd8542915740c8ae799b6723542c63 \
|
||||
a4cbcdf95bb34888885af6fbf5c340d1 d787fbfc373a44119a247e7406b2721e \
|
||||
2be0f0d3fe3a45dc9298138a15a01925; do
|
||||
curl -ksX POST "$BASE/DisplayPreferences/usersettings?userId=$uid&client=emby" \
|
||||
-H "Authorization: MediaBrowser Token=$TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
--data-binary @$SNAP/displayprefs-$uid.json
|
||||
done
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Reference (read-only — for diffing, not posting back)
|
||||
|
||||
- `users.json` — sanity-check that policies/permissions match before/after a future user-mgmt change. The User API uses `/Users/{id}/Policy` and `/Users/{id}/Configuration` endpoints, NOT a bulk POST.
|
||||
- `libraries.json` — sanity-check that VirtualFolders are still intact. Library mutations go through `/Library/VirtualFolders` add/remove endpoints, not a single POST.
|
||||
- `docker-compose.yml` — reference only. If the compose file changes, restore by hand and `docker compose up -d` on nullstone.
|
||||
|
||||
---
|
||||
|
||||
## What this snapshot does NOT cover
|
||||
|
||||
- Jellyfin SQLite databases (`library.db`, `users.db`, etc.) — full data is preserved by Restic backups, not this snapshot.
|
||||
- Plugins / plugin config — not part of the CSS/branding migration scope.
|
||||
- Media files on disk — never touched by theme work.
|
||||
|
||||
If a recovery requires DB-level restore, fall back to the Restic snapshot job
|
||||
documented in `SYSTEM.md` rather than this CSS-scoped rollback.
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -1 +0,0 @@
|
|||
{"Id":"3ce5b65d-e116-d731-65d1-efc4a30ec35c","SortBy":"SortName","RememberIndexing":false,"PrimaryImageHeight":250,"PrimaryImageWidth":250,"CustomPrefs":{"homesection0":"resume","homesection1":"resumeaudio","homesection2":"nextup","homesection3":"latestmedia","homesection4":"none","homesection5":"none","homesection6":"none","homesection7":"none","homesection8":"none","homesection9":"none","chromecastVersion":"stable","skipForwardLength":"30000","skipBackLength":"10000","enableNextVideoInfoOverlay":"False","tvhome":null,"dashboardTheme":null,"767bffe4f11c93ef34b805451a696a4e-series":"{\u0022SortBy\u0022:\u0022SortName\u0022,\u0022SortOrder\u0022:\u0022Ascending\u0022}"},"ScrollDirection":"Horizontal","ShowBackdrop":true,"RememberSorting":false,"SortOrder":"Ascending","ShowSidebar":false,"Client":"emby"}
|
||||
|
|
@ -1 +0,0 @@
|
|||
{"Id":"3ce5b65d-e116-d731-65d1-efc4a30ec35c","SortBy":"SortName","RememberIndexing":false,"PrimaryImageHeight":250,"PrimaryImageWidth":250,"CustomPrefs":{"homesection0":"resume","homesection1":"resumeaudio","homesection2":"nextup","homesection3":"latestmedia","homesection4":"none","homesection5":"none","homesection6":"none","homesection7":"none","homesection8":"none","homesection9":"none","chromecastVersion":"stable","skipForwardLength":"30000","skipBackLength":"10000","enableNextVideoInfoOverlay":"False","tvhome":null,"dashboardTheme":null},"ScrollDirection":"Horizontal","ShowBackdrop":true,"RememberSorting":false,"SortOrder":"Ascending","ShowSidebar":false,"Client":"emby"}
|
||||
|
|
@ -1 +0,0 @@
|
|||
{"Id":"3ce5b65d-e116-d731-65d1-efc4a30ec35c","SortBy":"SortName","RememberIndexing":false,"PrimaryImageHeight":250,"PrimaryImageWidth":250,"CustomPrefs":{"homesection0":"resume","homesection1":"resumeaudio","homesection2":"nextup","homesection3":"latestmedia","homesection4":"none","homesection5":"none","homesection6":"none","homesection7":"none","homesection8":"none","homesection9":"none","chromecastVersion":"stable","skipForwardLength":"30000","skipBackLength":"10000","enableNextVideoInfoOverlay":"False","tvhome":null,"dashboardTheme":null,"767bffe4f11c93ef34b805451a696a4e-series":"{\u0022SortBy\u0022:\u0022SortName\u0022,\u0022SortOrder\u0022:\u0022Ascending\u0022}","f137a2dd21bbc1b99aa5c0f6bf02a805-moviecollections":"{\u0022SortBy\u0022:\u0022SortName\u0022,\u0022SortOrder\u0022:\u0022Ascending\u0022}","f137a2dd21bbc1b99aa5c0f6bf02a805-moviegenres":"{\u0022SortBy\u0022:\u0022SortName\u0022,\u0022SortOrder\u0022:\u0022Ascending\u0022}"},"ScrollDirection":"Horizontal","ShowBackdrop":true,"RememberSorting":false,"SortOrder":"Ascending","ShowSidebar":false,"Client":"emby"}
|
||||
|
|
@ -1 +0,0 @@
|
|||
{"Id":"3ce5b65d-e116-d731-65d1-efc4a30ec35c","SortBy":"SortName","RememberIndexing":false,"PrimaryImageHeight":250,"PrimaryImageWidth":250,"CustomPrefs":{"homesection0":"resume","homesection1":"resumeaudio","homesection2":"nextup","homesection3":"latestmedia","homesection4":"none","homesection5":"none","homesection6":"none","homesection7":"none","homesection8":"none","homesection9":"none","chromecastVersion":"stable","skipForwardLength":"30000","skipBackLength":"10000","enableNextVideoInfoOverlay":"False","tvhome":null,"dashboardTheme":null},"ScrollDirection":"Horizontal","ShowBackdrop":true,"RememberSorting":false,"SortOrder":"Ascending","ShowSidebar":false,"Client":"emby"}
|
||||
|
|
@ -1 +0,0 @@
|
|||
{"Id":"3ce5b65d-e116-d731-65d1-efc4a30ec35c","SortBy":"SortName","RememberIndexing":false,"PrimaryImageHeight":250,"PrimaryImageWidth":250,"CustomPrefs":{"homesection0":"resume","homesection1":"resumeaudio","homesection2":"nextup","homesection3":"latestmedia","homesection4":"none","homesection5":"none","homesection6":"none","homesection7":"none","homesection8":"none","homesection9":"none","chromecastVersion":"stable","skipForwardLength":"30000","skipBackLength":"10000","enableNextVideoInfoOverlay":"False","tvhome":null,"dashboardTheme":null},"ScrollDirection":"Horizontal","ShowBackdrop":true,"RememberSorting":false,"SortOrder":"Ascending","ShowSidebar":false,"Client":"emby"}
|
||||
|
|
@ -1,42 +0,0 @@
|
|||
# Jellyfin — self-hosted media server (LAN-only)
|
||||
# Deploy path on nullstone: /opt/docker/jellyfin/
|
||||
# Domain: arrflix.s8n.ru (LAN-only via Pi-hole local DNS + no-guest middleware)
|
||||
#
|
||||
# Notes:
|
||||
# - GTX 1660 Ti present but nvidia-smi failing on host. CPU transcode only
|
||||
# until driver is fixed; revisit hwaccel after fix.
|
||||
# - Media mounted read-only into container; write only to /config + /cache.
|
||||
# - userns: host matches nullstone Docker convention (host UID 1000 owns volumes).
|
||||
# - Cert via existing letsencrypt resolver (Gandi DNS-01) — works without
|
||||
# public A record.
|
||||
|
||||
services:
|
||||
jellyfin:
|
||||
image: jellyfin/jellyfin:10.10.3
|
||||
container_name: jellyfin
|
||||
restart: unless-stopped
|
||||
user: "1000:1000"
|
||||
userns_mode: "host"
|
||||
environment:
|
||||
- TZ=Europe/London
|
||||
- JELLYFIN_PublishedServerUrl=https://arrflix.s8n.ru
|
||||
volumes:
|
||||
- /home/docker/jellyfin/config:/config
|
||||
- /home/docker/jellyfin/cache:/cache
|
||||
- /home/user/media:/media:ro
|
||||
- /opt/docker/jellyfin/web-overrides/index.html:/jellyfin/jellyfin-web/index.html:ro
|
||||
networks:
|
||||
- proxy
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.docker.network=proxy"
|
||||
- "traefik.http.routers.jellyfin.rule=Host(`arrflix.s8n.ru`)"
|
||||
- "traefik.http.routers.jellyfin.entrypoints=websecure"
|
||||
- "traefik.http.routers.jellyfin.tls=true"
|
||||
- "traefik.http.routers.jellyfin.tls.certresolver=letsencrypt"
|
||||
- "traefik.http.routers.jellyfin.middlewares=security-headers@file"
|
||||
- "traefik.http.services.jellyfin.loadbalancer.server.port=8096"
|
||||
|
||||
networks:
|
||||
proxy:
|
||||
external: true
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -1 +0,0 @@
|
|||
[{"Name":"Movies","Locations":["/media/movies"],"CollectionType":"movies","LibraryOptions":{"Enabled":true,"EnablePhotos":false,"EnableRealtimeMonitor":true,"EnableLUFSScan":false,"EnableChapterImageExtraction":false,"ExtractChapterImagesDuringLibraryScan":false,"EnableTrickplayImageExtraction":false,"ExtractTrickplayImagesDuringLibraryScan":false,"PathInfos":[{"Path":"/media/movies"}],"SaveLocalMetadata":false,"EnableInternetProviders":false,"EnableAutomaticSeriesGrouping":true,"EnableEmbeddedTitles":false,"EnableEmbeddedExtrasTitles":false,"EnableEmbeddedEpisodeInfos":false,"AutomaticRefreshIntervalDays":0,"PreferredMetadataLanguage":"en","MetadataCountryCode":"US","SeasonZeroDisplayName":"Specials","DisabledLocalMetadataReaders":[],"DisabledSubtitleFetchers":[],"SubtitleFetcherOrder":[],"DisabledMediaSegmentProviders":[],"MediaSegmentProvideOrder":[],"SkipSubtitlesIfEmbeddedSubtitlesPresent":false,"SkipSubtitlesIfAudioTrackMatches":true,"SubtitleDownloadLanguages":["eng"],"RequirePerfectSubtitleMatch":true,"SaveSubtitlesWithMedia":true,"SaveLyricsWithMedia":false,"SaveTrickplayWithMedia":false,"DisabledLyricFetchers":[],"LyricFetcherOrder":[],"PreferNonstandardArtistsTag":false,"UseCustomTagDelimiters":false,"CustomTagDelimiters":["/","|",";","\\"],"DelimiterWhitelist":[],"AutomaticallyAddToCollection":false,"AllowEmbeddedSubtitles":"AllowAll","TypeOptions":[{"Type":"Movie","MetadataFetchers":["TheMovieDb"],"MetadataFetcherOrder":["TheMovieDb"],"ImageFetchers":["TheMovieDb"],"ImageFetcherOrder":["TheMovieDb"],"ImageOptions":[]}]},"ItemId":"f137a2dd21bbc1b99aa5c0f6bf02a805","PrimaryImageItemId":"f137a2dd21bbc1b99aa5c0f6bf02a805","RefreshStatus":"Idle"},{"Name":"TV Shows","Locations":["/media/tv"],"CollectionType":"tvshows","LibraryOptions":{"Enabled":true,"EnablePhotos":false,"EnableRealtimeMonitor":true,"EnableLUFSScan":false,"EnableChapterImageExtraction":false,"ExtractChapterImagesDuringLibraryScan":false,"EnableTrickplayImageExtraction":false,"ExtractTrickplayImagesDuringLibraryScan":false,"PathInfos":[{"Path":"/media/tv"}],"SaveLocalMetadata":false,"EnableInternetProviders":false,"EnableAutomaticSeriesGrouping":true,"EnableEmbeddedTitles":false,"EnableEmbeddedExtrasTitles":false,"EnableEmbeddedEpisodeInfos":false,"AutomaticRefreshIntervalDays":0,"PreferredMetadataLanguage":"en","MetadataCountryCode":"US","SeasonZeroDisplayName":"Specials","DisabledLocalMetadataReaders":[],"DisabledSubtitleFetchers":[],"SubtitleFetcherOrder":[],"DisabledMediaSegmentProviders":[],"MediaSegmentProvideOrder":[],"SkipSubtitlesIfEmbeddedSubtitlesPresent":false,"SkipSubtitlesIfAudioTrackMatches":true,"SubtitleDownloadLanguages":["eng"],"RequirePerfectSubtitleMatch":true,"SaveSubtitlesWithMedia":true,"SaveLyricsWithMedia":false,"SaveTrickplayWithMedia":false,"DisabledLyricFetchers":[],"LyricFetcherOrder":[],"PreferNonstandardArtistsTag":false,"UseCustomTagDelimiters":false,"CustomTagDelimiters":["/","|",";","\\"],"DelimiterWhitelist":[],"AutomaticallyAddToCollection":false,"AllowEmbeddedSubtitles":"AllowAll","TypeOptions":[{"Type":"Series","MetadataFetchers":["TheMovieDb"],"MetadataFetcherOrder":["TheMovieDb"],"ImageFetchers":["TheMovieDb"],"ImageFetcherOrder":["TheMovieDb"],"ImageOptions":[]},{"Type":"Season","MetadataFetchers":["TheMovieDb"],"MetadataFetcherOrder":["TheMovieDb"],"ImageFetchers":["TheMovieDb"],"ImageFetcherOrder":["TheMovieDb"],"ImageOptions":[]},{"Type":"Episode","MetadataFetchers":["TheMovieDb"],"MetadataFetcherOrder":["TheMovieDb"],"ImageFetchers":["TheMovieDb"],"ImageFetcherOrder":["TheMovieDb"],"ImageOptions":[]}]},"ItemId":"767bffe4f11c93ef34b805451a696a4e","PrimaryImageItemId":"767bffe4f11c93ef34b805451a696a4e","RefreshStatus":"Idle"}]
|
||||
File diff suppressed because one or more lines are too long
322
snapshots/2026-05-09-v6-stable/index.html
Normal file
322
snapshots/2026-05-09-v6-stable/index.html
Normal file
File diff suppressed because one or more lines are too long
Loading…
Reference in a new issue