Game Streaming
Stream retro and modern games from your server to any device. OmniLux supports server-side emulation via RetroArch and native PC game streaming via the gaming agent.
Overview
Game streaming in OmniLux has two modes:
- RetroArch (emulation) — retro games run server-side via RetroArch emulators. Video is streamed as HLS to your device. Input is relayed via WebSocket
- Gaming agent (native) — modern PC games (Steam, etc.) run on a dedicated GPU machine. Video is captured and streamed to your device
Server-side RetroArch
Supported emulators
| Platform | Emulator core |
|---|---|
| NES | FCEUmm |
| SNES | Snes9x |
| Game Boy / Color | Gambatte |
| Game Boy Advance | mGBA |
| Nintendo 64 | Mupen64Plus |
| Nintendo DS | DeSmuME |
| Sega Genesis | Genesis Plus GX |
| Sega Dreamcast | Flycast |
| PlayStation | PCSX ReARMed |
| PlayStation 2 | PCSX2 |
| PlayStation Portable | PPSSPP |
| GameCube / Wii | Dolphin |
ROM placement
Place your ROM files in a library root configured for the Games media type:
/data/games/
snes/
Super Mario World.sfc
Chrono Trigger.sfc
n64/
Super Mario 64.z64
psx/
Final Fantasy VII.bin
Final Fantasy VII.cueScanning
OmniLux scans game library roots every hour (configurable). Games are matched against IGDB for metadata including cover art, descriptions, genres, and release dates.
Gaming agent setup
The gaming agent runs as a separate Docker container on a machine with a dedicated GPU. It provides a virtual display, GPU capture, and streaming.
Requirements
- A machine with an NVIDIA GPU (RTX series recommended)
- NVIDIA Container Toolkit installed
- Network access to the OmniLux server
Docker setup
omnilux-gaming:
build:
context: .
dockerfile: Dockerfile.gaming
container_name: omnilux-gaming
restart: unless-stopped
runtime: nvidia
environment:
NVIDIA_VISIBLE_DEVICES: all
NVIDIA_DRIVER_CAPABILITIES: all
OMNILUX_SERVER_URL: http://omnilux:4000
ports:
- "4200:4200" # Gaming agent API
- "6080:6080" # noVNC debug interface
volumes:
- /path/to/games:/gamesThe gaming agent:
- Registers with the OmniLux server on startup
- Starts a virtual display (Xvfb) for game rendering
- Captures the display output via GPU
- Streams encoded video back to the client
Installed emulators and launchers
The gaming agent container includes:
- RetroArch (all cores listed above)
- Flycast (Dreamcast)
- Dolphin (GameCube/Wii)
- PCSX2 (PlayStation 2)
- RPCS3 (PlayStation 3)
- PPSSPP (PSP)
- Citra (Nintendo 3DS)
- Steam (for native PC games)
Streaming to devices
Web browser
Navigate to any game in your library and click Play. The game starts on the server and streams to your browser via HLS. Input is captured from your keyboard/mouse or connected gamepad and relayed via WebSocket.
iOS and tvOS
The OmniLux iOS and tvOS apps support game streaming natively:
- Touch controls with virtual controller overlay on iPhone/iPad
- Siri Remote for basic navigation on Apple TV
- MFi controller support (PS5 DualSense, Xbox controller)
Android and Android TV
The Android apps support game streaming:
- Touch controls with virtual controller overlay on phones/tablets
- D-pad navigation on Android TV
- Physical gamepad support (Xbox, PS5, generic Bluetooth controllers)
Controller support
Virtual controller overlay
On touch devices (phones, tablets), OmniLux displays a virtual controller overlay with:
- D-pad or analog stick
- A/B/X/Y face buttons
- L/R shoulder buttons
- Start/Select
Physical controllers
When a physical controller is connected, the virtual overlay hides automatically. Supported controllers:
- MFi controllers (iOS/tvOS)
- PS5 DualSense
- Xbox Wireless Controller
- Generic Bluetooth gamepads
- USB gamepads (web browser)
Controller input is captured on the client and relayed to the server via WebSocket at 60 Hz.
Save states
OmniLux manages save states per game per user:
- Save — create a save state at any point during gameplay
- Load — restore a previous save state
- Resume — automatically resume from the last save state when starting a game
- Save states are stored server-side, so you can start on one device and continue on another