Demo: https://wizzardsk.github.io/
Play retro games directly from public online sources.
The library covers 200+ systems with 1000+ ROM collections from sources Internet Archive. Thumbnails are fetched from GitHub repositories.
I made this project for my own personal needs, to have the same setup on all my machines.
| Tool | Purpose | Required |
|---|---|---|
| rclone (v1.60+) | On-demand ROM download from Internet Archive | Yes |
| mount-zip | Mounting zipped ISO files (PSP, PS2, PC Engine CD, etc.) | For CD-based systems |
| curl / wget | Bootstrap fetch and asset downloads | Yes |
| unzip / zip | Archive extraction at launch | Yes |
| RetroArch | Main emulation frontend | Yes |
| MAME | Arcade and computer emulation | For arcade/computer systems |
On Linux, register the play:// URL scheme handler in one step:
bash <(curl -Ls https://raw.githubusercontent.com/WizzardSK/gameflix/main/webflix.sh)On Windows, see Windows setup for the PowerShell installer.
Open https://wizzardsk.github.io/ in your browser and click a game thumbnail to launch it. ROMs download per-game on click; no local install of the web interface is needed.
webflix.sh registers the play:// URL scheme handler with the OS. Clicking a thumbnail on https://wizzardsk.github.io/ then triggers:
- Browser hands
play://<platform>/<source>/<rom>to the OS - OS launches
~/retroarch.sh(3-line bootstrap) - Bootstrap fetches the full launcher from https://wizzardsk.github.io/retroarch.sh
- Launcher downloads the ROM into
~/share/roms/via rclone (Internet Archive S3 session is required for restricted items like NoIntro / MAME-SL / TOSEC) - ROM launches via the matching RetroArch core or standalone emulator
Windows uses retroarch.ps1 (launcher) and webflix.ps1 (installer) — PowerShell counterparts of the Bash pair. Setup is per-user and needs no administrator rights.
- RetroArch — required. After installing, open Online Updater → Core Downloader and grab the cores for the systems you want to play (e.g.
Nestopiafor NES,Snes9xfor SNES). The launcher findsretroarch.exeautomatically if it's on yourPATHor in a common location (portableC:\RetroArch-Win64, Program Files, Steam,%LOCALAPPDATA%\Programs\RetroArch). - MAME — only for arcade/computer systems. Put
mame.exeon yourPATH.
Open PowerShell (Start → type "PowerShell" → Enter) and run:
irm https://raw.githubusercontent.com/WizzardSK/gameflix/main/webflix.ps1 | iexPrefer a double-click? Download mount.bat and run it — same result, no terminal.
This writes rclone.conf to %APPDATA%\rclone\, installs a small bootstrap, and registers play:// under HKCU. (No execution-policy change is needed — the one-liner runs the script as text.)
Open https://wizzardsk.github.io/ and click a game. The ROM downloads into %USERPROFILE%\share\roms\ and launches in the matching core. Single-file ROMs (NES, SNES, GB, …) load straight from the .zip — nothing extra needed.
Multi-file disc images (.cue/.bin, .gdi) need the whole archive visible. The launcher tries, in order:
- Pismo File Mount (
pfm.exe) — recommended: tiny, free, no Python; mounts zip/iso in place as a folder, no extraction - 7-Zip (
7z.exe) — extracts the whole archive to%TEMP%\gameflix-iso\(cached for reuse); uses disk space - ratarmount + WinFsp — optional, mainly a Linux tool; kept for parity
Install one of these only if you play CD-based systems. For cartridge consoles you can skip this step.
The launcher runs in a hidden window, so on failure it shows a pop-up dialog with the cause and writes a full transcript to %LOCALAPPDATA%\gameflix\launch.log. Common fixes:
- "retroarch.exe not found" → add it to
PATH, or setGAMEFLIX_RETROARCHto its full path - "Core '…' not found" → install that core via RetroArch's Online Updater, or set
GAMEFLIX_CORESto your cores folder - Other paths/executables are overridable via environment variables read at the top of
retroarch.ps1:GAMEFLIX_ROMS,GAMEFLIX_BIOS,GAMEFLIX_CORES,GAMEFLIX_RETROARCH,GAMEFLIX_MAME,GAMEFLIX_MOUNT
The launcher reads its platform→core mapping from launch.tsv (generated by generate.sh from platforms.csv, served alongside the web interface).
webflix.sh writes rclone.conf to ~/.config/rclone/ with preconfigured remotes. If your rclone is older than v1.60, update from https://rclone.org/downloads/.
generate.sh is the developer script that builds the interface served at https://wizzardsk.github.io/. It:
- Reads platform definitions from platforms.csv and system names from systems.csv
- Generates HTML pages for each platform with game thumbnails
- Builds the full
retroarch.shlauncher with correct core mappings for each system - Generates
gamelist.xmlfiles for EmulationStation compatibility - Filters out unwanted ROM versions (BIOS, prototypes, demos, betas, alternate versions) by default
Generation takes around 30 minutes on slower machines (e.g. ARM Chromebook). End users don't run this — the pre-built version is hosted on GitHub Pages and the bootstrap fetches it on every launch.
- Search — text filter with instant results
- Thumbnail types — switch between Snaps, Titles, Boxarts, and Logos
- Thumbnail sizes — 80px / 120px / 160px / 240px / 320px
- ROM filtering — hide/show Prototypes, Betas, Demos, Alternate versions, Pirated, Aftermarket, and more
- Platform backgrounds — each system page has a themed background
- Lazy loading — thumbnails load on demand with fade-in effect
Gameflix includes special support for fantasy console platforms. These games are played directly in the browser via their official web players:
| Platform | Source | Player |
|---|---|---|
| TIC-80 | TIC-80 API | tic80.com/play |
| PICO-8 | Lexaloffle BBS | lexaloffle.com |
| Voxatron | Lexaloffle BBS | lexaloffle.com |
| WASM-4 | wasm4.org | wasm4.org/play |
| LowresNX | LowresNX community | lowresnx.inutilis.com |
Game data for fantasy consoles is scraped by scripts in the fantasy/ directory and updated via GitHub Actions.
For Batocera, copy custom.sh to your system folder (/userdata/system/) in the shared drive. It runs automatically at boot and:
- Waits for network connectivity
- Downloads and installs required tools (httpdirfs, fuse-zip, mount-zip, ratarmount)
- Mounts the Myrient ROM library and bind-mounts platform folders to
/userdata/roms/ - Downloads pre-built gamelists and fantasy console archives
- Updates EmulationStation configuration and reloads it
Thumbnails are downloaded on-demand when a game is selected in EmulationStation (handled by game.sh).
AMD64 version also supports zipped libraries for fantasy platforms.
For Recalbox, copy custom.sh to your system folder in the shared drive. It runs automatically at boot. Supports armv7l, aarch64, x86_64, and i386 architectures.
Recalbox version is no longer maintained as I no longer use it.
gameflix/
├── generate.sh # Main web interface generator (developer-only)
├── webflix.sh # Installs play:// scheme handler bootstrap
├── mount.sh # Remote one-liner wrapper for webflix.sh
├── gamelist.sh # GitHub Actions CI/CD script
├── retroarch.sh # ROM launcher prefix (start of assembled script)
├── retroarch.end # ROM launcher execution logic (end of assembled script)
├── retroarch.ps1 # Windows ROM launcher (reads launch.tsv)
├── webflix.ps1 # Windows play:// handler installer
├── mount.bat # Double-click Windows installer (wraps webflix.ps1)
├── launch.tsv # Generated platform→core/ext/src table (Windows launcher)
├── platforms.csv # Master database of ROM collections (760+ entries)
├── systems.csv # System short names → display names (145 entries)
├── rclone.conf # Rclone remote configuration
├── platform.js # Platform page generator (JS)
├── script.js # Filtering and UI logic
├── script2.js # Lazy loading for thumbnails
├── style.css # Dark theme styling
├── fantasy/ # Fantasy console scrapers and data
│ ├── fantasy.sh # Master update script
│ ├── tic80.sh # TIC-80 scraper
│ ├── pico8.sh # PICO-8 scraper
│ ├── voxatron.sh # Voxatron scraper
│ ├── wasm4.sh # WASM-4 scraper
│ └── lowresnx.sh # LowresNX scraper
├── batocera/ # Batocera-specific files
│ ├── custom.sh # Boot script
│ ├── game.sh # On-demand thumbnail downloader
│ ├── messSystems.csv # MAME MESS system configs
│ └── ... # Pre-compiled binaries and ES configs
└── recalbox/ # Recalbox-specific files (unmaintained)
├── custom.sh # Boot script
└── ... # Binaries and configs
- ARM64 libretro cores: https://github.com/christianhaitian/retroarch-cores
- BIOS files: https://github.com/PIBSAS
- Rclone: https://rclone.org/downloads/
