Textual app for browsing current-season Formula 1 results with FastF1
Project description
Fast F1 App
A small Textual terminal app for browsing current-season Formula 1 event results with FastF1.
This is an unofficial project. It is not associated in any way with Formula 1, the FIA, or any of their affiliates. F1, FORMULA 1 and related marks are trademarks of Formula One Licensing B.V.
What you get
- The current weekend, already loaded. On startup the app finds the most recent race weekend that has begun and opens it — no button to press.
- One tab per session. The tab strip is built from the weekend itself, so a sprint weekend shows Sprint Qualifying and Sprint where a conventional one shows FP2 and FP3. Tabs load lazily and keep their own state, so switching back and forth costs nothing.
- Team-coloured classification. Position, driver, team, status and gap, with medals for the podium. Sessions that have run but are not yet classified (practice, sprint qualifying) fall back to a ranking by best lap.
- Per-driver detail. Select a row for lap-time stats, tire compounds and stops, plus — in qualifying — a sector-by-sector delta to the fastest lap of the session.
- Two-driver comparison. Both drivers' lap times on one graph next to a metrics table with an explicit Δ column.
- The circuit itself. A track panel draws the lap in its real proportions with each official sector in its own colour, alongside the circuit's name, location, length and corner count.
- A log pane. FastF1's own chatter (cache hits, downloads, warnings) is piped into the panel at the bottom right instead of scribbling over the UI.
Install
Install it as a standalone command available from any directory:
uv tool install fast-f1-app
fast-f1-app
This builds an isolated environment for the app, so it does not touch your system Python. The executable lands in ~/.local/bin (C:\Users\<you>\.local\bin on Windows); if the command is not found, run uv tool update-shell and restart your terminal.
To move to a newer release later, uv tool upgrade fast-f1-app. To remove it, uv tool uninstall fast-f1-app.
If you prefer pipx: pipx install fast-f1-app works the same way.
From a checkout
To install the version in your working tree rather than the published one, run the same command against the directory:
uv tool install .
That installs a copy, so changes to the source will not appear until you re-run it. uv tool install --editable . makes the command track your working tree instead.
Run from a checkout
Without installing:
uv run python fast_f1_app.py
Using it
The app opens on the current weekend with its first session loaded. Pick a different Grand Prix from the Event dropdown and the tabs rebuild for that weekend; switch sessions with the tab strip.
Selecting a result row loads lap details for that driver. FastF1 caches session data, so the first load of a session is slow and later ones are quick.
The lap-time graphs and the fastest/slowest/average figures are built from clean laps only — pit in and out laps, and laps run under a safety car, VSC or red flag, are left out. A single out-lap is around twenty seconds off the pace, which is enough to stretch the axis and flatten every racing lap onto one row. The panel says how many laps were excluded, Laps still counts every lap completed, and the graph keeps real lap numbers on the x axis, so the excluded laps show up as gaps.
| Key | Action |
|---|---|
Enter |
Show details for the highlighted driver |
c |
Mark the highlighted driver for comparison (slot A, then B) |
x |
Clear the comparison |
r |
Reload the active session from FastF1 |
q |
Quit |
Comparing two drivers
Marking a second driver with c opens the comparison view, as in the screenshot above: a per-lap delta graph of B − A, with each lap coloured by whoever was quicker — team colours, falling back to cyan/magenta when teammates share one — plus a side-by-side table of laps, clean laps, fastest/slowest/average lap, stops and compounds, with the A−B delta in the last column. Qualifying comparisons also list each driver's delta to pole and their sector times with sector-by-sector deltas.
The graph plots the difference rather than both drivers' lap times together because two drivers are usually within a second of each other while the axis has to span several, so overlaid series land on the same rows and cannot be told apart. Only laps both drivers ran cleanly get a delta.
Pressing c on a third driver starts a fresh comparison from that driver.
The track panel
The panel at the bottom left, visible in the screenshot above, draws the weekend's circuit from position telemetry, rotated to match the official circuit map and coloured by official sector: Sector 1 red, Sector 2 cyan, Sector 3 yellow.
It belongs to the weekend rather than to a session, so it loads once and stays put while you switch tabs. The drawing keeps the circuit's real proportions, which is why a roughly square circuit like the Hungaroring leaves space either side rather than being stretched to fill the panel.
Lengths are the published figures where the circuit is on file. Where it is not — a brand-new venue, say — the length is measured off the trace instead and shown with a ≈, since measuring a lap that way can be off by up to about 2%.
Test
uv run python -m unittest discover -s tests
License
MIT — see LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fast_f1_app-0.2.0.tar.gz.
File metadata
- Download URL: fast_f1_app-0.2.0.tar.gz
- Upload date:
- Size: 30.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4c43f6e21e790bafb4830565cf9a95f6f5c4591b2b4262d750cdd0b7c4512010
|
|
| MD5 |
640d142d7e7a41f06a21beed4d220056
|
|
| BLAKE2b-256 |
c7c18975fb0be404e74f51de5f6f822a82dff19b9dbbd62de811986f13884f4d
|
Provenance
The following attestation bundles were made for fast_f1_app-0.2.0.tar.gz:
Publisher:
release.yml on ekss1121/fast-f1-app
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
fast_f1_app-0.2.0.tar.gz -
Subject digest:
4c43f6e21e790bafb4830565cf9a95f6f5c4591b2b4262d750cdd0b7c4512010 - Sigstore transparency entry: 2336732769
- Sigstore integration time:
-
Permalink:
ekss1121/fast-f1-app@632e13d5559ced7b48f603ace460927e62087b4d -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/ekss1121
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@632e13d5559ced7b48f603ace460927e62087b4d -
Trigger Event:
push
-
Statement type:
File details
Details for the file fast_f1_app-0.2.0-py3-none-any.whl.
File metadata
- Download URL: fast_f1_app-0.2.0-py3-none-any.whl
- Upload date:
- Size: 22.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3fbcd7da5a69b0ee78da8f94c171bbb54dcdc119de97f0cad5b8b5ac52f03ae8
|
|
| MD5 |
fda3639fc4351d01e0c9db427573a566
|
|
| BLAKE2b-256 |
10daf8b506474d0cd78ae210d55acdcbd37c854be62989d255f731c486b9c498
|
Provenance
The following attestation bundles were made for fast_f1_app-0.2.0-py3-none-any.whl:
Publisher:
release.yml on ekss1121/fast-f1-app
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
fast_f1_app-0.2.0-py3-none-any.whl -
Subject digest:
3fbcd7da5a69b0ee78da8f94c171bbb54dcdc119de97f0cad5b8b5ac52f03ae8 - Sigstore transparency entry: 2336732806
- Sigstore integration time:
-
Permalink:
ekss1121/fast-f1-app@632e13d5559ced7b48f603ace460927e62087b4d -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/ekss1121
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@632e13d5559ced7b48f603ace460927e62087b4d -
Trigger Event:
push
-
Statement type: