Caddyfile now:
- Runs on port 8097 (external)
- Proxies to xbox-filter:8096 (Python filter)
- Python filter handles all Xbox detection and codec filtering
- Python filter then proxies to jellyfin:8096 (internal)
Architecture:
Client :8097 → Caddy → :8096 Python Filter → :8096 Jellyfin
Use Caddy if you need additional features like:
- SSL/TLS termination
- Rate limiting
- Access control
- Advanced routing
Or use Python filter directly on port 8096 for simpler setup.
BREAKING FIX: DeviceProfile is sent FROM client TO server in request body,
not returned in response. This was the bug preventing the filter from working.
Changes:
- Filter DeviceProfile in POST request body before sending to Jellyfin
- Add extensive debug logging to track filtering process
- Remove unnecessary response filtering (DeviceProfile not in response)
- Simplify response handling (always stream)
Now logs:
- 'Xbox PlaybackInfo request detected' when Xbox client detected
- 'Filtering Xbox DeviceProfile in REQUEST' when filtering
- 'No DeviceProfile found' if profile missing (debug info)
- Changed from DeviceId to User-Agent for Xbox detection
- Xbox UWP app sends 'WebView2 Xbox' in User-Agent
- Fixes issue where DeviceId contains random GUID instead of 'xbox'
- Keeps FFmpeg log level, remote source transcoding, and other fixes
- Transparent reverse proxy that filters AV1/Opus for Xbox clients
- Detects Xbox via User-Agent header
- Docker-based solution, no Jellyfin code modifications needed
- Can be easily enabled/disabled without affecting Jellyfin updates
Moved to patches/:
- jellyfin-progressive-download-improvements-v10.11.5.patch (server)
- jellyfin-web-download-dialog-v10.11.5.patch (web UI)
Kept in code:
- Xbox UWP codec detection (AV1/Opus fix)
- FFmpeg log level configuration
- Remote source forced transcoding
- Quality text UI fix (web)
Both jellyfin-server and jellyfin-web reset to v10.11.5 base
- Force CopyTimestamps=false when SegmentContainer is null (full downloads)
- Preserve client's copyTimestamps setting for streaming (HLS)
- Fixes negative timestamps only in downloaded files, not streaming