Casa Cornell
Preview build5 August 2026

Two photographs of a paper plan, turned into a house you can walk through.

This runs live in the page. Drag the bar or pick a step. Nothing here is a mock-up: the walls, rooms and dimensions are drawn from the same reviewed files the build itself reads.

Photograph of the first floor plan
The same plan after deterministic cleanup
Scanning
Generated exterior of the house
Source photographSamsung SM-F946U · 6 March 2026
01The input

The whole input is two phone photographs of a sun-lit sheet.

Both carry Galaxy Z Fold5 EXIF dated 6 March 2026. There is no CAD file, no survey, no DWG. Everything downstream has to be recovered from paper that was photographed at an angle, under a window, with a shadow across one corner.

First floor plan as photographed
Source1952 × 978

First floor

28 named spaces. Blue cast from the window, cast shadow at the lower left.

Second floor plan as photographed
Source1883 × 1018

Second floor

23 named spaces. Sharper sheet, heavier paper wrinkle through the middle.

01bCleanup

Take out the paper, keep every mark that could be evidence.

Cleanup ran as a bake-off, and the option that looked most aggressive lost. Black-hat cleared the broad cast shadow but let too much neutral wrinkle texture through, so it was rejected as the final line source. RGB consensus separated black printed ink from blue illumination and most of the paper relief, and that is what shipped.

The file sizes say the same thing. The rejected black-hat PNG is 3,117,022 bytes against the selected consensus PNG at 349,719. Roughly nine times the noise.

Black-hat cleanup result
Rejected

Black-hat morphology

Shadow gone, wrinkle kept. Rejected for being dirtier, not cleaner.

RGB consensus cleanup result
Selected

RGB consensus

Ink coverage 25.6% down to 7.3% on floor one, 22.8% to 7.7% on floor two.

Evidence overlay audit
Audit

What got removed

Every dropped pixel drawn back over the original, so the deletion is reviewable instead of trusted.

Optical-density threshold sweep: at 0.14 the pass began attenuating low-contrast one-pixel dimension ticks and dashed construction lines, so 0.10 was selected. Neutral-ink boost was measured and then disabled at 0.0, because that path could only add ink, never take it back.

02The first tries

The first six months of this were bad, and the bad output is on the record.

Straight classical vision on a photographed plan. Flat-field correction to kill the window gradient, Hough transform for lines, max-pooled wall grid, a room classifier, then an SVG. Each stage was reasonable. The result was not the house.

These are kept because they are the reason the current pipeline separates what a label says from what geometry claims. That rule came out of watching this fail.

Flat-field corrected plan
Stage 3

Flat-field

Illumination gradient removed. This part actually worked and survives in spirit today.

Hough line detection output
Rejected

Hough lines

Finds every straight edge including hatching, dimension ticks and the sheet border. No idea which ones are walls.

Max-pooled wall grid
Rejected

Wall grid

Max-pooling made the walls thick enough to connect and thick enough to swallow the door openings.

Automatic room segmentation
Rejected

Auto room split

Rooms invented where the grid closed a loop. Confident, coloured, and wrong in several places.

Early 3D extrusion
Rejected

First extrusion

The wrong footprint, lifted into 3D. Extruding a bad plan gets you a bad plan you can orbit.

What changed

Nothing downstream is allowed to guess any more. A room exists because a person read the label on the sheet and signed off on it. A polygon exists only if its edges land on ink that survived cleanup. The two are stored separately, and the difference is written into the files rather than into a caption.

03Authority

A label is not geometry, and the difference is written into the files.

The reviewed schema carries 51 named spaces across 2 floors with 19 doors and openings. A separate wall graph carries 203 segments, 117 on the first floor and 86 on the second.

Only 3 polygons were ever promoted to geometry. The rule is written in the file itself: the label inventory is not promoted to geometry by implication.

First floor plan with the two accepted traces drawn on it
PromotedSource pixel space

Kitchen and Great room

Drawn in the photograph's own pixel coordinates, which is what source-aligned means here. Nothing was straightened to make them fit.

Second floor plan with the accepted theater trace drawn on it
PromotedSource pixel space

Theater

Every other draft polygon behaved like a bounding box or crossed a source wall under independent review. Those stayed analysis evidence and were never used.

Acceptance threshold: 75% of edge samples within uncertainty plus 2 px of preserved source linework. Kitchen and Great room overlap by 0 px². Shipped with this page: wall-graph.json, floor-01-wall-graph.svg, floor-02-wall-graph.svg, verified-schema.json, accepted-traces.json, accepted-traces-validation.json. Every figure above is counted from those files when the page is built, not typed in.

03bThe same sequence, higher resolution

The full photo-to-geometry sequence as a standalone instrument, with its own camera and per-trace uncertainty readout. It is driven from this page rather than opened separately.

04Standing rooms

Nine worlds are standing. Pick one the way you would pick a level.

Eight are schema rooms and the ninth is the exterior shell. Each one carries the dimension string and review confidence straight off the reviewed plan, so what you are looking at and what the file says stay attached to each other.

The rest of the named spaces are verified labels and dimensions. They are not standing yet, and the trace policy does not let a label become geometry on its own.

01 / 09

Exterior

Select a world  ·  ← →
A

Same house, four treatments

The Victorian pass is the clearest case of looks and geometry disagreeing. It is the best-looking exterior in the project and it was rejected, because the restyle moved the roofline and the reconstruction could not solve it.

05Automated tour

One take, ninety-six seconds, every control moving under script.

Nothing here is cut together. A single recording drives the room change, fireplace intensity and flicker, window spill, the day to night slider, the counter practicals, an audio-reactive party mix, rain with two lightning strikes, then the exterior with a heading pan and a horizon lift.

Jump to any beat below. The values shown are the ones the script actually sends.

0:00 / 1:35 No audio track. The audio-reactive drive shows in the lighting.

Lighting took three passes. At practical intensity 3.6 with room wash 2.2 the party's audio-reactive drive clipped the whole room to white-cyan for about six seconds. Dropping to saturation 0.7 and wash 1.6 stopped the clipping and washed everything pastel. The shipped values are saturation 0.9, practicals 2.6, wash 1.2, party mix 0.9. High saturation carries the colour while low intensity keeps the headroom.

06Bake-off

Seven video models, one starting frame, and the screening picked the wrong winner.

All seven were driven from the identical generated still with the same prompt and negative prompt, then screened by a local proxy: feature continuity, camera motion, source retention, cut safety. Thirteen runs across two scenes, $8.44 actual against a $9.00 budget.

The proxy ranked Veo first at 90.9 and Kling fifth at 85.3. Kling is the one that actually reconstructed. That is why the screening file says in its own limitations that the ranking is triage only and must not be presented as a reconstruction result.

Screening formula: 35% feature continuity, 25% camera motion, 25% source retention, 15% cut safety, over SIFT correspondences with RANSAC fundamental geometry. It never ran a structure-from-motion solve, so it could not see whether the generated 3D was right. Persistent 2D texture matches features even when the geometry underneath is wrong, which is exactly how Veo won a race it then lost.

07The gate

Generate the video, then force it through the same solve as real footage.

Every clip gets fed to a structure-from-motion solve under pinned intrinsics. If the cameras cannot be recovered from the frames, the clip is rejected no matter how it looks. The scoreboard is how many of 210 image pairs come back geometrically calibrated.

The strongest number on the board belongs to a clip that was thrown away, and the cheapest win belongs to a clip that was never generated.

Camera guides · solved free, before any paid generation
Superseded

t025 · dolly parallax

gate
124 / 210
family
r6

The first guide that produced a solvable generation at all.

Selected arc

a100 · 1.00u truck, 18° sweep

gate
189 / 210
points
8,275

The middle arc of the r7 family, and the one that shipped.

Rejected on looks

a150 · 1.50u truck, 26° sweep

gate
198 / 210
solve
21/21 · 7,714 pts · 0.847 px
why out
roofline bend, foliage smear, 5 watermark pairs

Gated higher than the arc that shipped. Rejected anyway.

Best parallax

l100 · lateral dolly 1.00u

guide gate
190 / 210
clip gate
206 / 210
points
8,060 · 0.765 px

The best gate score in the project, guide and generated clip both.

Hard fail

pb100 · pure pull-back

two-arm solve
no sparse model
fallback
8 / 21 · 122 pts
saved
$0.50625

Radial-only parallax the mapper cannot bootstrap. Caught before spending anything.

The point of a free gate

Six candidates were rendered and solved locally at no cost. Five passed at 21/21 registered, 0.73 to 0.82 px, zero watermark-configuration pairs. One failed outright. Only the survivors were allowed to become paid generations.

candidates
6
passed
5
paid on failures
$0.00
Generations · in the order they happened
Rejected

R2

gate
210 / 210 fail

Looked fine. Solved as a single degenerate configuration on every pair.

First pass

R3

gate
132 / 210
points
8,576

The first generated clip that reconstructed at all.

Arc baseline

R4

gate
184 / 210
points
10,480
holdout
27.78 dB

Sharpest single arc. Narrow envelope: step off the path and it falls apart.

Current frontier

Orbit hop 1

joint solve
128 / 128
coverage
35.4° → 53.7°
calibrated
204 / 210

The strongest parallax signature in the project, and the first look past the corner.

07bHoldout PSNR

The bar to beat is the best clip we ever generated, not a camera.

There is no photograph of this house as built anywhere in the project. The baseline is the strongest prior generated clip, Kling 3.0 Pro image-to-video at $0.56, re-derived from scratch and reconstructing at 30.34 dB.

The donor repo had claimed 32.45 dB on the same data. That did not survive re-derivation and is recorded as unverified. The honest claim is the one that holds: generated video now reconstructs within 2.56 dB of the best prior generated clip, on a gate that rejected earlier attempts outright.

08Live reconstruction

Load a reconstruction and move the camera yourself.

These are the trained Gaussian splats themselves, not renders of them. Drag to orbit, scroll to move. Four models are on this page so the differences between them are yours to check rather than mine to describe.

They run from 3 to 16 MB each, so they load when you ask for one.

Drag to orbit, scroll to move. Switching models after this reloads the viewer in place.

09Where it stands

Wider coverage cost 1.34 dB, and one view still fails.

Fusing the R4 arc with three new clips put 104 of 104 images into a single model on the first try. 33,572 points at 0.889 px. Lateral camera coverage went from 6.5 to about 13.8 units.

It costs 1.34 dB on the R4 arc for roughly three times the view volume, and R4's worst endpoint got 1.19 dB better, because every new clip observes that region.

Fixed

Pull-back driveway

before
fogged by veiling sheets
after
house and wet driveway crisp
obstruction
50.4% → 41.1%

The walk-up view a person actually uses.

Improved

Yaw extremes

left
neon blobs → real foliage
right
more real palm detail
top-100 share
15.4% / 13.4%

Both edges gained real edge content instead of invention.

Still failing

25° low-eye pitch-down

top-100
71.9% of view weight
scale ratio
256× scene median
anisotropy
2,543

Not a floater problem. No capture yet sees the near ground at a grazing angle.

Next

What that needs

A clip whose camera is low and pitched down while translating, so a driveway approach dolly at −20 to −25°. That is a new control family and a paid decision, so it is not in this build.

full 360 estimate
~18 hops · $11–14

Also on the record, because leaving it out would be dishonest. One r5 clip completed and billed at $0.50625 with 175.6 s of inference, then the result store returned HTTP 500 on all 23 retrieval attempts over 24 minutes. It was excluded from the fusion rather than worked around. Request 019fd250-e52d-7713-b0f1-63e242925bc2 is still retryable if that store recovers.

Sealed runs
 

Each one is a manifest with a per-file sha256 index, an authority boundary and a spend record.

Reviewed spaces
51

Across two floors, 33 of them carrying a legible dimension string off the sheet.

Wall segments
203

Counted from the shipped wall graph, 117 plus 86, rather than asserted in prose.