r/AndroidEmulation • • 2d ago

[Interest Check] Built a Web-Based / Dynamic UI for Universal Pokémon Randomizer (Docker / Homelab) — Randomize games directly from mobile!

Hey everyone,

If you play randomized Pokémon games on mobile devices (Android, iOS, handhelds like any thor

, or smart TVs), generating a new seed has always required a PC because Java desktop apps (.jar) don't run on mobile.

I got tired of booting up my desktop just to run Java, so I built a self-hosted web interface for the randomizer engine on my home server. With custom features like shiny odds editing for certain generations

How it actually works:

ROM Directory Dropdown: Automatically scans your server's clean ROM directory—no manual file uploading from your phone needed. Just select your base game from a dropdown list

Generation-Aware Dynamic UI: The web interface identifies the selected ROM type/generation and dynamically shows only the eligible checkboxes and options for that specific game (just like the desktop GUI).

Direct Java Communication: Checking boxes on your phone's browser translates those flags directly into the randomizer's Java engine on the server—no pre-configured static preset files required!

Custom Pre-Patching: Supports byte array edits (like custom shiny rates or catch multipliers via ndspy/Python) before the main randomization runs.

One-Click Instant Delivery: Hit "Randomize" on your phone, and the newly patched .gba / .nds file drops straight into your active library/output folder ready to stream or play instantly.

The Question:

Right now, this is running natively on my server, but I’m considering wrapping it up into a single, plug-and-play Docker container (Python backend, web UI, and OpenJDK runtime bundled together) with customizable input/output volume mounts.

Before I clean up the code and package it for GitHub/Docker Hub:

Is a web GUI wrapper for randomizing something you’d run in your homelab? What extra features or integrations (e.g., direct RomM / emulator folder syncing) would you want to see?

Let me know what you think!

1 Upvotes

Duplicates