TechMoon 科技月球
WordPress、SEO 與 AI 工具實測指南
TechMoon 科技月球
WordPress、SEO 與 AI 工具實測指南

F1 Race Replay 是開發者 Tom Shaw 用 Python 寫的開源桌面工具,把 F1 比賽遙測重播成可暫停、倒轉與倍速的互動賽道動畫。本文從 GitHub 倉庫實際查證它的功能、九個依賴、執行指令與授權狀態,並提醒一個容易被忽略的疑點:README 宣稱 MIT 授權,倉庫裡卻沒有 LICENSE 檔案。
用 AI 摘要這篇文章:
F1 Race Replay 是英國開發者 Tom Shaw(GitHub 帳號 IAmTomShaw)用 Python 寫的開源專案,把一場 F1 比賽的遙測資料重播成可暫停、可倒轉、可倍速的互動賽道動畫。我從 GitHub 倉庫與 API 實際核實了它的功能、依賴與授權狀態。這個專案 2025 年 11 月才建立,到 2026 年 8 月已累積超過六千二百個 star、八百多個 fork,並且有三十多個未關閉的 issue,以及一百多個來自社群、等待審核的 pull request,對一個不到一年歷史的個人專案來說算是相當活躍。結論是成品相當完整、社群關注度也夠,但如果你想 fork 或拿來做商業應用,有兩個授權層面的疑點要先釐清,本文後半會把證據攤開來講。
先講它的定位:這是一個要安裝在自己電腦上跑的桌面程式,需要 Python 3.11 以上與 OpenGL 3.3 以上的顯示環境,不是打開瀏覽器就能用的網頁服務。它給你的也不是轉播畫面,而是把官方計時與遙測資料重新畫成俯視的賽道動畫,讓你從資料角度看一場比賽怎麼發展,這跟看電視重播是兩種不同的體驗。對只想看比賽畫面的車迷來說門檻偏高,對會一點指令列、想自己重播某一年某一站並研究車手資料的人來說剛好。
根據專案 README 與我讀過的原始碼結構,F1 Race Replay 把一場比賽的遙測資料渲染成俯視的賽道畫面,每台車是一個會移動的點,並同步顯示排行榜、當前圈數與總時間。README 列出的能力包含:

播放控制比表面看到的細。README 的 Controls 段列了一份完整快捷鍵:空白鍵暫停或繼續,左右方向鍵倒轉與快轉,上下方向鍵循環切換倍速,數字鍵 1 到 4 直接指定倍速,D 切換 DRS 區域顯示,B 切換進度列,L 切換賽道上的車手名稱。想同時追蹤多位車手時,可以點選加上 Shift 加選,把幾台車擺在一起比對遙測,這對事後研究某段攻防為什麼成立還滿實用。
其中一個值得一提的是安全車(Safety Car)視覺化。當 F1 資料顯示比賽進入安全車部署狀態時,畫面上會出現一台橘色光暈的車從維修區開出來、繞行、再回去。不過 README 明白寫著,因為 F1 官方 API 不提供安全車本身的 GPS 位置,所以這台車的位置是模擬出來的,做法是把它放在領先者前方約 500 公尺處來近似。整段動畫分成三個階段:從維修區開出來的 deploying、繞行中的 on_track、以及回到維修區的 returning,每一階段的光暈與透明度變化都對應 README 裡那個 safety_car 資料結構的 phase 與 alpha 欄位。換句話說,這部份是工具作者自己估算的視覺,不是原始資料,這點我認為是誠實的標示。
此外專案還有一個 Insights Menu 視窗,會在重播時自動開啟,讓你用 PitWallWindow 基底類別寫自己的遙測分析視窗;排位賽(Qualifying)的重播功能也在開發中。對會寫一點 Python 的人,PitWallWindow 是個實在的擴充點:你只要實作 setup_ui() 與 on_telemetry_data() 兩個方法,連線與清理邏輯都由基底類別處理,等於作者把「接上即時遙測流」這件麻煩事包好了,你只管想呈現什麼指標。
講到這裡得提一下資料層。F1 Race Replay 自己不抓資料,真正去拿 F1 遙測的是 FastF1 這個第三方函式庫,它封裝了 F1 官方的計時與遙測 API,處理座標對齊、圈數切分這類苦差事,F1 Race Replay 再把 FastF1 吐出來的資料渲染成賽道動畫。這樣的分層說明了一件事:這個工具的能力上限,很大程度被 FastF1 能拿到的欄位綁住,例如前面提到的安全車位置缺 GPS,就是 F1 官方 API 本來就沒給,不是 FastF1 或 F1 Race Replay 的問題。
環境需求方面,README 明確寫的是 Python 3.11 以上,若你照著網路上一些舊教學裝 Python 3.8 很可能會踩到相容性問題,以官方 README 為準最穩當。完整依賴我從 requirements.txt 抄出來,一共九個,比你想像中多不少:
fastf1
pandas
matplotlib
numpy
arcade
pyglet
pyside6
questionary
rich
這裡面 arcade 是負責賽道渲染的 2D 遊戲與圖形函式庫,pyside6 用來做 GUI 選單,fastf1 則是真正去抓 F1 資料的那層。安裝步驟很標準:
git clone https://github.com/IAmTomShaw/f1-race-replay
cd f1-race-replay
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
執行方式有兩種。預設是圖形選單,直接打開再選年份與站次:

python main.py
如果你已經知道要看哪一年哪一站,可以直接帶參數跳過選單,例如重播 2025 年第 12 站:
python main.py --viewer --year 2025 --round 12
不想用視窗選單的話,加 --cli 改用指令列互動選單,一樣用方向鍵與 Enter 挑選。除了正式比賽,README 也支援排位賽與衝刺賽:加 --qualifying 看排位賽遙測(含時速、檔位、油門與煞車隨單圈距離的變化),加 --sprint 則看該站的衝刺賽或衝刺排位賽。要不要顯示 HUD 可以用 --no-hud 切換,方便你截圖做自己的分析。不過 README 也明說排位賽重播還在持續打磨,細節可能會再調。README 有個新手容易忽略的提醒:第一次跑某個分站時,程式要先把遙測下載、處理並快取到本機的 .fastf1-cache 資料夾,所以會明顯比較慢,之後再跑同一場才會變快。如果想強制重新抓資料,加上 --refresh-data 參數。另外如果你是用 conda 環境,可能會遇到 OpenGL 建立失敗的錯誤,README 給的解法是 conda install -c conda-forge libstdcxx-ng。
想看進一步能不能改的人,可以對照 README 列的檔案結構。main.py 是入口,負責載入比賽資料與啟動重播;src/f1_data.py 處理遙測載入、逐格資料生成與安全車位置模擬;src/arcade_replay.py 是視覺與互動邏輯;src/lib/tyres.py 定義輪胎資料型別。想換賽道寬度、配色或版面,作者建議直接動 arcade_replay.py;想調資料處理則動 f1_data.py。也就是說,多數能客製的地方都集中在這兩支檔案,門檻不算高。如果你平常就愛玩這類可自己改的開源桌面工具,我們之前聊過的 Craft 開源 AI 程式設計助手 是另一種以擴充性為主的例子,取向不同但同樣把「留給使用者改的空間」當成一回事。
這個專案在技術上很完整,但授權狀態有兩個落差,會直接影響你能不能安心改作或拿來做商業用途。
第一個是 LICENSE 檔案根本不存在。README 文末寫了一句「This project is licensed under the MIT License」,但倉庫裡實際找不到 LICENSE 檔案,我用 GitHub API 核對授權欄位,結果也是空的。也就是說,README 宣稱是 MIT 授權,但倉庫裡沒有對應的授權條款檔案。
這個落差比看起來嚴重。GitHub 自己的官方指引就講得很白:沒有授權條款檔的倉庫,適用的是該國著作權法的預設規則,也就是作者保留一切權利,別人原則上沒有重製、改作或再散佈的法律權限。換句話說,README 寫 MIT 是作者的意思表示,但少了 LICENSE 檔這份正式條款,這個授權在法律上是有縫隙的。對單純自己跑來看的人影響不大,但如果你想 fork 一份來改、甚至包進商業產品,光靠 README 那一句話站不穩。比較保險的做法是先去 issue 區或作者的 個人網站 跟他確認,請他補上 LICENSE 檔。作者自己在 roadmap.md 也提到這是他第一個接受外界貢獻的開源專案,授權流程沒走完整其實不意外,而這也正是值得在 issue 禮貌反映的點。
第二個是資料來源的限制。F1 Race Replay 的遙測是透過前面提到的 FastF1 函式庫去抓 F1 官方計時 API,而 Formula 1 相關商標與賽事資料的權利屬於官方。專案 README 自己就附了一段免責聲明,說資料來自公開 API、僅供教育與非商業用途。這代表即使授權檔的問題解決了,商業用途還會再撞到 F1 的資料與商標條款,這條限制是資料本身帶來的,不是工具作者能解除的。
如果你對「怎麼在茫茫 GitHub 海裡挑到這種高關注度專案」有興趣,可以看看我們整理的 GitHub 專案 AI 推薦工具;想把這類即時資料做成可互動的儀表板,OSINT 即時情勢監控儀表板 是另一種取向的例子。
README 的 Known Issues 老實列了幾個限制,我挑兩個跟使用體驗最相關的:
排行榜在開賽最初幾個彎會不準,某台車進站時也會暫時受到影響,比賽尾聲則可能因為最後位置的座標算得比別人前面而出現誤差。原因是遙測座標本身有誤差,作者說這部份會分階段改善,因為牽涉的計算相當複雜。所以如果你要拿排行榜畫面做事後檢討或截圖佐證,記得這個工具的官方定位本來就點出了這些誤差,不要把它當成百分百精準的官方成績。
另一個是渲染效能與硬體需求。roadmap.md 提到隨著功能增加,UI 元素在某些裝置上開始造成可察覺的延遲,作者正在優化,所以低階顯示環境下的流暢度目前是已知待改善的項目。更重要的是 arcade 這個繪圖函式庫需要 OpenGL 3.3 以上的環境,這代表你想把 F1 Race Replay 丟到一台沒有顯示器的雲端主機或遠端伺服器跑,會直接卡在無法建立 OpenGL context 這一步,它本來就是設計給有桌面環境的本機電腦用的。如果你平常是在 Mac 或 Windows 筆電上做事,這個限制幾乎無感;但若你打算在 Linux 伺服器或容器裡跑,得先確認有沒有對應的 OpenGL 支援,別白花一輪安裝時間。
回到開頭的結論。如果你是會用指令列、本機有 Python 3.11 與 OpenGL 環境的 F1 車迷或資料愛好者,F1 Race Replay 是目前把「重新看一場比賽怎麼跑」這件事做得最完整的一次開源嘗試。六千多個 star 與八百多個 fork 也說明社群確實在用它,加上作者把 telemetry 串流、Insights Menu 與排位賽重播都排進 roadmap,這個專案還在往前走,值得 clone 下來試一場你印象最深的分站,再用 PitWallWindow 寫一個自己想看的遙測視窗。
如果你的目的是商業改作或重新散佈,那建議先停下來做兩件事:跟作者確認並補齊 LICENSE 檔,同時評估你對 F1 官方資料的使用方式有沒有落在官方條款允許的範圍內。這兩關過了,再談後續應用會穩妥很多。對只是想在賽後重新回味一場精采攻防、或拿來研究某台車為什麼快的一般使用者,這兩個授權疑點幾乎不影響你今天就能裝來玩。