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?})- 요약, 답변, 법칙, 시그마가 포함된 측정값, 가정, 신뢰도.fork_motion({clip_id, g?, drag?, e?})- 재시뮬레이션: 요약, 착지/바운드 이벤트, 0.1초 간격 경로(미터).export_measurements({clip_id})- 피팅된 법칙, 파라미터, 시그마, 스케일, 프레임 범위, 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)와 시그마, 평균, 불확실성이 포함된 85번째 백분위 속도, 제한 초과 비율, 일반 요약. 차량이 아니거나 분석되지 않은 클립은 이유와 함께 건너뛴 것으로 표시.
쉘 (동일 도구, JSON 출력; MCP를 사용할 수 없는 경우):
node <DIR>/mcp/cli.mjs list
node <DIR>/mcp/cli.mjs analyze <video-path|clip_id> --question "중력 가속도는 얼마인가?"
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. 내보낸 값과 시그마를 사용자 코드에 공차로 넣습니다.
차량: 제동 및 속도 조사
braking_fork는 거리 안전에 관한 질문("차가 20m 앞에서 어린이가 뛰어나오면 멈출까?", "30 km/h 차이가 얼마나 될까?")에 사용하고, speed_survey는 누군가 의회나 학교를 위해 교통 속도가 필요할 때 사용합니다: 의회는 평균이 아니라 85번째 백분위 속도(85%의 운전자가 유지하는 속도)를 기준으로 행동합니다. 두 경우 모두 이미 등속 운동으로 피팅된(프레임을 가로질러 2 m/s 이상으로 움직이는 물체) 클립이 필요합니다. 항상 명시된 가정을 답과 함께 인용하세요: 1.5초 지각-반응 시간과 건조 아스팔트에서 7 m/s²의 급제동은 일반적인 수치이지 측정값이 아닙니다. 피곤한 운전자나 젖은 도로의 경우 react_s와 decel을 변경하세요. 각 클립의 속도는 스케일(알려진 물체의 크기, 예: 자동차 길이)에 의존하므로 그 점을 언급하고, 약 20개 미만의 클립인 경우 85번째 백분위를 대략적인 지표로 간주하세요.
숫자 읽기
- 모든 값에는 1-시그마 오차가 있습니다.
analyze_video의sigma측정값에는 이미 스케일 불확실성이 포함되어 있습니다.export_measurements에서는 실제 주장에sigma_total을 사용하고, 피팅 노이즈만 필요한 경우sigma_fit을 사용하세요. - 약 68%의 반복 측정이 1 시그마 내에, 95%가 2 시그마 내에 있어야 합니다. 결과가 알려진 값(지구 중력 9.81)의 2 시그마 이내이면 일치하는 것으로 간주합니다. 시그마가 6%일 때 3% 차이를 과도하게 해석하지 마세요.
confidence와assumptions를 확인하세요. "측정값 10.0 +/- 0.7 m/s^2"와 같이 말하고, 숫자만 단독으로 제시하지 마세요.- 포크 결과는 피팅된 법칙의 시뮬레이션이지 새로운 측정값이 아닙니다. 시간은 트랙 시작으로부터 초, 위치는 피팅 시작점으로부터 미터, x는 오른쪽, y는 위쪽입니다.
정직한 한계
- 고정 카메라; 패닝이나 줌 없음.
- 움직임이 대략 카메라를 향한 평면 내에 있어야 함 (강한 깊이 변화 없음).
- 스케일은 동일 평면 내에서 알려진 크기의 물체(테니스 공, 사람)에서 나옵니다. 잘못된 크기 가정은 모든 길이와 속도를 스케일링합니다.
- 짧은 클립: 최대 20초 사용. 비디오는 H.264 정규화됨; 프레임 타이밍은 클록 기준.
- 새로운 분석(
live=true)은 Meta의 모델을 호출하며, API 크레딧으로 몇 센트가 소요되고 프로세스가RF_ALLOW_LIVE=1로 시작된 경우에만 실행됩니다. 그렇지 않으면 이미 분석된 클립만 사용할 수 있습니다. 사용자의 명시적 동의 없이 활성화하지 마세요.