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 и локальной папкой — это лишь готовые реализации.
В одном запуске можно описать несколько групп синхронизации с разными направлениями, например:
- Strava → Garmin Connect (заливка активностей из Strava в Garmin);
- 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 репозитория.*
Комментарии (0)
Комментариев пока нет. Будьте первым!
Войти чтобы оставить комментарий.