Human brain data, rendered from the public releases, with the provenance of every number kept attached to it.
Live, eleven pages, all from the same dark instrument panel:
| Page | What it draws |
|---|---|
| A cubic millimetre | H01, cell by cell: 49,379 somas and 104 proofread neurons |
| The white matter | 87 HCP bundles, with a signal running along them at a velocity you set |
| Sensorimotor map | The cortex painted from a 360-area atlas, its measured cables, the deep structures under it, sixteen signal walks, and a skull if you type one |
| Every area | The same stage with all 360 parcels lit |
| Deep structures | Under the cortex: thalamus, striatum, pallidum, hippocampus, amygdala, accumbens |
| Region pages | One page per deep structure, each with a live atlas hero and a nuclei viewer |
| Circuits | The sixteen signal walks in plain language |
| Pain | What is actually known about pain in the brain, by evidence class |
| Spiral waves | A labelled schematic rotating wave over the touch map |
| Retinotopy | Visual field maps on the surface |
| Microseconds to decades | Twenty things a brain does, on two logarithmic axes |
| Earth to a synapse | The scale ladder, all the way down |
| Credits | Every source, generated from the data files rather than written |
The rule the whole site is built on: never make the visualization more certain than the science. Every rendered claim carries an evidence class, and the drawing changes with it. Measured is computed here from a dataset's own shipped derivatives and drawn solid, with n and method stated. Atlas is population reference anatomy, translucent or badged. Association is cohort-level, dashed and undirected, never drawn as wiring. Schematic is a textbook cartoon, dotted and labelled as one. Where a source cannot support a claim, the page says so on the canvas rather than in a footnote: the spiral wave page states that its wave is hand built, the thalamus viewer names the nuclei its atlas cannot resolve, and the tractography never says which way a signal travels, because diffusion MRI cannot know.
- Where movement and touch live on your cortex, M1, S1 and their neighbours painted from the HCP-MMP1 atlas
- Pain is a changing system, seven lenses on pain in the nervous system, every claim labelled by its evidence class, with a certainty control that empties the map as the bar rises
The first page is H01, the cubic millimetre of human temporal cortex imaged by serial section electron microscopy by the Lichtman laboratory at Harvard and the Connectomics team at Google. It shows all 49,379 cell bodies in the volume in the place the microscope found them, the release's seven cortical layer surfaces, and the 104 cells that were proofread by hand.
Shapson-Coe A, Januszewski M, Berger DR, et al. A petavoxel fragment of human cerebral cortex reconstructed at nanoscale resolution. Science 384, eadk4858 (2024). https://doi.org/10.1126/science.adk4858
This repo is not affiliated with that project. It only reads what the project
made public, at gs://h01-release. Cite their paper, not this page.
A woman of forty five had epilepsy that medicine could not control. The focus was in her hippocampus, and reaching it meant removing the cortex above it, which would otherwise have been discarded. The block was fixed within minutes, stained, set in resin, and cut into 5,019 sections averaging 33.9 nm. Each was imaged at 4 nm per pixel. It came from the front of the middle temporal gyrus, runs the full depth of cortex into the white matter, was found normal on neuropathology, and produced 1.4 petabytes.
*.html eleven pages, each self-contained: markup, CSS, one module import
js/holo3d.js shared canvas plumbing: nothing renders off screen, REDUCED lives here
js/brain-surface.js the cortical surface stage: lighting, picking, bloom, GLB loading
js/holo-timeline.js the animation layer: to/drive/call/wait/seek, collapses under reduced motion
js/somatotopy.js the big one: paint, deep structures, connections, signal walks, skull, HUD
js/nuclei-view.js the deeper-than-deep viewer, one component over two nuclei atlases
js/column.js H01: 49,379 cell bodies plus the seven layer surfaces
js/cells.js H01: the 104 proofread cells, one at a time
data/*.json 42 manifests, each carrying its own citation, licence and caveats
data/*.bin packed binaries: somas, tracts, surface labels, measured maps
meshes/ Draco glTF: cortex, subcortex, thalamus, nuclei, cells, layers, skull
scripts/*.py 40 offline pipelines; every one refuses to write on a failed check
scripts/build_credits.py regenerates credits.html by reading the data files
vendor/three/ three.js, vendored rather than pulled from a CDN
vendor/scifi-ui/ the UI kit, carried verbatim with deviations noted in each header
docs/ the agent handbook and the per-topic data notes
There is no build step, no framework, no bundler and no CDN. Opening a page
in a browser is the whole development loop, and python3 -m http.server is
the whole server.
tracts.html steps back about eight orders of magnitude from the first page.
- 87 named white matter bundles from the HCP1065 population-averaged tractography atlas, 1,065 subjects, CC-BY-SA 4.0. Yeh FC, Nat Commun 13, 4933 (2022).
- The HCP S1200 group-average cortical surface, fs_LR 32k, MSMAll, 32,492 vertices per hemisphere.
- Functional parcellations on that surface: the Yeo 7 and 17 resting state networks (Yeo et al., J Neurophysiol 106, 1125, 2011) and the Glasser HCP-MMP1 360 region parcellation.
Everything is openly downloadable with no account and no data use agreement.
Registration is exact, not eyeballed. The tracts and the surface arrive in
different spaces. They are aligned by the affine carried inside each .trk
header, and fetch_hcp.py refuses to write the index unless five anatomical
facts hold: the left corticospinal tract lands on the left, it runs from the
brainstem to the vertex, the left arcuate arches frontal to posterior temporal
on the left, and the corpus callosum crosses the midline.
The animation is a measurement. Every vertex carries how far along its own streamline it sits, in millimetres, from the real geometry. The shader divides that by a conduction velocity you pick to get an arrival time, so a 134 mm corticospinal tract genuinely takes longer to cross than a short cingulum segment, in the correct ratio. A fixed slow-motion factor stretches the clock so there is something to watch, and the page states the factor: at 60 m/s a real crossing takes 2.24 ms, which is faster than one screen refresh.
scales.html puts twenty things a brain does on two logarithmic axes, how big
against how long, from an ion channel opening in ten microseconds to a cortex
thinning over decades.
Every box is tagged with where its numbers came from. Measured means a script in this repo produced it from data in this repo. Cited means it is a published range nobody here measured. The page never blurs the two, and six of the twenty are measured:
- A human action potential. Whole cell current clamp from a human cortical neuron, DANDI dandiset 000293, CC0. Threshold -36.6 mV, amplitude 51.7 mV, half width 0.25 ms, rising at 309 V/s, all measured off the sweep.
- An alpha rhythm switching off. Scalp EEG from one person with eyes closed then open, PhysioNet, ODC-BY. Closing the eyes multiplies alpha over theta by 8.2 at channel Oz.
- Voltage inside a living hippocampus. Depth electrodes, OpenNeuro ds007095, CC0.
- Myelin across sixty years of adult life. Myelin water fraction in 45 people aged 18 to 79, Faizy et al. 2018, CC BY 4.0. Parietal white matter falls with age at r = -0.89; the corticospinal tract does not, at r = -0.09.
- Plus the spatial anchors measured from H01 by
scale_anchors.py.
Two faults the scripts now assert against, both found by checking rather than by looking. The action potential's rate of rise was first computed against the wrong time spacing and came out as 300 million volts per second; the script now refuses to write a spike that is not tens of millivolts tall, under a millisecond wide and rising at hundreds of volts per second. And the hippocampal recording has one channel pinned against the amplifier rail that never goes positive, so the script picks the unclipped channel and prints the state of both.
The order matters: build_data.py reads the layer meshes with trimesh to work
out the pial surface, and it wants them uncompressed.
python scripts/fetch_h01.py somas
python scripts/fetch_h01.py layers
python scripts/fetch_h01.py cells --lod 3
python scripts/build_data.py
bash scripts/draco.sh meshes/cells
bash scripts/draco.sh meshes/layers
python scripts/fetch_hcp.py tracts # 588 MB download, cached in .cache/
python scripts/fetch_hcp.py surface
bash scripts/draco.sh meshes/cortex
python scripts/reindex_after_draco.py # per-vertex arrays follow Draco's order
python scripts/scale_anchors.py
python scripts/fetch_signals.py
# the deep structures and their nuclei
python scripts/build_subcortex.py /path/to/yetianmed-subcortex
python scripts/build_thalamic_nuclei.py # seven thalamic groups
python scripts/build_cit168_nuclei.py # sixteen subcortical nuclei
python scripts/build_area_tracts.py # which bundles reach each of the 360 areas
python scripts/build_bodymap.py # the measured ds004044 body map
python scripts/build_credits.py # always last: regenerates credits.htmlEach pipeline prints what it checked. If a check fails it writes nothing and says which anatomical fact it could not confirm, which is the point: a layer earns its place by passing checks, not by existing.
Needs cloud-volume, trimesh, pandas, and npx for
@gltf-transform/cli. The cell meshes take about twenty minutes to pull and
the same again to compress.
somatotopy.html is the largest page and the one most of the others feed
into. It paints the HCP-MMP1 atlas onto the S1200 group surface, and on top of
that: measured cables for every one of the 360 areas, computed by
build_area_tracts.py from endpoint proximity in the tract atlas; the
Melbourne Subcortex Atlas meshes under a ghosted cortex; sixteen staged signal
walks whose measured hops ride real tract geometry and whose schematic hops are
drawn as dotted arcs so the two can never be confused; the measured ds004044
body map, where washed-out colour honestly means the winning body part barely
beat the runner-up; and a skull, from BodyParts3D, if you type the word.
region.html gives each deep structure its own page, and under the prose a
nuclei viewer: the thalamus split into the seven groups a diffusion atlas
resolves (Najdenovska et al., CC BY-SA 4.0), the pallidum split into its two
halves with the subthalamic nucleus and substantia nigra beside it, and the
rest of the deep nuclei from CIT168 (Pauli et al., CC BY 4.0, traced on a 700
micrometre template of 168 adults). Inside the thalamus a projections toggle
draws its measured radiations.
Two honesty rules govern that viewer, both documented in docs/DEEP_NUCLEI.md.
One analytic layer, one atlas: CIT168 and the Melbourne parcellation share only 29
to 71 per cent of their volume where both define the same structure, because a
manual tracing and a functional parcellation are not drawing the same
boundary, so nothing is warped to reconcile them. Coloured close-up pieces
stay within one atlas; the complete Melbourne parent surface is separately
styled and toggleable context, not a boundary match. And the thalamus stays
at seven groups because the finer
atlases cannot be redistributed: THOMAS carries no licence at all on Zenodo,
and the FreeSurfer histological atlas ships under terms that forbid it.
spirals.html draws a rotating wave over the touch map and says plainly,
on the canvas, that the wave is hand built: rotating waves centred on
somatosensory cortex are measured in mice, the authors call human
generalisation undetermined, and the human spirals that are measured turn at
fMRI speed rather than the speed of the headline. The anatomy under it is real
and the wave's centres come from the atlas labels, but the motion is a
schematic and never pretends otherwise.
pain.html is the strictest page: every claim about pain in the brain
carries its evidence class and its n, and the page refuses to draw the
popular-science version of anything.
The class grouping is the paper's, not a guess. The soma table names eleven
classes and never says which are neurons. The grouping used here is the one
that reproduces the paper's own figures from the table exactly, to the
individual cell: 16,087 neurons, 32,315 glia, 10,531 of the neurons spiny. The
class that settles it is C_SHAPED. Counted as a neuron, none of the three
totals match. Counted with the glia, all three come out right. build_data.py
asserts this on every run and prints match or MISMATCH per figure.
Depth is distance to a surface, not a coordinate. The block is a tilted slab and the cortical surface curves inside it, so depth cannot be read off any axis. Subtracting X spreads layer 1 across 2.7 mm; projecting onto the best straight line through the layer centroids still spreads it across 2.6 mm. Depth here is the true distance from each cell to the outward face of the release's layer 1 region. The check is that nobody fitted it: measured that way each layer's lower edge meets the next layer's upper edge to within 60 µm or better, all the way down, and those seams are printed on every build.
The layer 1 label is doing duty as a catch-all. Testing all 49,379 labels
against all seven layer meshes, every label's best match is its own mesh, so
the column is sound. But layer 1 is the weakest: 78 per cent of the cells
carrying it fall inside the layer 1 mesh against 85 to 99 per cent for the
others, and 7 per cent fall inside no layer mesh at all, out in the corners of
the block. Its band is marked reliable: false in data/somas.json and left
off the depth ladders rather than drawn as though it were as good as the rest.
The meshes are level of detail 3 of the release's multiresolution mesh, roughly 22 thousand faces where the full one is 2.7 million. The levels simplify the surface rather than prune the arbor, so every branch is there and the skin is smoother than the microscope saw it. The face count shown is counted off the loaded geometry, never quoted from a manifest.
No cable length is shown, because none is published for these cells and estimating it from a decimated mesh would be a number with no source.
Built on the same dark, instrument-panel language as
the MICrONS mouse cortex page,
CA3 renderings and
scifi-ui. No build step, no
framework, no CDN. Everything hover-driven has a tap path and respects
prefers-reduced-motion.
The code here is MIT. The H01 data is the Lichtman laboratory's and Google's, released publicly by them under their own terms; see the H01 release.