Read this in French / en français.
neurarium is my modest attempt at a 3D brain encyclopedia where every fact is backed by a reputable source (a reference medical textbook, an online pharmacology database, a research paper), reorganized into an intuitive 3D brain you can rotate, pull apart, search, and click through.
Brain knowledge normally lives scattered across atlases, pathway diagrams, receptor tables, and drug monographs. neurarium lays it onto a single 3D model so the relationships (which region projects where, which receptor sits in which structure, what a drug does and to what) are visible at a glance instead of reconstructed in your head. Because the dataset is machine-assembled, every fact carries a colored grade telling you how well it is sourced, so you always know how much to trust it.
Live at neurarium.olicorne.org.
Important
90% of the 2129 knowledge nodes are sourced or verifiedin the shipped dataset, and every fact in the app carries a provenance grade you can inspect (see How does the sourcing work?).
Warning
Work in progress: it very likely contains mistakes. The anatomy (regions, shapes, projections, descriptions) is not yet reviewed or sourced and may contain model hallucinations; the drug data is machine-extracted (psychiatric drugs from Stahl's Prescriber's Guide, other substances from measured PDSP Ki affinities) and likewise unreviewed. neurarium is an early tool for exploring and learning or finding sources but not as a primary clinical reference: do not rely on it, and never bet a patient's care solely on it.
- What kind of information is inside?
- Who made neurarium?
- Why did you make it?
- Is it free?
- How do I run it myself?
- How does the sourcing work?
- What are the sources?
- How can I reuse the data?
- What's the license, and why?
- What's on the roadmap?
- What is it built with?
- How do I give feedback or get in touch?
What kind of information is inside?
Four layers of data on one model, all clickable:
| Layer | What you see | What you can do with it |
|---|---|---|
| Anatomy | Cortical lobes, basal ganglia, diencephalon, limbic, and hindbrain as one procedural 3D mesh | Rotate, explode on a slider to reveal the deep nuclei, go transparent, peel away the near side, or isolate a single structure |
| Wiring | Neuron projections as directed arrows, colored by type (excitatory, dopaminergic, ...) or by excitatory/inhibitory sign | Click a pathway for its route, transmitter, and sources; play a named functional circuit as a traveling pulse |
| Receptors & targets | Receptors plus other molecular targets (transporters, enzymes, ion channels) | Focus one: the brain dims to the structures expressing it (scattered with glowing dots), beside its class, sign, and every drug acting on it |
| Drugs | Psychiatric drugs (from Stahl's Prescriber's Guide) alongside recreational and other psychoactive substances (LSD, MDMA, ketamine, cocaine, nicotine, ...), and open to more: a drug is just a row of sourced bindings, so any substance with published affinities can be added | Focus one: effect-colored dots (boost / block / modulate) animate over the regions it touches, beads flow along the transmitter systems it works through, and the panel shows its structure, class, bindings, and each binding's source |
| Everything | One search box; fully URL-addressable state | Search regions, pathways, receptors, and drugs at once; pivot from a drug to its class or from a target to every drug that hits it; share any view as a deep link |
Under the hood it is a graph of nodes. A node is any sourceable datum: a brain region, a projection between two regions, a functional circuit, a receptor, a receptor's expression in a given region, a drug, a single drug-to-target binding. Nodes interlink, so a detail panel is a view of one node plus every node linked to it, and you explore outward from whatever you clicked.
Who made neurarium?
Initialy built in less than a week by Olivier Cornelis, french developer and resident psychiatrist, with the help of Claude Code.
Why did you make it?
It began as a few-days demo during my medical residency, and it has kept absorbing new kinds of data more easily than expected. The recurring frustration it answers: the facts you need to reason about the brain are true but scattered, its regions in one atlas, its wiring in another, its receptors in a table, its drugs in monographs, so you spend your effort reconstructing the connections instead of using them. Putting them on one map, each with a visible source grade, makes those connections the thing you look at.
As a strong believer in the usefulness of reorganizing information as structured data, I believe this kind of interactive, source-graded viewer could be useful beyond psychopharmacology, and I would happily build similar animations for other medical topics. If you think a map like this would help your teaching or research, please get in touch.
Is it free?
Yes. It is free to use at neurarium.olicorne.org, free and open source (see the license), and the underlying data is free to reuse (see How can I reuse the data?). No account, no tracking beyond basic anonymous usage counts, no paywall.
How do I run it myself?
The page loads its data with fetch(), so it must be served over HTTP (not opened from
disk). The served site is public/. From the repository root:
python tools/serve.py # serves public/ with caching disabled
# or: cd public && python -m http.server 8000Then open http://localhost:8000/.
For deployment there is a hardened Caddy container under
docker/; the full data flow and module graph are in
ARCHITECTURE.md.
How does the sourcing work?
Because the dataset is large and machine-assembled, the honest question for any node is how do we know this? Every source shown in a panel answers it inline with a colored provenance pill. The goal is that every node carries a source, and the pill makes the gaps visible. From weakest to strongest:
- orange
NOSOURCE: no source or reference for that node yet. - grey
?(LLM-only): produced by a model from memory, unchecked; may be a hallucination. - yellow
~(sourced): from the cited document, but the node itself was not quote-verified. - green
✓(verified): a model extracted a quote, it was programmatically confirmed present in the cited source, and a second model agreed it supports the node. Highest grade available, and still model-driven.
The grade is part of the data, upgraded as each node is checked, so the coverage below is a real count:
90% of the 2129 knowledge nodes in the dataset are sourced or verified. A node is any sourceable datum (a region, a pathway, a receptor, a drug binding, ...). This is a programmatic count (tools/update_readme_stats.py, from the emitted data), not hand-typed:
Wikipedia reference links ██████████████████████████ 100% 308/308
Drug nomenclature (NbN) ██████████████████████████ 100% 116/116
Brain-region anatomy ██████████████████████████ 100% 52/52
Projection groups ██████████████████████████ 100% 10/10
Functional circuits ██████████████████████████ 100% 6/6
Drug target bindings █████████████████████████░ 97% 965/993
Receptor system/family █████████████████████████░ 96% 54/56
Neuron pathways █████████████████████████░ 96% 52/54
Receptor expression regions ████████████████████████░░ 94% 360/383
Drug class ███████████████████████░░░ 90% 156/173
Target expression regions ██████████████████████░░░░ 85% 82/96
Target classifications █████████████████████░░░░░ 80% 16/20
Receptor mechanism class ██████████████░░░░░░░░░░░░ 54% 30/56
Target tone polarity █████████████░░░░░░░░░░░░░ 50% 1/2
Receptor sign (excit./inhib.) ██████░░░░░░░░░░░░░░░░░░░░ 23% 13/56
Receptor pre/postsynaptic site ████░░░░░░░░░░░░░░░░░░░░░░ 14% 8/56
What are the sources?
Every ~ and ✓ grade is checked against one of the sources below. Each is a standard, widely cited reference in its field, not a casual web page:
| Source | Field | Grades here |
|---|---|---|
| Prescriber's Guide: Stahl's Essential Psychopharmacology, 8th ed. | Clinical psychopharmacology | Drug bindings, nomenclature, class |
| Kandel, Principles of Neural Science, 6th ed. | Neuroscience (standard textbook) | Neuron pathways, region anatomy |
| Stahl's Essential Psychopharmacology: Neuroscientific Basis, 5th ed. | Psychopharmacology (mechanisms) | Receptor & target mechanism |
| Carlat Medication Fact Book for Psychiatric Practice, 7th ed. | Clinical psychopharmacology | Drug bindings (cross-check) |
| Nieuwenhuys, Voogd & van Huijzen, The Human Central Nervous System, 4th ed. | Neuroanatomy (CNS atlas) | Region anatomy, connectivity |
| IUPHAR/BPS Guide to Pharmacology (GtoPdb), tissue distribution | Molecular pharmacology (IUPHAR/BPS database) | Receptor & target expression regions |
| PDSP Ki Database (NIMH PDSP) | Receptor binding pharmacology | Drug binding affinities (Ki) |
| Allen Human Brain Atlas, microarray (Hawrylycz et al. 2012) | Brain transcriptome atlas (microarray) | Receptor & target expression regions |
Wikipedia sits outside the table above. The drug and structure descriptions and the
molecule images are fetched live from the current Wikipedia article at runtime (under
CC BY-SA), so the dataset ships no
copyrighted prose. A live fetch is a verbatim, programmatic read that cannot drift from
the source, so in the app these carry a green ✓ pill; they are tallied as reference
links (the "Wikipedia reference links" row in the coverage above), kept separate from
the knowledge-node total.
The book references are copyrighted, so only the tooling that uses them is committed,
not the text. Anyone holding a copy can reproduce the extraction and confirm every
✓-graded quote: drop the Stahl PDF into data_sources/books/stahl/ and three
committed scripts rebuild exactly what the gate checks against:
uv run tools/fetch/pdf_to_pages.py # the PDF -> one Markdown file per page
uv run tools/fetch/build_index.py # the per-drug page index
python tools/check_data.py # re-verifies every quote is on its cited pageHow can I reuse the data?
The anatomy is plain structured data, kept deliberately separate from the
rendering. Under public/data/ it is split by node kind (one JSON object per line)
beside a self-describing meta.json (colour and legend maps plus the sourcing tally)
and one geometry file per shape. It is generated from a single source of truth
(tools/generate_data.py, with the drug list in tools/data/drugs_data.jsonl), so the
plain JSONL/JSON is easy to consume from another engine.
| File | What it holds |
|---|---|
structures.jsonl |
Brain regions (position, group, geometry ref, sources) |
projections.jsonl |
Neuron pathways (from -> to, transmitter, sign, sources) |
circuits.jsonl |
Named functional circuits |
projection_groups.jsonl |
By-transmitter / by-effect pathway groups |
receptors.jsonl |
Receptors: classification + expression regions, each graded |
drugs.jsonl |
Drugs: bindings (target, action, Ki), class, nomenclature |
Each row of every file carries its own provenance grade and source, so the graph stays
self-describing. For how to extend the dataset, the per-tool reference, and the
emitted-data field contract, see tools/README.md. The data is under
the same license as the code.
What's the license, and why?
GNU Affero General Public License v3.0 (AGPL-3.0).
I chose a strong copyleft license on purpose: anyone is free to use, study, modify, and build on neurarium, but any reuse or hosting of it (including a modified version run as a website) must keep its source open under the same terms. The point is to keep the work and its data freely available and prevent it from being closed off into a proprietary fork. Drug descriptions and molecular-structure images come from Wikipedia, used under CC BY-SA.
What's on the roadmap?
A sample of the planned directions, none fixed in order: more animation of activity and signal flow across the brain; more substances with their commercial brand names; pathologies mapped onto regions, circuits, and transmitter systems; deeper pharmacology (CYP enzymatic interactions, second-order receptor effects); consistency checks that flag self-contradicting data; and toward full sourcing, lifting every node's grade from grey toward green as it is checked.
What is it built with?
Deliberately lightweight, with a small attack surface and no build step:
- Frontend: vanilla ES modules + three.js loaded via an
import map and vendored under
public/vendor/three, so the page runs no third-party script at runtime and works offline. No framework, bundler, ornode_modules. - Data:
tools/generate_data.py(Python standard library only) emits the anatomy aspublic/data/(meta.json+*.jsonl+shapes/*.json), fetched at runtime. - Serving: a hardened Caddy container (non-root, read-only rootfs, dropped capabilities, resource limits, strict Content-Security- Policy) behind a TLS-terminating reverse proxy.
- Debugging: an eruda on-screen console,
loaded only in dev or with
?debugso it never ships to normal visitors.
For the viewer's file-by-file map and the non-obvious rules, see
CLAUDE.md.
How do I give feedback or get in touch?
Found a bug, an anatomical or pharmacological inaccuracy, or have a feature request? Please open an issue on this repository. Corrections to the regions, projections, receptor, and drug data are especially welcome, as are ideas for what else belongs on a map like this.
For anything else, or to talk about a similar viewer for another medical topic, you can reach me on my website.
