
F1 Race Replay: визуализация гонок на Python
Обзор F1 Race Replay — open-source инструмента на Python для интерактивной визуализации гонок Формулы 1 с телеметрией и анализом данных.
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 — машина безопасности выезжает из пит-лейна, ведёт пелотон и возвращается в боксы с анимированными переходами и пульсирующим свечением.
📊 Аналитика и телеметрия
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 Replay | FastF1 + Jupyter | F1 Performance Dashboard (Streamlit) |
|---|---|---|---|
| Тип интерфейса | Десктоп (Arcade/Qt) | Jupyter Notebook | Веб-браузер |
| Воспроизведение гонки | ✅ Да | ❌ Нет | ❌ Нет |
| Телеметрия в реальном времени | ✅ Стрим TCP | ❌ Статично | ❌ Статично |
| Safety Car визуализация | ✅ Да | ❌ Нет | ❌ Нет |
| Порог входа | Средний | Низкий | Низкий |
| Расширяемость | ✅ Высокая (Insights API) | ✅ Высокая | ✅ Средняя |
| Лицензия | MIT | MIT | MIT |
| Цена | Бесплатно | Бесплатно | Бесплатно |
| Активность сообщества | 6 600+ ⭐ | Библиотека | Небольшое |
FastF1 — это Python-пакет для доступа и анализа результатов Формулы 1, расписаний, хронометражных данных и телеметрии, и F1 Race Replay фактически является мощной «надстройкой» над ним, добавляющей полноценный интерактивный UI.
F1 Performance Dashboard на Streamlit предлагает интерактивный веб-дашборд для исследования данных сессий F1, включая сравнение темпа пилотов, визуализацию стратегии шин, анализ секторов команд и карту скоростей трассы — но не воспроизводит гонку в динамике.
Вердикт
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 |