System register · Forêt de Verrières, 24 October
How a phone clip becomes a measured surface.
One continuous route through the pipeline, stage by stage, naming the thing that ran and the number that came out. Every figure below is read from the published reconstruction, not estimated: 34 clips in, 26 independently reconstructed worlds out, placed on a national LiDAR base layer with the uncertainty of each placement stated.
The service map.
what crosses each edge, and where it lands
- 01CaptureiPhone · Vercel edge
- Browser
- Vertex AI
- Cloud Storage
34 clips + SHA-256 manifest
- 02ReconstructCompute Engine · L4 spot
- Artifact Registry
- Cloud Build
- Compute Engine
- Cloud Storage
26 × SPZ v3, 6.2M gaussians
- 03RegisterDataproc · open geodata
- Dataproc Serverless
- Open geodata
- Cloud Storage
tiered placement, ±15 m to 532 m
- 04ServeCloud Run · GCS v3
- Cloud Run
- Cloud Storage
- Browser
The route, end to end.
select a stage to isolate it
- A drone pass, a phone panorama, or imagery you already hold. No surveyed control point and no satellite fix needed at capture time.
- iPhone 16, 34 clipshandheld, 09:30–11:30, no control point set
- ifuse / Photos exportoriginals copied out, SHA-256 per frame, nothing deleted
- Route trace2.36 km path recovered from the Mapillary 2026 sequence
- Gemini 4 Argonper-frame canopy fraction, blur and scene class
- The footage becomes geometry through open world-model reconstruction, with high-density splats carrying the fine surface.
- COLMAPSIFT, sequential matching overlap 40 — required or the clip loses its initial pair
- LingBot-Mappose-free fallback: windowed, window 32, overlap 8, no render
- LichtFeld-StudioGaussian training on one L4; frames must live in images/
- splat-transformdecimate to budget, drop SH to band 0, emit SPZ v3
- Registered against open geodata — street network, national terrain and elevation models, existing LiDAR — so it lands in a real coordinate system.
- IGN LiDAR HDEPT depth 6, 21 tiles, EPSG:2154 → WGS84, vertical datum IGN69
- build_verrieres_layer.pyinverse Lambert-93 with k0 undone before r, asserted round-trip
- Decimation220,000 points kept, 45% ground (class 2), 13-byte stride
- Ground samplingeach world's elevation read off the nearest ground-classified point
- A visual positioning system resolves where each capture sits, and re-resolves it on every later visit. Position becomes a measurement, not an assumption.
- Timestamp → arc lengthclip start mapped onto the 2.36 km corridor at 1.57 m/s
- Tier assignmentanchored only where the clip sits on a known control point
- Visual matching489 Mapillary reference thumbnails, 16×16 grey + hue shortlist, ORB verify
- Honest refusal12 clips kept approximate rather than promoted
- National LiDAR is the ground-truth base layer, splats are superimposed on it, and differencing two epochs gives the movement with its uncertainty stated.
- Ground base layer159,114 ground-classified points carry the terrain, not the splat
- Superimpositionsplat origin snapped to the sampled ground height, never sea level
- Epoch differencingtwo observations of one station, delta carried with its sigma
- Publishmanifest + sog-report to GCS v3, CORS open, gzip + NGSP v3 asserted
One clip, followed the whole way.
the shortest honest demo
IMG_4087.MOV
48.7536 N, 2.2290 E
197,511 gaussians · 3.0 MB · SPZ v3
placed anchored, ±15 m
- 01Recorded09:41, roundabout at Batterie de Bièvres. No control point, no GNSS fix logged.
- 02PosedCOLMAP registers the clip on its own; 197,511 gaussians trained in 3.0 MB of SPZ.
- 03GeoreferencedPlaced against IGN LiDAR HD; ground height sampled at 78 m, not assumed.
- 04PositionedTimestamp lands it on the corridor; tier resolves to anchored, ±15 m.
- 05ServedStreams as SPZ v3 into the anchored map beside the LiDAR surface.
What the run produced.
read from manifest.json and the LiDAR sidecar
- Clips captured
- 34iPhone 16, 24 October
- Worlds reconstructed
- 26independent, never merged
- Gaussians
- 6,237,73996.0 MB as SPZ v3
- LiDAR points
- 220,00021 EPT tiles, 159,114 ground
- Route length
- 2.36 kmtraced from Mapillary
- Anchored / approximate
- 14 / 1215 m / up to 532 m
Where each part runs.
Google Cloud, plus the open tools it schedules
The GPU stages run open reconstruction — COLMAP for pose, LingBot-Map where SIFT finds no initial pair, LichtFeld for Gaussian training — scheduled onto Compute Engine and the serverless batch services. The national base layer is IGN LiDAR HD, reprojected from Lambert-93 to WGS84 in-application rather than at read time. Nothing here is a black box: the pipeline is in the repository, and the viewer reads the same manifest this page describes.