Casa Cornell
Preview build5 August 2026

A house rebuilt from two photographs of its floor plan.

The sequence below runs in this page. Drag the bar or pick a step. The room outlines, names and dimensions come from the same reviewed files the build reads. None of it is placeholder art.

Skip to the reconstruction you can move the camera in → four models, 104 solved frames

Photograph of the first floor plan
The same plan after deterministic cleanup
Scanning
Generated exterior of the house
Source photographCamera EXIF · 6 March 2026
01The input

Two phone photographs, and nothing else.

Both carry camera EXIF dated 6 March 2026. There is no CAD file, no survey and no DWG. Everything below is recovered from paper photographed at an angle, under a window, with a shadow over 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

Removing the paper without removing the linework.

Two cleanup methods were run and compared. Black-hat morphology cleared the cast shadow but left paper wrinkle behind, so it was rejected. RGB consensus separated printed ink from the blue window light and from most of the paper texture, and that is what shipped.

File size agrees. The rejected black-hat PNG is 3,117,022 bytes against the selected consensus PNG at 349,719, about nine times the noise.

Black-hat cleanup result
Rejected

Black-hat morphology

Shadow gone, wrinkle kept. Dirtier than the method it lost to.

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 painted back onto the original, so the deletion can be checked.

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

Classical computer vision, run to the point where it broke.

Classical computer vision on a photographed plan: flat-field correction to remove the window gradient, a Hough transform for lines, a max-pooled wall grid, a room classifier, then an SVG. Each stage worked on its own terms. The output was not this house.

They are kept because the rule the current pipeline runs on came from watching them fail: what a label says and what geometry claims are stored separately.

Flat-field corrected plan
Stage 3

Flat-field

Illumination gradient removed. The one stage that worked, and the approach is still in use.

Hough line detection output
Rejected

Hough lines

Finds every straight edge, including hatching, dimension ticks and the sheet border. Nothing tells it 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 wherever the grid closed a loop. Several of them are in the wrong place.

Early 3D extrusion
Rejected

First extrusion

The wrong footprint, lifted into 3D. The same errors as the stage above, now in three dimensions.

What changed

Nothing downstream guesses. A room exists because a person read the label on the sheet and signed it off. A polygon exists only if its edges land on ink that survived cleanup. The two live in separate files, so the distinction sits in the data rather than in a caption.

03Authority

Fifty-one named rooms on the sheet. Three of them became geometry.

The reviewed schema carries 51 named spaces across 2 floors with 19 doors and openings. A separate room-perimeter graph carries 203 edges, 117 on the first floor and 86 on the second, the boundaries of the reviewed room polygons, each one naming the space or spaces it bounds.

It ships as wall-graph.json, and this page used to describe it as a wall graph. Its own process manifest does not: it is kept there as rejected analysis evidence, “not rendered as an architectural wall graph.” These edges are room boundaries. They carry no thickness and no centerline, and a partition between two rooms appears once, flagged shared. The filename is sealed and stays; the description does not.

Only 3 polygons were promoted to geometry. The rule is written into the file: a room in the label inventory does not become 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. 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.

03cAgainst the paper

Every room in the reconstruction is the wrong size.

Everything after this point on the page is built on the file the section above produced, and until today nothing had held that file against the drawing it came from. The blueprint checks itself: the draftsman lettered almost every room with its size. Those strings are on the paper, not in the file, so they can be used as an answer key.

Each lettered dimension was read off the two source photographs and held against the minimum-area rectangle of that room’s polygon, converted through the massing script’s own scale constant. 0 of 23 rooms land within 5%. 23 are worse than 10%. The median room is out by 56.8%. The sheet’s own dimension line reads 128.0 ft across and the schema footprint spans 148.9.

Twenty-three tiles, one per room. In
    each, a gray rectangle at the size lettered on the blueprint and a red outline of the same room's polygon
    from the reconstruction, drawn on the same centre. The red outline is larger than the gray rectangle in
    every tile but one, by between 21 and 153 percent.
Gray is what the blueprint says. Red is what every render, splat and paid video in this project was built from. Read from plan-fidelity.json.

The obvious explanation is one wrong scale constant, and it was tested and rejected. The implied scale runs from 0.49× to 2.53× across rooms. Rescaling everything by the best single factor still leaves a median absolute error of 11.1% and lands only 13 of 46 room sides within 5%. Splitting by sheet does not rescue it either. The clearest sign is inside single rooms: in 11 of the 23, the two sides imply scales more than 10% apart, and in 6 more than 25% apart. The west balcony is drawn at 0.49× along one side and 1.19× along the other. These rooms are the wrong shape, not just the wrong size, so no scale correction can reach them.

What this invalidates is every metric claim this page makes about the building. The 47.9 m frontage below, the wall lengths in the opening schedule, the orbit radii fitted to those bounds, and the eight splats trained on frames of that geometry are all measurements of a house that is not the one on the paper. What survives is everything measured about the method rather than about the building: registration rates, PSNR against held-out views, the chaining refutation, the alpha-semantics finding, the arbiter gate and the price evidence. Those compare runs against each other. The reconstruction pipeline is not what failed here. It was asked about the wrong house.

Measuring this cost $0.00. The check now runs as a gate, so the corrected geometry has something to pass.

04The first picture

The house does not exist yet, so its first picture was generated.

There is no photograph of this building anywhere in this project and there cannot be one. It has not been built. It exists as two sheets of paper. The traced plan gives room outlines and those give massing, but massing has no siding, no brick, no roof pitch and no light in the windows. So the plan and a written style specification went to an image model, and the front elevation below is what came back.

Everything below descends from that one image: every video clip, every solved frame, every reconstruction. They inherit what it got right and what it got wrong.

The generated front elevation: a two-story
    cream lap-sided house with a brick bay tower on the right, a glazed sun-room wing on the left, hipped
    standing-seam metal roofs, warm light in the windows, wet brick walk and driveway, live oaks and
    palms around it.
The seed elevation: the only view of this house ever made from the plan. No camera EXIF. The source PNG carries an AIGC chunk and a generator C2PA manifest sits beside it, both shipped with this page so the claim can be checked.

What the model was told it could not change, written down before any frame was generated: 2 stories, 4 porch columns, 3 balcony bays, a five-sided brick bay tower on the right and a single-story glazed sun-room on the left. The building is deliberately not left-right symmetric, which is what tells a frame apart from its own mirror image. Every later frame is checked against this list.

05Bake-off

Seven video models from one starting frame. 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 how Veo scored first and then failed the solve.

06The gate

Every generated clip goes through the same solve as real footage.

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

The best score on the board belongs to a clip that was thrown away. The cheapest result belongs to a clip that was never generated at all.

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. Step off the path it was solved on and it falls apart.

Current frontier

Orbit hop 1

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

Strongest parallax in the project, and the first view past the corner.

06bHoldout PSNR

The baseline is the strongest clip this project ever generated, re-derived from scratch.

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 claim that survives is narrower: generated video reconstructs within 2.56 dB of the best prior generated clip, on a gate that rejected earlier attempts outright.

07Live reconstruction

The house was rebuilt from generated video. Load a model and move the camera yourself.

These are the trained Gaussian splats themselves, not renders of them. The camera stops where the solved frames stop, so you cannot get lost. On the four models that only ever saw the front, that edge is a wedge and the drag hits it quickly. On the four that went all the way round there is no edge, and the drag keeps going.

Eight models are here to compare directly. The front four are the re-derived donor clip that set the bar, the first clip generated to a camera guide of our own, four clips fused into one model, and the orbit hop that pushed coverage past the corner. The four with a back all come from section 09 and differ in where the camera stood and how it got there: solved from the frames, read straight out of the render manifest, flown close enough to the wall to pick up brick, and both laps trained together.

Nothing below is a still image standing in for a model. Every number attached to these was measured on views the training never saw.

Step 1: pick a model

Step 2: load it

Drag to orbit, scroll to zoom, shift-drag to pan, R to reset. The viewer has preset viewpoints and a reset button of its own. Picking a different model above reloads it in place.

How far the camera can turn before the model breaks down.

This limit took four attempts. The first was a guess, and its −55° preset showed pure smear. The second came from a sharpness metric, which said three of the four models hold out to ±80°; at +80° there is no building in the frame at all. A collapsing splat does not go soft. The gaussians stretch into streaks and the foliage breaks into confetti, and both of those raise sharpness, so the metric scored the collapse as healthy. The third used solved camera positions, which are accurate but answer a different question: where a solved frame stands, not how far the solve carries. They are symmetric when this property is not.

The fourth was set by looking. 52 frames were rendered through this viewer with the panel hidden, four models across thirteen azimuths at 10° steps, and each was marked clear, degraded or gone. The marks are recorded per frame, so any one of them can be argued with by pointing at the frame.

A contact sheet of 52 rendered frames: four reconstructions down the side, thirteen azimuths from minus 60 to plus 60 degrees across the top, each frame carrying a colored rail marked clear, degraded or gone. The middle of every row is the house; both ends are colored streaks.
The frames the judgment was made on, at the size it was made at. Scroll sideways. Along any row the house holds for a run of frames in the middle and then breaks up, and it breaks up earlier on the left: turning left runs into a foreground oak and palm no clip ever resolved, while turning right opens onto the driveway the clips did cover. Every model reaches further right than left, so a symmetric limit is wrong at both ends.
Four reconstructions on one azimuth ruler. For each, small ticks mark the solved camera positions, a filled block marks the arc that still reads as the house, and an outline marks how far the viewer lets the camera go.
Three different spans, drawn separately because collapsing them into one number is what went wrong the first three times. The viewer clamps to the outline, sends its edge presets to the filled block, and leaves the ticks alone. kling-rederive-30k was previously clamped to the 5.9° its cameras span; it now opens across 30°.

Wider capture stops buying wider viewing arc.

Line the four models up by how much camera arc each solve was given and the return collapses monotonically: 5.06× readable degrees per camera degree, then 1.75×, then 1.01×, then 0.83×. A 10× spread in capture width bought 20° of extra readable view, and the two widest captures read no wider than the arcs their own cameras stand on. Past that knee, adding generated frames further round the house buys very little. The next gain has to come from the pixels already captured rather than from more camera positions.

Readable arc plotted against camera arc for four reconstructions, with the one-to-one line drawn. The points rise from 30 degrees readable at 6 degrees of camera to 50 degrees readable at 60 degrees, crossing from far above the line to below it.
Above the dashed line a solve returns more readable view than it was given camera to work with. Below it, the capture is wider than the result it bought. Numbers read live from splat-arc-bands.json, generated from the sealed viewer-arc-20260811-r2 manifest; the instrument it replaced is sealed too, at full size, because its frames are what refute it.

Marking invented pixels as unknown, and why the trainer cannot be told.

Feeding generated frames into a reconstruction costs −1.43 dB against a baseline built from solved frames alone, measured on held-out views. The cause is known too. A warped frame is two things stitched together: pixels resampled from a solved frame, and pixels a model invented where nothing was visible. The warp records which is which, per pixel. So the obvious repair is to give the trainer the resampled half and mark the rest unknown.

That repair assumes unknown is something the trainer can be told. The only candidate is a transparent input pixel, and the manual is ambiguous about what one means. So it was tested rather than assumed: a rectangle punched to transparent in half the training views, the other half left intact, everything else identical.

Three crops of the same balcony:
    the source frame, the model trained on intact images, and the model where half the training views had a
    rectangle punched to transparent. Inside the outlined rectangle the third crop is pulled dark, the lit
    window dims and the white rail grays, while everything outside it matches.
Transparent means nothing is here, and the trainer believes it. Inside the box the held-out frames come back 5.53 dB worse, while outside it the two arms agree to 0.11 dB, the noise floor. The damage stops exactly at the edge of the box, which is what makes it the mask and not a bad rerun. Turning the alpha loss weight to zero does not switch it off.

This is strictly worse than feeding the invented pixel through. A wrong color is one bad observation competing with good ones; a wrong emptiness deletes geometry that other views got right. Masking a warped frame down to its resampled pixels would carve the disoccluded regions out of the house. Two short training runs and one rectangle cost about four minutes and stopped a larger experiment that would have returned a negative result for the wrong reason. Sealed as refuted in alpha-semantics-20260811-r1; the same idea still has a coarser form left, selecting whole frames by how much of them was invented.

08Falsified

Ten small warps land worse than one large one.

Take a solved frame, push it a few degrees sideways using its own depth map, paint in the sliver that opens up behind the objects, then repeat from the result. Each step invents almost nothing, so a chain of them ought to walk a long way and stay mostly real. Eight chains were run, from 0.5° per step up to a single 30° jump.

All six preregistered step sizes failed. Getting to 30° in ten steps leaves 27.0% of the frame traceable back to the source. Getting to the same 30° in one jump leaves 66.5%. Small steps do invent less each time, but each one invents on top of the last one's invention.

The source frame: the house, sharp, from the solved camera
Where every chain starts

The solved frame

invented
0.0%
camera
r4_0031, solved

One frame of the fused solve. Nothing in it was warped, filled or guessed.

After a single 30 degree warp the house is still legible under heavy speckle
One jump

30° in a single warp

invented
33.5%
largest hole
16.2% in one piece
steps
1

Two thirds of it is still the source frame, and it still reads as the building.

After ten three-degree warps the house has smeared away entirely
Ten steps to the same place

30° in ten 3° warps

invented
73.0%
largest hole
1.1%
steps
10

Every individual step opened only 7% of the frame. There is no house left.

The obvious suspect was the depth map degrading as it gets carried forward, so the 3° chain was run again with depth re-rendered from the splat at every step. That moves the result from 27.0% to 33.4% and the frame is just as gone. Depth was not the problem. The same 7% hole opens at every step, and it opens onto ground the previous step already invented.

Nine chains plotted as source-derived pixel fraction against cumulative azimuth. All eight multi-step chains fall below the 50 percent threshold before 30 degrees; the single 30 degree jump ends at 67 percent.
Every line reaches the same 30° of azimuth. The dashed line is the falsifier, fixed before the first warp ran: more than half the frame invented at every registered step size. The one line that finishes well above it took a single step. The dimmed dashed chain is the depth-oracle arm, which was run afterwards and does not vote.
08bWhat replaces it

How far one warp reaches, and which way to turn it.

With chaining out, every new pose has to be one direct warp from a solved frame. Two separate things decide how far that goes. The fraction of the frame that has to be invented is how much work there is. The size of the largest single hole decides whether the model filling it gets one bounded region whose shape it can see, or a scatter of speckle it cannot. On r4_0031, at the far end of the arc, turning one way costs of the frame and turning the other costs , a gap of points. That looks like occluders sitting to one side of the house, but two more frames disagree about which direction is cheaper, so it is a property of the individual frame and has to be measured per warp. Sliding the camera sideways without rotating it (the control arm) is worse than both on every frame, because rotating keeps the house in the picture and sliding pushes it out.

Six panels: three source frames across, invented pixel fraction on the top row and largest single hole on the bottom, each plotted against azimuth out to 30 degrees. In every panel the dolly control is worst. On r4_0031 the outward orbit costs 33 percent against the inward 25; on l100_0023 the two directions nearly coincide at 32 and 33 percent; on r4_0012, inside the arc, they are 30 and 26.
One warp, no chain, out to the 30° the chains were trying to reach. The accented line is the direction that leaves the solved arc, which is the only direction that buys coverage the capture does not already have. On the frame where turning is cheapest, the cheap direction is the useless one: it points back into azimuth the solved frames already cover. Widening coverage means paying the higher number. The two costs also disagree about which way to go: on r4_0031 the cheaper direction scatters what it opens across separate holes against for the expensive one, so it is less work overall and a worse thing to hand a model.

The number underneath all of this: the solved frames cover of azimuth, , and that is the whole capture. A full orbit is 360°. Chaining was supposed to be what crossed that gap, and it does not work. This curve cannot say how far a single warp gets instead, because it stops at 30° and the measurement underneath it was wrong. 08c corrects it. Past whatever the corrected reach turns out to be, there is no solved frame to warp from at any angle, so the remaining coverage has to be generated rather than inpainted, which is why branch A exists.

Two things this does not claim. It does not say the warp is broken: pixels outside the hole come through every inpaint bit-identical, which is asserted at every step, and the whole run reproduces byte for byte. It does not say a better inpainter would look worse; a better inpainter would be inventing the same fraction of the frame, and the fraction is what was being measured. No reconstruction was trained on these frames. Costs $0.00: everything here ran locally. Numbers read live from dwi-chains.json and dwi-reach.json.

08cCorrection

The warp was handing cameras behind the house a view of its front, through the walls.

The curve gave it away. On r4_0031, a 120° orbit scored points cheaper than a 90° one. Cost cannot fall as the camera moves further from the only view ever captured, so the measurement was counting pixels it had no right to. A front-only capture has no back of the house in its depth map, so when the facade gets reprojected into a camera standing on the far side, nothing blocks it: it arrives again, inverted and see-through, and the metric scores it as real material. Three other explanations were tested first and all three failed: sky being counted as supplied (it is 0.0% of every frame), depth noise (median-filtering the source makes it slightly worse), and sampling cracks (a fatter splat closes them by smearing the house away). The fix is a single test: a source pixel may only supply a destination pixel if its surface still faces the destination camera.

Thirty degrees of orbit, measured without the facing test: the house under heavy speckle
As r2 measured it

30°, no facing test

invented
this is the frame
the page called two-thirds real

Backfacing material is being supplied here, and nothing in the metric objects to it.

The same thirty degree orbit with the facing test on: visually almost identical, with slightly more of the frame left empty
Corrected

30°, facing test on

invented
looks like
the frame on the left

This is why it survived a round. At 30° the defect does not show; it is worth a few points of cost.

The corrected thirty degree frame with every pixel the facing test withdrew painted in rust red. The withdrawn set follows the right-hand wing of the house and the roof edge; the porch face, still pointed at the camera, comes through untouched
The difference between those two frames, painted on the one that survives: every pixel in rust is material the uncorrected warp supplied and the facing test withdrew, of the frame. It is not eroding an edge uniformly; it follows the wing turning away from the camera, and the roof edge, while the porch face, still pointed at the camera, comes through untouched. One caveat: the densest patch of rejection is foliage rather than building ( inside the worst 30% window), and leaves have no stable surface direction, so some of that is noise. The pattern on the house itself is not.
A hundred and eighty degrees of orbit, no facing test: the camera stands behind the house and is shown the front facade through the walls
The tell

180°, no facing test

invented
what you are seeing
the facade, through the walls

The camera is behind the house. This scores cheaper than the 90° view of the same building.

The same hundred and eighty degree orbit with the facing test on: almost the whole frame is empty, because a front-only capture knows nothing about the back of the house
Corrected

180°, facing test on

invented
honest answer
there is no back of the house

What a front-only capture actually knows about the far side, which is almost nothing.

Invented pixel fraction against orbit angle out to 180 degrees for two source frames. The dashed uncorrected curve rises, turns back down past 90 degrees and on r4_0031 never crosses half the frame invented. The solid corrected curve rises throughout and crosses at 57 and 44 degrees.
The same two frames, out to a half turn instead of 30°. The dashed line is what was sealed: it turns back downward, and on r4_0031 it never reaches half the frame invented at all, not even at 180° with the camera standing behind the building. The solid line is the same warp with the facing test on. Across all four measured arms, now rise the whole way against before. Treat the corrected figure as a floor rather than an exact number: surface directions taken from splat-rendered depth are noisy, so the test over-rejects a little at small angles and under-rejects at large ones.

That puts every number above this subsection in doubt, so both decisive arms were run again with the facing test on. One 30° warp keeps of the frame traceable to the source, against before. Ten 3° warps to the same place keep , against . Every number in 08 and 08b moves down, and the gap between the two arms widens, from to points. Chaining still loses, by more than it did. The plate figures above are left reading as they were sealed and labeled with the numbers they were measured at, rather than quietly restated.

Plan view of a full orbit of the property. Forty degrees is solved, a hundred and one more degrees are reachable by one outward warp from each end frame, and the remaining two hundred and eighteen degrees have no solved frame that can reach them at any angle.
The planning number this whole branch exists to produce. Since chaining loses, a warp can only start from a solved frame, so the reachable band is the solved arc plus one outward reach at each end: past r4_0031 and past l100_0023, cutting off at half the frame invented. That comes to of azimuth. The remaining , of a full turn around the property, has no source frame that can reach it at any angle. Improving the warp does not change that number, because it is a fact about where the camera stood.

Those reach numbers are not precise, and the conclusion does not need them to be. Invented-pixel fraction estimates how much work a frame needs, not whether the result is usable, and the subsection above already moved it ten points by changing one parameter of the measurement. The narrower claim survives all of that: 60% of the orbit has nothing to warp from. No inpainter, warper or threshold reaches it. Costs $0.00: everything here ran locally against the sealed r2 geometry, read-only. Numbers read live from dwi-far-reach.json, generated from the sealed r3 manifest; the four plates above carry their payload hashes in dwi-facing-plates.json.

09The missing angles

Every clip starts at the same anchor frame, so the solve never leaves the front.

The plan calls for front, sides and back before any camera moves. Only the front exists. Four video clips were generated from it and fused into one reconstruction, and all four begin at the same anchor frame, so the entire solved dataset, 104 frames of it, stands within about 60° of the front door. That is the ceiling section 07 measured four ways.

The reconstruction is not failing here. It is declining to invent three elevations nobody showed it. The rest of this section is the work of getting those elevations made.

09bHalted

Asking an image model to turn ten degrees. It does not have degrees.

The first plan for the other elevations was hierarchical: get the whole orbit roughly, then refine it. Priced at $5.29, authorised, and stopped after $0.44 on its own pre-registered kill gate. The opening probe asked an angle-controlled image endpoint for 0°, 10° and 20°, and got the same picture three times. At 30° it crossed some internal bucket boundary and returned a different house altogether: different light, different massing, different roof. A second model from a different family did the same thing.

Six generated frames in two rows.
    The top row, labeled zero degrees, zero degrees again and twenty degrees, is the same wet-driveway
    front view of the house three times. Bottom left, labeled thirty degrees, is a visibly different
    building in flat daylight with a garage and no wet driveway. The remaining two frames repeat the test
    on a second model at zero and ten degrees and return the same picture twice.
Asking for a small turn does not produce a small turn. 0° and 20° agree to cosine 0.9950, while asking twice for the identical prompt agrees to 0.9984, so a twenty-degree turn is indistinguishable from asking the same question twice. 30° drops to 0.7947 and takes the building with it. Sealed as hierarchical-blueprint-20260810-r1 with the verdict withheld rather than failed: the orbit was never generated, so the hierarchy it was meant to test is untested, not disproved.

The correction is to stop asking for angles in words. A camera moving continuously inside a single video clip never names an angle at all. So the next round runs one wide pass the whole way around the building, elevation drifting as it goes, held together by keeping the subject small enough in frame to stay consistent. Then successive passes zoom into segments of the pass before them, each conditioned on the one it came from, until every face is covered at full detail. Sections 05 to 08 are the constraints that plan has to survive.

09cThe other three

The sides and the back were already in the plans, unrendered for four weeks.

A pass around the building needs references for the angles it travels through, and buying those from an image model is what 09b just failed at. The drawings already describe those angles. The reviewed footprints were extruded into a massing on 16 July (first-floor envelope, garages, the angled suite wing, the double-height great room and foyer, the gazebo, the covered entry), and the script that built it rendered one front-entry camera, wrote the PNG and threw the scene away. The geometry that answers “what is behind this house” was sitting there the whole time the measurements were calling the rear unrecoverable. Nobody had pointed a camera at it.

Below is that same massing from four azimuths. The geometry was not re-authored: the run reads the original script’s module source and executes it verbatim, minus its single fixed-camera render, and contributes the camera only. Three of these four views had never existed in any form. $0.00 billed, no network calls.

Four renders of the same
    house massing in a two-by-two grid, labeled front at zero degrees, right at ninety, back at one
    hundred and eighty, and left at two hundred and seventy. The front shows glazing, a balcony rail, a
    covered entry and a gazebo. The other three are plain massing with hipped roofs and no windows.
The framing is measured rather than chosen by eye. Plan-space center is the middle of the drawing sheet, and the building is not centered on its own sheet, so the first pass orbited the sheet and the house drifted into the corner of frame at 90°. Bounds come out 47.9 × 8.5 × 30.3 and the orbit centers on those instead. The back is bare massing because the original scene only ever authored a window rhythm for the facades its one camera could see. That is the state it is in, and it is what a style pass has to work from.
The circumnavigation itself: 241 frames, 1.5° apart, elevation ramping to 26° and back through the travel. This is what the video prompt gets written against, and what any clip claiming to orbit this building has to agree with. Sealed as massing-orbit-20260811-r1, with the sha256 of the reviewed schema and of the massing script stored alongside the frames. The claim being made is that only the camera moved, and checking that requires the inputs to be pinned as well as the output.

What stays hypothesis stays labeled, in the massing’s own words: wall heights, roof pitch and intersections, facade window rhythm, material placement, terrain form. What is plan-grounded: the footprint components, the gazebo outline, the covered entry, the south balcony relationship, the angled suite wing, the garage recession, and the double-height great room and foyer.

09dWhat the references bought

Four video models, five reference images each. None of them built the plan’s house.

Everything was held even across the four: one prompt, one five-image reference set (the generated front elevation for appearance, the four plan cardinals for shape) and one clip from each vendor, kept whether it passed or failed. Every request body was checked against that endpoint’s own published schema before anything was billed, which caught one vendor being sent fields it does not have. Unknown fields get dropped without complaint, so that clip would have rendered, charged, and applied none of the constraints the test is about. $3.31 billed across four clips.

Four rows of nine video frames.
    Each row is one model's clip sampled evenly from first frame to last. Every row shows a large
    two-story house that changes shape from frame to frame: rooflines, wing counts and window rhythm
    differ across each row, and none matches the plain gray massing.
Nine evenly spaced frames per clip, pulled by the audit script rather than chosen by hand. The script was written before the clips existed and run first against the plan orbit above, whose answer is already known, so its thresholds could not be tuned to a verdict afterwards. minimax travels furthest and holds the most detail; wan 2.7 shows 9 disturbances where the frame difference jumps past six times the clip’s own median.

All four failed the same way, which turned out to be worth more than a pass. Every clip is recognizably the generated front elevation (cream siding, red brick corner tower, standing-seam hipped roof, wet driveway) and none of them is the 47.9 × 8.5 × 30.3 building in the drawings. The gray cardinals were read as hints about how the house should look, not as its shape. Reference images carry appearance. Handing a model four views of a shape does not make it build that shape.

That points at the endpoint left out of the test. Every clip this project has ever reconstructed came from a depth-controlled model, one that takes a video and follows its depth, rather than taking pictures and guessing. Earlier runs had to render that control from a splat that was itself solved from generated frames. The orbit in 09c is a better control than any of those, because it comes off the plans. So a fifth arm sends the same prompt with the reference set cut down to one image, and hands the shape over as 241 frames of control video instead.

09eWhat the control bought

One reference image, plus the plan orbit as a depth control. It built the plan’s house, all the way round.

The only change is how the shape got there. The four gray cardinals came out of the reference set, and the orbit went in as control video, frame for frame at the endpoint’s own 241-frame cap, so one output frame is generated per control frame and the 1.5° per frame holds end to end. $1.51, one request.

A single continuous clip that circles the whole building and climbs as it travels. This is the technique the section is built around, in one take rather than stitched from pieces. The front comes back at the end because the control comes back to the front. Cream lap siding, the metal hipped roofs, the white porch columns and the balcony balustrade all arrived from the one reference image. The shape underneath them came from the plans.
Six rows of nine video
    frames. Four reference-only rows each show a different generic two-story suburban house. The two rows
    given a control video show the long low house from the drawings: one wide, rising to overhead
    views of its roof planes, one close in along its walls.
The plate from 09d with the controlled clips dropped in. This one needs no measurement: the four models given five images each invent a suburban house and wander around it, and the two handed the plan orbit walk the building in the drawings. Each row’s inputs are printed beside its name, read out of the request that was actually sent rather than captioned by hand. All rows were sampled by the same script, at the same nine positions, in the same pass.
A scatter plot in which every one
    of 241 output frames lands on a straight diagonal line against the control frame it matches, with four
    pairs of stills below: gray massing renders on top and photorealistic frames of the same building from
    the same angles beneath them.
Whether a clip followed its control can be measured without solving for a camera, because a controlled clip was handed the path in advance. Every output frame is matched against every control frame on edge structure alone (color gets discarded, since gray massing and a photoreal house have none in common), and the match is read off the diagonal. 100% of frames land within tolerance, the advance rate through the control is +1.002, the mean miss is 0.5 frames, and the travel comes out 357°. Peak match 0.582 against 0.306 for a random pairing.

A measurement that always passes proves nothing, so this one was run first against three answers already known (the control against itself, against itself reversed, and against itself shuffled) before it was allowed to report anything, then against a clip that never received a control at all.

The same scatter plot for
    a different clip, with matched points scattered in a shallow cloud rather than on a diagonal, and a note
    saying the clip is not on the control path.
The same instrument, same control, on wan 2.7 from 09d. 0% on the diagonal, advance rate +0.254, mean miss 92 frames, and only 34 of 241 control frames matched by anything at all. Its matches still span 354°, which is why span gets reported separately from coverage: scattered matches can span almost the whole orbit while going nowhere, and calling that number coverage would have passed a clip that ignored its control.

The other three gates come from the same audit that produced the strip above: no cuts, and the camera travels. Frame-to-frame difference peaks at 1.11× the clip’s own median, the steadiest of the five by a distance, against 8.59× and nine disturbances for the best-looking uncontrolled clip. The first and last frames, a full circumnavigation apart, are the same house down to the planting beds.

What it did not buy: the brick corner tower the prompt asks for is absent, because the massing has no tower and the control beats the reference on anything structural. The haze is heavy, and detail softens at the top of the elevation ramp, where the control is furthest from anything the reference image showed. Both channels did exactly what 09d said they would: the reference supplies material and light, the control supplies form.

$6.32 spent to this point in the section, of which $1.51 appeared to buy nothing: an earlier submission of this same request was accepted by the queue and then lost by the runner, which gave up polling at fifteen minutes and had not yet written the request id to disk, so the job could be neither collected nor canceled. Compute that ran is compute that bills, so it was counted as spent rather than quietly dropped. The runner now writes the id before the first poll and can be told to collect a job it already owns instead of ordering a second one. That clip has since been recovered and it turned out to be worth more than the one that arrived on time. 09g covers it.

09fThe second rung

Coming closer to a 47.9 m building cannot mean drawing a smaller circle.

The technique has a second half: go round again at higher detail, building on the pass before rather than starting over. The obvious way to do that is to shrink the orbit, and here that fails on arithmetic. The footprint is 47.9 × 30.3 m, so half its length is 23.9 m, and any circle small enough to raise detail meaningfully puts the camera inside the dining room.

That is an argument, so it was tested. Four-angle probes at 0.86, 0.78 and 0.70 of the fitted radius cut the building at 3 of 4 angles, then at all four, twice over. Even the mildest of them, a 14% reduction, is already losing the ends of the house.

Three gray massing frames
    side by side, each showing the house running off both edges of the frame with its ends cut away.
The pass that was ready to be paid for. 241 frames at 0.78 of the fitted radius. It was rendered, sealed and written into the project timeline as the second rung before anything had measured it. Measured afterwards, it cuts the building on 241 of 241 frames, worst case 1.47× the half-frame. These three are ordinary frames from around its orbit rather than its worst ones, cutting at 1.41, 1.46 and 1.42×. There is no good stretch of this pass to show. A depth control that runs the building off the edge of frame is telling the model the building continues past the edge of the world, and no amount of prompt wording undoes that.

A third attempt re-solved the radius per frame to hold a constant screen fill. That stopped the cutting, and it is the right way to frame a wide pass, but as a second rung it goes nowhere: the solved radius averages 44.4 m against the fitted 47.8, so the building comes out about 7% larger on average, and on the frames where the orbit swings out to 48.3 m, slightly smaller. It is kept under its own name rather than presented as a rung.

What works is to stop trying to fit the whole building in. Hold the vertical fill at 0.92 and let the frontage run past both edges on purpose. The house is 8.54 m tall against a 16:9 frame, so the full height still fits while the width overflows, and the standoff then follows the silhouette on its own: close at the corners, further back across the long face. Every frame gets the full height of the building and a sliding slice of its wall.

Six gray massing renders in
    two rows of three. The top row shows the whole house small in frame at three angles; the bottom row shows
    the same three angles filling the frame top to bottom, the building extending past both edges.
Same building, same three azimuths, both rungs. Top: the wide ring spent as the control in 09e, standing 22.134.5 m off the nearest wall. Bottom: the close ring, 6.316.7 m off. At the delivered 1280 width that is 36 pixels per meter of wall against 87 (2.43× on the means), reaching 153 px/m at the corners. Detail follows how far the camera is from the wall, not the radius of the orbit: the wide ring’s single fixed radius stands 32.4 m off the front of this building and 25.1 m off its end, because a circle drawn round an oblong is not the same distance from all of it. The elevations deliberately do not match between the rows: the wide ring climbs to 26°, the close ring only to 10°, because from a mean 11.6 m away a 26° camera is looking at roof. Coming closer forces that ramp down, and that is part of what the second rung costs.
The close control. 241 frames at 16 fps, the same 1.49° per frame and the same full circumference as 09e, a second rung on the same ladder rather than a different shot. 0 of 241 frames lose the roof or the ground line. What it costs: a frame holds 57% of the frontage facing the camera instead of all of it, which is what standing that close to a 47.9 m building means. The two near-featureless moments are the building’s own blank end walls, which the wide pass saw too, only smaller.

The other half of “using preceding segments” is the reference set. Rung 1 was handed exactly one image, the generated front elevation, which was the only view of this house that existed. That is why its sides and back are the model’s invention. Rung 2 is handed rung 1’s own delivered frames at the four cardinals, so it starts from a house that already exists at every angle. Which output frame sits at which angle is read out of the frame-by-frame match from 09e rather than assumed, landing within 0.75° at worst.

Twelve photorealistic frames
    of the same cream house arranged in a four by three grid, each thirty degrees further around it.
What the wide pass delivered around the full circle: twelve of its own frames, 30° apart. Four of these become the references for rung 2, and this plate shows both what they carry and what they do not. The surface holds all the way round: cream render, pale metal roof, dark planting bed, lawn. That is what the close pass needs to inherit. The viewpoint does not: the orbit has climbed to 26° by the back of the house, so the back reference is mostly roof, and only the front cardinal sits low enough to show a full wall. Rung 2 starts with materials it can trust at every angle and exactly one reference that shows a facade.

It was submitted, and it came back: $1.51, one request, 241 frames at 1280×720. Put through the same instrument as the wide pass (every output frame matched against every control frame on edge structure, self-tested against three known answers before it was allowed to report an unknown one), it follows the close control across 357° at slope 0.998, with 99.6% of frames on the diagonal. It also stalls less than rung 1 did: 210 of the control’s 241 positions are held by a distinct output frame, against 187 for the wide pass, at a mean offset of 0.41 frames rather than 0.49. No cuts: the loudest frame-to-frame difference is 1.58× the clip’s own median.

Rung 2, delivered: one continuous take, close in, all the way round. Everything below this is a frame cut out of this file. Stills can show the geometry is right at a given angle; only the clip shows whether it stays right while the camera moves, and staying right is what a single take is bought for.
Two rows of six frames.
    The top row is the flat-shaded massing render seen close up at six angles around the house, cream walls
    with dark roof planes and dark blue glazing; the bottom row is the generated photorealistic result at the
    same six angles, carrying the same roof planes, the same columned entry, the same stepped wing and the
    same blank rear gable.
The instruction above, the delivery below, at the same six azimuths. The pairing is not by index: each output frame is placed by the frame-by-frame match, worst error 0.75° across 12 sampled angles. The roof planes, the columned entry, the stepped wing, the blank back wall and the angled glazed bay all land where the plans put them. That is what the depth channel is bought for, and this rung asks much more of it than the last one: 6.316.7 m from the nearest wall, against 22.134.5 m.

What did not carry over is the surface. Rung 1 delivered a smooth cream-rendered house; rung 2 came back in cream weatherboard with a brick entry. The palette held (cream walls, pale metal roof, the same overcast wet light) and the material did not. Four reference images tell the model roughly what the house is made of, and nothing in the request holds any one of them at any particular frame. The field that would do that is the one 09i found empty.

Two rows of six generated
    frames. The top row shows the whole cream house small in frame at six angles; the bottom row shows the
    same six angles from much closer, filling the frame, with visible cladding, glazing and a brick entry.
Both rungs, delivered, same six azimuths. Top is the wide pass, bottom the close one. At the front the gain is obvious: the camera closes from 32.4 m to 11.9 m, and brick piers, window frames and a wet driveway resolve out of what the wide pass renders as a cream smear. The 180° column shows what it costs. That is the building’s back wall, and from 13.9 m it is one blank gable with nothing on it, because the plans put nothing on it. Coming closer cannot add detail the massing never had. It only spends more of the frame on whatever the plan does put in front of the camera.

That takes the run to $7.82 of the $7.83 authorized: six requests that came back with a clip, plus the seventh charge 09e describes. Two laps of the same circumference, the second at 2.43× the wall detail of the first, both driven by cameras that came off the plans and both measured against them.

Measuring the rung turned up something about the one before it. The wide control in 09e, the one that was paid for, cuts the building on 16 of its 241 frames, worst case 1.04× the half-frame. Mild, and nobody knew, because the framing check was written after the money was spent. It was measured afterwards by replaying each frame’s own camera position out of that frame’s filename and re-rendering nothing, so the number describes the exact bytes that were submitted. The check now names that pass on every run instead of quietly passing it.

09gThe clip that was lost

The clip written off as lost came back, and it is identical to the one that arrived.

The lost job was never gone. fal keeps a request history, and 1.9 hours after that job ended the history still held the record: status 200, 833 s of compute, and a video URL that was still live. The clip was pulled down and put beside the one that had been collected. So the run ends up holding something it never meant to buy: two independent executions of a byte-identical request, submitted 17.7 minutes apart, run on whatever workers the queue happened to pick.

The two files are the same size to the byte and their hashes differ, which sounds like a difference and is not one. Hashing each part of the container separately shows where it is: 318 bytes differ out of 14,737,917, all of them inside the metadata box, and the 14,720,606-byte payload, the encoded video itself, is identical bit for bit. Decoded and compared as pixels, all 241 frames come back at zero mean squared error on every plane. It is the same clip twice.

A three by three grid. The top
    two rows show the same three views of a cream house, once per run. The bottom row is solid black.
Three bearings, one row per execution, and the difference between them along the bottom, amplified 30× so that a single level on a single pixel would show. The black row is the result. Trust the numbers over the plate, though: this is a JPEG, and its own encoding noise reaches 10 levels in that black row and 27 between the two rows of frames. None of that noise is in the clips. The tiles behind these rows come from byte-identical files, and the difference tile is exactly zero on all three channels.

This changes what the next dollar can buy. The authorization for this arm was written as one, and if it is bad, two, which assumes a second run gives a second sample the way re-rolling an image model does. On this endpoint it does not. An identical request returns the identical clip, so resubmitting cannot rescue a pass you dislike; only changing what gets sent buys anything. The close control in 09f is that changed request, and it is where the last $1.51 went instead of into a second lap of the wide ring.

09hThe back

Every frame registered, and the rear of the house scores higher than the front.

The clip went through the same solve as every other reconstruction on this page. How far apart the sampled frames are turned out to be the whole variable. At 11.2° between frames, only 6 of 32 images survived the solve at all. At 5.6°, the frames broke into two models that share no coordinate frame, 44 images in one and 21 in the other. At the clip's own 1.5°, all 241 registered into a single model at 0.897 px mean reprojection error. Every earlier splat here came from a front-arc clip whose rear frames registered zero times (83 consecutive frames and 224° of orbit), measured twice.

Trained at the standard 30k steps with every eighth frame held out, it returns 31.35 dB across 31 held-out views, against the 30.34 dB baseline of section 06b. Split by where the camera was standing, the front arc is the worst of the four at 29.92 dB and the rear is 31.74 dB. SSIM does not follow: 0.860 against the baseline's 0.910, on a harder split (31 holdouts rather than 4), so the two numbers come from different tests, and only the PSNR comparison is like for like. Loadable as Circumnavigation in section 07. Local GPU, $0.00.

09iThe field we left empty

The endpoint we paid twice has a field for this. Both requests left it empty.

Every clip on this page fails the same way: the house is right where the camera starts, and has quietly become a different house by the time the camera comes back round. The standard fix is to pin a known image to a specific position in the output, so the appearance cannot drift away from it. Nothing above does that. So the schemas were read rather than recalled: 48 video endpoints, live OpenAPI documents, sorted on the two capabilities this technique needs.

Four quadrants of video
    endpoints. Top left, 23 endpoints pin a frame but take no control video. Top right, highlighted, 11
    endpoints do both and every one is a VACE variant; the six paid submissions from this project are marked,
    four in the bottom-left quadrant that does neither and two in the highlighted quadrant.
The two capabilities are almost always sold separately. Down the left, an endpoint that pins frames usually has no channel for the building's shape at all. Across the bottom, the four vendors of 09d had neither. Read live from keyframe-capability.json, derived from the sealed schema survey.

The lit box is where the answer was. 11 endpoints take a pinned frame and a control video whose geometry the output must follow. Every one of them is a VACE variant, and one of them is wan-22-vace-fun-a14b/depth, the endpoint 09e and 09f bought their two clips from. It accepts first_frame_url and last_frame_url. Both requests sent to it left both unset. So did the other 4 of the 6 submissions this section logged, but those went to endpoints that have no such field to leave unset, which is the distinction the survey exists to draw. On the two that could have been pinned, this was a capability sitting there unused, and only the schema could tell that apart from a capability that was never on offer.

The 23 endpoints that pin frames and nothing else are the ones with the familiar names: Veo 3.1, Kling, Wan FLF2V, Flux 3 keyframes. They do not substitute here. They interpolate between the images they are given, inventing the path in between, and the path is the one thing this project can already compute exactly: the control video in 09e is a 241-frame orbit whose every camera position comes off the blueprint. Handing that to a model with no geometry channel throws away the reason the orbit was built. Each family gives you half the request.

Pinning at an arbitrary index (a fixed frame at each of the four cardinals, not only at the two ends) is rarer still. Of the 48 it exists only on the inpainting task of the two VACE families, carried by a mask video rather than a field. That is the request this section has been circling since 09: the four elevations already exist as stills, and the orbit already knows which frame each one belongs at.

None of this changed the rung that was in flight while the schemas were being read. Control standoff and reference set were the only two things it was meant to vary from 09e, and a third difference would have made the comparison unreadable. There was also nothing to pin it to: no styled still exists at the facade framing, and the only candidate is a crop of a wide frame, which would have to be enlarged by the same 2.43× the closer standoff buys, anchoring the clip to the softness the rung was bought to remove. That rung has since landed, and what it failed to inherit was its materials, which is the failure this field addresses. The pinned run is the next request, priced and authorized on its own. Reading the schemas cost $0.00.

09jWhat the clips carry

Geometry all the way round. Materials only at the front.

Both rungs were checked against their control and against each other, and both passed. Neither check asks whether the house in the frame is still made of anything. This one does. Every frame of both clips was scored inside the building’s own outline for three things: color, how much of the wall is opening or shadow, and edge detail.

Two rows of eight frames,
    45 degrees apart around the house. In both rows the frames at 0, 45 and 315 degrees show brick, glazing
    and warm interior light; the frames from 90 through 270 degrees show blank cream walls with no windows or
    doors at all.
Both delivered passes at the same eight bearings, wide on top and close underneath. At and 45° the house has brick piers, glazed bays and lit rooms behind them. From 90° to 270° it has none of those on either row. The walls are blank cream, the openings are gone, and what is left is the untextured massing model the control video was rendered from.

Color saturation on the building runs 0.62 across the front arc and 0.46 from 90° to 270°. The fraction of it in shadow or opening falls from 0.68 to 0.42, which is the windows and doors going away. Edge detail barely moves: the worst frame of 241 still holds 62% of the front-arc figure, and no run of eight frames anywhere on the orbit drops below half. Cladding lines and planting keep the edge count up while every opening in the wall closes over, so a sharpness measure on its own would have passed this clip.

Two curves against azimuth for
    241 frames. Both start high inside a shaded band covering 315 to 45 degrees, fall through the 45 to 90
    degree range and stay low from 90 to 270 degrees, then climb back as the camera returns to the front.
The same two quantities against where the camera was standing, for the wide pass. The shaded band is the arc the one reference image was taken from. Both curves hold inside it, fall away as the camera leaves it, and come back when it returns. Read from appearance-decay.json, one row per frame.

Both rungs fail across the same arc, which follows from how they were ordered. Rung 1 was given one reference image showing the front, so its sides and back were invention. Rung 2 was given rung 1’s own delivered frames at the four cardinals as its reference set, so three of its four references were already showing the blank walls, and it inherited them.

This is what the holdout figures in 09h cannot see. PSNR compares a render against the frame it was trained on. If the frame stopped showing a house, a reconstruction that faithfully reproduces a blank cream box scores well for it. The rear arc coming back 1.8 dB above the front is what that looks like from inside the metric: less on the wall to get wrong.

So the reconstruction is doing its job and the ceiling is upstream of it. The earlier splats on this page cover a restricted arc of a house that has brick, glazing and interior light in every frame they were trained on. This one covers the whole circumference of a house that has those things on about a quarter of it. The circumference was paid for with the materials, and nothing in the run reported that trade until it was measured here.

Two things have to change before the next clip. The empty field in 09i pins a known image at a fixed position so the appearance cannot drift away from it. But there is nothing to pin at 180° yet, because the plan massing carries no material anywhere. The four elevations have to be styled first, at the framing the orbit will meet them at, and then pinned to the frames the orbit already knows they belong to. 09m writes that framing down, one camera per elevation. Measuring this cost $0.00.

09kAll eight, side by side

What the whole run of attempts bought.

Every splat here has been scored against its own training frames, and those scores cannot be read against each other. A front-arc model is graded on front-arc frames and does well for reproducing them. The one that covers all four sides scores 1.8 dB higher on its rear arc than on its front, which sounds like the rear came out better and means the rear has less on it to get wrong. So this plate carries no metric. Eight models, eight bearings 45° apart, camera limits released so each one is asked for views its data cannot support. Where the data runs out the renderer still draws whatever gaussians happen to face that way.

Eight rows of eight
    renders. The top four rows show a sharp brick and glass house in the leftmost frame and dissolve into
    colored streaks and blur across the remaining seven. The bottom four rows each show a complete house
    standing level and correctly proportioned in all eight frames.
Every reconstruction this project serves, at the same eight bearings. is the front. Rows one to four are the front-arc models in the order they were made; rows five to eight go all the way round. Shot through the same viewer this page embeds, at 960×640, one frame per cell. Camera position, gaussian count and framing for every cell are in splat-comparison.json.

The front frame of the first four rows is the best picture of this house anything on this page has produced. Brick piers, glazed bays, lit rooms behind them, planting at the base, a roofline that reads as built. Turn 45° and it is already going. By 90° there is nothing left to read. The model with the highest holdout scores on this page is the one that falls apart hardest: row one averages 112 out of 255 in brightness at the front and 71 across the other seven bearings, which is the renderer running out of gaussians and showing the empty scene behind them.

Row five holds a house at every bearing. The proportions are right, the ridge line stays level all the way round, the porch reads from the side and the rear gable reads from behind. It has no windows, no doors and no brick, for the reason 09j measures: the clip it was trained on stopped showing those things once the camera left the front.

Four models have the house’s appearance across a quarter of a turn. One has its shape across the whole turn. The goal was one model with both, and every attempt so far has traded one for the other.

Rows six to eight change how the camera positions were obtained. Every model above them was reconstructed by COLMAP, which recovers where each camera stood by matching features between frames. None of these frames are photographs. Each was rendered by a camera this project placed, and the manifest that drove the render already lists that camera for all 241 frames. Rows six to eight skip the solve and read the manifest.

That puts the reconstruction in the plans’ own world, in meters, which can be checked. Rows six to eight come back 0.6°, 1.6° and 1.7° off vertical, with extents within 10% of the house the renderer measured off the walls. The COLMAP solve of the same 241 frames comes back 23.6° off, at about a tenth of the size. Because these three are in meters, their camera distance is computed: the measured house box against the viewer’s own focal length puts it at 66.8 m. It lands inside the apparent-size band the five fitted rows occupy.

Row seven is a second lap flown 6.3 m off the wall. Viewed from 32 m it shows brick coursing, window frames, veranda posts and lit rooms behind the glass, which no full-circumference model here has had. Above the veranda it has nothing. That camera never stood far enough back to see the roof, so there is haze where the gables belong, and at the 66.8 m the plate uses it is mostly haze.

Row eight trains on both laps at once, 482 images. It has the roof and the back, and at the front it is softer than row six, which used half the data. Averaging two standoffs into one reconstruction gives up the close lap’s detail and gains no reach. The two laps are better kept as separate models, each viewed at the range it was flown for.

Two things had to be fixed before the plate could be trusted. Each solve carries its own arbitrary world scale, the largest here 50× the smallest, so a shared camera distance had to be fitted: stand back 1.594× the radius holding 40% of the gaussians the renderer meaningfully draws. That reproduces the four distances already curated for the model picker within 6.5%. Dropping the near-transparent gaussians first is what makes it work, because 52–86% of every cloud here is floaters, so a percentile taken over all of them measures the halo.

The rule still does not reach the fifth model, because it was fitted on four clouds that all trail floaters the same way and that one does not. In the front-arc models the radius holding 90% of the gaussians is 2.1 to 2.9× the radius holding 40%; in the circumnavigation it is 1.5×, because a camera that went all the way round leaves nowhere for a halo to stream off to. The multiplier had absorbed the tail shape of the other four, so applied here it stands the camera at 2.20 in a cloud whose last 1% only reaches 2.68, and the house overfills the frame. That row is placed by eye at 3.4 against a recorded ladder, and the shot index says so.

The second was the vertical. Nothing in a splat file says which axis is up; the viewer takes it from the start view each model was given, and the circumnavigation model was added to the picker with another model’s start view pasted on. Nobody noticed while nobody orbited it. The scene is a house on a large flat lawn, so the cloud is overwhelmingly planar and its direction of least variance is the ground normal, which puts that solve’s real vertical 23.4° away from the one it was handed. Deriving it is what keeps row five upright through the whole orbit. Shooting the plate cost $0.00.

09lAgainst the bar

The model this was told to match, and where it is still ahead.

The target is a specific file: a splat of a different house, headed 106,331 splats and 64 of 64 poses, photographic up close, and restricted to one viewing angle. The job was to keep that quality and remove the restriction. Counting splats answers none of that, so the panels below are cropped at 1:1 out of rendered frames. A pixel in one panel is the same size as a pixel in the next.

Five cropped panels in a
    row. The first shows a photographic interior with columns, glazing bars and furniture. The second shows
    the same model's exterior, largely obscured by large smeared ellipses. The third shows brick coursing and
    lit windows under a veranda. The fourth shows a whole house with three gables. The fifth shows the rear
    elevation.
Left to right: the benchmark’s interior, the benchmark’s exterior, this house’s close lap at 32 m, its wide lap at 66.8 m, and its rear elevation. Crop boxes are recorded in benchmark-detail.json.

The first panel is still the finest texture on this page and nothing here matches it. Glazing bars stay separate, the furniture holds its edges, the planting outside the window reads as leaves. That gap comes from what was fed in. The benchmark reconstructed photographic frames; the circumnavigation laps reconstructed frames generated from a massing render, which never had brick or leaves in them to recover.

The second panel is the same model looking outward, and it is the reason the restriction existed. Large smeared gaussians sit between the camera and the building, which is what a reconstruction does with the directions its 64 poses never covered. Panels three to five carry 241, 241 and 482 poses and do not have that halo, because the camera went all the way round and left the halo nowhere to stream off to.

The count is met and the coverage is beaten. The appearance still falls short, and the fix for it sits upstream of any reconstruction: the circumnavigation clips need the styling the front-arc clips already got, applied per elevation, before they are trained again. Panel three shows what that looks like when the source has it, at one story and one lap.

09mWhat the next request has to be handed

Four elevations, four cameras, written down.

09j ends on a prerequisite and no numbers: the four elevations have to be styled first, at the framing the orbit will meet them at. There are already four cardinal stills in the run and they are the obvious thing to style. They were rendered to fit the whole 47.9 m building in frame, at radius 47.8 and a fixed 12° elevation. The facade orbit reaches those same four bearings at radius 25.1 to 32.8 and elevations from to 10°, so a styled version of a cardinal still would have to be enlarged by between 2.16× and 2.70× to reach the orbit’s scale. 09i rejected a crop at 2.43× for exactly that, since it anchors the clip to the softness the closer standoff was bought to remove.

The still to style at each bearing is already rendered. The facade pass’s own control frame there is the framing the orbit meets that elevation at, by construction, so the four frames below are the ones the styling goes on and the delivered frames they pin to are the ones at the same index. The bottom row is what came back at those four frames: brick and lit windows at the front, where the one reference photo was taken, and blank walls at the other three, because there is nothing at those bearings to inherit material from.

Twelve renders in a grid,
    four bearings across and three rows down. The top row shows the whole house small in frame. The middle
    row shows the same four bearings filling the frame, much closer. The bottom row shows the generated
    frames: brick and lit windows at the front, blank cream walls at the other three.
Front 122 px/m at radius 26.6 and 2.0°, right 140 at 32.8 and 6.0°, back 104 at 25.1 and 10.0°, left 118 at 32.6 and 6.0°. The stills in the top row resolve 40 to 59 px/m at the same bearings. Read from pin-contract.json, one entry per elevation.

The resolution figures come out of the renderer’s own per-frame schedule rather than off the pictures. Two relationships hold across all 241 rows of it to within 0.007 px/m: detail scales as (height / 2) / (nearFace × tan(fov / 2)), and the near-face distance is the camera’s horizontal standoff minus a support distance belonging to the massing. That second term is a function of bearing alone for a building with vertical walls, which is what lets the same decomposition be evaluated at the cardinal stills’ own radius and elevation and compared in the same units. Writing this down cost $0.00. The request it describes is priced and authorized on its own.

09nWhat is on the three blank walls

Three of the four elevations have no openings at all.

Before buying the styling, it is worth checking what is on the four frames 09m names. The sealed massing script carries 8 glass elements. 6 of them sit on the house and all 6 are on the front. The other two are not on the house: their coordinates are two edges of the detached gazebo, which has no footprint of its own. That leaves 0 openings across right, back and left together, which is why those three render as flat slabs.

None of the eight came from the plan. Every one is a literal pair of coordinates typed into the render script, under a comment there calling the opening rhythm a hypothesis. The verified schema holds 19 openings and all 19 are interior, doors between two named rooms, and the entry config’s own authority record says no exterior elevations were ever supplied. The front has an appearance because somebody drew eight rectangles for the one camera that script was written to render.

This section was first written to say the front is the only elevation with modeled openings on the strength of a field in my own schedule script whose value was the literal test side == "front". It was typed in, not measured. Replacing it with a parse of the massing source is where everything above came from, including the two windows on the gazebo, which nobody had noticed were there.

What the plan does carry is which rooms reach the outside and which way each one faces. A room’s exterior wall is the part of its own polygon lying on the building outline, so that is computable per room: of 51 rooms, 24 have one. The three blank elevations have 134 m of wall between them and 12 rooms behind it whose names imply glazing. The back carries 11 rooms and 75.4 m on its own.

Four massing renders in a row, front,
    right, back and left, each with a list of rooms beneath it. Under the front, six glass elements are noted in
    orange. Under the other three, a line reads blank slab, nothing modeled. Each room is listed with its wall
    length in meters and whether it implies glazing, a door, a small opening or open structure.
Front 6 rooms and 24.7 m, right 10 and 41.4, back 11 and 75.4, left 6 and 17.4. Every room carries the kind it was given, read from its own name, so the reading can be argued with. 0 rooms went unclassified. Read from opening-schedule.json.

Which way a wall faces is settled by stepping off it and asking whether that step leaves the footprint. The polygon’s winding will not do it: winding points into the house at a recess, and this building has a recessed entry and two covered porches, which put 282 plan units of entry wall on the back elevation until the test was changed. The lengths are in meters because the massing script declares its own scale constant and this reads it out of the file, so a change to the massing moves these numbers with it. The schema forbids inferring measurements from polygon scale by itself, and it is right to. Producing the schedule cost $0.00, and it narrows the request 09m priced: one elevation can be styled from the photograph that exists, and the other three need their openings placed from the plan first.

10Standing rooms

Room plates from before the reconstruction, kept for their labels.

Eight schema rooms and the exterior shell. Each one carries the dimension string and review confidence straight off the reviewed plan, so the picture and the record stay attached to each other. That link is what these are still here for.

The images are presentation plates, not measured space. They are useful for finding a room and checking its label against the plan, and they are why the work moved to reconstruction: you cannot walk around a plate, and the section above can be walked around.

01 / 09

Exterior

Select a world  ·  ← →
A

Same house, four treatments

The Victorian pass is the best-looking exterior in the project and it was rejected. The restyle moved the roofline, and the reconstruction could not solve it.

11Automated tour

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

Nothing here is cut together. One 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 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: enough saturation to keep the color, low enough intensity to leave headroom.

12Where 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, with lateral camera coverage going from 6.5 to about 13.8 units.

That costs 1.34 dB on the R4 arc in exchange for roughly three times the view volume. R4's worst endpoint got 1.19 dB better, because every new clip sees it.

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 looks from.

Improved

Yaw extremes

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

Both edges came back with real detail instead of invented blobs.

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: one r5 clip completed and billed at $0.50625 with 175.6 s of inference, and then the result store returned HTTP 500 on all 23 retrieval attempts over 24 minutes. It was left out of 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.

Room-perimeter edges
203

Counted from the shipped graph, 117 plus 86. These are room boundaries rather than traced walls; the traced walls are kept in their own manifest as rejected analysis.