# HEADLESS-PROBE — playwright + DOM recipes > Copy-paste these to verify any theme/playback change. All use `mcr.microsoft.com/playwright/python:v1.49.0-noble` with `--userns=host --network container:jellyfin-dev` (or `jellyfin` for prod). ## Setup (one-time per session) ```bash ssh user@192.168.0.100 'docker pull mcr.microsoft.com/playwright/python:v1.49.0-noble' >/dev/null mkdir -p /tmp/arrflix-probes # Run pattern (on nullstone): docker run --rm --userns=host --network container:jellyfin-dev \ -v /tmp/arrflix-probes:/out -v /tmp/probe-X.py:/probe.py:ro \ mcr.microsoft.com/playwright/python:v1.49.0-noble python /probe.py ``` ## RECIPE 1 — auth + pre-seed credentials Boilerplate every recipe imports. `/Users/AuthenticateByName` returns `{AccessToken, User.Id, ServerId}`. Jellyfin web reads `localStorage['jellyfin_credentials']` on boot — pre-seeding via `add_init_script` skips login. ```python import asyncio, json, urllib.request from playwright.async_api import async_playwright URL='http://127.0.0.1:8096' USER,PW='test','123' def auth(): req=urllib.request.Request(f"{URL}/Users/AuthenticateByName", data=json.dumps({"Username":USER,"Pw":PW}).encode(), headers={"Content-Type":"application/json","Authorization":'MediaBrowser Client="probe", Device="x", DeviceId="probe-1", Version="1.0"'},method="POST") return json.loads(urllib.request.urlopen(req,timeout=15).read()) a=auth(); token=a["AccessToken"]; uid=a["User"]["Id"]; sid=a["ServerId"] ``` Pre-seed creds via `add_init_script`: ```python await page.add_init_script(f""" localStorage.setItem('jellyfin_credentials', JSON.stringify({{Servers:[{{ManualAddress:'{URL}',Id:'{sid}',Name:'D',UserId:'{uid}',AccessToken:'{token}',DateLastAccessed:Date.now(),UserLinkType:'LinkedUser'}}]}})); """) ``` If auth returns 401 + `sqlite-readonly` in `docker logs jellyfin-dev`, test password got nuked. Recovery: `docker exec jellyfin-dev sqlite3 /config/data/jellyfin.db "UPDATE Users SET Password=NULL,EasyPassword=NULL WHERE Username='test'"` then `docker restart jellyfin-dev` and POST `/Users/{uid}/Password` with `{NewPw:"123"}`. ## RECIPE 2 — bg-color of every ancestor of `