리뷰 루프 (HyperFrames 버전)
당신은 비디오를 볼 수 없지만, 프레임은 볼 수 있습니다. 현재 버전의 출력 콘택트 시트를 확인하지 않고 절대 영상 완료를 보고하지 마세요.
whaleyxbt/claude-motion의
review-loop스킬에서 수정 (MIT, 동일 폴더의LICENSE참조). 원래의npm run …명령어는 kinocut MCP의 HyperFrames 도구와 이 폴더의scripts/sheet.py로 대체되었습니다. "(본 버전 추가)"로 표시된 문단은 원본 내용이 아닙니다.
아래 SHEET는 python "<이 스킬 폴더>/scripts/sheet.py"를 의미합니다 (예: ~/.claude/skills/review-loop/scripts/sheet.py). 모든 경로는 절대 경로를 사용합니다.
루프
- 먼저 기계 검사 통과 (본 버전 추가): 프로젝트 폴더에서
hyperframes check실행. lint, 실행 시간, 레이아웃 오버플로우, 동작 및 대비 검사를 한 번에 실행합니다 (공식적으로validate/inspect는 더 이상 사용되지 않으며check를 사용합니다). 오류가 있으면 수정 후 계속 진행하세요. 자세한 내용은 공식hyperframes-cli스킬을 참조하세요.- 마스크가 진입 중일 때는 항상
container_overflow가 보고됩니다. 이는 의도된 설계이며, 마스크 컨테이너에data-layout-allow-overflow를 추가하세요. 하지만 안착 후에도text_box_overflow가 보고되면 컨테이너가 너무 낮아서 텍스트가 잘리는 것입니다 (특히 중국어와 위 첨자). 컨테이너 높이를 늘리세요.
- 마스크가 진입 중일 때는 항상
- 초안:
hyperframes_render, 매개변수quality: "draft",output_path는<프로젝트>/out/draft.mp4로 설정. - 콘택트 시트:
SHEET --video <프로젝트>/out/draft.mp4 --timeline <프로젝트>/timeline.js --out <프로젝트>/out/sheets각 비트 후 0.3초(동작이 안정된 후)에 프레임을 캡처하여 4×2로 배열해out/sheets/beats-N.png에 저장하며, 각 프레임에는 비트 이름과 시간이 표시됩니다. 각 프레임의 기본 너비는 360px로, 모바일 동적 이미지의 실제 너비입니다. - Read를 사용하여 각 시트를 열고 아래 체크리스트의 각 항목과 대조합니다.
- 의심스러운 부분을 확대하여 확인:
- 트랜지션 스캔:
SHEET --video … --from 3 --to 5 --every 0.2 --name scrub - 특정 시간 확인:
SHEET --video … --at 3.7,3.75,3.8 --name exact - 단일 프레임 전체 해상도 확인:
hyperframes_still,frame에 프레임 번호 입력 (초 × fps) - 영상을 다시 출력하고 싶지 않을 때는
hyperframes_snapshot의at을 사용하여 composition에서 직접 스크린샷을 찍은 후SHEET --images … --labels …로 결합.
- 트랜지션 스캔:
- 수정 후 0단계로 돌아갑니다. 전체 루프를 완료하고 문제가 발견되지 않을 때만 중단합니다.
- 최종 버전:
hyperframes_render,quality: "high"로 영상 출력. 최종 영상에 대해 2단계를 다시 실행한 후 오디오 검사를 수행합니다 (아래 참조).
체크리스트
구성
- 각 프레임에는 하나의 초점만 있습니다. 두 요소가 경쟁할 때는 하나가 기다려야 합니다.
- 의도하지 않은 충돌이나 겹침이 없어야 합니다. 특히 트랜지션 중에는 퇴장 및 진입 요소가 동일한 공간을 공유합니다.
- 안전 영역: 중요한 콘텐츠는 가장자리에서 약 60px 이내에 있지 않아야 합니다.
- 0번 프레임은 실제 화면이어야 하며 검은색이 아니어야 합니다 (소셜 미디어 플랫폼의 썸네일이 됩니다).
텍스트
- 마스크, 컨테이너 또는 화면 가장자리에 의해 잘리지 않아야 합니다 (의도된 경우 제외).
- 모바일 너비(시트의 셀)로 축소될 때도 핵심 메시지를 읽을 수 있어야 합니다.
- 읽혀야 할 때 텍스트가 움직이지 않아야 합니다.
- (본 버전 추가) 중국어: 오타 없음; 모두 번체자이며 간체자가 섞이지 않음; 구두점은 전각 사용; 글꼴에서 누락된 문자 없음 (사각형 또는 명백히 다른 글꼴이 나타남).
리듬
- 읽혀야 할 각 상태는 충분히 오래 정지되어 있어야 합니다 (
motion-design섹션 4 참조). 정지 중간 셀에서 텍스트가 여전히 움직이면 정지 시간이 너무 짧은 것입니다. - 장면 간에는 빈 화면으로 전환되지 않고 겹쳐서 연결됩니다.
- 퇴장은 진입보다 빠릅니다.
일관성
:root색상 팔레트의 색상만 사용; 강조 색상은 해당 프레임의 핵심을 표시합니다.- 동일한 요소는 나타나는 모든 장면에서 동일하게 보여야 합니다.
오디오 (오디오가 있는 경우에만)
- 파형:
video_audio_waveform으로 오디오 피크가TL의 비트와 일치하는지 확인. - 음량 (본 버전 추가, 원래의
npm run wave대체):ffmpeg -hide_banner -nostats -i <최종 영상> -af ebur128=peak=true -f null -마지막 요약에서Integrated loudness및True peak확인. 목표는 −14 LUFS ±1, true peak ≤ −1 dBFS입니다. - 중국어 내레이션의 억양과 감정은 사용자가 귀로 직접 듣고 점수로 대체하지 마세요 (본 버전 추가).
보고
완료 시 무엇을 확인했는지, 무엇을 수정했는지, 어떤 시트에서 결과를 볼 수 있는지 명확히 말하십시오. 다시 출력하여 직접 보지 않은 수정은 수정되었다고 주장하지 마십시오.