A VR video player for PlayStation VR2, running natively on a jailbroken PS5.
180° and 360° video, 3D side-by-side and top-bottom, spatial video and 3D Blu-ray, flat 2D and 3D films on a big virtual screen - decoded on the PS5's own video hardware up to 8K and shown in the headset through the system's PS VR2 compositor, at 120 Hz.
Homebrew. Not affiliated with or endorsed by Sony. It plays your own files and the sources you point it at; it includes no content.
Picture
- Hardware HEVC (8 and 10-bit) and H.264 decoding, up to 8K (7680x3840)
- 120 Hz headset output with an even frame cadence (60 fps pictures show for two refreshes, 30 fps for four)
- Smooth motion (coming in the next update): 8K60 decodes at 30 fps on the PS5, and frame generation makes the picture in between, so the headset gets 60. In 1.0.0, 8K60 plays at a steady 30 fps, in sync
- 10-bit eye buffers, 4096 px per eye, FSR 1 upscaling and sharpening for pictures thinner than the panel
- HDR (experimental, coming in the next update): HDR10 and HLG keep their highlights above SDR white. In 1.0.0 HDR videos are tone-mapped to SDR
Formats
- 360° and 180° (equirectangular), mono, side-by-side or top-bottom
- Flat 2D and flat 3D (full and half SBS, OU) on a screen of your size
- Spatial video (MV-HEVC) and 3D Blu-ray (H.264 MVC), both eyes
- Format detection from the file name and the picture's shape, overridable in the View menu
Sound
- Head-tracked spatial audio: stereo and 5.1/7.1 placed around you as virtual speakers that stay put when you turn your head
- First-order ambisonics (AmbiX) rotated with your head
- Automatic audio delay correction for slow decodes
Sources
- Files on the PS5's internal storage, USB drives and extended storage
- DLNA / UPnP media servers on your network (Plex, Jellyfin, Emby, ...)
- RSS / Atom feeds with video enclosures
- DeoVR and HereSphere libraries (Stash, XBVR and many VR sites)
- Real-Debrid downloads, with parallel read-ahead (6 connections) for big files over the internet
- A settings page on your phone or computer for feeds, libraries and tokens
In the headset
- A library and a View menu drawn in VR, driven by the DualSense
- Recentre (R3), auto-pause when the headset comes off, TV mirroring
- Hands & eyes (experimental): look at an item and pinch to select, pinch for playback controls, hold a pinch for the View menu
You need a jailbroken PS5 with an ELF loader (tested on 13.60 with Relapse, kstuff, ShadowMount+ and etaHEN) and a PS VR2.
- Copy the
PPSA99177folder from the release to/data/homebrew/on the console. ShadowMount+ installs it as a "PS5VR" tile. - Send
ps5vr-helper.elfto your ELF loader (port 9021), or add it to your autoload list. It gives PS5VR access to/dataand USB drives and, if you turn on Hands & eyes, to the headset cameras. It only acts when PS5VR asks. - Put videos in
/data/ps5vr/videos(FTP), on a USB drive, or on a media server, and start PS5VR from the home screen with the headset on.
Settings for feeds, DeoVR/HereSphere libraries and Real-Debrid are at
http://<your PS5's IP>:8090 (shown in the library).
| Cross | open / select |
| Circle | back |
| Options | View menu (while playing) |
| R3 | recentre |
| L1 / R1 | page through long lists |
| Triangle | refresh the list |
The View menu: video type, 3D layout, swap eyes, screen size, sharpening, smooth motion, HDR, spatial audio, mirror to TV, hands & eyes, recentre.
The app builds natively on a Mac (Apple silicon) against the PS5 payload SDK sysroot:
PS5_PAYLOAD_SDK=~/ps5sdk/opt/ps5-payload-sdk app/scripts/build-native-mac.sh
The output is app/build-mac/app/PPSA99177/. The helper is a plain payload:
prospero-clang -O2 -o ps5vr-helper.elf helper/ps5vr-helper.c -lkernel_sys
The GPU shader pipelines (app/engine/shaders/agc/) are compiled with AMD's
LLPC for gfx1013; their generators are in app/tools/shaders/.
- The PS VR2 system libraries (libSceHmd2, libSceVrTracker2, libSceVrHand) are loaded at runtime and called by their exports on firmware 13.60. The picture goes to the headset as a type 0x10 layer through Hmd2's reprojection, the way PS VR2 games submit it.
- Each decoded frame is converted once on the GPU and projected per eye from the tracked head pose; a floating panel draws the interface.
tools/ps5_dynlib.pyreads decrypted system libraries (exports, imports, NIDs) andtools/gen_export_table.pywrites the export offsets the app uses.
Other firmware versions need their own export table.
If you use PS5VR and want to help cover the time it took to build, there's a Buy Me a Coffee. Completely optional.
GPL-3.0-or-later. See LICENSE and THIRD_PARTY_NOTICES.md.