A simulated fruit-fly brain (FlyWire connectome) plays Game Boy games on a 24/7 stream.
Find a file
acamilo ddf0743395 a trainer's challenge is not the cartridge refusing a step
Section 12.4 and row 37 read a macro the cartridge ended by taking the
joypad as a refusal and wrote the target blocked and the tile pushed on
the spot. A trainer who sees the fly takes the joypad the same way. In
the Pewter Gym the walk toward the leader crossed the Jr. Trainer's
sight line, and BROCK went into the blocked ledger for ten brain minutes
while the fly lost, blacked out and walked back to a room whose way out
was the pad again.

The entries now wait for the cartridge to give the joypad back: back in
the overworld is a refusal, written as before; a battle is a battle and
teaches the ledgers nothing. Tests for the rung's people off the screen,
facing one of them, and the challenge; the two push-back tests now hand
the joypad back before they read the ledgers.
2026-09-23 11:48:57 +00:00
.forgejo/workflows flybrain v0.4.0: public tree (history retained privately) 2026-09-21 15:09:46 +00:00
.github/workflows flybrain v0.4.0: public tree (history retained privately) 2026-09-21 15:09:46 +00:00
apps/stage stage(describe): the public repo URL on the card 2026-09-22 02:08:31 +00:00
data/fafb-v783 flybrain v0.4.0: public tree (history retained privately) 2026-09-21 15:09:46 +00:00
docs docs: v0.5.4 status, and the unstick rule 2026-09-23 11:26:32 +00:00
infra docs: macros.md 12.21 and the row 57 audit 2026-09-23 10:10:03 +00:00
packages session types: shared decoderConfigDigest vectors from both decoder presets 2026-09-23 09:00:12 +00:00
services a trainer's challenge is not the cartridge refusing a step 2026-09-23 11:48:57 +00:00
tools flybrain v0.4.0: public tree (history retained privately) 2026-09-21 15:09:46 +00:00
.gitignore flybrain v0.4.0: public tree (history retained privately) 2026-09-21 15:09:46 +00:00
CLAUDE.md flybrain v0.4.0: public tree (history retained privately) 2026-09-21 15:09:46 +00:00
CONTRIBUTING.md flybrain v0.4.0: public tree (history retained privately) 2026-09-21 15:09:46 +00:00
LICENSE flybrain v0.4.0: public tree (history retained privately) 2026-09-21 15:09:46 +00:00
LICENSES.md flybrain v0.4.0: public tree (history retained privately) 2026-09-21 15:09:46 +00:00
Makefile flybrain v0.4.0: public tree (history retained privately) 2026-09-21 15:09:46 +00:00
NOTICE flybrain v0.4.0: public tree (history retained privately) 2026-09-21 15:09:46 +00:00
package-lock.json session types: shared decoderConfigDigest vectors from both decoder presets 2026-09-23 09:00:12 +00:00
package.json flybrain v0.4.0: public tree (history retained privately) 2026-09-21 15:09:46 +00:00
README.md flybrain v0.4.0: public tree (history retained privately) 2026-09-21 15:09:46 +00:00
ROM-POLICY.md flybrain v0.4.0: public tree (history retained privately) 2026-09-21 15:09:46 +00:00

flybrain

A simulated fruit-fly brain that plays video games. A connectome-constrained spiking network reads the screen, its population rates become controller inputs, and a scalar reward nudges a bounded set of Kenyon-cell to MBON gains.

The library is @flybrain/brain in packages/brain. It holds the connectome dataset format, the LIF kernel, the plasticity rule, the population-rate readout and the activity-map geometry. It holds no game, no emulator and no reward rules: those belong to whatever embeds it.

Workspace layout

Path Contents
packages/brain the library (@flybrain/brain)
data/fafb-v783 FlyWire-derived browser artifacts (CC BY-NC 4.0)
tools/ the Python builder that regenerates data/ from official Codex exports
docs/ overview, dataset format, model, plasticity, readout, integration, limitations, verification
services/flysim the Rust service: brain, emulator, snapshot feed, control API, checkpoints
apps/ planned: one directory per game demo
infra/ planned: deployment for the 24/7 stream (see docs/streaming-plan.md)

Quick start

npm ci
npm test
npm run typecheck

76 tests, about 7 seconds. There is no build step. npx tsx packages/brain/examples/node-random-frames.ts 60 runs the full 139,255-neuron brain with the Game Boy readout on noise frames in plain Node (about 0.9x Game Boy real time single-threaded on a WSL laptop).

Usage

import { NeuralAgent, gameboyDecoderConfig, toButtonMask } from '@flybrain/brain';
import { loadBrainDatasetFromDir } from '@flybrain/brain/node';

const dataset = await loadBrainDatasetFromDir('data/fafb-v783');
const agent = new NeuralAgent(dataset, { decoder: gameboyDecoderConfig() });
agent.warmup(firstFrame);                        // 2,500 ms with plasticity off, then calibrate

// every emulator frame:
const { active } = agent.tick(framebuffer, {     // RGBA 160x144 by default; any size via config
  rewards: [{ value: 0.5 }],                     // scalar rewards your game adapter detected
  boot: !inGame,                                 // relaxes Start/Select throttling on title screens
});
emulator.setButtons(toButtonMask(active));

const checkpoint = agent.exportState();          // bit-exact resume, validated on import

The lower layers (LifNetwork, RewardModulatedStdp, PopulationDecoder) are exported too for hosts that want to run the loop themselves.

integration.md has the full per-frame loop, the fractional frame timing and the checkpoint contract.

Documentation

  • Overview: the pipeline, the layer map and the design principles.
  • Dataset format: artifacts, CSR layout, weight encoding, every role and its count, fingerprinting, regeneration, license.
  • Model: the 1-ms LIF kernel step by step, every default constant, the retina projection, the RNG, state export and version strings.
  • Plasticity: edge selection, the eligibility and reinforcement equations, statistics, topology hash and the explicit non-claims.
  • Readout: scores, exclusive groups, pulse channels, the blocked-direction cooldown, the Game Boy preset table and checkpoint versions.
  • Integration: what a game must provide, the Pokemon Red integration as a worked example, and a sketch of a platformer adapter.
  • Limitations: what is not claimed, what is unproven, measured throughput.
  • Verification: the oracle-test strategy and what each test file covers.
  • Streaming plan: headless capture, Twitch, VM design and the phased plan for a 24/7 stream.
  • Artifact builder: how to regenerate and verify data/fafb-v783.
  • Data attribution: source, license and citations.

Provenance

The network, plasticity rule, readout, FlyWire pipeline and activity viewer were extracted from the fly-plays-pokemon prototype so several game demos can share one core. The default configuration reproduces that prototype's kernel bit for bit, and verbatim copies of its modules live in packages/brain/tests/legacy/ as oracles. Built with Astra.

Licensing

The data/fafb-v783 artifacts are derived from the FlyWire FAFB public Codex v783 exports and are licensed CC BY-NC 4.0. That is a non-commercial license, so a commercial demo needs a different data source or separate permission. Citations and the list of modifications are in data/fafb-v783/ATTRIBUTION.md.

No license has been chosen for the code in this repository yet.

ROMs and save states never enter this repository.