AutoLab by AutoMoto ©

AutoLab 3D Creation Engine

One weird trick to rule (and measure)
them all.

Measure a 3D model directly. Compare its geometry with published dimensions, find the part behind each miss, and give an AI agent a precise path from measurement to edit.

Side profile of the model overlaid on the calibrated reference drawing, with fitted knots marked
Profile overlay. The model's outline (ink) against the calibrated reference drawing (dashed), knots in red. Roofline within a millimetre for most of the car.
Source and instructions README Learnings
01

One command to rule them all

npm run fit · measured against specs/rivian-r2.json · model r2-blueprint (this assembly)

—Dimensions within tolerance
—Mean deviation
—Calibration checks passed

Loading the measured report…

Full measurement report

The measured rows are read from out/fit.json when this page loads.

The miss has a name

Every published dimension is measured directly off the triangles and compared with its tolerance; where a row is out, the extremes name the part that owns the miss. The numbers on this page are read from out/fit.json, written by the engine when the site was assembled.

Calibrated, not assumed

The self-test drives every instrument against a fixture whose answer is known by construction, then refuses to certify a real model until its axle-to-axle distance comes back as the published wheelbase. On this assembly: see out/fit.json, wheelbase measured against the published figure.

Two honest answers

The first bounding box returned 2.151 m wide against a 1.905 m spec. Both are right: 2.151 is width over mirrors. So every number here carries the parts it was taken from, and width is reported over body and over mirrors separately.

02

Drawn to scale, made from mesh

Cross-section of the vehicle at x = 0 on a millimetre grid
Section at x = 0. A plane slice of the actual triangles, chained into loops, on a millimetre grid for laying over a drawing.
Cross-section at the cowl
Section at the cowl. Where the windscreen meets the hood; the station that was 111 mm wrong for four rounds of visual review.
Cross-section at x = -1.2 m
Section at x = −1.2 m. Through the rear doors and the structural battery.
03

The aperture gate

Opening a door should reveal the space behind it. The aperture gate measures whether fixed geometry intrudes into a door, hood or liftgate opening, then names the parts that need a closer look.

Loading the opening checks…

Opening-by-opening report

The gate checks four open positions. Geometry well inside an opening is flagged for the author to judge; parts at the edge are listed separately. A flagged finding may be intentional vehicle structure.

OpeningResultSurvivors (part, mm inside the outline, mm behind the skin)Touching the edge
Read from out/apertures.json when this page loads.
04

The instruments

CommandQuestion it answers
selftestAre the instruments calibrated? Refuses to certify a model whose axle-to-axle distance is not its published wheelbase.
dimsThe measurements a specification actually names, each carrying the landmarks it was taken from.
fitEvery published dimension against the model, with tolerances, and the part that owns each extreme.
extremesWhich part owns each end of the envelope. Turns "54 mm too long" into "the headlamps".
partsEvery part, its category, triangle count and envelope.
section <x> --svgA cross-section drawn to scale on a millimetre grid.
clearance <a> <b>Nearest surface-to-surface distance, not centre-to-centre.
overlapsWhich parts' envelopes intersect.
symmetryShape symmetry about the centreline, section by section.
referenceWhat the drawing's calibration actually supports, checked against the spec on load.
knots <curve> --tolFewest knots that reproduce the reference, as pasteable source in the model's own interpolator.
deviate --svgThe model's outline against the drawing, broken down by region.
curvesThe curve layer: which curves are writable, and how anchored.
propose <curve> --frameFit a curve to the drawing, build that model, measure it, show the diff.
propose … --writeApply it, after checking the model file has not changed since it was measured; leaves a rollback copy beside it.
apertures --band --edgeDoes any fixed geometry sit at the skin, well inside a door, hood or liftgate opening, at four open fractions? Names the part, how far inside, how deep. The gate built after five such defects escaped every other check.

Four things it will not do

Extrapolate. A fit asked for stations the drawing does not cover is refused rather than padded with real-looking knots. Reformat. An unchanged knot is written with the author's own text, character for character. Fit what it cannot verify. Which curve drives which measurement is derived by perturbing the curve and watching what moves. Call noise an improvement. A change smaller than the drawing's own error is a measurement of the drawing.

Why it's agent-native

One command per question, structured output, every number with its landmarks and its tolerance, errors that carry the recovery, and a write path that refuses a dirty working tree because two agents once shared one. It's the loop an LLM can actually run: build → measure → diff in millimetres → edit → repeat, with no picture in it.