AI · 3D reconstruction
hugostrangeshipped
Parametric 3D reconstruction from flat floor plans. No diffusion roulette.
Recovers a real, editable scene graph from 2D drawings, path-traces it with Cycles, and exposes every parameter to Claude over MCP.
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 v2, 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
- The full pipeline: PDF/raster ingestion → segmentation → wall vectorization (snap near-parallel runs, close ring gaps) → OCR room classification → scene graph → CSG geometry with manifold boolean opening cuts → watertight glb
- 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
- Headless Blender/Cycles rendering: auto-framed camera, Nishita sky, materials bound by node name, quality presets
- An MCP 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
- Race-safe Supabase 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.