Skip to content

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

PlatformEmulator core
NESFCEUmm
SNESSnes9x
Game Boy / ColorGambatte
Game Boy AdvancemGBA
Nintendo 64Mupen64Plus
Nintendo DSDeSmuME
Sega GenesisGenesis Plus GX
Sega DreamcastFlycast
PlayStationPCSX ReARMed
PlayStation 2PCSX2
PlayStation PortablePPSSPP
GameCube / WiiDolphin

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.cue

Scanning

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

yaml
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:/games

The gaming agent:

  1. Registers with the OmniLux server on startup
  2. Starts a virtual display (Xvfb) for game rendering
  3. Captures the display output via GPU
  4. 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

Use OmniLux, run your own server, or build on the platform.