F1 Race Replay: интерактивная визуализация гонок Формулы 1 на Python

«Все RAW-данные проекта берутся из пакета FastF1 и укладываются на нормализованную временну́ю шкалу всей гонки» — Tom Shaw, автор проекта.

F1 Race Replay — интерактивный инструмент для визуализации гонок Формулы 1 и анализа данных, построенный на Python. Репозиторий на GitHub набрал более 6 600 звёзд и 871 форк, что сделало проект одним из самых популярных любительских F1-инструментов в экосистеме Python.

ℹ Для кого этот инструмент

F1 Race Replay подойдёт:

  • Фанатам Формулы 1, которые хотят пересмотреть гонку поэтапно с реальными данными
  • Python-разработчикам, изучающим работу с телеметрией и визуализацией
  • Студентам и исследователям в области анализа данных и спортивной аналитики
  • Опен-сорс контрибьюторам, желающим добавить собственные «инсайты»

Что такое F1 Race Replay

Это десктопное приложение для визуализации телеметрии гонок Формулы 1 и воспроизведения событий Гран-при с интерактивными элементами управления, картой трассы, динамической таблицей лидеров и живыми данными с питстопов.

Проект написан на Python; в качестве источника данных используется пакет FastF1, который даёт доступ к хронометражу кругов, телеметрии автомобилей, данным о шинах, погоде и результатам сессий. Все эти данные берутся в сыром виде и укладываются на нормализованную временну́ю шкалу всей гонки — это позволяет знать точную позицию, передачу, скорость, нажатие педали газа каждого пилота в любой момент гонки.

В качестве GUI-фреймворка автор выбрал Arcade — Python-пакет для построения 2D-интерфейсов, обычно применяемый в играх, но отлично подходящий для кастомного GUI с анимациями и движущимися объектами.


Ключевые возможности

🏎️ Воспроизведение гонки

Race Replay Visualization — наблюдайте за гонкой в реальном времени: позиции пилотов отображаются на отрендеренной карте трассы.

Safety Car Visualization — машина безопасности выезжает из пит-лейна, ведёт пелотон и возвращается в боксы с анимированными переходами и пульсирующим свечением.

💡 Интересный факт
Положение машины безопасности симулируется (~500 м впереди лидера гонки), поскольку F1 API не предоставляет реальные GPS-координаты SC.

📊 Аналитика и телеметрия

Insights Menu — плавающее меню быстрого доступа к инструментам анализа телеметрии, запускается автоматически вместе с воспроизведением.

Новый инсайт позволяет просматривать телеметрические трассы со всех автомобилей в виде линейного графика прямо во время воспроизведения гонки. Именно такие графики используются инженерами мотоспорта для анализа стиля вождения пилота.

🏁 Таблица лидеров и статусы

Leaderboard — живые позиции пилотов и актуальные составы шин.

Lap & Time Display — счётчик текущего круга и общее время гонки. Пилоты, сошедшие с трассы, помечаются статусом “OUT” на таблице лидеров.

⌨️ Управление воспроизведением

Interactive Controls — пауза, перемотка назад/вперёд и регулировка скорости воспроизведения с помощью горячих клавиш.

📡 Телеметрический стрим

Для активации телеметрического потока достаточно запустить приложение с флагом --telemetry.

Демо-окно показывает: сырой телеметрический поток (JSON-данные в реальном времени), сводку сессии с количеством сообщений и текущим состоянием, данные по пилотам (позиции, скорости, информация о кругах), события (изменения статуса трассы и гоночные события).

Технические детали стрима: протокол TCP на localhost:9999, формат JSON (сообщения разделяются переносом строки), сетевая обработка в фоновом потоке, UI-фреймворк PySide6.

🏎️ Поддержка квалификации

Передав аргумент --qualifying при запуске, приложение обработает и отобразит данные квалификации соответствующего гоночного уикенда.


Архитектура проекта


graph TD
    A[FastF1 API] --> B[src/f1_data.py\nЗагрузка и обработка телеметрии]
    B --> C[Кэш .fastf1-cache/\n~20–80 MB на GP]
    B --> D[computed_data/\n25Hz resampled frames]
    D --> E[src/analytics/\nLeaderboard, Tyre Model]
    E --> F[ReplayClock]
    F --> G[Race Replay Interface\nArcade 2D]
    F --> H[Qualifying Interface]
    G --> I[Insights Menu\nPySide6]
    I --> J[Телеметрический стрим\nTCP:9999 JSON]


Установка и запуск

Системные требования: Windows 10/11 (x64) или macOS, Python 3.11.x (рекомендуется 3.11.9), видеокарта с поддержкой OpenGL 3.3+.

Основные зависимости: fastf1 3.6.1, arcade 2.6.17, PySide6 6.8.2.1, numpy 2.1.3, pandas 2.2.3, scipy 1.14.1, matplotlib 3.10.0.

# Клонирование репозитория
git clone https://github.com/IAmTomShaw/f1-race-replay.git
cd f1-race-replay

# Создание виртуального окружения
python -m venv venv
venv\Scripts\activate.bat   # Windows
# source venv/bin/activate  # macOS/Linux

# Установка зависимостей
pip install -r requirements.txt

# Проверка окружения
python main.py --diagnostics

# Запуск
python main.py

# Запуск с телеметрией
python main.py --telemetry

# Запуск квалификации
python main.py --qualifying
⚠ Первый запуск

При первом запуске загрузка сессии займёт заметно больше времени: телеметрические данные скачиваются, обрабатываются и кэшируются локально. Последующие запуски той же сессии значительно быстрее.

Кэш FastF1 занимает ~20–80 MB на каждый Гран-при. Вычисленная телеметрия (25 Hz, модели шин, геометрия трассы) сохраняется в computed_data/ и при повторном запуске загружается менее чем за секунду.


Структура репозитория

f1-race-replay/
├── main.py           # Точка входа
├── requirements.txt  # Зависимости
├── roadmap.md        # Планируемые функции
├── telemetry.md      # Документация телеметрии
├── src/
│   ├── f1_data.py         # Загрузка и обработка телеметрии
│   ├── arcade_replay.py   # Логика визуализации и UI
│   ├── ui_components.py   # Кнопки, таблица лидеров
│   ├── interfaces/
│   │   ├── qualifying.py  # Интерфейс квалификации
│   │   └── race_replay.py # Интерфейс воспроизведения гонки
│   └── lib/
│       ├── tyres.py       # Утилиты по шинам
│       └── time.py        # Форматирование времени
├── .fastf1-cache/    # Кэш FastF1 (авто)
└── computed_data/    # Вычисленная телеметрия (авто)

Планируемые функции (Roadmap)

В планах разработчика: телеметрические графики (скорость, газ, торможение), постгоночные отчёты, сообщения Дирекции гонки, отдельная функциональность для квалификации.

С момента запуска сообщество уже добавило возможность изменения размера окна просмотра и работает над визуальным меню выбора гонки и поддержкой спринтов.


Цены и лицензия

Проект лицензирован под MIT License. Это означает полностью бесплатное использование, копирование, модификацию и распространение без каких-либо ограничений. Никаких тарифных планов, подписок или платных функций нет.


Плюсы и минусы

КритерийОценка
✅ Полностью бесплатный open-source (MIT)Без ограничений
✅ Реальные данные F1Через официальный FastF1 API
✅ Интерактивное управлениеПауза, перемотка, скорость воспроизведения
✅ Визуализация Safety CarС анимацией и эффектами
✅ Телеметрический стримTCP JSON, расширяемый API
✅ Активное сообщество6.6k+ звёзд, принимает PR
✅ Поддержка квалификацииОтдельный режим
❌ Только десктопНет веб-версии
❌ Строгая привязка к Python 3.11Могут быть проблемы с другими версиями
❌ Медленный первый запускСкачивает 20–80 MB данных на GP
❌ OpenGL 3.3+Требует совместимой видеокарты
❌ Нет готовых бинарных релизовТолько запуск из исходников
❌ SC-позиция симулируетсяРеальных GPS-координат нет в F1 API

Сравнение с альтернативами

ПараметрF1 Race ReplayFastF1 + JupyterF1 Performance Dashboard (Streamlit)
Тип интерфейсаДесктоп (Arcade/Qt)Jupyter NotebookВеб-браузер
Воспроизведение гонки✅ Да❌ Нет❌ Нет
Телеметрия в реальном времени✅ Стрим TCP❌ Статично❌ Статично
Safety Car визуализация✅ Да❌ Нет❌ Нет
Порог входаСреднийНизкийНизкий
Расширяемость✅ Высокая (Insights API)✅ Высокая✅ Средняя
ЛицензияMITMITMIT
ЦенаБесплатноБесплатноБесплатно
Активность сообщества6 600+ ⭐БиблиотекаНебольшое

FastF1 — это Python-пакет для доступа и анализа результатов Формулы 1, расписаний, хронометражных данных и телеметрии, и F1 Race Replay фактически является мощной «надстройкой» над ним, добавляющей полноценный интерактивный UI.

F1 Performance Dashboard на Streamlit предлагает интерактивный веб-дашборд для исследования данных сессий F1, включая сравнение темпа пилотов, визуализацию стратегии шин, анализ секторов команд и карту скоростей трассы — но не воспроизводит гонку в динамике.

📝 Пример использования
Выберите Гран-при Монако 2024, запустите воспроизведение с телеметрическим стримом и наблюдайте, как машина безопасности выезжает после столкновения, пока в окне инсайтов отображаются данные скорости и торможения каждого пилота в реальном времени.

Вердикт

F1 Race Replay — редкий пример опен-сорс проекта, который объединяет реальные данные Формулы 1, анимированную 2D-визуализацию и расширяемую телеметрическую архитектуру в одном инструменте. Проект стал вирусным, набрав более миллиона просмотров — и это неудивительно: он закрывает нишу, которую не покрывают ни Jupyter-ноутбуки, ни веб-дашборды.

Кому подойдёт:

  • Python-разработчикам, интересующимся спортивной аналитикой
  • Фанатам F1, желающим «пережить» гонку заново с данными
  • Студентам и авторам туториалов по визуализации данных
  • Контрибьюторам, ищущим живой open-source проект

Кому не подойдёт:

  • Тем, кто ищет готовое веб-приложение без настройки
  • Пользователям без базовых знаний Python и CLI

Рейтинг: 8.5 / 10

КритерийОценка
Функциональность9/10
Порог входа7/10
Качество кода и архитектура9/10
Активность сообщества9/10
Документация8/10
Производительность8/10