Drop a .fit file (or a .zip containing one)
…or — Lago di Garda, 30 Aug · 10 m 45 s · 942 KB
Your file never leaves this browser tab — the analysis runs locally in WebAssembly.
intervals.icu optional
Pull a session straight from intervals.icu instead of exporting it by hand.
Your API key is stored only in this browser's localStorage and is sent
only to api.intervals.icu — never to this site's host, never anywhere else.
- Loading Python runtime
- Loading wingfoil_lab
- Parsing FIT
- Analyzing
The runtime (~12 MB) loads once and is then cached by the browser.
A large CIQ recording with its accelerometer stream takes several minutes. The tab is working, not stuck.
That didn't work
Session
Track
Local-metre projection, north up. Shape carries the outcome; colour reinforces it. Tap the track to move the playhead; tap a marker for its facts. Pinch, scroll or double-tap to zoom in; zoomed, a drag pans.
Speed
Doppler drives the flight state; the positional channel scores the turns. Numbers match the map. Drag to scrub; wheel, pinch or double-tap to zoom the time axis.
Takeoffs
Turns
Flight ends
Raw output
The golden block below is byte-identical to
fixtures/goldens/<stem>.expected.json for this file — same engine, same numbers.
Session library
Where this lives
Saved sessions are written to this browser's private per-origin storage
(OPFS, or IndexedDB where OPFS is unavailable). They are not synced, not backed up and
not visible to any other site. Clearing this site's data, or using a private
window, deletes them. Use Download all, or the per-row
.fit / .json buttons, to keep a copy you own.
Records & trends
Computed in Python, in the worker, over every saved session.