Repository navigation
Releases: Ibtisam-Mohammad/Fly.exe
Release list
v0.1.0 — Twelve embodied flies on the full MaleCNS connectome
Twelve Drosophila bodies in one MuJoCo scene. Each one executes its own copy of the
MaleCNS v1.0 Traced universe — 165,122 of the 166,700 annotated bodies, and all
25,563,197 edges between them, brain and ventral nerve cord — every 15 ms coupling
interval on one RTX 3060, over a single shared connectivity allocation. Nothing steers a body
but two descending population rates read out of its own network.
What the recording measured
Flies placed uniformly over a 30 mm disc and aimed at random under seed 11, 30.0 simulated
seconds, against an identical-seed control with the visual encoder held at baseline:
| exact | stimulus-absent | |
|---|---|---|
| flies that entered the locomoting state | 12 / 12 | 0 / 12 |
| flies that ended within 1 mm of an object's surface | 12 / 12 | 0 / 12 |
| neurons spiking per fly per coupling interval | 9,337 | 164 |
| straight-line displacement | 5.0 to 25.6 mm | 3.0 to 7.3 mm |
| ended nearer a food object | 12 / 12, median +11.48 mm | 8 / 12, median +2.25 mm |
Eleven of twelve ended against a food sphere and the twelfth against a pillar. They were
stopped by the object rather than deciding to stop: the decoder has no transition out of its
locomoting state, so a blocked fly keeps being commanded forward, and "within 1 mm" is a
two-dimensional thorax-centre distance minus the object radius, not contact telemetry. The last row is the one to be careful about, and the video says so on screen: a
standing body drifts forward along its own axis, and headings are bounded so that food lies
inside the encoder's mapped visual field, so the control leans the same way. Closing distance
to food is not the discriminator. Ending against an object is — 12 of 12 against 0 of 12.
What is not claimed
Flies do not collide with each other. FlyGym gives every fly geom contype 0 and this
world writes no fly-fly contact pair, so two bodies pass through one another; objects stop
them, other flies do not. They are coupled through vision only, and that vision is an
analytic scene oracle — each encoder is handed exact positions and radii and computes bearing
and angular size, with no pixels, rays, occlusion or colour anywhere in the loop. Onset is
on a timer: every fly stands still for 1.5 s by construction and then needs its drive held
above threshold for 150 ms, so all twelve start at 1.665 s. The timer sets when; the
stimulus sets whether, and the control never starts at all. This is one seed and one
arena, the third, built after measuring two that failed.
validation_tier_awarded is null and evidence_grade is false in both the run summary
and the render manifest. This demonstrates machinery and validates no biology. Also printed
on the video frames rather than hidden here: the gait is a published pattern generator, not
the simulated ventral nerve cord; all 66,533 photoreceptor output edges are zeroed by the
frozen unresolved-sign policy, so light enters one synapse downstream; the encoder has no
colour channel and cannot tell food from a pillar except by angular size; flies aggregate
because a nearby fly is a large object in the visual field, which is not social behaviour;
and rendering on the machine that produced these files was software rasterisation.
Two properties are checked rather than asserted. One fly driven through SwarmWorld and
through Demo01VisualBody under an identical command sequence agree to 0.0 on every one
of 133 qpos components, and the multi-object encoder reproduces the frozen single-cue
encoder to 1.1e-13 Hz. Both are in tests/test_swarm3d.py.
Corrected 2026-09-14 after a third-party audit
The video and the manifest attached here were re-rendered from the same recording to fix two
things the audit found. One shot caption claimed the onset of walking was "descending
activity, not a timer"; it is a timer, and the caption now says so. The manifest recorded
gl_renderer: "unknown" with hardware_accelerated: true for a render that llvmpipe drew
every frame of; the probe now opens its own context and the manifest reads
llvmpipe (LLVM 20.1.2, 256 bits), hardware_accelerated: false.
The audit's seventeen findings were all checked against the code and all held. Three were
claims the repository made and could not support -- the two above, plus fly-fly collision,
which does not happen. The full record, including the four findings that were true but
under-disclosed and the six controls this run does not have, is in
ADR-2026-023.
Assets
| file | size | what it is |
|---|---|---|
swarm3d-showcase.mp4 |
41.5 MB | the renderer's own output: 1920x1080, 30 fps, 1:38, 2,940 frames |
swarm3d-showcase-web.mp4 |
19.0 MB | the same frames re-encoded at CRF 26; this is the copy in the repository |
swarm3d-30s-cut.mp4 |
13.8 MB | a 30 s cut: the establishing shot, the twelve-brain grid, and the exact-versus-control panel |
RELEASE-SHA256SUMS |
checksums for all three |
Re-encoding is the only difference between the first two: no frame, caption or camera is
regenerated. The run summaries, the render manifest and the repository's own SHA256SUMS
are in artifacts/showcase/swarm3d-v1/.
Reproducing it
Recording and rendering are separate by construction: the run records whole-scene qpos once
per coupling interval and no frames at all, and the replay path refuses a world that has ever
been stepped, so rendering cannot advance a simulation.
PYTHONPATH=src python scripts/run_swarm3d_showcase.py \
--duration-s 30 --variant exact --variant stimulus-absent --progress
PYTHONPATH=src python scripts/render_swarm3d_showcase.py \
--run RUN_DIR/exact --control RUN_DIR/stimulus-absent \
--out artifacts/showcase/swarm3d-v1/swarm3d-showcase.mp4 --progressAbout 33 minutes of wall clock per variant on one RTX 3060 at 4.2 GB of device memory.
Profiled on this run's own kernel, a 15 ms coupling interval is 497 ms of GeNN kernels, 124 ms
of MuJoCo physics for twelve bodies, 39 ms of device reads and 25 ms of encoding and decoding.
The stepping phase is device execution rather than submission overhead — the 150 step_time()
calls enqueue in 2.9 ms while the barrier after them takes 497 ms — and each step moves about
317 MB, because every neuron reads and writes nine inSyn accumulators, one per source degree
bucket, on top of its own state and RNG. That is 95 GB/s sustained, 26% of the card's
360 GB/s; real time at this traffic would need 3.2 TB/s. scripts/profile_swarm_interval.py
reproduces the breakdown.
The lightweight reference engine runs with no dataset and no GPU:
uv sync --extra data --extra render && uv run flysim run eon-demo --seed 1 --headless.
Three properties of the frozen visual route this showcase measured
Two arenas were built, measured and discarded before this one. Each failure is a measurement
of the frozen DEMO-01 loop that no previous experiment had made, and all three are kept in
ADR-2026-023 rather than
quietly replaced:
- Salience is angular, so near and thin beats far and fat. A 1.3 mm pillar at 8.6 mm
subtends 8.72°; a 2.2 mm food sphere at 20.4 mm subtends 6.19°. Nine of twelve flies locked
onto a pillar at the first interval and never switched. - A directional start geometry can pass the null control. With every fly facing inward,
the stimulus-absent control ended 12 of 12 nearer food at +3.99 mm — a null control that
looked like a result, purely because standing drift runs along the body axis. - The route has a blind zone exactly where the declared retina map ends. Targets beyond
the declared −10° to +160° azimuth span drew 0.000–0.03 Hz of descending drive and a yaw
command of −0.001, and those flies walked straight out of the arena.
Documentation: operator handoff ·
status · sources