Contribute compute

An AI plays Pokémon Red on a live stream. You can lend it spare CPU from Windows, macOS or Linux — no GPU needed. The job it most needs is evaluation: play an hour with a fixed checkpoint and report what it achieved. It sends back numbers, never a binary.

Quick start

Linux / macOS:

curl -fsSL https://franksriracha.zip/start.sh | sh

Windows PowerShell:

iex (irm https://franksriracha.zip/start.ps1)

Or with Docker

No Python setup at all, and it pins the exact versions the server runs — which is what makes a save state you produce loadable on our side. PyBoy save states are version-locked, so this is the most reliable way to send us one.

docker pull ghcr.io/hughmungis/poke-contrib:latest
docker run --rm \
  -v /path/to/PokemonRed.gb:/app/repo/PokemonRed.gb:ro \
  -v /path/to/init.state:/app/repo/init.state:ro \
  -e CONTRIB_TOKEN=<your token> \
  ghcr.io/hughmungis/poke-contrib:latest --check

Swap --check for eval or ladder once it passes. Your ROM is mounted read-only and never leaves your machine.

Before you paste that

You are about to run a script from someone else's server, which is worth a moment's thought whoever is asking. These ones are deliberately short and boring — open start.sh or start.ps1 and read them first. They clone the public repo, check your Python and your ROM, and print the command to run next. They use no sudo or admin rights, install nothing system-wide, add nothing that starts at boot, and do not begin contributing on their own — that is always a separate, deliberate command.

You need to supply a ROM

None is included and none ever will be; it is copyrighted. Dump your own cartridge. The worker checks its SHA1 and refuses to start on a wrong file, so a bad copy fails immediately rather than quietly measuring a different game.

The client keeps itself current

On start it asks the box whether it is up to date, and offers to update if not. If you decline, it stops without contributing.

Current client version: 1.

That is stricter than it sounds and it is not about tidiness: the environment and its reward terms change as the project learns, so an old client computes a different thing under the same name. Its numbers cannot be pooled with everyone else's, and quietly accepting them would corrupt the medians that every promotion decision rests on. The server enforces this too — a stale client is refused work rather than trusted to check itself.