Communitygithub.com

Reality Fork:视频物理测量与分叉模拟

从短视频中测量运动物体的物理参数(重力、速度、空气阻力、弹性、摆长、斜面加速度)并给出误差范围,然后可在其他物理条件下(月球重力、无空气、更弹的球)重新模拟运动。

Reality Fork:视频物理测量与分叉模拟 是什么?

Reality Fork 是一款面向开发者和 AI 代理的物理测量与模拟工具。它能够逐帧追踪视频中的移动物体(基于 Meta SAM 3.1),拟合出运动定律并给出误差条(1-sigma),然后可以在改变物理参数(如重力、空气阻力、弹性系数)的情况下“分叉”模拟原来的运动。该工具支持 MCP(Model Context Protocol)和命令行两种调用方式,提供包括视频分析、运动分叉、导出测量数据、刹车模拟和速度调查在内的多个工具。适用于需要从视频中提取准确物理参数用于代码、模拟或验证的场景,如测量重力加速度、计算道路车辆速度分布、分析撞击或弹跳行为等。输出结果始终包含误差估计和假设说明,强调诚实限制(固定相机、平面运动、标尺来自已知尺寸物体等)。

兼容平台~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),拟合出运动定律并给出误差条,然后可以在改变的物理条件下“分叉”该运动。

何时使用

用户有一段视频(或一个样本片段 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}) - 拟合的运动定律、参数、sigma、比例、帧范围、fps 的 JSON。
  • 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% 分位速度、超速比例以及一个简单的摘要。非车辆或未分析的片段将被列出并说明跳过原因。

Shell(相同工具,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”,而不要只说一个裸数字。
  • 分叉结果是基于拟合运动定律的模拟,而非新的测量。时间从轨迹起点开始以秒计,位置以米计(以拟合起点为原点),x 向右,y 向上。

诚实限制

  • 摄像头静止;无平移或变焦。
  • 运动大致在与摄像头平行的平面内(无强烈深度变化)。
  • 比例来自同一平面内已知尺寸的物体(网球、人);错误的尺寸假设会导致所有长度和速度按比例缩放。
  • 短片:最多使用 20 秒。视频已标准化为 H.264;帧时基为时钟。
  • 新的分析(live=true)会调用 Meta 的模型,花费几美分的 API 积分,并且仅当进程以 RF_ALLOW_LIVE=1 启动时才会运行。否则仅可使用已分析过的片段。未经用户同意切勿启用该功能。

相关技能