Notes from building BuildBridge Studio, Setu's first product, May to October 2026: a 2D floor plan becomes a checked 3D model and then a render, and a person approves every stage. What worked, what failed, and the numbers.
Status as of 11 October 2026. Last code change 20 September 2026.Product in development. Not taking engagements.
Every early render looked right and was wrong, so I stopped chasing better pictures and built the geometry first, where it can be checked.
Stage 1 of 11A broad start15 to 26 May 2026
Test plan. A three-bedroom flat I used to prove the pipeline, not a project for anyone.
I began with an AI agent meant to carry an Indian interior project from the first brief to handover. By 26 May it had a database, a mood board and palette stage, Vaastu (traditional Indian layout rules) and climate notes, and material and furniture sheets for a test flat, backed by 32 automated tests.
Stage 2 of 11Pretty, and wrong26 to 30 May 2026
Plain plan
Coordinate prompts
1 ft grid
Block-guide lock
Composite board
Model swap
Clean block guide
Seven render approaches on one living and dining zone, 26 to 27 May 2026. None met the bar.
The first renders looked finished and broke the plan. Sofas flipped, doors moved, an open dining area was sealed shut. I tried seven ways to make an image model respect the drawing, from coordinate-heavy prompts to grids and plain grey 3D block guides. All seven failed, and on 27 May I paused rendering.
Stage 3 of 11The rule26 May 2026
The plan is a contract: style may change, layout may not, unless the designer approves.
Stage 4 of 11Geometry as data2 to 16 June 2026
Walls and openings read from the same test plan.
A vision model reads the plan into a coordinate file in feet. The Three.js library builds a whitebox from it, a plain grey 3D model. Checks run before every paid step and stop on any error. On 12 June I moved the reader from Claude Sonnet 4.6 to Gemini 3.1 Pro. A stronger model still cannot read detail the image does not hold.
Stage 5 of 11Measure, don't assume18 to 21 June 2026
44 furniture and fixtures
38 walls
10 doors
7 windows
99 hand-labelled pixel boxes on one test plan, 19 June 2026: 44 furniture and fixtures, 38 walls, 10 doors, 7 windows.
I hand-labelled 99 boxes on the test plan so that scores meant something. Giving models the plan's symbol key made Gemini's detection worse and did not help the others. A scorer bug that swapped one model's x and y coordinates had skewed the leaderboard. On 21 June plain OpenCV, with no model, located 22 of 38 walls, but its settings were tuned to this one plan's drawing style, so I did not build on it.
Stage 6 of 11Line art first16 to 27 June 2026
The line-art stage on the same test plan.
On 16 June one recipe held the layout: a line drawing projected from the whitebox, plus a detailed prompt, into an image model. Looking east, you cannot see the prayer room, so prompts now name only what the camera sees. Picking the best of three drawings raised edge coverage, the share of the whitebox's lines that survive, from 0.62 to 0.87 (one camera, 23 June). A MistoLine model I built and deployed rendered furniture as blocks, so I dropped it.
Stage 7 of 11One studio21 June to 3 July 2026
Intake
Concept
Extract
Verify
Fixtures fix
Whitebox
Line-art
Render
Refine
Package
The ten stages as they stand today; Refine was added on 19 July. Glyphs generated with image models for this site, one drawn in code.
Five separate lines of experiments were no use to a designer. A status check found four stages showed screens but did no work. I wired them up and joined everything into one rail. On 3 July four AI agents with set roles, including a metric sceptic, argued the architecture; I took their verdict: repair, do not rebuild.
Stage 8 of 11Locking the geometry3 to 8 July 2026
Both from the test plan. Left, a shaded whitebox of one bedroom. Right, the living and dining area, generated by an image model from the verified whitebox.
Walls the model invented survived three correction rounds, so I rebuilt walls as 31 explicit line segments from the corrected plan; none appear in the open living area. A test with rules written before any spend put four image models on three cameras. I waived its blind scoring; on my judgement nano-banana-pro won all three, and rendering straight from the shaded whitebox became the default.
Stage 9 of 11A designer's studio9 to 21 July 2026
300
403
544
570
700
756
785
854
Automated tests at each session handoff, 12 to 21 July 2026: from 300 to 854.
On 9 July the pipeline ran end to end on a real office plan, about $0.70 in model calls (estimate, list prices). Then I turned it into a tool a designer can drive: door editing, site measurements, plain-language geometry edits, and refining a render with reference images. Independent AI reviewer agents checked each test-first piece; one caught a script-injection bypass the building agent missed.
Stage 10 of 11A real room30 August to 12 September 2026
A real office room: the verified whitebox, left, and its line-art stage, right. Both are pipeline stages for this room.
A real office room exposed what the test flat had hidden: furniture drawn 18.6% too wide on one axis, a camera placed inside a wall, and prompt bugs I had blamed on the models. The architect and their client accepted one room's render after seven refine passes; an eighth paid call failed. On 12 September all the work merged into one codebase, with 1,281 tests passing.
Stage 11 of 11No third model20 September 2026Decided
flux-canny-pro, long prompt0.7885
flux-canny-pro, short prompt0.7786
nano-banana-pro, round-3 render (12 Sep)0.7527
Z-Image Turbo, short prompt0.5582
Accepted final after seven refine passes (12 Sep)0.5216
Z-Image Turbo, long prompt0.2764
Edge coverage, the share of the control image's lines that reappear in the render. Four test renders on 19 and 20 September 2026, one attempt each, plus two earlier images from 12 September scored against the same control for reference. One room, one camera. The accepted image scores below a rejected model, partly because refining reframed it away from the control, so coverage is a floor, never a ranking.
Renders now go to nano-banana-pro first, with GPT Image 2 as the alternate, and there is no third model. I tested two models that trace the control image's edges: four calls, about $0.11. flux-canny-pro kept the lines and failed as interior design; Z-Image Turbo did not even hold the camera. Holding geometry is necessary and nowhere near sufficient.
What comes next
Plans as of 11 October 2026.
So far the pipeline has run end to end on one test flat and one real office room, with a person correcting it at each stage. Next, its accuracy has to be measured on plans it was not tuned on.
Stage 1 of 6Unseen plansSignal measured 21 June 2026Planned
Fixtures found by name: whole plan 2 of 8, cropped room 3 of 8. One bedroom of the test plan, 21 June 2026. Not validated.
Almost every number on this page comes from one plan, so plans the pipeline has never seen are the test, counting the correction rounds each one needs. Cropping to a single bedroom found more of its 8 fixtures by name, 3 against 2, while precision fell from 0.67 to 0.43. Cropping is not yet in the live pipeline.
Stage 2 of 6Shapes first12 September 2026Planned
Three attempts to move one piece of furniture, by prompt and by edit, all failed, so the next step puts real furniture shapes, not plain boxes, into the whitebox before anything is rendered.
Stage 3 of 6Construction drawingsSpecification written 21 July 2026Planned, awaiting go-ahead
The first, the general arrangement plan, is the first to build.
Planned sheets. Drawn for this page.
A contractor cannot build from a render. I specified a ten-sheet construction drawing set: plans, ceilings, electrical, plumbing, elevations and schedules, each to be drawn from the same verified geometry. The research behind it checked 25 of 120 claims from 26 sources against counter-evidence and rejected 7; three independent designs were critiqued and merged into one specification. No sheet is built.
Stage 4 of 6A better reader21 July 2026Proposed
Today one vision model reads the whole plan. The proposed second version pairs plain image processing for walls with a small trained segmentation network, a U-Net, and stores walls as a connected graph. A licence survey of five candidates on 19 June 2026 found none with downloadable weights for raster floor plans under a permissive licence; CubiCasa5k, for example, is non-commercial only. So training my own model on labelled Indian plans is a gated option, for when volume or error rate justifies it.
Stage 5 of 6Editing real geometry11 October 2026Proposed
Drawn for this page. Today's file, left, and the wall graph the editor would need, right.
I want an editor where a designer changes walls and rooms directly, as geometry, not as pixels in a render. The catch: my coordinate file stores rooms as plain rectangles, with no record of how walls join, so it needs a new file format first. No code exists yet.
Stage 6 of 6
In development
How it was built
R-03As of 20 September 2026
The pipeline today
The studio runs ten stages, and nothing advances until a person says so.
#
Stage
What it does
Model or library
Where the person checks
01
Intake
Captures the brief in chat; turns a PDF plan into an image.
Claude Sonnet 4.6 via OpenRouter; pdftoppm
Approves the brief.
02
Concept
Mood board, palette, Vaastu and climate notes, carried into every render prompt.
Claude Sonnet 4.6; plain Python
Approves palette and mood.
03
Extract
Reads rooms, walls, doors, windows and fixtures into one coordinate file in feet.
Gemini 3.1 Pro via OpenRouter; one call, no retry
Approves the paid call.
04
Verify
Blocking spatial checks: fixtures inside rooms, doors reachable and clear, outline sealed, no voids, walls thin and inside the outline.
Plain Python, no model, no cost
A failed check stops the rail and says how to fix it.
05
Fixtures fix
Move, resize and rotate furniture, edit doors and windows, enter site measurements.
Konva canvas, scaled from the detected building outline
Saves the corrected plan as one verified record.
06
Whitebox
A plain 3D model built from the file. Plain-language edits change the coordinate file, never the 3D model directly.
Three.js; Gemini 2.5 Flash for edits
Approves the geometry.
07
Line-art
A two-point perspective line drawing as a control image. One of two render paths; now optional.
Three.js line projection, then an image model
Picks the cameras.
08
Render
Shaded whitebox to photoreal in one step. Code builds the prompt in labelled sections and gives directions as left, right and ahead, because image models have no sense of compass directions.
nano-banana-pro (default) or GPT Image 2 via Replicate. A local Mask2Former reject gate runs only when several candidates are requested; off by default.
Approves spending; accepts or rejects each render.
09
Refine
Edits the accepted render from notes and up to five reference images, keeping its proportions.
nano-banana-pro edit; optional Gemini 3.1 Pro prompt composer
Reviews each revision before it is paid for.
10
Package
Sends schedules and renders to the shared drive with a single-sheet DXF of the verified plan.
Google Drive and Sheets APIs; ezdxf
Confirms the publish.
R-04Measured
Measured results
Nearly all of these come from one plan or one room. Read them as early signals, not benchmarks.
0.628
What
Fixture recall (the share of real fixtures found), Gemini 3.1 Pro, no symbol key, scored by counting fixture types.
n
43 fixtures of 15 types, 1 plan, 1 run.
Date
18 June 2026.
Caveat
Ignores where each box lands; precision 0.287.
0.302
What
Fixture recall, same model, a later bake-off run on the whole plan, downsampled.
n
43 fixtures, 1 plan.
Date
27 June 2026.
Caveat
Precision 1.00; it found 0 of 8 windows.
These two come from different runs with different inputs and scoring, so they are not directly comparable. I show both because the gap is the finding: numbers from one plan move a lot.
0.884, then 0.318
What
Recall for a three-model ensemble, by counting types, then by placement (a box must overlap a hand-labelled box by at least 0.3 intersection over union: the shared area divided by the combined area).
n
43 fixtures by type; 44 hand-labelled boxes by placement; 1 plan.
Date
18 and 19 June 2026.
Caveat
Counting types flattered every model. The configuration with the best placement F1 placed 17 of 44, the best of 33 configurations on this one plan; about 63% of fixtures were missed by every model.
12 of 12, then about 4 of 6
What
A free, local reject gate (Mask2Former segmentation). On calibration it reproduced 12 of 12 logged accept or reject verdicts; on 6 held-out renders, about 4 matched their earlier automatic gate verdict.
n
12 calibration images over 2 scenes, then 6 held-out renders.
Date
3 July 2026.
Caveat
Two of the six had no clean verdict to compare against, hence "about". Calibration was not blind. The gate shortlists; a person picks.
16 of 16 rooms, 36 of 36 items
What
The DXF export matching the verified coordinate file within 0.0001 ft.
n
1 plan.
Date
3 July 2026.
Caveat
The check sees only what is written to the file; a visual review found four gaps it missed.
36 and 37 of 41
What
Prompt instructions held by nano-banana-pro and GPT Image 2, judged by hand.
n
1 room, 1 camera, 41 instructions.
Date
6 September 2026.
Caveat
This measures whether the image followed the prompt, not the plan. A row recount gives GPT Image 2 a slightly different total. I called it a draw and kept both.
R-05Eight lessons
What failed, and what it taught
Pretty is not faithful.26 to 27 May 2026: seven render approaches made attractive rooms that moved doors and sealed openings. Image models treat a plan as mood, so structure has to be locked outside the model and checked.
The test plan flattered me.16 June 2026: on a second, unrelated plan (7 rooms, one run), a Gemini 3.1 Pro judge scored doors and windows 0.1 out of 1 and small-fixture recall 0.0. One plan is not evidence.
More context made detection worse.18 June 2026, one plan, 43 fixtures, one run: a 15,000-character symbol key cut Gemini from 94 boxes to 33, and F1 fell from 0.394 to 0.263. Measure, don't assume.
A coordinate bug faked a leaderboard.19 June 2026, one plan, 44 hand-labelled boxes: Gemini returns boxes y first and my scorer read them x first, so every Gemini box scored zero. After the fix, the 17 boxes it matched overlapped the hand-labelled ones by 0.75 on average (intersection over union, matching threshold 0.3). Check conventions against hand-labelled truth before trusting a ranking.
The metric ranks backwards.23 June 2026, one camera, one image per model: flux-canny-pro scored 0.944 edge coverage and rendered flat clay; the image I preferred, from nano-banana-pro, scored 0.671. On 19 September, with a different room, control image and prompt, the same model scored 0.7885 by handing the shaded input back almost unchanged, while the accepted image scored 0.5216 after refining had reframed it. Coverage is a floor, never a ranking.
Small samples overfit.3 July 2026: the reject gate reproduced 12 of 12 logged verdicts on calibration but only about 4 of 6 on held-out renders. I reported the drop and did not tune on six cases.
"Nothing is editable" was six bugs and a stale cache.30 to 31 August 2026: six bugs, among them a dead hit layer, scale anchored to the image corners (fixtures 18.6% too wide on the x axis of one office plan) and a canvas 0 px wide in a 1024 px window. After all six were fixed, the last report came from a stale browser cache. Test the real page, and rule out the cache first.
I repeated a vendor claim without checking it.July 2026 notes called flux-canny-pro deprecated, and four documents repeated it. In mid-September I checked: the model was still served on the host I used, and it billed me on 19 September. On 20 September I retracted the claim in writing and rejected the model on quality instead.
R-06Counted 12 October 2026
The process in numbers
274 commits over 124 days
One person directing AI coding agents: 239 of the 274 commits carry an AI co-author line. 47 days with commits, 21 May to 22 September 2026. Counted with git on 12 October 2026.
20 to 1,281 automated tests
25 May to 12 September 2026, from session notes; 1,281 passing at the 12 September merge.
99 hand-labelled boxes
Pixel ground truth on the test plan, 19 June 2026.
20 experiment reports
15 to 23 June 2026. 8 vision models and 33 placement configurations ranked on one plan, 18 and 19 June 2026.
At least 9 multi-agent sessions
Research or review sessions, 18 June to 16 September 2026, from wall research by 12 parallel agents to a four-agent backlog audit.
9 decision records, 13 handoff notes
Files in the project's planning folder, counted 12 October 2026.
88 research notes
In a wiki started 23 June 2026 (97 files with templates, index and log), counted 12 October 2026. Among them, 15 written bets, each with a test that could prove it wrong; one retired, one downgraded, as of 20 September 2026.
26 paid calls, about $2.55
Estimate. One real project, intake to one accepted room render, early September to 12 September 2026, including first renders of three rooms. Estimated from list prices; chat models on subscription excluded.
May 6
Jun 60
Jul 138
Aug 6
Sep 64
Commits by month, 2026.
3 first renders
6 extraction and concept (approximate)
4 round one
3 round two (one lost to an internet outage)
2 round three
8 refine (one failed)
The 26 paid calls behind one accepted room render. The outlined square is the failed call.
R-07Plans as of 11 October 2026
What comes next
An audit on 13 September listed 46 open items and found about 25 that my own notes called pending but were already built.
PlannedRun the pipeline on plans it has never seen, and count the correction rounds each one needs.
PlannedWrite the three missing blocking checks and a camera check.
PlannedPut real furniture shapes in the whitebox.
Planned, awaiting go-aheadBuild the first drawing sheet.
PlannedA second render test, FLUX.2 with a one-shot Grok refine. It is set up and has only been dry-run, with no paid calls; a new candidate would have to beat both current models before the 20 September decision changes.
ProposedA second version of the geometry reader, and an editor that changes the geometry itself.
Direction, an aim not yet reached: from one floor plan to a render you can trust and drawings a contractor can build from, with a person approving every step.
R-08One person
Who built it
Setu is an AI agency in the making. Each bridge is one sector, and Bridge 01 is India's construction and architecture sector. BuildBridge Studio is its product. One person directing a team of AI agents built it. I set the direction, made the engineering calls and own the failures. The agents, running on five Claude models, wrote most of the code; separate agents reviewed it and argued the architecture.