Skip to content
 
 

Repository files navigation

Disclaimer: This is an AI-assisted project developed using OpenAI Codex.

ProsperoLight icon

ProsperoLight

A native Moonlight client for PlayStation 5 homebrew
Stream Sunshine applications with hardware video decoding, low-latency input, stereo audio, and a controller-first interface.

PlayStation 5 H.264 and HEVC RmlUi GPL-3.0-or-later

Demo available by clicking the image below.

ProsperoLight Games screen configured for 4K HDR

Highlights

  • Native PS5 hardware streaming through VideoDec2 and AGC at 1080p60, 1440p60, and 2160p60.
  • H.264 High, HEVC Main, and HEVC Main10 HDR10 support at every available resolution.
  • Low-latency DualSense, physical USB keyboard and mouse, controller-driven mouse mode, and an on-screen password keyboard.
  • Automatic Sunshine discovery, manual-IP fallback, persistent multi-PC pairing, application artwork, and launch/resume/stop controls.
  • Persistent stream preferences, edge-to-edge or TV-safe presentation, and bitrate presets from 10 to 500 Mbps.
  • 48 kHz stereo Opus audio, native launcher sound effects, live performance metrics, and graceful connection recovery.

ProsperoLight is a native PS5 client for the open Moonlight/Sunshine streaming protocol. Its RmlUi launcher discovers and pairs with Sunshine hosts, browses their applications, and starts a native streaming session. Video access units are decoded by PS5 VideoDec2 and the resulting GPU-visible surfaces are presented by AGC without copying decoded pixels through a CPU framebuffer.

Important

ProsperoLight does not run on an unmodified retail console. It is intended for consoles you own with an already configured, compatible homebrew loader. This repository does not include an exploit, proprietary Sony SDK, system module, encryption key, firmware file, or game asset.

Project foundation

Important

Built on the PS5 Native App Boilerplate. ProsperoLight preserves the template's C++20 structure, .hpp interfaces, reproducible clean-room runtime, native FSELF tooling, tests, safe folder deployment, and release automation.

Important

Controller input work is documented in PS5 Native Gamepad Input Research. The companion repository records recovered native APIs, low-latency examples, and DualSense behavior that informed ProsperoLight's controller integration.

Important

Video work is documented in PS5 Hardware Video Decoding Research. The companion repository records VideoDec2, HEVC, HDR10, zero-copy AGC, resolution, and performance findings that informed the streaming presenter.

Important

Audio work is documented in PS5 Audio Decoding Research. The companion repository records codec, AJM, hardware/firmware offload, and output-path research that informed ProsperoLight's audio integration.

The client uses the established moonlight-common-c protocol implementation rather than reimplementing the wire protocol. The launcher, stream coordination, PS5 input/audio/video integration, UI, and build tooling are maintained in this repository.

Identity Value
Shell title ProsperoLight
Title ID PPSA99002
Category Game
Current version 01.000.040
Version source sce_sys/param.json
Writable data /download0 only

Features

  • Discover Sunshine hosts on the LAN or add an IPv4 address manually.
  • Remember up to eight PCs, pairing identities, and stream preferences under /download0 across application restarts.
  • Pair with a two-minute PIN dialog and unpair through explicit two-press confirmation.
  • Browse up to 64 advertised Sunshine applications with paged artwork, launch/resume feedback, and active-application stop controls.
  • Decode H.264 High and HEVC Main streams through VideoDec2 at 1080p60, 1440p60, and 2160p60. All three modes are hardware-validated; broader higher-resolution compatibility remains beta.
  • Present decoded GPU surfaces directly through AGC, with edge-to-edge and television-safe display modes. The presenter uses native 1080p scanout for 1080p streams, bilinear GPU scaling from 1440p to a 3840x2160 target, and 1:1 presentation from 2160p to a 3840x2160 target.
  • Select bitrate presets up to 500 Mbps. The best setting depends on the host, encoder, network, and selected codec rather than link speed alone.
  • Enable HEVC Main10 HDR10 output at 1080p60, 1440p60, or 2160p60 when the Sunshine host advertises support.
  • Decode Moonlight Opus audio and output 48 kHz stereo through PS5 AudioOut.
  • Forward low-latency DualSense controls, with controller/mouse switching and a stream keyboard that works at Windows sign-in.
  • Forward a physical USB keyboard and mouse directly to Sunshine during a stream, including modifiers, navigation/function keys, five mouse buttons, and vertical/horizontal scrolling.
  • Show Moonlight-style stream metrics for resolution, codec, frame rates, packet loss, network/host latency, and decode time.
  • Recover from connection failures and return from a stream to the launcher without leaving a stale session running.
  • Use original 4K launcher artwork, icon, loading presentation, and selection music in a controller-first RmlUi interface.
  • Play distinct opening, navigation, action, setting, back, success, error, and stream-start cues through the native PS5 SDL audio backend.

Current status

The complete 1080p60 path—pairing, application launch, VideoDec2/AGC video, stereo audio, DualSense input, mouse mode, Windows sign-in keyboard, metrics, return-to-launcher, relaunch, and cleanup—has been exercised on PS5 hardware with Sunshine. Hardware runs also confirm HEVC 1440p-to-4K filtered GPU presentation and native HEVC 2160p-to-4K presentation with the metrics HUD.

ProsperoLight is still alpha software. HEVC, 1440p, 2160p, HDR, very high bitrates, network recovery, and long gameplay sessions need broader validation across GPUs, Sunshine configurations, networks, TVs, firmware versions, and homebrew loaders. See the evidence and open acceptance items in Validation.

Requirements

Build from Linux, WSL, or a Linux CI runner. On Ubuntu, Debian, or WSL:

sudo apt update
sudo apt install curl git make pkg-config python3 python3-venv tar unzip wget \
  clang-18 clang-format-18 clang-tidy-18 lld-18

The build downloads and verifies its public PS5 Payload SDK, zlib, GoogleTest, and packaging inputs below ignored .deps/ directories. Initialize the pinned streaming sources after cloning:

git submodule update --init --recursive
make doctor

Compressed .ffpfsc output requires Python 3.9 or newer with venv support. The optional local .ffpkg target additionally requires .NET 8 or newer. Nothing is installed globally by the project build.

See Getting started and Native tooling for clean-machine setup details.

Build

# Production release image; also assembles the complete title folder.
make ffpfsc

# Faster folder-only development build.
make

Outputs are written to:

dist/PPSA99002/           complete title folder
dist/PPSA99002.ffpfsc     compressed installation image

Useful development gates are:

make test       # C++ unit/runtime tests and Python tooling regressions
make lint       # formatting, static analysis, metadata, asset, and shell checks
make check      # lint + every host test + complete folder build
make ffpfsc     # production folder + compressed image

An optional make ffpkg target remains available for local development. The .ffpkg output is intentionally excluded from GitHub Actions and Releases. See Package formats.

GitHub Actions and releases

The Build workflow runs on every push to main, pull request, version tag, and manual dispatch. It:

  1. checks out all pinned submodules;
  2. installs the public Linux/PS5 build prerequisites;
  3. validates metadata and the release tag;
  4. runs lint, GoogleTest, runtime-allocation, and Python integration checks;
  5. independently reproduces and verifies runtime/libc.prx;
  6. builds PPSA99002.ffpfsc; and
  7. generates SHA256SUMS and uploads both files as the Actions artifact.

A tag matching the exact contentVersion verifies that build-time checksum again, then publishes exactly the .ffpfsc image and SHA256SUMS. Folder and .ffpkg builds are never attached to a release.

Deploy

For an already-running PS5 FTP service, stage the development folder with:

make deploy PS5_HOST=192.168.1.100

Fully close ProsperoLight before deploying. The deployer writes only the current title below /data/homebrew, uploads through temporary names, and publishes eboot.bin and sce_sys/param.json last. Upload the complete folder; eboot.bin alone is not a valid deployment.

To test the packaged form instead:

make deploy PS5_HOST=192.168.1.100 DEPLOY_FORMAT=ffpfsc

ProsperoLight never changes PS5 system settings or configures a loader. See Deployment for the safe development loop and removal behavior.

Pairing and first stream

  1. Start Sunshine on a PC connected to the same trusted LAN.
  2. Open ProsperoLight and choose a discovered PC, or select Add PC and enter its IPv4 address.
  3. Select Pair PC, then enter the displayed PIN in Sunshine within two minutes.
  4. Open Games, choose Desktop or another advertised application, and press Cross.
  5. Use Select + L1 to end the stream and return to ProsperoLight.

Pairing credentials and settings are title-scoped. Installing under a different title ID intentionally requires pairing again.

Controls

Launcher

Input Action
D-pad / left analog stick Move focus or change the selected PC/application/setting
Cross Activate, pair, launch, resume, or change a setting
Circle Return to the PCs page
Square Stop the active Sunshine application
Triangle Refresh the selected Sunshine host
L1 / R1 Change between PCs, Games, and Settings
Options Open Settings

Streaming

Input Action
Select + R1 Toggle the metrics overlay
Select + L1 End the stream and return to ProsperoLight
Select + Square Toggle mouse/controller mode
Select + Triangle Toggle ProsperoLight's stream keyboard
Physical USB keyboard Forward keys and modifiers directly to Sunshine
Physical USB mouse Move, click, and scroll directly on the Sunshine host
Either analog stick in mouse mode Move the pointer
Cross / Circle / Square in mouse mode Left / right / middle mouse button
L1 / R1 in mouse mode Mouse X1 / X2 button
D-pad in mouse mode Vertical / horizontal scroll
D-pad while keyboard is open Move between keys
Cross while keyboard is open Type the selected key
Triangle while keyboard is open Toggle Shift
Square while keyboard is open Send Backspace
Options while keyboard is open Send Enter and close the keyboard
Circle while keyboard is open Close the keyboard

The stream keyboard contains every printable US-ASCII character used by standard passwords. It is not currently a multilingual or Unicode input method. Keyboard text is sent directly as Moonlight key events and is not stored by ProsperoLight or written to its configuration.

Source layout

src/main.cpp                         SDL2/RmlUi lifetime and stream handoff
src/moonlight_app.cpp                launcher state, navigation, and feedback
src/moonlight_backend.cpp            pairing, app listing, artwork, and control
src/moonlight_discovery.cpp          LAN discovery
src/moonlight_config.cpp             /download0 host and preference persistence
src/moonlight_stream.cpp             Moonlight session, VideoDec2, audio, input
include/moonlight_physical_input.hpp USB-HID to Moonlight input mapping
src/native_agc_present.cpp           zero-copy AGC presentation and overlays
src/gamestream/                      retained Moonlight-compatible C boundary
include/*.hpp                        application-owned public interfaces
platform/ps5/                        narrow Moonlight PS5 compatibility adapters
third_party/                         pinned Moonlight, mbedTLS, and Opus sources
ui/                                  RML, RCSS, fonts, icons, and chrome assets
sce_sys/                             launcher metadata, 4K artwork, icon, music
runtime/libc.prx                     generated clean-room loader runtime
tooling/native/                      native ELF/FSELF and runtime build tools
tests/                               GoogleTest and Python host regressions
docs/                                architecture, setup, testing, and evidence

Application-owned code is C++20 with .hpp interfaces. The retained src/gamestream C code and pinned upstream dependencies preserve their native language and public headers; they are dependency boundaries, not a second application architecture. See Architecture and Porting notes.

Versioning

sce_sys/param.json is the only application identity and release-version source. Its PS5-format contentVersion is injected into the top bar, checked against the release tag, and used as the GitHub Release name. Do not add a v prefix.

# After updating param.json and passing all local gates:
git tag 01.000.040
git push origin main 01.000.040

Keep PPSA99002, conceptId, and contentId stable for updates to this title. Changing the title ID creates a separate PS5 application and separate pairing storage. See Configuration.

Documentation

Document Purpose
Getting started Clean-machine prerequisites and first build
Architecture Launcher, protocol, video, audio, and input flow
Configuration Identity, versioning, settings, and build variables
Testing Host test boundaries and commands
Validation Hardware acceptance checklist and recorded evidence
Deployment Safe folder/image staging and smoke tests
Package formats Folder, .ffpkg, and .ffpfsc outputs
Troubleshooting Common build, launch, and runtime failures
Platform notes PS5 filesystem, loader, and presentation constraints
Runtime shim Clean-room libc.prx scope and reproduction
Presentation assets Icon, backgrounds, and selection audio
Contributing Change, test, and release requirements
Notices Dependency, asset, and license attribution

Credits, third-party software, and licenses

ProsperoLight exists thanks to the maintainers and contributors of:

The original ProsperoLight artwork and selection music are distributed under the project license. Complete revisions, checksums, copyright notices, and third-party terms are recorded in NOTICE.md and the corresponding source trees.

ProsperoLight is distributed under GPL-3.0-or-later. PlayStation and PS5 are trademarks of Sony Interactive Entertainment. Moonlight and Sunshine retain their respective project identities. ProsperoLight is an independent homebrew project and is not affiliated with or endorsed by Sony Interactive Entertainment, Moonlight, or Sunshine.

This project was developed with assistance from OpenAI Codex, including some original interface artwork. Project maintainers reviewed and validated the resulting code, tests, documentation, dependencies, and generated assets.

About

An unofficial Moonlight port (game streaming) for PS5

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages