-
undercut-f1은 F1 세션의 실시간 타이밍 정보를 기록하여 나중에 재생할 수 있는 오픈소스 TUI 클라이언트
-
신호 기반 스트림 데이터를 받아 시각화하거나 녹화된 세션을 리플레이할 수 있음
- 상세한 드라이버별 타이밍 타워, 피트 스톱 전략, 레이스 컨트롤 메시지, 전략 분석, 드라이버 위치 추적, 팀 라디오, 랩별 히스토리 기능 제공
-
데이터는 로컬에 저장되어 개발 및 테스트에 활용 가능, 시뮬레이션 모드도 지원
- iTerm2, Kitty 등의 터미널 이미지 프로토콜을 활용한 시각적 디스플레이 구현
undercut-f1 프로젝트 소개
undercut-f1은 F1 라이브 타이밍 정보를 CLI 기반 TUI(터미널 사용자 인터페이스)로 시각화하는 오픈소스 도구임
주요 특징은 다음과 같음:
-
실시간 F1 세션 데이터를 시청각적으로 표현
-
사용자가 직접 세션 데이터를 녹화하고, 이후 재생 가능
- F1 방송의 평균 지연 시간(30~60초)을 고려하여 지연 설정 조정 기능 제공
-
.NET 기반 CLI 앱으로, NuGet 패키지 또는 단일 실행 파일 형태로 사용 가능
주요 기능
-
타이밍 타워
- 섹터별 기록 표시 (개인 최고/전체 최고 색상 표시)
- 최근 및 베스트 랩 타임
- 타이어 종류 및 사용 시간
- 선두 및 전 차량과의 시간 차
- 선택된 드라이버와 다른 드라이버 간 시간 차 비교
-
전략/스틴트 정보
- 드라이버별 타이어 전략을 한 눈에 확인 가능
- 각 타이어의 사용 시점, 지속 시간 시각화
- 전략 차이 감지 용이
-
레이스 컨트롤 화면
- 공식 조사, 페널티, 날씨 정보 등 레이스 컨트롤 메시지 확인
-
드라이버 트래커
- 선택된 드라이버의 실시간 트랙 위치 시각화
- iTerm2 및 Kitty 이미지 프로토콜 지원 터미널에서 작동
- 커서를 통해 드라이버 선택 및 비교 가능
-
타이밍 히스토리
- 랩별 갭/인터벌 변화 확인
- 최근 15랩의 랩 타임 및 선두 갭 트렌드 차트 제공
-
팀 라디오 청취 및 전사
- Whisper 모델을 활용하여 로컬에서 팀 라디오를 자체 음성 인식으로 전사
- 품질은 당일 오디오 품질에 따라 다르며 개선 제안도 수렴 중
세션 실행 및 리플레이
-
실시간 세션 실행
-
undercutf1 실행
- <kbd>S</kbd> 키로 세션 화면 진입
- <kbd>L</kbd> 키로 실시간 세션 시작
- <kbd>T</kbd> 키로 타이밍 타워 보기
- 세션 데이터는 ~/undercut-f1/data/<session-name>에 저장되어, 이후 재생용 데이터로 활용 가능
-
녹화된 세션 리플레이
-
Sample Data 폴더의 데이터를 복사하거나, 공식 세션 데이터를 다운로드해 리플레이 가능
- <kbd>F</kbd> 키로 시뮬레이션 시작 → 세션 선택 → 타이밍 타워로 진입
- <kbd>N</kbd> 키로 지연 시간 조정하여 빠르게 탐색 가능
-
세션 데이터 다운로드
-
undercutf1 import <year> 명령어로 해당 연도 세션 리스트 확인 가능
- 세션을 선택해 로컬로 다운로드 및 변환 → 재생 가능
커서 및 지연 관리 기능
- 모든 화면에서 <kbd>▲</kbd>/<kbd>▼</kbd> 키로 커서를 제어
- 예: 특정 드라이버 선택 시, 해당 드라이버 기준 시간 차 시각화 가능
- <kbd>M</kbd>/<kbd>N</kbd> 키로 라이브 방송과의 싱크를 위한 지연 시간 조정
- <kbd>Shift</kbd>와 함께 누르면 30초 단위 조정
데이터 소스 및 저장 방식
- F1 Live Timing 스트림은 SignalR 기반
- 다음과 같은 토픽을 구독하여 실시간 데이터를 수신:
-
TimingStats, TimingData, WeatherData, DriverList, RaceControlMessages, TeamRadio 등
- 세션 시 데이터는 다음 두 파일로 저장됨:
-
subscribe.txt: 구독 시 받은 초기 데이터
-
live.txt: 세션 중 실시간 수신된 전체 데이터
라이선스
- 본 프로젝트는 F1 공식 기관과 무관한 비공식 오픈소스 프로젝트
- F1, FORMULA ONE 등 관련 상표는 Formula One Licensing B.V. 가 소유함