read_metadata now returns game_raw; _game_folder maps it to 'F1 22' or 'ACC'; dest_dir gains a game subfolder between races_dir and track
11 KiB
F1 22 / ACC Telemetry Analyzer
Превращает сырую телеметрию круга F1 22 и Assetto Corsa Competizione в компактные Markdown-отчёты для анализа через LLM. Сырой круг — около 1М токенов; отчёты — 1–35k.
# из папки tool/
python -m telemetry technique "races/Zandvoort/Практика/zandvoort_P1_L7_74.074_ferrari.csv"
# -> races/Zandvoort/Практика/reports/zandvoort_P1_L7_74.074_ferrari_technique.md (~35k токенов)
Или просто двойной клик по run-gui.bat и кнопка Generate report.
Установка
- Python 3.10+ (только стандартная библиотека — без
pip install). - Для GUI нужен Tk; он идёт в стандартном установщике Python на Windows/macOS. CLI работает и без него.
Скачай или склонируй репозиторий. Держи CSV-файлы телеметрии в папке на уровень выше tool/ (см. структуру папок).
Что умеет
Шесть режимов. Пять строят отчёты, один переименовывает файлы. Поддерживаются CSV из F1 22 и ACC (GT3/GT4) — игра определяется автоматически из метаданных каждого файла.
| Режим | Вход | Для анализа |
|---|---|---|
technique |
один круг | как едешь — точки торможения, скорости в апексах, работа газом, блокировки, расход ресурсов |
setup |
один круг | что настроено — баланс (US/OS), температуры шин, тормоза, rake и крен подвески |
compare |
два+ круга | где один круг быстрее — дельта по поворотам и накопленная, плюс детерминированный Verdict (с топливной поправкой) |
race |
папка кругов | вся гонка — темп, деградация в стинтах, износ резины, ERS по кругам (F1) |
profile |
папка кругов | дёшево (~400 токенов) тенденции пилота по каждому составу (медиана coast/lock/spin на поворот, флаги относительно сессии) + авто-выбор кругов. Универсально: повороты кластеризуются по дистанции апекса, не по индексу |
rename |
файлы/папка | вставить тип сессии и номер круга в имя файла (..._74.074_... → ..._P1_L7_74.074_...) |
Отчёты содержат легенду с пояснением каждой колонки, а промпт анализа добавляется в конец файла автоматически — достаточно скинуть файл в LLM. Промпты доступны на RU и EN; выбирается флагом --lang en в CLI или переключателем языка в GUI.
Флаги: --no-prompt убирает встроенный промпт (меньше файлы для агентных конвейеров; в GUI — чекбокс Включить промпт). --force перегенерирует, даже если свежий отчёт уже есть (иначе прогон пропускается как cached). --game {auto,f1,acc} переопределяет автоопределение игры (по умолчанию auto).
Оптимальный порядок: сначала
profile— увидеть хронические тенденции и какие круги важны, затемtechnique/setup/compareтолько по этим кругам с--no-prompt.
Отличия ACC от F1 22
Машины GT3/GT4 не имеют гибридной системы, а ACC не экспортирует настройки машины:
- Отчёты
techniqueиraceне содержат разделов DRS / ERS / MGU-K. - Режим
setup: экспорт настроек из ACC — все нули, поэтому таблица параметров заменяется пометкой («ACC не экспортирует сетап — анализ построен по телеметрии»); разделы, основанные на телеметрии (баланс в поворотах, шины, тормоза, подвеска), остаются. - Топливо в литрах (GT), а не в кг (F1). Шины — составы Pirelli dry/wet, а не F1 C1–C5.
Структура папок
Telemetry/
races/
F1 22/
Zandvoort/
Practice/ <- CSV-файлы после переименования
zandvoort_P1_L7_74.074_ferrari.csv
reports/ <- отчёты technique/setup/compare
Qualifying/
zandvoort_Q1_L3_74.897_ferrari.csv
reports/
Race/
zandvoort_R_L7_74.152_ferrari.csv
reports/
Race_race.md <- отчёт режима race
ACC/
Hungaroring/
Practice/
hungaroring_P_L1_123.702_ktm_gt4.csv
reports/
tool/ <- этот репозиторий
telemetry/
prompts/
run-gui.bat
Полезное
GUI — двойной клик по run-gui.bat (или run-gui.pyw без окна консоли, либо python -m telemetry gui). Окно разделено на две вкладки — F1 22 и ACC — у каждой свои независимые элементы управления и лог. Выбери режим и язык промпта (RU/EN), укажи файл/папку, нажми Generate. Диалог открывается в последней использованной папке для каждого режима отдельно. Кнопка Rename unprocessed добавляет тип сессии и номер круга к файлам, у которых их ещё нет, и не трогает остальные. Если игра в файле не совпадает с активной вкладкой, GUI выводит предупреждение, но продолжает работу.
CLI — из папки tool/:
python -m telemetry technique races/Zandvoort/Практика/lap.csv
python -m telemetry setup races/Zandvoort/Практика/lap.csv
python -m telemetry compare races/Zandvoort/Практика/lap_a.csv races/Zandvoort/Практика/lap_b.csv
python -m telemetry race races/Zandvoort/Гонка
python -m telemetry profile races/Zandvoort/Гонка # дешёвые тенденции по всем кругам + авто-выбор
python -m telemetry rename races/Zandvoort/Практика # или отдельные файлы
# выбор языка промпта (по умолчанию: ru)
python -m telemetry technique races/Zandvoort/Практика/lap.csv --lang en
# переопределить определение игры (по умолчанию: auto)
python -m telemetry technique ACC/races/Hungaroring/Practice/lap.csv --game acc
# агентный конвейер: убрать промпт, переиспользовать свежие отчёты
python -m telemetry technique races/Zandvoort/Практика/lap.csv --no-prompt
python -m telemetry technique races/Zandvoort/Практика/lap.csv --force # игнорировать кэш
Каждый прогон печатает путь к отчёту и оценку токенов:
C:\...\Telemetry\reports\lap_technique.md
~33834 tokens (budget 60k)
Rename вставляет токены И распределяет по папкам. Укажи папку, где лежат CSV (например, D:\Games\Telemetry\Data\lapdata\f1_2022) — скрипт:
- Рекурсивно сканирует все подпапки
- Читает метаданные каждого CSV (трасса, тип сессии)
- Вставляет
P1_L7в имя файла, если там ещё нет обоих токенов - Перемещает в
races/<трасса>/Practice|Qualifying|Race/ - Даже уже переименованные файлы, если они лежат не там где надо, перемещаются в нужную папку
- Файл пропускается только если он УЖЕ находится именно в нужной папке
Повторный запуск безопасен — файлы уже на месте не трогаются.
Входной формат
Телеметрия F1 22 (UDP) или ACC, экспортированная в CSV (F1 22 тестировалось на F1Laps). UTF-8, 108 каналов, один файл = один круг (F1 22 — ≈1800 строк/круг при ≈29 Гц; круги ACC плотнее, ~14k строк — отчёты остаются компактными за счёт адаптивного ресэмплинга). Для режима race сложи все круги гонки в одну папку. Формат CSV одинаков у F1 22 и ACC; игра определяется из поля Game в метаданных каждого файла.
Для разработчиков
Чистый Python на стандартной библиотеке. Конвейер: parser → segments (+ corner_metrics) → resample → report_*. См. ARCHITECTURE.ru.md.
cd tool
python -m pytest -q # прогнать тесты
python -m telemetry gui # запустить GUI
Новый режим: добавь telemetry/report_<mode>.py с функцией generate(...) -> (abs_path, tokens) и одну строку в telemetry/__main__.py. Парсер, детекция поворотов, адаптивная трасса и общие блоки отчётов переиспользуются.
Благодарности
Сделано для разбора личных хотлапов в F1 22 и ACC. Формат экспорта телеметрии — F1Laps. Телеметрия в игре записывается через Telemetry Tool от Iasione.
Лицензия
MIT — см. LICENSE.