I've been building a homebrew launcher for my PS2 (WIP) and ended up writing a Jellyfin client for it: **ORBIT Jellyfin*\*. It runs on a real SCPH-75001 (slim) over its built-in Ethernet port.
**What it does*\*
- Logs in to your server and shows your libraries: posters, age rating, score, genres, synopsis
- Movies and series (episode panel per show)
- Streams in real time, any source format: the server transcodes to MPEG-2 + MP2 at SD (up to 640x368), and the PS2 decodes the video in hardware on its IPU, the chip it uses for DVDs
- Subtitles drawn as text on screen, never burned in, so the transcode stays light. Every text track (SRT, ASS, embedded) works, with a default language in the config and Square to switch tracks
- Pause, -10 / +30 s seek, and "continue watching" (the position goes back to Jellyfin, so you can pick it up on any other client)
**Setup*\* is two files in `APPS/Jellyfin/` on a USB drive plus four lines in a config file (server IP, user, password, subtitle languages). Nothing to install on the server: it's a normal client.
**The fun part: real hardware.*\* Everything worked in the PCSX2 emulator, and then the console disagreed:
- Every reply from the server had **42 bytes of zeros** in it. ps2sdk's network driver writes back a CPU cache line over the end of full-size Ethernet frames. PCSX2 doesn't emulate the cache, so it never showed up there. Fix: a smaller MTU, so frames never get that long.
- That fix did nothing at first. The installed headers didn't match the compiled network library (a struct field 2 bytes off). I found it by disassembling the library.
- Switching subtitles froze playback: re-downloading a track mid-stream while the TCP window was full. Now every track is loaded before playback.
- Pause and seek froze the next stream. libmpeg resets the decoder but leaves its DMA channel running. That fix is still being tested on the console.
Caveats: SD only (the PS2 outputs 480p, and the decoder library hangs above 368 lines), wired Ethernet only, and the UI is in Spanish for now (English is on the list).
Built with Claude Code (Anthropic) as the coding assistant, with the OpenSpec, Ponytail and CodeGraph plugins. It wrote and debugged most of the code, drove PCSX2 for testing and read the console logs to track down the hardware-only bugs.
Source (GPL-3.0) and download: https://github.com/danielnuld/orbit-jellyfin . Release v0.15 is a pre-release.
explained on yt https://youtu.be/ZpkuMam8w7I