I ported Nuvio TV to a jailbroken PS5 by connecting its browser interface to EVO Player’s native playback engine. Nuvio handles browsing, accounts and addons. EVO handles media playback, including audio and hardware video decoding.
The work sits between those components: launching the browser, passing a selected stream to the player, and returning to the same browsing location afterwards. The source and releases are public.
Running the interface on the console
The earlier arrangement needed a separate computer to serve the web interface. I bundled the browser assets with the installed title and added a small HTTP service to the console payload. The browser loads the interface through EVO’s local proxy.
That removes the external web server from normal use. The console runs both the interface and player, although the firmware-specific payload still needs starting after each reboot.
The current release targets firmware 13.60. Installation requires a jailbreak for the current boot and the loader services listed in the project instructions. Building the native title uses the macOS tooling described in the repository.
Making X follow the highlighted item
Nuvio moves focus with the D-pad. The PS5 browser’s X input behaves like a click at its stationary pointer. Those two mechanisms can disagree: the screen highlights one item while the button activates somewhere else.
I added an input bridge that directs primary activation to the focused Nuvio element. It also guards against recursively handling the synthetic click, which would otherwise risk activating the same item twice.
The native player settings remain reachable. The browser and native controls need to agree about which component is currently receiving input.
Returning from playback
The browser closes when native playback starts and is recreated when playback ends. Keeping a route only in the old page’s memory loses it during that transition.
The port enables Nuvio’s route-restoration behaviour for the PS5 build. It preserves the previous restorable page when playback begins and checks saved routes before using them. Stopping playback with Circle returns to browsing. Playback launched through EVO’s own interface retains its native confirmation behaviour.
Fixing provider-stream seeking
EVO clears the local media path for web-provider streams. An existing seek guard required that path even when the stream had an active demuxer, so it rejected a seek that the playback engine could attempt.
I removed the local-path requirement while retaining the checks for the active demuxer and stream. The controller updates its seeking state only after the request is accepted. That prevents a rejected request from leaving the interface stuck in a seeking state.
The relevant changes and component boundaries are described in the architecture notes.
Building and packaging
The repository includes macOS build adaptations, pinned upstream revisions and release packaging. The interface travels inside the title’s folder, so installing the title also installs the pages it needs to display.
The build keeps the port’s changes separate from the upstream projects. Nuvio TV and EVO Player provide the main application components; my work connects them and adapts their behaviour to this console workflow.
For installation and current release details, start with the Nuvio PS5 README.