trainings-sync — это инструмент командной строки, который синхронизирует ваши тренировки и данные о здоровье между Garmin Connect, Strava и локальной папкой на компьютере (форматы FIT/GPX/TCX). Одной командой вы получаете полный личный архив всех данных у себя на диске — и больше не зависите от одной платформы.

Зачем это нужно

  • Свой архив данных. Все тренировки и показатели здоровья лежат локально, в открытых форматах — их у вас никто не отнимет и не «уберёт за платную подписку».
  • Свобода между сервисами. Переносите активности между Garmin и Strava, держите их в обоих местах и дополнительно — на диске.
  • Топливо для ИИ-тренера. Локальные файлы тренировок и здоровья — идеальный вход для персонального ИИ-тренера, который анализирует ваши данные (см. отдельную статью про AI-тренера).
  • Надёжность. Прерванная синхронизация продолжается с того же места; ничего не качается заново без необходимости.

Что умеет (коротко)

  • Синхронизация тренировок между Garmin, Strava и локальной папкой (FIT/GPX/TCX).
  • Синхронизация данных о здоровье (сон, пульс, HRV, стресс, вес и многое другое).
  • Параллельная обработка — быстро даже на больших архивах.
  • Хранение секретов в файле или базе KeePass.
  • Умный кэш и докачка, аккуратная работа с лимитами API.
  • Синхронизация фото и видео активностей — редкая для подобных инструментов возможность.
  • Расширяемость: можно дописывать свои коннекторы и хранилища секретов.

Коннекторы и расширяемость

Из коробки поддерживаются три источника/приёмника: Garmin Connect, Strava и локальная папка. Но главное — система модульная: коннекторы реализуют единый интерфейс (ServiceConnector), поэтому можно дописать собственный коннектор к любому сервису (другая платформа, корпоративный трекер, файловое хранилище в облаке) — и он встроится в общий конвейер синхронизации. Поддержка не ограничена Strava, Garmin и локальной папкой — это лишь готовые реализации.

В одном запуске можно описать несколько групп синхронизации с разными направлениями, например:

  1. Strava → Garmin Connect (заливка активностей из Strava в Garmin);
  2. Garmin + Strava → локальная папка (сохранение на диск, приоритет у Garmin).

Синхронизация данных о здоровье (wellness)

Помимо тренировок инструмент выгружает большой набор показателей здоровья — по умолчанию на каждом запуске (отключается флагом --skip-wellness). Из Garmin Connect это, в частности:

КатегорияПоказатели
Сон и восстановлениесон, HRV, Body Battery, готовность к тренировке
Сердце и кровьпульс, пульс покоя, SpO2, давление
Стрессдневной и недельный стресс
Состав телавес, состав тела, взвешивания
Активностьшаги, этажи, интенсивные минуты, гидратация
ПроизводительностьVO2max, лактатный порог, training status, endurance score, прогнозы результатов, fitness age
Разноеличные рекорды, сводки и статистика

Из Strava выгружаются снимки athlete_stats и athlete_zones. Данные сохраняются в JSON по датам в папке wellness/. Часть типов (вес, состав тела, давление, гидратация) поддерживают и запись — коннекторы реализуют полный интерфейс чтения/записи.

Синхронизация фото и видео активностей

Инструмент переносит не только сами тренировки, но и прикреплённые к ним фотографии и видео: скачивает медиа из сервиса вместе с активностью и, если приёмник это поддерживает, заливает их обратно (например, в Garmin Connect загрузка фото поддерживается). Среди похожих синхронизаторов такой возможности почти не встретишь — обычно они переносят только сами треки.

Скорость: параллельная обработка

Синхронизация написана на асинхронном ядре: источники скачиваются параллельно, а выгрузка показателей здоровья идёт пулом воркеров (до 10 одновременных задач), поэтому даже многолетний архив со множеством типов данных обрабатывается быстро. При этом инструмент следит за лимитами API (особенно у Strava): печатает текущий расход в лог и автоматически ставит синхронизацию на паузу до сброса окна лимита, а затем продолжает.

Хранение секретов

Логины и пароли можно хранить двумя способами:

  • JSON-файл с учётными данными (--creds-json).
  • База KeePass (.kdbx, --creds-keepass) — мастер-пароль читается из переменной окружения KEEPASS_PASSWORD или запрашивается в консоли.

Хранилища секретов тоже сделаны расширяемыми: за ними стоит единый абстрактный интерфейс, поэтому можно добавить новый тип хранилища (например, системный keychain или корпоративный секрет-менеджер), не трогая остальной код.

Надёжность: кэш и докачка

Скачанные активности и показатели кэшируются (cache_dir в конфиге). Повторный запуск дотягивает только то, чего ещё нет — это и ускоряет работу, и позволяет спокойно прерывать и продолжать синхронизацию. Флаг --force принудительно перекачивает всё заново.

Установка (кратко)

Нужны Git, Python 3.14 и Poetry.

# 1) Поставьте Python 3.14 и Poetry
# macOS:
brew install git python@3.14 pipx && pipx ensurepath && pipx install poetry
# Linux (Ubuntu/Debian):
sudo add-apt-repository ppa:deadsnakes/ppa && sudo apt update && sudo apt install python3.14 python3.14-venv
pip3 install pipx && pipx ensurepath && pipx install poetry
# Windows (PowerShell): установите Git и Python 3.14, затем: pip install pipx; pipx ensurepath; pipx install poetry

# 2) Клонируйте и установите зависимости
git clone https://github.com/dchernykh1984/trainings_sync.git
cd trainings_sync
poetry config virtualenvs.in-project true
poetry install --no-root

# 3) Скопируйте шаблоны конфигов и отредактируйте под себя
mkdir -p config && cp config_templates/*.json config/

Примеры запуска

# Garmin -> локальная папка (учётные данные в JSON)
poetry run trainings-sync --config config/config.garmin-to-local.json --creds-json config/creds.json

# То же, но секреты в KeePass
poetry run trainings-sync --config config/config.garmin-to-local.json --creds-keepass /path/to/keepass.kdbx

# Strava + Garmin (полная схема: Strava->Garmin и Garmin+Strava->папка)
poetry run trainings-sync --config config/config.strava-and-garmin.json --creds-json config/creds.strava-source.json

Полезные опции: --start/--end (диапазон дат), --force (перекачать всё заново), --skip-wellness (без данных о здоровье).

В планах

Сейчас trainings-sync — это инструмент командной строки. Если будет интерес со стороны пользователей, в планах — графический интерфейс (GUI) в дополнение к CLI; его предполагается сделать на том же инструментарии PySide6 (Qt), что используется в проекте Finish Protocol Generator.

Возможность расширения

  • Новые коннекторы к другим сервисам/трекерам — через единый интерфейс ServiceConnector (и его wellness-вариант).
  • Новые типы хранилищ секретов — через абстрактный интерфейс учётных данных.
  • Новые форматы файлов — парсеры FIT/GPX/TCX устроены единообразно, добавить ещё один несложно.

Репозиторий

Исходный код, шаблоны конфигов и подробная документация: https://github.com/dchernykh1984/trainings_sync


*Описание основано на исходном коде проекта по состоянию на июнь 2026 года. Точные шаги установки, формат конфигов и актуальный список синхронизируемых данных смотрите в README репозитория.*