Skip to main content

pygpmf-oz

Modernized Python library for extracting and analyzing GoPro GPMF (telemetry) data
Supports Python 3.9-3.13 | Windows, Linux, macOS | Active Development 2026

PyPI version Python versions Documentation Status License: MIT Test Coverage


🚀 What's New in v0.3.0

  • ✅ Hero 11-13 GPS9 support (10Hz GPS with 9 fields: lat/lon/alt/speed2d/speed3d/days/secs/dop/fix)
  • ✅ Gyroscope & Accelerometer module - Extract IMU data for video stabilization
  • ✅ 134 tests passing - Comprehensive test coverage for GPS9 and gyro functionality
  • ✅ Full backward compatibility - GPS5 (Hero 5-10) continues to work seamlessly
  • ✅ UTF-8 FourCC fix - Resolves decode errors in GPMF stream parsing

📖 Documentation: pygpmf-oz.readthedocs.io
📋 Full roadmap: docs/development/DEVELOPMENT_ROADMAP.md
📚 All Documentation: docs/


📦 Installation

pip install pygpmf-oz

For development:

git clone https://github.com/ozand/pygpmf-oz.git
cd pygpmf-oz
pip install -e .

🎯 Quick Start

A python Module to extract GPMF information from GoPro videos.

More information on the format is available on the GoPro GitHub page.

The primary aim of this project is to extract GPS tracks and sensor data from GoPro video files. We use ffmpeg-python to extract the GPMF stream from video files.

import gpmf

# Read the binary stream from the file
stream = gpmf.io.extract_gpmf_stream(my_file)

# Extract GPS low level data from the stream
gps_blocks = gpmf.gps.extract_gps_blocks(stream)

# Parse low level data into more usable format
gps_data = list(map(gpmf.gps.parse_gps_block, gps_blocks))

We rely on gpxpy to easily convert GPS data into GPX segments:

import gpxpy

gpx = gpxpy.gpx.GPX()
gpx_track = gpxpy.gpx.GPXTrack()
gpx.tracks.append(gpx_track)
gpx_track.segments.append(gpmf.gps.make_pgx_segment(gps_data))

print(gpx.to_xml())
<?xml version="1.0" encoding="UTF-8"?>
<gpx xmlns="http://www.topografix.com/GPX/1/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd" version="1.1" creator="gpx.py -- https://github.com/tkrajina/gpxpy">
  <trk>
    <trkseg>
      <trkpt lat="44.1287283" lon="5.427715">
        <ele>833.759</ele>
        <time>2020-07-03T12:36:56.940000Z</time>
        <sym>Square</sym>
        <fix>3d</fix>
        <pdop>1.82</pdop>
        <extensions>
          <speed_2d>
            <value>9.221</value>
            <unit>m/s</unit>
          </speed_2d>
          <speed_3d>
            <value>9.25</value>
            <unit>m/s</unit>
          </speed_3d>
        </extensions>
      </trkpt>
      ...
    </trkseg>
  </trk>
</gpx>

You can also make an image from you gps track:

import gpmf

# Read the binary stream from the file
stream = gpmf.io.extract_gpmf_stream(my_file)
gpmf.gps_plot.plot_gps_trace_from_stream(stream)

GPS Track Image


🎓 Use Cases

🚴 Sports & Fitness

  • Extract GPS tracks for training analysis
  • Export to GPX for Strava/Garmin compatibility
  • Analyze speed, elevation, distance

🎬 Video Production

  • Sync telemetry overlays with video
  • Create data visualizations for dashboards
  • Export metadata for After Effects

🔬 Research & Analysis

  • Scientific motion studies
  • Vehicle telemetry analysis
  • ML training data extraction

🎮 FPV & Action Sports

  • Video stabilization with GyroFlow (coming Q2 2026)
  • G-force analysis
  • Jump/trick detection

🗺️ Development Roadmap

Q1 2026: Stabilization & Documentation ⚡

  • PyPI publication (v0.2.0)
  • Comprehensive unit tests
  • Sphinx documentation + ReadTheDocs
  • Hero 11/12/13 support

Q2 2026: GyroFlow Integration 🎯

  • Export gyro data for GyroFlow
  • Video stabilization workflow
  • Python API integration

Q3 2026: ML Analytics 🤖

  • Automatic activity detection
  • Trip analysis & statistics
  • Interactive dashboards (Plotly)

Q4 2026: Real-time & Streaming 📡

  • Live telemetry streaming
  • WebSocket API
  • OBS Studio integration

📖 Full roadmap: DEVELOPMENT_ROADMAP.md


🤝 Contributing

We welcome contributions! See CONTRIBUTING.md for guidelines.

Help needed with:

  • Testing with Hero 11/12/13 files
  • Documentation & examples
  • Feature development
  • Bug reports & feedback

📚 Documentation


🔗 Related Projects


📄 License

MIT License - see LICENSE file for details.


🙏 Credits & Attribution

Author & Maintainer: ozand
Original Project: pygpmf by Alexis Mignon

This project (pygpmf-oz) is a modernized fork of the original pygpmf library by Alexis Mignon.
Key improvements include Python 3.9-3.13 support, Windows compatibility, and active maintenance.

Contributors: See CHANGELOG.md


⭐ If you find this useful, please star the repo!
📦 PyPI: https://pypi.org/project/pygpmf-oz/
🐛 Issues: https://github.com/ozand/pygpmf-oz/issues

Metadata

Release files for pygpmf-oz 0.3.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pygpmf-oz 0.3.2
File Size Uploaded Provenance
pygpmf_oz-0.3.2.tar.gz 32.8 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for pygpmf-oz 0.3.2
File Interpreter ABI Platform
pygpmf_oz-0.3.2-py3-none-any.whl Python 3 none any Details

Total release size: 69.1 kB

Release files / pygpmf_oz-0.3.2.tar.gz

Download URL pygpmf_oz-0.3.2.tar.gz
Size 32.8 kB
Tags Source
SHA-256 checksum
How to use checksums
231a9b6e23f84013e2bab07a75218b3daf90b9554a37184ff9c45688ca866f8d
BLAKE2b-256 checksum
How to use checksums
264606ba38479811e06b59b6ece0269d14db078690fc4b0505489b1382d01135
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.3

Release files / pygpmf_oz-0.3.2-py3-none-any.whl

Download URL pygpmf_oz-0.3.2-py3-none-any.whl
Size 36.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
27d50845649e62be9518c941f9255ec394206ec827082ca1a45c7f642730024f
BLAKE2b-256 checksum
How to use checksums
a271b7b7136c7ce48773e7a0288af12052f1f722774149f0df31766e2667ea0f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.3

Security for pygpmf-oz 0.3.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.3.2 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page