Communitygithub.com

Reality Fork:從影片測量物理

測量短影片中運動的物理量(重力、速度、阻力、彈性、擺長、斜面加速度),附帶誤差範圍,然後在其他物理條件下(月球重力、無空氣、更彈的球)重新模擬。當使用者有一段顯示某物體運動的影片,並想取得數據用於程式碼、模擬或驗證某項說法時使用。

Reality Fork:從影片測量物理 是什麼?

Reality Fork 是一個 AI 代理技能,能夠從短影片中逐幀追蹤移動物體,擬合運動定律,並提供附有誤差範圍的精確物理測量。它支援 Meta SAM 3.1 模型進行物件分割,可以測量重力、初速、角度、空氣阻力、彈性係數、擺長與週期,以及斜面上的加速度。MCP 工具組包含分析影片 (`analyze_video`)、重新模擬不同物理條件 (`fork_motion`,例如月球重力或無空氣)、匯出測量值 (`export_measurements`)、煞車距離分析 (`braking_fork`),以及車速調查 (`speed_survey`,提供第 85 百分位速限合規數據)。此技能可在支援 MCP 協定的平台(如 Claude Code、Cursor、Codex)或透過命令列介面 (`cli.mjs`) 使用。所有數值皆包含 1-sigma 不確定性,確保科學誠實性。關鍵限制包括:靜止相機(無平移或變焦)、運動應大致平行於相機平面、比例需由已知尺寸的物體提供。即時分析 (`live=true`) 會呼叫 Meta 的模型並產生 API 成本,需使用者明確授權後設定環境變數 `RF_ALLOW_LIVE=1` 才能啟用。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/nepython/reality-fork/tree/HEAD/mcp

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

Reality Fork:從影片測量物理 是做什麼的?

Reality Fork 逐幀追蹤移動物體(使用 Meta SAM 3.1),擬合帶有誤差範圍的運動定律,並能在變更後的物理條件下「fork」該運動。

使用時機

使用者有一段影片(或一個範例片段 ID),並希望取得:重力、初速或角度、空氣阻力、球的彈性、擺的長度或週期、斜面上的加速度,或「如果場景發生在月球上會是什麼樣子」。此外,當程式碼需要從影片畫面中測量出的真實常數時也很適合。

如何呼叫

將 <DIR> 取代為 reality-fork 的程式目錄(即包含 mcp/ 的資料夾)。

MCP 工具(若已連線 reality-fork 伺服器):

  • list_clips - 列出片段 ID 以及每個是否已分析完成。
  • analyze_video({path | clip_id, question?, live?}) - 標題、答案、運動定律、含 sigma 的測量值、假設、信心度。
  • fork_motion({clip_id, g?, drag?, e?}) - 重新模擬:摘要、落地/彈跳事件、每 0.1 秒的位置(單位為公尺)。
  • export_measurements({clip_id}) - 以 JSON 格式輸出擬合的定律、參數、sigma、比例、幀範圍、fps。
  • braking_fork({clip_id, hazard_distance_m = 20, speed_kmh?, react_s = 1.5, decel = 7}) - 用於車輛橫越畫面的片段:若前方特定距離有人走出,車輛能否停下?剩多少公尺?或撞擊時的速度是多少?同時輸出測量到的速度(含誤差條)以及 speed_kmh(若有提供)。
  • speed_survey({clip_ids, limit_kmh = 30}) - 多個已分析的車輛片段:每段的速度(km/h,含 sigma)、平均值、第 85 百分位速度(含不確定性)、超速比例,以及簡潔摘要。非車輛或未分析的片段會列出並標註跳過原因。

命令列(相同工具,JSON 輸出至 stdout;若 MCP 不可用則使用此方式):

node <DIR>/mcp/cli.mjs list
node <DIR>/mcp/cli.mjs analyze <video-path|clip_id> --question "what is g?"
node <DIR>/mcp/cli.mjs fork <clip_id> --g 1.62        # 或 --g moon, --drag none, --e 0.8
node <DIR>/mcp/cli.mjs export <clip_id>
node <DIR>/mcp/cli.mjs brake <clip_id> --distance 20 --speed 30   # 也可加入 --react 1.5 --decel 7
node <DIR>/mcp/cli.mjs survey <clip_id> <clip_id> ... --limit 30

典型流程:analyze,然後 export 取得數值,視需要 fork。將匯出的數值(含其 sigma 作為容差)放入使用者的程式碼中。

車輛:煞車與車速調查

當問題與街道安全相關時使用 braking_fork(例如「如果一個孩子從 20 公尺前方走出來,車子會停下來嗎?」、「30 km/h 的差異有多大?」)。當有人需要車流速度數據提交給市議會或學校時,使用 speed_survey:市議會根據的是第 85 百分位速度(85% 駕駛者保持在此速度以下),而非平均速度。兩者都需要片段已經以等速擬合方式分析,且物體大致橫越畫面,速度超過 2 m/s。報告答案時務必附上陳述的假設:1.5 秒感知反應時間與乾燥瀝青上 7 m/s² 的緊急煞車是典型數據,並非測量值;若駕駛疲勞或路面潮濕,請修改 react_s 和 decel。每個片段的速度取決於比例(例如車輛長度等已知物體的大小),因此需說明這點;若片段少於約 20 個,則將第 85 百分位視為粗略參考。

解讀數值

  • 每個數值都帶有 1-sigma 誤差。analyze_video 測量值中的 sigma 已包含比例不確定性;在 export_measurements 中,對真實世界的主張使用 sigma_total,僅對擬合雜訊使用 sigma_fit。
  • 約 68% 的重複測量應落在 1 sigma 內,95% 落在 2 sigma 內。若結果與已知數值(例如地球 g = 9.81)相差在 2 sigma 以內,則視為一致;不要因為 sigma 為 6%、差異為 3% 就過度解讀。
  • 檢查 confidence 和 assumptions。請說「測量得 10.0 +/- 0.7 m/s^2」,切勿只給出裸露的數字。
  • Fork 結果是根據擬合定律的模擬,並非新的測量值。時間為從軌跡起點開始的秒數,位置為從擬合起點算起的公尺數,x 向右,y 向上。

誠實的極限

  • 相機需保持靜止;不可平移或變焦。
  • 運動大致處於面向相機的平面上(無劇烈深度變化)。
  • 比例來自與運動物體處於同一平面的已知尺寸物體(例如網球、人);錯誤的尺寸假設會使所有長度和速度產生比例誤差。
  • 短片:最多使用 20 秒。影片需為 H.264 標準化;幀時間以時鐘為準。
  • 新的分析(live=true)會呼叫 Meta 的模型,消耗數美分的 API 額度,且僅在程序啟動時設定了 RF_ALLOW_LIVE=1 環境變數才能執行。否則僅能使用已分析過的片段。未經使用者同意,切勿啟用此功能。

相關技能