Photorealistic aerial concept of a Victorian valley at dawn with one glowing 500-metre survey square being added to the landscape
A survey of a world that does not exist yet · July 2026

The atlas that draws itself.

Vector World is a small generative model that writes geography the way a cartographer would — as terrain, roads, rivers and land cover, one connected 500 m square at a time — and a browser that turns each square into an explorable 3D world.

PLATE 00 · FRONTISPIECE TRAINED ON VICTORIA, AUSTRALIA 37°48′S 144°58′E
PLATE 01 · THE PROBLEMWHY PRETTY PICTURES ARE NOT WORLDS

Anyone can generate a landscape. Almost nothing can generate a place.

Modern image models paint gorgeous terrain in seconds. But a world you can walk through, build on and keep extending has obligations a picture never has: the road that leaves this square must arrive in the next one, the river must stay downhill, and the ground must never crack along a seam. And it all has to happen on demand, on modest hardware, with no world map planned in advance.

OBLIGATION 01

Continuity

Every new square borders up to four existing ones. Heights, slopes, roads, rails, rivers and forest boundaries must agree with all of them at once — exactly, not approximately.

OBLIGATION 02

Structure

A road must remain a road — an object with a centreline, a width and a class — so it can be validated, edited, rerouted and rendered in any style. Pixels bury that information.

OBLIGATION 03

Local growth

The world must grow only where someone explores it. No global seed, no planet-scale simulation, no precomputed map — the frontier is the only plan.

Generate pixels
Diffusion over aerial imagery is visually rich but structurally mute: no centrelines, no heights under the trees, no way to guarantee two tiles agree along their shared edge.
SET ASIDE
Simulate the globe
Classical procedural generation gets coherence from global plans — tectonics, hydrology, road graphs. Consistent, but it solves the whole planet before the first footstep.
SET ASIDE
Write vector programs
Generate a short, typed program describing the next square — parametric terrain, polygons, splines. A transformer invents the interior; deterministic geometry guarantees every edge.
CHOSEN
PLATE 02 · THE METHODREAL GEOGRAPHY → A LEARNABLE LANGUAGE

First, teach the model to read maps the way surveyors write them.

There is no invented training world. The state of Victoria, Australia — its actual roads, rivers, coastline, forests and elevation — is compiled into compact tile programs. The model never sees an image; it learns the notation of geography.

OpenStreetMap · roads, rail, water, land use FABDEM 30 m · bare-earth elevation ESA WorldCover · land-cover backbone
1

Tile

Cut the state into stable 500 m × 500 m squares on a metric grid.

2

Fit terrain

Replace the height raster with a few shared edge profiles plus Gaussian hills — a ~50-parameter surface per tile.

3

Canonicalise

Clip, repair, sort and quantise every feature by deterministic rules, so identical geography always spells identically.

4

Serialize

Write each tile as a variable-length DSL program and tokenize it — simple country is short, dense suburbs are long.

5

Train

An autoregressive transformer learns to complete a tile given its neighbours and their edge contracts.

108,173
source tiles serialised
302,116
neighbour training pairs
4,153
tokens in the vocabulary
500 m
edge of every tile

Each pair links a target tile to one existing neighbour and its shared edge; multi-edge training then composes random subsets of a tile's neighbours afresh every epoch, so the 302k stored pairs unfold into a far larger example space. Held-out splits are geographic, never random — whole regions are withheld, so validation measures genuine generalisation to unseen country.

PLATE 03 · THE CORE MOVEINTERACTIVE · CLICK TO EXTEND THE SURVEY

The model invents the middle. Contracts own the edges.

This miniature runs the real division of labour. Click any dashed square touching the map: every existing neighbour contributes an edge contract — road ports, river ports, forest intervals, terrain heights — which is copied exactly. The generator is free only in the interior. Watch roads and rivers carry on across every seam.

TILES 1 · CONTRACTS HONOURED 0
Edge contracts — last generation
Awaiting a click. Contracts extracted
from existing neighbours will be
itemised here.
  1. Inspect neighbours. Collect every existing tile touching the empty square — one to four of them.
  2. Extract contracts. Read heights, ports and land-cover intervals off each shared edge.
  3. Generate. The transformer writes the interior program token by token.
  4. Validate & repair. Deterministic geometry snaps near-misses onto every port, or rejects the sample.
  5. Render. The program becomes terrain and features; the world is one square larger.
Why this matters: because generation conditions on all existing neighbours, growing around an obstacle and closing the loop is not a special case — the closing tile simply arrives with more contracts to honour.
PLATE 04 · THE REPRESENTATIONINTERACTIVE · HOVER THE CODE OR THE MAP

A map tile is a program you can read.

Every tile is written in a compact domain-specific language: a terrain header, then polygons, then linear features, then an explicit end token. Hover either side — each statement is a piece of geography, and each piece of geography is a statement.

tile_657_11602.dsl · 100 m grid units · abridged
<TERRAIN>
EDGE W 84.1 84.6 85.2 86.0 86.7
EDGE N 86.7 87.4 88.0 88.3 88.9
GAUSS 0.61 0.34 0.21 amp +12
</TERRAIN>
<POLYGON forest>
M 0 40 C 60 18 118 30 138 78
C 150 128 96 170 30 158 L 0 132 Z
<HOLE> · a clearing survives the encoding
M 58 74 C 84 62 102 84 88 106
C 72 122 50 104 58 74 Z
</HOLE>
</POLYGON>
<POND> M 186 196 C 214 188 224 214 202 224
C 180 232 168 206 186 196 Z </POND>
<ROAD secondary width=4> · consumes W port @0.58
M 0 148 C 70 142 150 132 256 118
</ROAD>
<PATH track width=1>
M 96 143 C 88 122 82 112 74 96
</PATH>
<RIVER width=6> · consumes N port @0.72
M 184 0 C 176 70 208 120 196 190
C 192 214 206 236 210 256
</RIVER>
<END_TILE> · generation stops itself
+12 m
RED DOTS = PORTS CONSUMED FROM NEIGHBOUR CONTRACTS
TYPED

Meaning stays explicit

The road above is an editable object with a class and a width — not a ribbon of beige pixels. Everything the renderer, validator and editor need is in the text.

VARIABLE LENGTH

Complexity costs tokens

Open grassland compiles to a few statements; a suburb runs long. Across all 108k real tiles the median body is just 272 tokens, the dense urban tail runs to ≈8,900, and <END_TILE> lets each tile decide its own length.

DEFERRED

Buildings wait for v2

A suburban tile can hold 400–800 footprints — enough to drown the context window. v1 carries settlements as land-use polygons; a second-pass decoder will place buildings later.

Terrain that cannot crack — by construction.

Neighbouring tiles don't negotiate their shared border; they reference the same object. Each border's height profile is fitted once, from the global elevation model, and both tiles inherit it. A Coons patch stretches a surface between the four profiles, and interior hills are multiplied by a window that falls to exactly zero at every edge. Drag the slider — the interior can do what it likes; the seams cannot move.

INTERIOR HILL AMPLITUDE +24 m SEAM GAP Δ ≈ 10⁻⁶ m (float noise)
PLATE 05 · THE MODELSMALL, AUTOREGRESSIVE, HONESTLY MEASURED

A pocket-sized transformer that finishes maps.

The generator is a deliberately small GPT-style transformer — an 8-layer, 512-dimension, 8-head design totalling 33.7M parameters, not billions — because the representation, not the model, carries most of the intelligence. It reads the neighbours and their contracts as context, then emits the new tile's program one token at a time.

Context in

Every existing neighbour's program, tagged with its edge, plus the extracted contracts — rotated to a canonical orientation so one network serves all configurations.

NEIGH·WTERRAINFORESTROAD NEIGH·S CONTRACT·WPORT@0.58GENERATE

P(next token | everything so far)

Causal attention lets each new statement consult every neighbour and everything already drawn. A KV cache keeps repeated decoding cheap.

token + position embedding
8 × transformer block · causal attention
softmax over 4,153-token vocabulary

Program out

Statements stream to the browser as they are sampled — terrain first, so ground appears in under a second — then the validator enforces every contract before the tile is accepted.

<TERRAIN>POLYGONROADRIVER<END_TILE>

The context window is 8,192 tokens, and it was sized from the corpus rather than guessed. Measured across all 108,173 serialised tiles, the median tile is 270 tokens and the 95th percentile 1,648 — but the densest runs to 8,914, so four crowded neighbours plus their contracts can still overflow the window. That measurement is also why buildings are deferred to v2: hundreds of footprints per urban tile would spend the whole budget on the least interesting continuity problem.

Training, as it actually went

token cross-entropy per epoch · runs/serious → runs/serious-multiedge · log.jsonl, unedited
train lossvalidation loss

Three epochs of single-edge training (56 min each, 2.8 h in total), then ten epochs of fine-tuning on the full multi-edge task (5.6 h more). Validation is a geographically held-out region. The gap that opens at epoch 3 and then closes is the model absorbing the harder 2–4-edge examples — it settles at 1.572 by epoch 9 and holds there, below the single-edge floor of 1.587 — a better score on the harder task.

The learnability spike

125-tile pilot · 5.3M parameters · runs/stage2
trainvalidation

Before serious training, a tiny model was asked to memorise 125 tiles. Train loss collapses while validation rises — textbook memorisation. That is the point: it proves the DSL is learnable and the pipeline is sound, and that generalisation is a data problem, not a representation problem.

108 → 806
tokens / s · uncached → cached
0.46 s
until first terrain appears
6.1–7.0 s
full tile · target 5.0 s
1,005
automated web tests passing

Measured browser-to-server, three runs, local checkpoint. Honestly noted: the current single-edge checkpoint sometimes runs to its 4,500-token cap instead of emitting <END_TILE>, and road fidelity remains an open training problem — see the ledger below.

PLATE 06 · THE EVIDENCEREAL OUTPUT, STAMPED AND SOURCED

What the system can already prove.

The strongest claim in this project is quiet: the language is lossless enough to matter. Below, real Victorian geography goes into the DSL and is redrawn from the text alone. Drag the divider — everything on the right survives in a few kilobytes of program.

ACTUAL PIPELINE OUTPUT · DRAG TO COMPARE
Urban source map from raw GIS layers Same urban map reconstructed purely from the vector DSL
Coastal source map from raw GIS layers Same coastal map reconstructed purely from the vector DSL
SOURCE · RAW GIS LAYERS REBUILT · FROM DSL TEXT ALONE

Freeways, rail, the river, the lake, land-use blocks and the street hierarchy all round-trip. Fine local streets are simplified — deliberately: canonicalisation trades microscopic fidelity for a language small enough to learn.

ACTUAL MODEL OUTPUT Left: an existing neighbour tile plus a model-generated continuation. Right: the same neighbour with the real withheld ground truth.
The model's homework, marked honestly. Left: a real tile plus the model's generated continuation. Right: the continuation nature actually built. Land cover, terrain and the arterial road port carry across the seam plausibly; the invented street pattern is far sparser than the real suburb — this is precisely the behaviour the multi-edge training is working on.
ACTUAL BROWSER RENDER Browser 3D scene of dozens of Victorian tiles rendered as suburbs from the air
Fifty-one tiles, one scene. Real pipeline tiles streamed into the Three.js renderer: roads, rail, land use and procedural building massing, navigable in orbit, fly and walk modes.
ACTUAL BROWSER RENDER Browser render at ground level showing rain, forest, a lake and a town in the distance
Standing inside the data. The same vector programs at human scale — forest polygons become trees, a pond becomes a lake shore, weather and lighting are the renderer's contribution. The program stays a few kilobytes.
Reading the labels: every plate stamped ACTUAL in this section is produced by this project's pipeline, model or renderer — nothing here is illustrative. The opening and closing vistas are concept art of where the work is pointed.
PLATE 07 · THE LEDGERSTATE OF THE SURVEY · 27 JULY 2026

A mature pipeline wrapped around a model mid-education.

The representation, the continuity mathematics, the renderer and the end-to-end loop are demonstrated. The central open risk is exactly the one you'd expect: generation quality when several contracts bind at once.

✓ Holds today

  • Real Victorian GIS data compiled into canonical vector programs, and rendered back faithfully
  • Terrain continuity exact by construction — shared edge profiles, Coons interior, edge-windowed hills
  • Click → contracts → generate → validate → stream → 3D materialise, live end to end
  • Road-port repair snaps near-miss connections onto the contract
  • Interactive renderer with weather, camera modes, LOD vegetation and persistence
  • 1,005 automated web tests plus pixel-level render checks

○ Still open

  • The multi-edge model must master 2-, 3- and 4-contract fills — training in progress
  • The current checkpoint sometimes omits roads, or fails to emit <END_TILE>
  • Generated street density undershoots real suburbs (see the marked homework above)
  • Rivers and lakes need terrain carving to stay visible in 3D
  • Long rollouts, inpainting, and the v2 building decoder are designed but unbuilt
PLATE 08 · THE THESISWHY THIS SHAPE OF SYSTEM

Four properties you only get from this architecture.

01 · LOCAL

Pay only for footsteps

No global seed, no planet simulation. Cost scales with explored frontier, so an infinite world runs on a laptop — and any saved world can keep growing from any edge, forever.

02 · GUARANTEED

Hard rules stay hard

Neural networks are probabilistic; borders are not. By moving continuity into deterministic contracts and validators, the creative component is structurally unable to crack the world.

03 · LEGIBLE

The world is source code

Every road, river and forest is a named, editable statement. Select it, reroute it, re-render it in any style, or hand the same program to a different engine entirely.

04 · MODULAR

Each layer improves alone

Data pipeline, model, validator and renderer are separate contracts too. A better checkpoint drops in without touching the renderer; buildings can arrive later as a specialist decoder.

Photorealistic concept: a country road and stream crossing a faint glowing tile seam without any discontinuity
THE PROMISE UNDER ALL OF IT

Let the model propose geography. Let geometry keep the promises.

When this road crosses a generated seam, nothing should announce it — no ridge in the asphalt, no jump in the creek, no change in the country's character. Vector World is the bet that a small model writing honest notation, inside hard constraints, is how you get there.