#!/usr/bin/env bash # apply-26-incident-fixes.sh # # Re-applies the three server-state fixes from docs/26 if branding.xml / # encoding.xml drift back to broken state (e.g. after a Jellyfin restore). # # 1. CustomCss: Cineplex hardcoded "Abspielen" → "Play" # 2. CustomCss: Backdrop transparent-scope using :has() (BLACK-PASS occluded backdrop layer) # 3. encoding.xml: EnableThrottling=false + EnableSegmentDeletion=false (kills HLS 499) # # Usage: ssh user@nullstone "$(cat bin/apply-26-incident-fixes.sh)" # Idempotent: re-running is safe. set -euo pipefail # 3. encoding.xml — disable throttling + segment deletion (both containers if present) for cfg in /home/docker/jellyfin/config/config/encoding.xml \ /home/docker/jellyfin-dev/config/config/encoding.xml; do [ -f "$cfg" ] || continue cp -n "$cfg" "$cfg.bak.pre-doc26" || true sed -i \ -e 's|true|false|' \ -e 's|true|false|' \ "$cfg" echo "[+] patched $cfg" done # 1+2. branding.xml CustomCss — Abspielen + backdrop transparent-scope patch_branding() { local cfg="$1" [ -f "$cfg" ] || return 0 if grep -q "ARRFLIX 2026-05-09" "$cfg"; then echo "[=] $cfg already has doc-26 patch" return 0 fi cp -n "$cfg" "$cfg.bak.pre-doc26" || true python3 - <", patch + "") open(p, "w").write(s) PY echo "[+] patched $cfg" } patch_branding /home/docker/jellyfin/config/config/branding.xml patch_branding /home/docker/jellyfin-dev/config/config/branding.xml # Restart so changes take effect docker restart jellyfin jellyfin-dev 2>/dev/null || docker restart jellyfin echo "[*] Done. Verify with bin/headless-test.py."