PaperTraceSource

Method

How this is built

Every figure on the site comes from the official Formula 1 timing feed. Nothing is simulated, and nothing is drawn that the source cannot actually support.

Where the data comes from

Everything is pulled from the F1 live timing archive through FastF1, by two routes.

A handful of sessions are built ahead of time and committed with the site as static JSON. One of them is what you land on, which is why the first chart is already drawn when the page arrives, and why the site still works with no backend running at all.

Every other session — any event, any session type, 2018 onwards — is fetched live from the telemetry service as you pick it. Choosing a session costs a few seconds because that is a laps-only load; the telemetry behind it takes about ten more the first time, and under two once the archive has cached it locally. Each additional driver you add is a few hundred milliseconds, which is why they are fetched one at a time rather than all twenty up front.

Why it is fast the second time

FastF1 caches the raw downloads and the parsed session, which is why loading a session you have opened before takes about two seconds rather than twelve. What it cannot cache is the work this project does on top: resampling each lap onto a uniform grid, deriving acceleration, cutting the lap into corners. That is about 0.3 s per lap, every time.

So the finished laps are written to disk as well. A session you have already looked at is served from those files in about a fifth of a second, without loading anything from FastF1 at all — and because archived timing data never changes, the response tells your browser it may keep it indefinitely.

Which lap gets shown

For practice and races it is the driver’s fastest lap of the session. For qualifying it is the lap that set the grid slot: their best in the deepest knockout segment they reached, which is what every published classification reports.

Those are not always the same lap. At the 2020 Styrian Grand Prix the rain arrived between segments, so Hamilton took pole with a 1:19.273 in Q3 having already gone 1:17.825 in Q2. Reporting the quicker lap would have disagreed with the timing screens and — worse — put Leclerc’s Q2 time ahead of Verstappen’s Q3 in the driver list, nine places out of position. Ordering follows the same rule: segment reached first, then time within it.

Why the laps line up at all

Raw telemetry is sampled in time, so a faster car reports fewer points through a corner and two laps cannot simply be subtracted. Every lap is resampled onto a uniform grid of 500 points spanning its own length, which is what makes any two of them comparable — and why a figure like “78% full throttle” is a true share of the distance rather than one biased toward the slow corners.

The two laps are then aligned on fraction of lap, not on absolute metres. Two cars never record quite the same total distance; at Monaco the difference reached 31 m in 3265. Subtracting on raw metres compares the end of one lap against a point short of the end of the other, which disagreed with the published times by up to 400 ms and at Monaco produced the wrong sign entirely.

Why the corner ledger adds up

The lap is cut into one segment per corner, at the midpoints between corner markers, so every metre belongs to exactly one corner. Time won or lost in a segment is the change in the running gap across it, which telescopes: the column sums to the lap gap by construction rather than by luck. Both the Python and the browser implementations are tested on that property.

The delta also reconciles with the official sector times to the millisecond, which is the strongest check available on the whole pipeline.

Why there is no cornering-g figure

The obvious headline number for a telemetry project is peak lateral load. It was built, measured, and removed.

The feed carries no accelerometer, so cornering load can only be inferred from the curvature of the car’s path — and position arrives at roughly 4.5 Hz from a GPS-derived source. Recovering curvature means differentiating that twice, which amplifies noise badly, and the result scales with the square of speed, so the error is worst exactly where the number would be most interesting.

Measured against the 2024 season it was not salvageable: Silverstone’s Copse reported a 93 m radius against a true figure near 200 m, Monaco’s tunnel produced 9.6 g, and several circuits reported radii under 40 m at over 300 km/h — roughly 70 g. Smoothing was moved from Gaussian to Savitzky–Golay derivatives and then to sliding-window circle fits; each improved the robust percentiles and none fixed the peaks, because the samples simply do not resolve a corner.

Cornering is described instead by what the data does support: minimum speed through each corner, and where the time changed hands. Longitudinal g survives because speed is measured directly and is differentiated once, not twice.

Drawing

Every chart is hand-authored SVG. The plotter look needs exact control over stroke, layering and line caps, which is most of what a general-purpose charting library abstracts away; the whole plotting layer is about two hundred lines. The circuit outlines are not stored maps — they are the position channel of an actual qualifying lap, which is why they cut the apexes.

Committed dataset generated 2026-09-01. Formula 1, F1 and related marks are trademarks of Formula One Licensing BV. This is an unofficial, non-commercial project with no connection to the Formula 1 companies.