The brain
What is actually running.
This page is the part of the site you should read before believing the rest of it. It says where the wiring comes from, how the wiring becomes activity, how the activity becomes a brush stroke, and which parts of that chain are measured biology and which are choices somebody made.
01 · the wiring
A connectome is anatomy, not activity
In September 2026 HHMI Janelia's FlyEM team, the Cambridge Connectomics Group and Google Research published the complete central nervous system of an adult male fruit fly: brain, both optic lobes and ventral nerve cord, imaged by electron microscopy at nanometre resolution and reconstructed with flood-filling networks, then proofread by people. It tells you every wire. It tells you nothing about what the brain is doing — the release makes no functional claim, and neither does this page.
We read three flat files from the public bucket: the pre→post synapse counts (traced bodies only), the per-body annotations
(type, superclass, side, soma position, and for the optic lobe the hex column each cell belongs to), and the per-body predicted
neurotransmitter. run.py build keeps the 165,122 neurons whose status is Traced, drops pairs with fewer than three
synapses as reconstruction noise, and writes one signed sparse matrix. Acetylcholine gets +1, GABA and glutamate −1, monoamines 0
rather than a made-up sign. That matrix is the fly.
02 · the activity
Leaky integrate-and-fire, after Shiu et al. 2024
Every neuron is the same simple unit: rest −52 mV, threshold −45 mV, membrane time constant 20 ms, 2.2 ms refractory period, 0.2 ms steps. When a neuron spikes, each of its targets receives sign × synapse count × 0.275 mV. Those numbers are the ones that reproduced sugar-evoked proboscis extension from the female connectome alone; we did not tune them.
Two things are added that the anatomy does not contain, and both are logged. Background noise: each step, 0.1 % of neurons receive a 2 mV kick, drawn from a seeded generator, so the network never goes silent and the run replays identically. One global gain: LIF units have none of the adaptation and gain control real neurons have, and under steady retinal input the released weights alone drive the whole network into a seizure within milliseconds. A single scalar multiplies every synapse, and a slow controller nudges it to hold the population between 2 and 8 Hz on average. Its value is recorded with every window and every piece. Per-cell-type gains exist as a knob and are all 1.0 today.
03 · the eye
892 columns look at the canvas
A 256 px patch of the canvas centred on the brush. Luminance only — a fly's lamina is a luminance map, which is why the paper is dark and the paint is light.
Each column drives one L1 cell (ON: brighter than a moment ago, or than the mean) and one L2 cell (OFF). L1 and L2 are the lamina monopolar cells directly behind photoreceptors R1–R6.
The release assigns every columnar optic-lobe neuron a hex column (assignedOlHex1/2). Our 892-column lattice is matched to those coordinates for one eye, so retinotopy is the fly's own, not a projection we invented.
04 · the hands
Descending neurons, read as a brush
05 · learning
The one place a weight moves
In a fly, learning happens at the Kenyon cell → MBON synapse under dopamine, and it is subtraction: a Kenyon cell active shortly before a dopaminergic neuron fires has that synapse depressed. We implement exactly that — depression with a floor and a slow drift back for forgetting, no potentiation. Which MBONs are reward-side and which punishment-side is decided by comparing each MBON's total PAM input with its total PPL1 input in the released wiring, not by a table.
The dopamine signal is where a person steps in: fresh canvas is the reward, hitting the edge is the punishment. A fly is rewarded by sugar. This is the mechanism a fly uses, pointed at a thing a fly would never care about.
06 · provenance
Replay it, don't trust it
Every sitting starts from a 32-bit seed. The seed decides the brush's starting point and the background noise; everything else is
the anatomy. The finished PNG is hashed, and the hash and the seed are written to the chain next to the token by
mint(to, uri, pngSha256, seed). With the same graph.npz (its SHA-256 is in every piece) the command below
re-runs the sitting and reports whether the pixels match.
git clone https://github.com/bnbhacker/connectome-canvas && cd connectome-canvas pip install -r requirements.txt python run.py fetch # ~540 MB from storage.googleapis.com/flyem-male-cns, no account python run.py build # -> build/graph.npz, 165,122 neurons python run.py replay 12 # MATCH or DIFFERENT, with both hashes
Sources
Credit where the wiring came from
Data. Male CNS connectome v1.0 — HHMI Janelia FlyEM, the Cambridge Connectomics Group and Google Research, CC-BY 4.0, gs://flyem-male-cns.
Model. Shiu, P. K. et al. "A Drosophila computational brain model reveals sensorimotor processing." Nature 2024 — the LIF parameters and the 0.275 mV per synapse. Lappalainen, J. K. et al. "Connectome-constrained networks predict neural activity across the fly visual system." Nature 2024 — the case for driving the optic lobe with real retinotopy.
Precedent. The idea of wiring this connectome to a cursor through DNa02 / DNa01 / MDN / DNp09 was done first, and openly, by flybrain (MIT). Canvas Fly is a separate implementation that points the same anatomy at a canvas instead of a launchpad.
Not affiliated with any of the above. Canvas Fly is an art experiment, not an investment.