A simulated fruit-fly brain (FlyWire connectome) plays Game Boy games on a 24/7 stream.
Find a file
claude 68228ef2a1 gb: decode the whole current map into a walkability grid
The walkable predicate answered for the ten-by-nine screen window and Unknown
everywhere else. MapGrid is the same rule over every tile of the loaded map:
block ids out of wOverworldMap, a blocks-to-tiles read of the tileset header s
blockset through the new bank-aware ROM read, the tileset s collision list as
before, and the TilePairCollisionsLand values as directed walls both ways.

The reader checks itself before it answers: the decode is compared against the
window predicate over the player s own neighbourhood, and a frame where the
window can answer for none of it -- a battle, a text box, a frame mid-warp -- is
refused, because wOverworldMap shares its bytes with the picture buffer. Every
refusal is named (GridRefusal) and leaves the window predicate in charge.

Cached per map id and size, so a map is decoded once on arrival rather than once
per question, and owned beside the session ledgers: never checkpointed.
2026-09-22 03:32:35 +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.4.1 release record 2026-09-22 02:23:36 +00:00
infra flybrain v0.4.0: public tree (history retained privately) 2026-09-21 15:09:46 +00:00
packages flybrain v0.4.0: public tree (history retained privately) 2026-09-21 15:09:46 +00:00
services gb: decode the whole current map into a walkability grid 2026-09-22 03:32:35 +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 flybrain v0.4.0: public tree (history retained privately) 2026-09-21 15:09:46 +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.