Feature Request: Native Garmin FIT Decoding and Reliable Running Analysis in ChatGPT
Background
Over several months, I have been working extensively with ChatGPT to analyse Garmin FIT activity files, including structured running workouts and advanced metrics from the Garmin HRM 600.
What initially appeared to be a straightforward task became a prolonged technical exercise because ChatGPT could not consistently decode and analyse the same type of FIT file across conversations and execution environments.
Rather than abandon the process, I worked collaboratively with ChatGPT to develop and validate a reusable solution:Harry Potter FIT Decoder v1.4.
The experience exposed several weaknesses in ChatGPT’s handling of specialised binary files.
1. The problems we encountered
Unavailable parsing libraries
In some execution environments, commonly used Python FIT parsing libraries were unavailable. ChatGPT could not rely on installing additional packages or accessing an external decoding service.
This sometimes prevented analysis altogether, despite the uploaded FIT file being valid.
No dependable fallback
When a preferred parsing library was missing or failed, ChatGPT did not consistently attempt alternative methods, including direct binary decoding.
We eventually established an explicit rule: a missing parsing library must not be treated as the end of the analysis when another viable decoding method exists.
Inconsistent decoding across conversations
A FIT file could be successfully analysed in one conversation but not another.
The availability of tools, parsing approaches and recognised FIT fields varied, making it difficult to reproduce earlier results.
Premature claims of successful decoding
A valid FIT header, successful upload or apparently intact file does not establish that the activity has been decoded.
We encountered situations where ChatGPT appeared ready to analyse an activity without first demonstrating that actual session, lap and record measurements had been extracted.
We established a mandatory verification rule: ChatGPT must extract and check concrete workout values before claiming decoding success.
Incomplete running metrics
Even when basic information was available, advanced running dynamics could be missing, including:
-
Ground contact time and left/right balance
-
Stride length
-
Vertical oscillation and vertical ratio
-
Running power
-
Garmin HRM 600 Step Speed Loss
Some proprietary fields were not recognised by standard field-name mappings and could therefore be silently omitted.
Incorrect structured workout reconstruction
Extracting activity measurements is not enough.
ChatGPT also needs to distinguish the prescribed workout from what the runner actually completed, including warmups, intervals, recovery periods, optional steps, skipped steps and cooldowns.
We encountered difficulties aligning workout instructions with recorded laps and activity timing.
Inconsistent time and measurement interpretation
Other issues included distinguishing elapsed time from timer time, handling FIT scaling conventions, and correctly interpreting enhanced speed and altitude measurements.
These are important because errors can propagate into pace, elevation, workout comparisons and performance conclusions.
2. Our solution: Harry Potter FIT Decoder v1.4
We developed a reusable Python decoder that works directly with FIT binary structures using the Python standard library.
It does not depend on installing third-party FIT parsing libraries.
The decoder extracts:
-
Record-level activity measurements
-
Laps and sessions
-
Events and timing information
-
Structured workout definitions and steps
-
Heart rate, pace, speed, cadence and power
-
Elevation and temperature
-
Stride length, ground contact time and left/right balance
-
Vertical oscillation and vertical ratio
-
Garmin HRM 600 Step Speed Loss measurements
Importantly, unrecognised fields are preserved rather than discarded, allowing further investigation of proprietary Garmin data.
The decoder generates ten structured outputs, including CSV files, JSON validation information, a human-readable workout programme and an analysis-oriented workout summary.
3. Two working methods
We established two workflows.
Method A — Directly within ChatGPT
Upload the FIT activity file together with the Python decoder, execute the script, verify the extracted measurements and perform the analysis.
Method B — Local macOS decoding
Run the decoder locally using Python 3.15, automatically process the selected activity, generate the structured output files and upload the results to ChatGPT.
Both approaches were tested successfully.
The second approach also provides a practical fallback when ChatGPT’s execution environment cannot reliably decode the original binary file.
4. Independent validation
We did not consider the decoder complete merely because it produced output.
We compared results against FIT File Explorer exports and Garmin Connect measurements.
For the primary reference activity:
-
3,904 activity records
-
12 laps
-
5 structured workout steps
Shared measurements were checked against independent FIT File Explorer data, accounting for differences in units and field conventions.
Advanced running dynamics, including stride length, vertical ratio and left/right ground contact balance, were also compared with Garmin Connect screenshots.
For Garmin HRM 600 Step Speed Loss, we identified and decoded the relevant native FIT fields and checked the mathematical relationship between absolute and percentage speed loss across 3,798 records.
That check established internal numerical consistency, not independent validation of Garmin’s sensor accuracy.
We also tested revisions against earlier decoder versions to detect regressions.
5. What ChatGPT should do natively
I propose incorporating a dependable FIT decoding and validation capability into ChatGPT’s file-analysis workflow.
The key requirements would be:
-
Reliable binary decoding: Do not depend exclusively on optional third-party libraries.
-
Automatic fallback: Attempt viable alternative decoding methods when the preferred approach fails.
-
Verified extraction: Never claim successful decoding without checking actual extracted measurements.
-
Complete data preservation: Retain unknown and proprietary fields for further interpretation.
-
Structured workout reconstruction: Compare prescribed workout steps with recorded execution.
-
Advanced metrics: Support available running-dynamics measurements, not merely distance, pace and heart rate.
-
Consistent interpretation: Handle FIT scaling, timestamps, timer versus elapsed time, and units correctly.
-
Transparent validation: Distinguish verified measurements, calculations, hypotheses and unsupported interpretations.
-
Reproducibility: Deliver consistent analyses across ChatGPT conversations and supported execution environments.
6. Why this matters
The value extends beyond Garmin users.
FIT is a specialised binary format, but the underlying problem is broader: ChatGPT should be able to process structured technical files reliably, recover when a preferred tool is unavailable, and verify its results before presenting conclusions.
For runners and coaches, this would make detailed workout analysis substantially more accessible.
For ChatGPT, it represents an opportunity to improve reliability, reproducibility and user confidence in file-based analysis.
7. Working proof of concept available
Harry Potter FIT Decoder v1.4 is a working implementation, not merely a conceptual proposal.
I have the Python source code, development history, output specifications and validation evidence available for technical examination.
My objective is not to publish a separate app or plugin. It is to demonstrate a practical approach that could help make reliable FIT decoding a native ChatGPT capability.
I would welcome feedback from the developer community and OpenAI’s product or engineering teams on whether this approach could inform future improvements to ChatGPT’s file-analysis capabilities.