hugostrangefront matter

[03]entry 3 of 29

hugostrange

AI · 3D reconstruction2026

this entry is written twice, in full

  1. 1.in brief

    2D architectural drafts → editable, photoreal 3D

  2. 2.in general

    Parametric 3D reconstruction from flat floor plans. No diffusion roulette.

  3. 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. 1.in brief

    flat architectural drawings turned into a real, editable 3D building

  2. 2.in general

    Builds a proper 3D model out of a 2D floor plan. No AI guessing at what the walls were.

  3. 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. 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. 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. 3.

    Headless Blender/Cycles rendering: auto-framed camera, Nishita sky, materials bound by node name, quality presets

  4. 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. 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. 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. 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. 3.

    Photographic rendering with the camera framed automatically, a physically accurate sky, materials attached by name, and quality settings for draft or final.

  4. 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. 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.