Communitygithub.com

Reality Fork: 물리 비디오 분석

짧은 비디오에서 움직임의 물리량(중력, 속도, 항력, 탄성, 진자 길이, 경사 가속도)을 오차 막대와 함께 측정하고, 다른 물리 조건(달 중력, 무공기, 더 튀는 공)에서 재시뮬레이션합니다.

Reality Fork: 물리 비디오 분석란 무엇인가요?

Reality Fork는 사용자가 제공한 짧은 비디오에서 물체의 움직임을 프레임 단위로 추적(Meta SAM 3.1 기반)하여 물리 법칙을 피팅하고 오차 막대를 제공합니다. 분석 결과를 바탕으로 중력, 속도, 항력, 탄성 계수, 진자 길이/주기, 경사 가속도 등을 측정할 수 있으며, 측정값을 바탕으로 '다른 물리 조건(예: 달 중력, 무공기, 더 튀는 공)'에서 움직임을 재시뮬레이션(fork)할 수 있습니다. 이 스킬은 Claude Code, Cursor, Codex 등 MCP를 지원하는 AI 에이전트와 함께 사용할 수 있으며, MCP 도구 외에도 CLI 인터페이스를 제공합니다. 주요 기능으로는 비디오 분석(analyze_video), 움직임 분기(fork_motion), 측정값 내보내기(export_measurements), 차량 제동 분석(braking_fork), 속도 조사(speed_survey) 등이 있습니다. 모든 측정값에는 1-시그마 오차가 포함되며, 실시간 분석은 사용자 동의 하에만 활성화(RF_ALLOW_LIVE=1)됩니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/nepython/reality-fork/tree/HEAD/mcp

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

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로 시작된 경우에만 실행됩니다. 그렇지 않으면 이미 분석된 클립만 사용할 수 있습니다. 사용자의 명시적 동의 없이 활성화하지 마세요.

관련 스킬