Why not let an AI generate the meshes?
The obvious route was image-to-3D. I installed the models locally on my GPU and tested them: Hunyuan3D (2, 2.1, 2mv), TRELLIS.2, MeshAnything V2 and DeepMesh.
They fail in exactly the way a film set cannot afford. Single-image models invent the back side — a street sign came out with one post instead of two. And when reduced from about 390,000 to 2,000 triangles, a sensible budget for a scene, they fall apart.
The decision: places are 100 % Blender code. AI meshes only get in when the final model is correct from every side.
The decision: a set is code
Every place is a Blender Python script written by Claude Code agents, in real metres. Low-poly happens by construction — flat colour materials, boxes and extrusions, about 100 to 1,000 triangles per object — not by decimating afterwards. Changing an object means changing a number.
Two pipelines came out of it:
| A · Streets from an address | B · Places written as code | |
|---|---|---|
| Input | an address, a place name or coordinates | photos or cited written research |
| Geometry | generated from geodata by one Blender generator | one Blender script per place, written by an agent |
| Result | a street block in metres, georeferenced | a set with an open front for the camera, baked light, characters |
Pipeline A: one command from an address
- Geocode. Nominatim (OpenStreetMap) turns text or coordinates into a location, country and type of place.
- Streets and buildings. OpenStreetMap — streets, widths, lanes, buildings, levels, roof shapes, trees — via the API, with three public Overpass servers as fallback.
- Footprints and heights. Overture Maps, read straight from the public S3 bucket as Parquet. The slowest step.
- Official 3D buildings. Berlin’s LoD2 CityGML — walls, roofs, eaves heights — converted into the same local metres as OSM. Priority: LoD2 over Overture over OSM, and every choice is logged with its reason. A first version of Alexanderplatz came from OpenStreetMap alone; the official data adds the real roof shapes and building parts.
- Facade colours, optional. Street View is used only to sample a median colour per facade; only the colours are stored, no images. Off by default, because it is billed.
- Build. Blender 4.5 headless builds the scene in 2–3 seconds; the result goes to the viewer.
Every step is cached and timed in a report. A background queue takes requests; a full run from an address takes about 2–3 minutes end to end — for example the main square of Wrocław, with 221 buildings from Overture.
Rules instead of eyeballing
- An architectural audit on every build: no window above the eaves, nothing on fire walls, no tree or lamp post inside a building or in front of a door, no car in a camera’s view. The rejected cases are counted in the report.
- A body check for sets: a collision grid measures seats, knee room, the narrowest aisle and head clearance against the characters’ body measurements, with a top-view sheet as proof.
- A camera check: shots where the speaking character is hidden are rejected and replaced by an over-the-shoulder camera.
- A person decides: every model is approved in the viewer, from all sides — there is no automatic comparison against the photos.
Pipeline B: a café from two photos
Interiors and landmarks do not come from an address. An agent writes one script per place. The café in Neukölln came from two photos: olive walls, fringed lamps, flowered sofas, a purple velvet curtain, a big shop window, the counter with the espresso machine and the chalkboard — in a 9 × 7 m room, with seat heights adjusted to the low-poly characters.
Landmarks come from cited research written into the header of each script — the Brandenburger Tor with its 12 Doric columns, the U8 station at Alexanderplatz from public descriptions.
The light is baked on my own GPU with Cycles (the café: 71 seconds). One trap worth knowing: under WSL2, OptiX reported the GPU but baked at CPU speed.
Result and honest limits
30+ sets in 10 days — about ten street scenes from geodata and 22 places written as code, including 13 Berlin places registered in a single night run.
What it does not do (yet):
- “Address to scene” covers street exteriors only; interiors are written per place.
- LoD2 tiles are fetched by hand; only a few are available locally.
- Floors and facades follow heuristics (3 m per floor, a window grid, style rules per place); landmarks are hand-coded.
- The files are heavy for the web; the models on this page are compressed copies.