Skip to main content

Modify and auto-upload FIT files from third-party platforms to unlock Garmin Connect features

Project description

FIT File Faker

Fit File Faker Logo

Documentation PyPI License Tests Codecov Ko-fi

A Python tool to modify FIT files and upload them to Garmin Connect.

☕ Enjoying this tool? If FIT File Faker saves you time or enhances your training workflow, consider buying me a coffee. Your support helps maintain and improve this project!

Edit FIT files to appear as if they came from a Garmin device (70+ modern devices supported, including Edge 1050, Fenix 8, Forerunner 965), enabling Training Effect calculations and other Garmin features for activities from platforms like:

Upload edited files directly to Garmin Connect, or run in monitor mode for automatic uploads.

📖 Documentation

For comprehensive documentation, visit: https://jat255.github.io/Fit-File-Faker/

Quick references:

⚡ Quick Start

FIT File Faker Features Demo

Install

# Using uv (recommended)
uv tool install fit-file-faker

# Or using pipx
pipx install fit-file-faker

# Or using pip
pip install fit-file-faker

Configure

# Interactive profile management menu
fit-file-faker --config-menu
Creating a new profile

Creating a new profile with the interactive menu

Edit & Upload

# Edit and upload a single FIT file
fit-file-faker -u path/to/file.fit

# Upload all files in configured directory
fit-file-faker -ua

# Monitor directory for new files
fit-file-faker -m

See the documentation for detailed usage instructions.

🔐 Multi-Profile Support

FIT File Faker supports multiple profiles, allowing you to manage different Garmin accounts and trainer apps:

# Launch interactive profile management menu
fit-file-faker --config-menu

# List all profiles
fit-file-faker --list-profiles

# Show directories used for configuration and cache
fit-file-faker --show-dirs

# Use a specific profile
fit-file-faker --profile my-profile -ua

# Monitor with a specific profile
fit-file-faker --profile zwift -m
Editing a profile

Editing an existing profile configuration

Each profile can have:

  • Different Garmin accounts (credentials are isolated per profile)
  • Different trainer apps (TrainingPeaks Virtual, Zwift, MyWhoosh)
  • Different FIT file directories
  • Different Garmin device simulation (Edge 830, Edge 1030, Tacx, etc.)

Example workflow for multiple accounts:

# Create profiles
fit-file-faker --config-menu
# Select "Create new profile" and follow prompts for each trainer app

# Daily usage
fit-file-faker --profile tpv -ua      # Upload TPV files to work account
fit-file-faker --profile zwift -ua    # Upload Zwift files to personal account

See the profiles guide for comprehensive multi-profile documentation.

⚠️ Important: Device Serial Numbers/Unit IDs

For Garmin Connect to correctly recognize an activity as coming from a specific device (which affects Training Status, challenges, badges, and other features), both the device ID and serial number (Unit ID) must match a valid Garmin device. This is a bit confusing on Garmin's implementation, since they call the value "serial number" in the FIT file, but it actually needs to be your device's Unit ID, not the serial number. To find the Unit ID, you can look either on your device (may vary depending on your device) or in the Garmin Connect app:

Garmin Connect app

Finding Unit ID on Garmin Connect

Finding your device's Unit ID in the Garmin Connect Android app

Go to "Devices → [Your Device] → System → About" to see the Unit ID

On an Edge device

Finding Unit ID on Garmin Device

Finding your device's Unit ID on an Edge 1040 device

Go to "Menu → System → About → Copyright Info" to see the Unit ID

Why This Matters

Garmin Connect uses server-side validation to ensure that (so far as we know):

  • The device product ID (e.g., Edge 1050, Fenix 8) is legitimate
  • The Unit ID is valid for that specific device type
  • The combination of device ID + Unit ID represents a real device

If the Unit ID doesn't match the device type, Garmin Connect may:

  • Not apply Training Effect calculations correctly
  • Not count the activity toward challenges or badges
  • Not update Training Status or training load metrics
  • Display the activity with incorrect device information

Recommendations

Option 1: Use Your Real Garmin Device Unit ID (Recommended)

If you own a Garmin device and want your activities to count properly for all Garmin Connect features:

  1. Find your device's Unit ID:
    • On the device: Settings → About → Copyright Info → Unit ID
    • On Garmin Connect: Device settings page
    • On the device packaging or receipt
  2. During profile setup, choose to customize the serial number
  3. Enter your actual device's Unit ID as the serial number
  4. Select the matching device model (e.g., if you have an Edge 830, select Edge 830)

Option 2: Accept Limited Functionality

If you don't own a Garmin device or don't need full Garmin Connect integration:

  • The tool will generate a random serial number automatically
  • Activities will upload successfully to Garmin Connect
  • Basic activity data (distance, time, power, heart rate) will display correctly
  • However, advanced features may not work as expected

What We Don't Know

The mapping of Unit ID ranges to specific device models is proprietary Garmin information and not publicly documented. This means:

  • We cannot automatically generate valid Unit IDs/serial numbers for specific devices
  • Random Unit IDs/serial numbers may or may not be accepted by Garmin Connect
  • The only guaranteed way to ensure full functionality is to use a real device's Unit ID

Finding Your Unit ID

When you customize the serial number/Unit ID during profile creation, the tool will show you where to find it:

fit-file-faker --config-menu
# Select "Create new profile" → customize device → customize serial number

🤝 Contributing

Contributions are welcome! Here's how to get started:

git clone https://github.com/jat255/Fit-File-Faker.git
cd Fit-File-Faker
uv sync
uv run pre-commit install

Run tests and checks:

python3 run_tests.py          # Run tests with coverage
python3 run_tests.py --html   # Generate HTML coverage report
ruff check . && ruff format . # Lint and format code

See the developer guide for much more detail on development practices and expectations.

👥 Contributors

📄 License

MIT License — see LICENSE for details.

⚠️ Disclaimer

This tool is provided as-is for personal use. The FIT format and Garmin Connect are registered trademarks of Garmin Ltd. This tool is not affiliated with or endorsed by Garmin or any other platform owners.


Have questions or found an issue? Open an issue on GitHub.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fit_file_faker-2.1.4.tar.gz (222.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fit_file_faker-2.1.4-py3-none-any.whl (289.7 kB view details)

Uploaded Python 3

File details

Details for the file fit_file_faker-2.1.4.tar.gz.

File metadata

  • Download URL: fit_file_faker-2.1.4.tar.gz
  • Upload date:
  • Size: 222.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for fit_file_faker-2.1.4.tar.gz
Algorithm Hash digest
SHA256 da3b80242e8d33a9f156f6ddcf3cb3f1f06e4a5362bcaf3cb52f9d53fc274252
MD5 3395b2038c2dc297ba96a5e77329aff4
BLAKE2b-256 71e4cae93075cb1b94614c6e186f3f97d8b9e10d97893df65ff83064f718519f

See more details on using hashes here.

Provenance

The following attestation bundles were made for fit_file_faker-2.1.4.tar.gz:

Publisher: publish_and_release.yml on jat255/Fit-File-Faker

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file fit_file_faker-2.1.4-py3-none-any.whl.

File metadata

  • Download URL: fit_file_faker-2.1.4-py3-none-any.whl
  • Upload date:
  • Size: 289.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for fit_file_faker-2.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 0430cd212100d0dc21af3163e50be04c77ee06b8e7721804c533e3fbd8f2aadd
MD5 8b409b9a7f4806cb83a68ef8eda1520a
BLAKE2b-256 5aa795b2c7baf118a340b1d0032bcfaecfa815a694a1d342982e944c32835526

See more details on using hashes here.

Provenance

The following attestation bundles were made for fit_file_faker-2.1.4-py3-none-any.whl:

Publisher: publish_and_release.yml on jat255/Fit-File-Faker

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page