Symbol atlas
A single JSON file for anyone building a place out of symbols โ made for the Invisible Rooms trial, useful to anything that needs a symbol and a figure in one lookup. 1,130 symbols, 316 of this bestiary's figures reachable through them, and 13 referents that both corpora portray at once.
The file
https://jawnomicon.com/babelon/symbol-atlas.json
โ one file, no key, no rate limit. Built 2026-10-16 from jawnomicon export
v49 at canon b69142c7.
The other five
The atlas is the symbol half. The figure half is four more files under the
same path, split by concern so that something wanting the character vectors
does not download the prose to get them. Each size is what lands on disk,
then what production sends compressed. Every one is too big for a fetch tool
that summarises or truncates; download with curl. Python's urllib
needs a User-Agent header of its own, or it is refused.
figures.json- 419 KB (75 KB compressed). Who is who: all 692 figures with aliases, traditions, regions, affinity family, the reference works that name them, and the page URL. Fetch this to turn a name into a URL โ the slug carries a batch prefix and rewrites apostrophes, so it cannot be built from a name.
eidogen.json- 1.03 MB (114 KB). The 29-axis character model, numbers only, with a confidence per axis. Read the not-applicable convention first: that string is a sentinel for an axis that does not apply, never a low score.
relations.json- 727 KB (79 KB). The graph โ which figures carry which motifs, powers, traditions, regions and classes. A relation cites its warrant as a span into our own description rather than copying the sentence.
descriptions.json- 3.98 MB (1.18 MB). The prose, plus the per-axis note behind each eidogen score. All of it machine-written, for every figure without exception. What is attested is which books name a figure, not this.
vocab.json- 351 KB (97 KB). The controlled vocabularies the ids key into. Without it, relations.json is a list of opaque strings.
The five figure files name the same export_version and
canon_commit, so two of them describing different corpora is
visible rather than silent. The atlas is built separately and keeps its
versions under manifest.sources.jawnomicon; this copy is from
export v49.
What a symbol carries
gloss- One sentence saying what the symbol denotes, across the traditions that attest it. Written here, from reading; never quoted from a reference work.
attestations- How many independent source works carry an entry for it. Two is the floor โ a single-source symbol cannot be told apart from one compiler's idiosyncrasy.
caveatshomonymormulti-referent. The row holds more than one referent, so it cannot say which one it means. If you build a room on a caveated symbol, decide which referent the room is about and say so.domain- Where the symbol sits in a symbol-domain taxonomy โ a world (Creation and Cosmos, Animal World) and a subcategory โ with the size of its sense and furniture sets. Sizes only; see below.
creatures- Figures proposed as bearing the symbol, each
{id, status, evidence}, whereevidenceis the sentence of the figure's own description the link was read from. Each link isstatus: "ratified"(its band was checked by a blind sample audit) or"proposed"(read out of our prose, not yet reviewed). 86 of the symbols carry these so far; an absent slug means not yet surveyed, not bears nothing. denotation_neighbours- Symbols whose gloss names this one and whose name this one's
gloss returns โ
anvilandhammer,libraandscales,leadandsaturn. Only reciprocal pairs are published; one-directional mentions pick up accidents, and those wait for a human. Each peer carries the gloss sentence it was read from. canon_creature- The seam. One referent that both corpora portray โ as a figure on one side, as a symbol-domain on the other. Neither portrayal is corrected into the other.
What the seam looks like
unicorn is at once a canon figure and a symbol-domain, because
two bodies of reference work portray the same referent differently. The
atlas keeps both readings rather than picking one:
{
"name": "Unicorn",
"portrayals": [
"symbol",
"creature",
"domain"
],
"registry_id": "unicorn",
"canon_creature": "1_unicorn",
"domain": {
"world": "Spirit World",
"sub": "Mythical Beings",
"furniture_count": 40
}
} What is not in it
No text from any third-party reference work. The symbol-domain entries carry their taxonomy position and the size of their sense and furniture sets, never the senses or the furniture themselves โ those phrases are extracted from copyrighted dictionaries and encyclopaedias, and this file is built in a mode that omits them and a test that enforces the omission. The glosses are ours and you may quote them.
No coordinates either. A symbol here is a set of things it points at, not a
position on a scale โ how adaptable is bloodstone
is not a question
the sources answer.
Using it
Read the JSON directly if you would rather. Otherwise take the reader: it is served from this directory too, it is Python standard library only, and it needs no install and no repository.
curl -O https://jawnomicon.com/babelon/symbol-atlas.json
curl -O https://jawnomicon.com/babelon/atlas.py
python3 atlas.py symbol hammer
Three files live here: symbol-atlas.json,
atlas.py (the CLI) and
mcp_server.py (a stdio MCP
server over the same data, with the tools symbol_lookup,
symbol_search, figure_lookup,
figure_search, figure_relations,
figure_profile, room_seed and
convergence). Put them in one directory: the server imports
the CLI and will not start without it.
Starting a room from something attested
python3 atlas.py seed --world "Animal World"
python3 atlas.py seed --linked # only symbols that carry a figure A seed is a symbol with a place in the taxonomy, a count of how much furniture its sources give it, and โ if one is proposed โ a figure that bears it, with the sentence the link was read from. It is a starting point with a citation behind it rather than a mood.
Following what a symbol points at
python3 atlas.py symbol womb
python3 atlas.py search mirror womb returns cave, mother,
wall and well as peers, because each of those
glosses names the other. Following peers is how you get a second room that
belongs beside the first without being the same room.
Checking the rooms have not become one room
python3 atlas.py convergence path/to/invisible-rooms/rooms This one needs no atlas at all โ point it at a directory of room files. It reports which words the rooms already share, how many share each, and whether every room's mechanism is present and is a single sentence. Moods are why twenty rooms turn into one room; this measures that drift directly, so run it before writing the next one rather than after writing ten.
As an MCP server
{"mcpServers": {"babelon-atlas": {
"command": "python3",
"args": ["/path/to/mcp_server.py"],
"env": {"BABELON_ATLAS": "/path/to/symbol-atlas.json",
"BABELON_ROOMS": "/path/to/invisible-rooms/rooms"}}}} Freshness
The file is rebuilt and committed by hand, not on a schedule. Its manifest carries the export version and the commit of each repository it was built from, so a stale copy can always be told from a current one.