Private console streaming.
RetroDeck Live PS2, by Ahmad Zushan, runs a PlayStation 2 emulator (PCSX2) on this server and streams its picture and sound to authenticated room participants. It is an independent project, not affiliated with Sony or PlayStation.
What is uploaded?
The host uploads their disc image and BIOS to a private session directory. Both players receive a stream, not a game download. Use only games and BIOS files that you are entitled to use. No games or BIOS files are provided by this website.
Your library
If you set a library passphrase inside a room, the discs and BIOS files you upload afterwards are kept on this server with the email of your hosting key instead of being deleted when the room ends, so a later room can use them without another upload. Because an email is only a self-declared association, the passphrase (hashed with scrypt) is what protects the library: a new key for the same email must present it. There is no recovery. Each library holds up to 12 items and 8 GB; items unused for 45 days are removed, and the server refuses new items when its disk is nearly full. Library files are attached to your consoles read-only and are never downloadable by anyone, including you. You can delete items at any time; the operator can remove libraries.
Privacy and retention
Private HttpOnly browser cookies identify the organizer, each controller and each spectator. Invitations expire after 15 minutes and are reusable until expiry or revocation: the first new guest gets an available controller and later visitors join a first-come queue within the spectator limit. Players can release their controller and watch; rejoining the queue puts them at the end. Offline queue entries are skipped. Receiving Player 1 never grants room-management rights. Private uploads (unless kept in your library) and server-side saves are deleted when the host ends the room, after 10 minutes without a connected or active participant (30 minutes while preparing uploads), at the two-hour room limit, or when the service restarts. Download your save before ending the room. A downloaded save remains on your device until you delete it.
Nginx access logs include IP addresses, request paths, status codes, and browser information. Invitation tokens stay in the URL fragment and are not sent in page requests. There are no advertising scripts or analytics trackers. WebRTC may contact Cloudflare’s STUN service to establish connectivity; HTTPS streaming remains available when WebRTC cannot connect.
Hosting keys and session history
There is one PS2 room slot: PCSX2 needs most of this server while a game runs. The existing master key has no expiry and supports multiple browsers and rooms. Ordinary day passes are generated at Hosting keys with a name and email, valid for 24 hours from generation. Email association is not ownership verification. Activation requires matching email and key and binds one active room to a private browser cookie. End that room before activating the key elsewhere. An unused activation lapses after ten minutes without activity; merely closing a browser does not immediately end a room. Each room still ends after at most two hours, or earlier if its key expires. Browser-cookie possession is not physical-device identification.
Keys are hashed in storage and displayed only once. Key generation is rate-limited using hashed email and a keyed IP-derived bucket. Key contact records are eligible for cleanup 30 days after expiry. Master-only session history records room name, associated email/key ID, times, configuration, peak occupancy and end reason, but no keys, cookies, controller inputs or game files. History starts with this update and is retained until operator removal. Day passes are currently a free preview; no payment gateway or credit purchase is enabled.
Optional room voice
Voice chat is off by default and separate from game sound. Joining explicitly requests microphone permission and establishes a room-scoped WebRTC voice connection through our audio relay. Players and queued viewers may join. Mute microphone stops capture while keeping listening connected; Voice off stops capture and disconnects voice completely. The voice SDK is loaded only after Join. Changing controller seats does not change your voice membership. The room host can mute microphones; allowing a microphone does not turn it on automatically.
Voice is encrypted in transit to and from the relay, not end-to-end encrypted between participants. No voice audio, transcripts or microphone recordings are stored by this application or included in gameplay recordings. Temporary participant IDs, display names and connection details exist while voice is active. Other participants can hear what you say and may independently record it. Signaling URLs are excluded from normal access logs. Leaving voice or ending the room revokes its voice access. Voice uses shared device and network resources while enabled; constrained mobile connections can still affect gameplay.
Gameplay recording and sharing
The room owner can explicitly record emulator video; only one recording runs across the server at a time. Ordinary keys can access only their own recordings, and master access can manage all recordings. A recording indicator is shown to all connected players and spectators. Recordings are silent: no game audio, browser microphone, camera, personal screen or controller data is captured. Let participants know and obtain permission where needed. Only share footage you are entitled to share.
Recordings use a separate low-priority, single-thread encoder at 320 × 240 and up to 15 FPS. They stop after 15 minutes, near 128 MiB, if storage is low, or when sustained poor performance is detected. This prioritizes gameplay but does not guarantee zero performance impact. Up to eight clips / 512 MiB are kept, privately, outside session uploads. Recordings remain after a room ends and automatically expire 24 hours after creation; cleanup runs periodically. The organizer can delete them sooner.
A finished recording is private until the organizer creates a link, valid for up to one hour or until clip expiry. Anyone with that link can view or download. Sharing tokens remain in the URL fragment and are exchanged for a clip-scoped HttpOnly cookie; the nonsecret clip ID may appear in access logs. Creating a new link replaces the old one. Revoking blocks subsequent requests but cannot remove footage already downloaded or buffered, or necessarily stop an in-progress response. Download clips you want to keep before they expire.
Tournament registration
Tournament titles, rules, participant display names, schedules and confirmed results are public. Use a display name you are comfortable publishing. No email is requested. A separate private participant cookie lasts up to thirty days and secures your registration to this browser; clearing it loses access to that place. There is no password account or recovery flow in this version. Tournament records persist until the operator archives or removes them; cancelling an event does not erase them. A console restart interrupts a live match without awarding a winner. Organizers confirm results manually. Public tournament watching is subject to the organizer’s spectator setting and capacity.
Organizers can view temporary browser-reported stream diagnostics. These are not full button-to-screen latency measurements. Spectators have no controller or room-management permissions. Hosts may revoke an invitation separately from disconnecting existing viewers.
How two players work
In ordinary rooms, the host initially controls port 1 and the first invited browser gets port 2. Controllers can then pass to the first eligible queued visitor. The original host retains management after releasing their controller. Waiting viewers use shared silent HTTPS pictures, up to 15 FPS, without a separate game WebRTC encoder or game-audio connection. Optional room voice is an independent, explicitly joined connection. Player WebRTC and 30 FPS HTTPS fallback remain available; watcher bandwidth still consumes shared server capacity. In tournament matches, the two selected registrations receive those controller seats; room management remains with the organizer. Choose a local two-player mode inside your game. Sharing a room does not add multiplayer to a single-player game. Network distance, Wi-Fi, mobile data and server capacity affect latency.
Open-source components
Console emulation uses PCSX2 under the GPL-3.0 license, unmodified, inside a locked container with a private X display (Xvfb, Mesa llvmpipe) and a PulseAudio null sink. Streaming uses aiortc (BSD-3-Clause), aiohttp (Apache-2.0), Pillow and NumPy. Optional audio-only room voice uses LiveKit server and client SDK (Apache-2.0). The server copies the display framebuffer and the sink monitor and presses the emulator’s keyboard bindings for both controller ports.