[03]entry 3 of 29
hugostrange
this entry is written twice, in full
- 1.in brief
2D architectural drafts → editable, photoreal 3D
- 2.in general
Parametric 3D reconstruction from flat floor plans. No diffusion roulette.
- 3.in particular
Recovers a real, editable scene graph from 2D drawings, path-traces it with Cycles, and exposes every parameter to Claude over MCP.
- 1.in brief
flat architectural drawings turned into a real, editable 3D building
- 2.in general
Builds a proper 3D model out of a 2D floor plan. No AI guessing at what the walls were.
- 3.in particular
It recovers the actual building, renders it photographically, and lets an AI assistant change any part of it without inventing anything.
context
Architecture studios revise constantly, and every revision round needs renders that stay dimensionally true. Diffusion models make beautiful pictures of buildings that don’t exist and can’t be edited. Built for Inscribe Architects’ real client work: floor plans and elevations in, a photoreal render out, with the geometry still true on revision five.
the one decision
Parametric reconstruction, not image-space generation. The pipeline recovers the actual model (rooms, walls with thickness, openings with sills and swings) into a strict, typed scene graph (pydantic v22, millimetres everywhere) that is the single source of truth. Nothing bypasses it: not the renderer, not the editor, not Claude. That makes an "edit" a mutation with an edit_log entry (who changed what, when, and whether it was human, pipeline, or Claude), not a regeneration.
what i built
- 1.
The full pipeline: PDF/raster ingestion → segmentation → wall vectorization (snap near-parallel runs, close ring gaps) → OCR room classification → scene graph → CSG geometry5 with manifold boolean opening cuts → watertight glb
- 2.
A refuse-to-guess gate: anything the drawing doesn’t encode (ceiling heights, sill heights, north orientation) becomes a required param that hard-stops geometry generation until explicitly resolved; suggestions ride along but are never applied without a logged confirm
- 3.
Headless Blender/Cycles rendering: auto-framed camera, Nishita sky, materials bound by node name, quality presets
- 4.
An MCP4 edit server (Phase 2): move_wall, set_material, resolve_param; when a mutation needs an unconfirmed value, Claude asks in chat instead of inventing a number
- 5.
Race-safe Supabase8 render-job queue for GPU workers; 56 tests spanning geometry booleans to CLI contracts
outcome
Floor plan → correctly-dimensioned watertight model → photoreal render, end to end. Honest engineering at the hard part: zero-shot segmentation on scanned hand-drafted plans isn’t production quality, so hand-labeled fixtures drive the pipeline while a SAM2/U-Net fine-tune trains, and the fixture format doubles as the labeling target, so no labeling work is throwaway. Diffusion survives in exactly one place: a bounded, masked material patch on fixed geometry. Never for structure.
An edit is a structured mutation against ground-truth geometry, not a re-prompt into a model that will happily bend your walls.
context
Architecture practices revise constantly, and every round needs pictures that are still dimensionally honest. Image-generating AI makes beautiful pictures of buildings that do not exist and cannot be corrected. This was built for a working practice’s real client work: plans and elevations in, a photographic render out, with the building still measurably right on the fifth revision.
the one decision
Rebuild the actual building; do not paint a picture of one. The process recovers the real thing, rooms, walls with a thickness, openings with sills and a direction they swing, into a single strict model measured in millimetres, and everything goes through it: the renderer, the editor, and the AI. That makes an edit a recorded change, with a note of what moved, when, and whether a person, the pipeline or the assistant moved it, rather than a fresh roll of a picture.
what i built
- 1.
The whole run: read the drawing, find the walls, straighten and close them up, read the room labels, assemble the building, cut the door and window openings properly, and hand back a sealed model with no holes in it.
- 2.
A refusal to guess: anything the drawing does not actually state, ceiling heights, sill heights, which way is north, becomes a question that halts the work until somebody answers it. It will offer an answer; it will never quietly use one.
- 3.
Photographic rendering with the camera framed automatically, a physically accurate sky, materials attached by name, and quality settings for draft or final.
- 4.
A control interface so an AI assistant can move a wall, change a material, or settle one of those outstanding questions, and when a change depends on something nobody has confirmed it asks in the chat instead of inventing a number.
- 5.
A queue so several machines can render at once without colliding, and 56 tests covering everything from the geometry to the command line.
outcome
Floor plan in, correctly measured building out, photograph out. The honesty is at the hard end: finding walls automatically in a scanned hand-drafted plan is not good enough yet, so hand-marked examples drive the work while a model is trained to take over, and those examples are also the training data, so none of that marking up is thrown away. Image generation survives in exactly one place: filling in a material on a surface whose shape is already fixed. Never for the building itself.
Changing something is an edit to a real model, not another roll of the dice with a machine that will happily bend your walls.