Back to Home

Set up your Plex arcade library

StreamPocket plays retro games hosted on your own Plex server. No ROMs, BIOS files or emulator binaries are bundled with the app. You provide everything from your personal library. This guide walks through the one-time setup so the app can discover and load your content.

Based on the ES-DE layout

The directory structure described here matches the one used by ES-DE (EmulationStation Desktop Edition). If you already manage your collection with ES-DE, you're 90% of the way done: scrape your ROMs from ES-DE (covers, screenshots, descriptions, videos), then run a small batch rename to .mp4 and drop the tree into Plex. Same for the cores folder once the download script is available.

On this page
  1. What you need
  2. Create the Plex library
  3. Folder structure overview
  4. Why everything ends in .mp4
  5. Get the libretro cores
  6. Add BIOS files (PSX, NeoGeo...)
  7. Add your ROMs
  8. Optional: covers, screenshots, gamelists
  9. Troubleshooting

1 What you need

2 Create the Plex library

Open Plex Web, go to Settings → Libraries → Add Library:

  1. Library type: Other Videos. This is critical: do not use Movies or Shows, or Plex will try to match titles against TheMovieDB and pollute your collection with fake metadata.
  2. Name: Arcade (case-insensitive, but exactly that word). The app discovers your arcade content by looking for a library named "Arcade".
  3. Add Folders: point it at the directory that will hold your arcade content (e.g. D:\Plex\Arcade, /mnt/storage/arcade, etc.).
  4. Advanced → Scanner: leave the default Plex Video Files Scanner.
  5. Advanced → uncheck "Use local assets" and disable extra agent fetching if available. There's nothing for Plex to look up online and you'll save scan time.
Why "Arcade" exactly?

The app scans the active server for a library whose name matches "Arcade" (case-insensitive). Any other name and the arcade rail entry will stay hidden.

3 Folder structure overview

Inside your Arcade root, the layout is:

Arcade/
├── cores/                           # libretro emulator binaries
│   ├── nes/
│   │   ├── fceumm-arm64-v8a.mp4
│   │   ├── fceumm-armeabi-v7a.mp4
│   │   └── fceumm-x86_64.mp4
│   ├── snes/
│   │   └── snes9x-arm64-v8a.mp4
│   └── psx/
│       └── pcsx_rearmed-arm64-v8a.mp4
│
├── bios/                            # optional, shared BIOS files
│   ├── SCPH5501.mp4                    # PSX (US)
│   └── SCPH5502.mp4                    # PSX (EU)
│
├── nes/                             # one folder per platform, lowercase
│   ├── Super Mario Bros.mp4
│   ├── Metroid.mp4
│   ├── covers/                       # optional
│   │   └── Super Mario Bros.mp4
│   ├── screenshots/                  # optional
│   │   └── Super Mario Bros.mp4
│   └── gamelists/                    # optional (ES-DE metadata)
│       └── gamelist.mp4
│
├── snes/
│   └── ...
│
└── psx/
    ├── Tomb Raider.mp4                # renamed .chd
    ├── covers/
    └── screenshots/

Three levels matter:

4 Why everything ends in .mp4

Plex was built to scan video, music and photos and ignores files it doesn't recognise. Renaming every file to .mp4 tricks Plex's scanner into indexing them, so the app can list and download them from your server through the normal Plex API. Plex never tries to play the file (the app does that), so the rename is purely cosmetic on disk.

What to rename:

5 Get the libretro cores

Emulator cores are the libretro .so binaries published nightly for Android. Drop them under cores/<platform>/ renamed to <core>-<abi>.mp4. Each core is downloaded from:

https://buildbot.libretro.com/nightly/android/latest/<abi>/<core>_libretro_android.so.zip

Unzip, rename the .so to <core>-<abi>.mp4, drop it under cores/<platform>/.

Helper script coming soon

A small script that automates downloading, unzipping and renaming all cores into the right folder structure will be released soon. In the meantime the manual route above works fine.

6 Add BIOS files (PSX, NeoGeo...)

A few systems require original BIOS files the emulator cannot supply. Drop them into arcade/bios/ renamed to .mp4 (the base name, no inner extension needed). The app reads them from there and copies them to the system folder the core expects.

Common ones:

BIOS files

BIOS files are copyrighted by their respective platform holders and we cannot redistribute them. You need to dump them from your own hardware or source them legally.

7 Add your ROMs

Drop one ROM per file directly under the platform folder, renamed to .mp4:

arcade/
└── nes/
    ├── Super Mario Bros.mp4              # was .nes
    ├── The Legend of Zelda.mp4           # was .nes
    └── Metroid.mp4                       # was .nes

Some platforms expect a specific archive format:

Legal note

Only host ROMs you legally own. We cannot link to ROM sources and the app ships with none.

8 Optional: covers, screenshots, gamelists

The browser screen can show a cover, an in-game screenshot, a focus-dwell video preview and rich metadata (year, players, description...) for each ROM. All optional: without them the app just shows the filename.

Easy path: scrape with ES-DE

If you have a large collection, the painless way is to scrape it inside ES-DE first. ES-DE downloads covers, screenshots, gameplay videos and descriptions, and writes a gamelist.xml per platform matching what this app reads. After scraping, all you need is a small rename pass (covers, screenshots, videos, gamelist.xml and ROMs to .mp4) and drop the tree into your Plex Arcade library.

Covers, screenshots, videos

Drop them in the matching sub-folder, named exactly like the ROM:

arcade/nes/
├── Super Mario Bros.mp4              # the ROM
├── covers/
│   └── Super Mario Bros.mp4          # JPEG / PNG renamed
├── screenshots/
│   └── Super Mario Bros.mp4
└── videos/
    └── Super Mario Bros.mp4          # short gameplay loop

Gamelist metadata (ES-DE format)

Drop the gamelist.xml that ES-DE produced into a gamelists/ folder under each platform, renamed to gamelist.mp4:

arcade/nes/gamelists/gamelist.mp4   # the ES-DE gamelist.xml

The app parses it and uses the entries to enrich the right-hand detail panel: localised title, year, developer, number of players, description.

9 Troubleshooting

The Arcade icon doesn't show up in the rail

"Could not download the libretro core"

The app couldn't find a core for that platform matching your device's CPU. Check that cores/<platform>/<core>-arm64-v8a.mp4 exists in your library (or armeabi-v7a for older devices).

"No BIOS files found" in the logs (PSX, etc.)

The game starts but I don't see covers, screenshots or descriptions

MAME says "ROM not found" or "imperfect video"

MAME romsets are version-specific. mame2003_plus expects MAME 0.78 romsets; mame2010 expects MAME 0.139; modern mame expects the matching current set. Mixing versions is the most common cause of "ROM not found" errors.

Game audio works but video stutters

Many classic games are natively 30 fps (most PSX 3D titles, Crash Bandicoot, Final Fantasy VII...) or 25 fps in PAL. That's the original hardware behaviour, not the emulator. Try a PSX title that was 60 fps natively (Tekken 3, Ridge Racer NTSC, Tony Hawk Pro Skater) to confirm.

10 A note on performance

Emulation runs entirely on your TV device, not on the Plex server. The server only stores and serves the files; the CPU and GPU doing the work are whatever silicon your TV has. So the experience varies a lot between devices.

Rule of thumb with the cores listed here:

If a specific game stutters on your hardware, that's the limit of the CPU/GPU emulating the original console, not something the app or your Plex server can fix.

That's it

Once your Plex library is laid out like this, the app handles the rest: discovery, download, caching, save states, controller mapping, in-game pause menu, multi-player. Open the rail, go to Arcade, pick a platform, pick a game. Have fun.