A lightweight Python tool for downloading recent Garmin activities, extracting VO₂ Max values from .fit
files, and visualizing the progression by activity type.
- Authenticates via Garmin Connect Web API using the user's email and password.
- Downloads
.fit
files as binary via the Garmin Web API endpoint. - Filters activities by supported types (Running, Trail Running, Walking, Cycling).
- Returns and visualizes in-memory data with activity metadata.
There is a detailed description about the tool on medium.com, pls have a look: https://medium.com/@daniel.lepold/visualise-your-precise-vo₂-max-from-garmin-data-in-python-2d76e50e437c
- 🔐 Secure login via GUI (email & password)
- ⬇️ Downloads recent Garmin activities (Running, Trail Running, Walking, Cycling)
- 💾 Parses
.fit
data in memory – no need to save files locally - 🧠 Extracts VO₂ Max values using
garmin_fit_sdk
- 📊 Plots progression over time with points color-coded by activity type
git clone https://github.com/yourusername/garmin-vo2-extractor.git
cd garmin-vo2-extractor
pip install -r requirements.txt
python main.py
A GUI window will appear to input your credentials and choose how many recent activities to download.
garmin-fit-parser/
├── main.py
├── gui.py
├── garmin_service.py
├── fit_sdk_parser.py
├── visualisation.py
├── utils.py
├── requirements.txt
└── README.md
Entry point. Launches the GUI and coordinates the process:
- Login
- Activity download
- VO₂ Max extraction
- Plotting
Tkinter-based GUI interface.
- Prompts for:
- Password
- Number of activities
- Calls
GarminService
,Parser
, and the visualizer.
Garmin Connect interface layer.
- Authenticates via
garminconnect
- Downloads
.fit
files as binary - Filters activities by supported types
- Returns in-memory data with activity metadata
Parser for in-memory .fit
files.
- Uses
garmin_fit_sdk
to decode - Extracts VO₂ Max from message type
140
- Attaches values back to each activity entry
Matplotlib-based chart rendering.
- Connects VO₂ Max values with a line (dark blue)
- Adds colored dots per activity type:
running
: 🔵 bluetrail_running
: 🟢 greenwalking
: 🟠 orangecycling
: 🔴 red
- Displays timeline-based progression
VO₂ Max Progression by Activity Type
- Python 3.12.6
- Dependencies:
garminconnect
garmin-fit-sdk
matplotlib
tkinter
(usually bundled with Python)
This project is not affiliated with Garmin. Use at your own discretion. All credentials are handled locally via GUI and not stored.