Watch “This is Formula One”
Latest result · scored

We don’t guess.
We measure.

Hungarian GP 2026 · scored1:17.207
predicted 1:13.613 · real 1:17.207 (Norris) · −4.65% = 4.19σ
sha256 b22f8479… · preimage released
Footage: “This is Formula One” by noway- · YouTube ↗
The track record

Every call, hit or miss.

A call goes up hashed before the session runs, and gets scored against FastF1's timing once qualifying is over. The misses go up too, and they are not all the same miss: the scale is the one each call declares about itself. Hit inside ±σ, Miss · in band outside σ but inside the call's own 95% band, Strong miss beyond it, which is the result that forces a re-freeze. Two calls scored so far; both landed outside their bands and both said so.

The tyre is two numbers, fitted across seven circuits and then frozen for the rest of the season. Scored each time on the circuit its own fit was held out from, it lands at σ 1.414%. The floor underneath that is 0.37%, which is how far apart two teammates in the same car qualify, so the gap left to close is real but no longer enormous. The two closest blind calls under the current folds, Silverstone and Miami, landed at −0.43% and −0.66% against their 2026 poles. The circuits that went the other way are written up rather than quietly dropped. How accuracy is measured →

The rest of the season is already sealed

Nine calls, one per remaining callable round, committed in a single act under the frozen v4 configuration. The lap times stay sealed until each session runs; the hashes are public now, bound together under one manifest.

manifest caaf244f05cd25bad4ef3eb3afb3da8c8033948a78961b0be16beb1afa56912c

Locking race by race would have left one hole nothing in the scheme could close: nobody can tell how many circuits were considered and skipped. A model that quietly declines the ones it feels shaky about produces the same evidence as one that calls everything, and scores better. Removing a circuit from a sealed set changes the manifest, so the option stops existing.

What it costs is said out loud: nine calls made in July cannot learn anything from the season. That is given up on purpose. And the expected result is on the record in advance: three to eight hits out of nine, centred on 5.5, with a 37% chance of at least one strong miss. Nine out of nine would mean the bands were too wide to be wrong, which is a failure of calibration rather than a triumph.

Las Vegas is not among them, and the reason is worth reading before the season starts. Its 2025 reference session ran wet, pole set on intermediates, so a dry-line prediction built on it is not a prediction. From v3 the model refuses that input rather than producing a number from it. But the defect list also records the uncomfortable half: this circuit had already been named in writing as the likeliest miss, and the rule that removed it was written afterwards, from facts that were public the whole time. So the season is nine calls, the baseline keeps its tenth, and the head-to-head is declared as nine rounds rather than ten.

And the model has a rival it does not beat yet

Take a circuit's 2025 pole time and multiply by one constant, 1.0323. That rule, scored under the same seven folds as the physics, lands at σ 0.99% against the model's 1.414%. Published because it is true, not because it flatters, and two re-freezes have widened the gap rather than closed it.

Seven circuits cannot separate those two numbers, so this does not say the trivial rule is better. It says the physics has not earned its complexity yet, and that is the honest state of the evidence. The baseline has its own ten sealed calls and the model has nine, so they overlap on nine rounds and the head-to-head is declared over those nine. Las Vegas, where the model abstains and the baseline does not, is reported on its own rather than folded into the comparison. The paired test was declared before any of it runs, so the season settles this instead of an argument — though nine rounds is not enough power to settle it, which the null-model document says outright.

How it works

Where the number comes from.

01 LEARN

Two tyre numbers, grip and how it fades under load, are fit to a single real qualifying lap.

02 FREEZE

Those two get locked. They aren't touched again for the rest of the season, on any track.

03 PREDICT

Run the physics on a circuit the model has never seen.

04 CHECK

Score it against real telemetry, in public. Two calls so far. Both missed, and both got traced to a specific cause.

When it's wrong, you can find out why. That was the design goal.

What this is not trying to be

A Formula 1 team simulates its own car with its own CAD, its own wind-tunnel maps and tyre data nobody outside the paddock sees, on a rig with a driver in it. This is not that and will not become that. Getting closer to a real lap time than a works team is not the goal, because it is not a contest that can be won from public GPS traces.

There is a floor under everyone, and it is measurable. Two team-mates in identical cars qualify a median 0.37% apart, and that gap is form on the day, traffic, and how the track came to them. No model of a car can see any of it. So 0.37% is the best any car model could ever do, this one currently sits at 1.414%, and the honest ambition is the distance between those, not perfection.

And the limitation is not vague, it is the dominant error source and it can be measured. Everything here is built from a position trace at 7.7 Hz, one sample every eight metres at racing speed. That is the whole geometric input.

Follow it into a corner. A slow hairpin has about twenty samples in the entire corner, and the raw trace carries GPS noise, so curvature has to be smoothed before it can be used. That smoothing spans 75 metres of arc; ninety degrees of the same hairpin is 39. The filter averages over more corner than the corner has, and what comes out is an average of a curvature the data never resolved.

Nothing about careful coding fixes that. It is what a racing line reconstructed from public GPS costs, and it is why moving the filter by one step shifts the predicted lap by up to 2.57% — wider than σ itself. The biggest open problem here is a data problem dressed as a numerical one. The tyre says the same from the other side: a team gets a full model under NDA, this one fits two numbers from a single lap, and downforce is not identified at all.

What is unusual here is not the accuracy. It is that the number goes out first and gets graded in public. Teams do not publish a pole prediction before qualifying and let it be scored, and the reason is not that they cannot: a call that misses by a second is a headline on Monday. Being able to afford to be wrong in the open is the whole advantage this project has, and it is what makes the record an experiment rather than a demonstration.

The clearest evidence of that is on this page. Multiplying last year's pole by one constant scores better than the physics does, and that is published because it is true. A simulator that never runs the comparison never has to find out.

The algorithms, in full →
When it misses

Every miss, taken apart.

Each scored call gets its own page: what was called, what actually happened, and where the difference went, term by term. Spa's 2.26% came down to the racing line the model generates for itself. Budapest's 4.65% turned out to be something else entirely, which is the reason Budapest was worth posting in the first place.

The build

Two engines. Only one makes the call.

There's a heavy C++ core for telemetry and line work, and a much lighter Python predictor that produces the number we actually post. Both are open source and both are deterministic: same input, same bits, every time.

ENGINE A · C++

3-DOF vehicle-dynamics core

Planar long/lat/yaw + 4 wheel speeds, full Pacejka per wheel, load transfer, thermal tyre, LSD, 8-speed box. It's a telemetry and lap-optimisation tool. It does not make the calls.

ENGINE B · PYTHON

QSS point-mass predictor

Quasi-static speed envelope, load-sensitive tyre, friction ellipse, ERS. This is the one that produces the pole time we publish, and that can be proven wrong.

bit-exact
deterministic · 1 ms Euler · float32
SHA-256
every call hashed before the session
2 params
tyre fit to one lap, then frozen
23/23
C++ tests green on a clean CI runner

One limit worth naming: the fit only pins down grip × load. Downforce isn't identified at all, so CL can sit anywhere from 3.5 to 8.0 and still reproduce the same lap.

$ predict_v2.py --score <GP>

Open source, every derivation written up, and any lap reproduces bit-for-bit on the reference build.

The story

Built for 2026, not adapted to it.

The 2026 regulations rewrote the formula: new chassis, active aero, and a power unit that leans on a 350 kW MGU-K for close to half of everything it does. A reset like that wipes everyone’s reference data at the same time, which is the opening this project was built into. The model was written for these rules from its first line, every constant in the ERS ledger comes from the published 2026 spec, and the sealed season above is its first season because there was no earlier formula it ever ran on.

How it started, and why it runs in public, is a longer story than a page section. That story is being recorded as a video, and when it goes up it will play right here. Stay tuned.

Video · not yet available
recording soon · it premieres here when it’s up