motion-video — 코드로 렌더링된 영화 제작
영화 수준 작업을 위한 라우터 스킬입니다. 요소 수준의 모션(지속 시간, 이징, 스프링, 한 구성 요소 내 색상 변경)은 motion-design에 속하며, 측정된 스프링 숫자는 ~/.claude/skills/motion-design/local/element-motion-params.md를 참고하세요. 증거는 실험실 <lab>(카드 techniques/Tnn, 문서, 측정)에 저장되며, 도구도 거기에 남아 있습니다(사용자 2026-09-30). 따라서 이 스킬은 해당 경로를 인용할 뿐 복사하지 않습니다.
참조 문서의 모든 규칙은 증거 계층을 따릅니다(references/evidence-and-instruments.md §계층): 사용자(사용자가 영화를 보며 판단), 측정(보정된 도구로 원본 영화에서 측정), 검증(눈가림 A/B 라운드로 범위가 분리됨), 검증되지 않음(원본에서 측정했으나 모방 테스트 안 됨). 검증되지 않은 규칙을 입증된 규칙으로 진술하지 마십시오.
라우팅 테이블
| 작업 유형 | 참조 문서 |
|---|---|
| 먼저 결정할 사항; 관객, 톤, 그라운드 색상, 포함할 정보; 기기-톤 매칭; 자료 및 텍스트 | references/whole-film-rules.md |
| 영화 유형; 섹션 템플릿(소개 광고, 하이프 광고, 제품 투어, 데이터 쇼릴, 내레이션 설명 영상); 스토리보드 vs 한 단락 | references/film-types.md |
| 막대 또는 내레이션 라인의 섹션 변경; 비트 정렬; 전환(도형 간, 딤, 와이프); 카메라 움직임 | references/rhythm-transitions-camera.md |
| 페이지 빌드, 시간 기반 렌더링, MP4 내보내기, 제품 충실도(클레임 파일), 라이브 인터랙티브 구성 요소 촬영(§4 항목 9), 커버, 리뷰 루프, 음악 소싱 및 라이선스(§5) | references/build-and-export.md |
| 증거 계층; 어떤 실험실 도구가 무엇을 측정하는지; 각 숫자의 출처 | references/evidence-and-instruments.md |
| 푸티지 또는 생성 미디어(로컬 ComfyUI 이미지, 클립), 음악 비트에 맞춘 컷, 교환 가능한 EDL — 시간 기반 페이지가 아닌 편집 경로(사용자 판결 2026-10-18); 모든 에셋은 출처 파일을 동반해야 하며, 그렇지 않으면 렌더링이 거부됨 | 실험실 tools/edit/README.md, 디자인 실험실 docs/edit-route-design.md |
| 연속적인 물리적 또는 알고리즘적 과정(앞자라기, 필드 확산, 파동 이동) — manim ASSET(PNG 시퀀스 + 출처)이 시간 기반 페이지에 합성되며, 전체 manim 영화가 아님. 전체 영화 제작과 편집-및-합성(사용해야 하는 에셋)은 별도 계층입니다(사용자 판결 2026-10-20); 합성 규칙은 얇으며, 첫 탐색은 진행 중 | 실험실 experiments/probe-manim-insert-ow2010/README.md; 제안 ~/.claude/outputs/manim-explainer-route-20261020/ |
| 한 요소의 스프링/색상 변경 매개변수 | motion-design/local/element-motion-params.md |
| 스토리보드 전, 모든 영화: 공유 디자인 계층을 이 영화의 자체 사본으로 — 그 안의 실패 목록은 구속력 있음(저자가 거부한 작업; 절대 반복하지 마십시오) | <item>/inputs/design-axes.md, works_contract.py open이 복사(단계 0); 실험실 암은 run_arm.py에서 동일한 파일을 가져옴 |
| 게시물, 데크 또는 웹 페이지에서 동일한 원칙(매체 간 형식, 축 A–I, 생성 축 J/K, 명명된 학파) — 이론, 선택 시 읽기 | ~/.claude/references/design-axes/ |
작업 순서(각 단계는 이전 단계 후에 수행)
- 어떤 작업보다 먼저 확인(
whole-film-rules.md§0): 목적 / 영화 유형(소개 광고, 하이프 광고, 제품 투어, 설명 영상, 프로필), 표시 위치, 시청자가 본 후 해야 할 행동, 관객, 기억해야 할 한 가지, 에너지(차분함 / 활기참 / 하이프; 질문해야 하며, 제품만으로 유추하지 않음)와 그라운드, 자료와 제한 사항, 콘텐츠 음성(마케팅 vs 가벼운 기술) 및 프레젠테이션 형식(페이지형 vs 연속 무대). 사용자가 있음 → 질문하고 기다립니다. 무인 → 각 열린 질문을build/questions.md에 작성하고 요청의 가장 문자 그대로의 해석을 취하여build/plan.md에 명시합니다. "產品介紹片"만으로는 광고와 투어를 구분할 수 없습니다(사용자 r14); "廣告"만으로는 소개와 하이프를 구분할 수 없습니다(사용자 r15). 요청에 장르나 형식 이름(MAD, PV, 쇼릴 등)이 있는 경우, 이는 영화 유형이면서 동시에 해당 영화가 주제를 다루는 제품 이름입니다:film-types.md§명명법에 따라 해결하고, 스토리보드 전에 사용자와 정의를 확인하십시오. 항목이 없는 이름은 질문해야 하며 유추하지 않습니다. 확인되지 않은 이름은 잘못된 대상 / 기대 이하의 실패입니다(사용자 2026-10-19: 첫 번째 라운드가 순수 코드 MV로 돌아온 한 줄 MAD 요청). 공식 아이템 또는 실험 라운드? (공식 = 저자가 보내거나 누군가에게 전달할 무언가; 정의는<works>/README.md에 있음). 공식 → 작업의 첫 번째 쓰기는python -X utf8 ~/.claude/tools/design-axes-mount/works_contract.py open <works>/films/<film_id> --medium video --actor main-loop [--toolbox PATH:ROLE:FACET ...]이며, 요청이 온 폴더에 관계없이 실행합니다. 출력된 創作輸入 줄을 경계 계약에 붙여넣고 아이템 내에서 빌드합니다. 다른 인도물(책의 일러스트레이션 스크립트, 이전 영화)의 생성기, 구성 요소 또는 페이지는 역할과 패싯이 있는 툴박스 항목이며, 기본값이 아닙니다(책 프로젝트 2026-10-11: 책의 라인 아트 생성기를 1080p로 확장한 것이 거부됨, 이제 부정 참조). 실험 라운드 →run_arm.py가 동일한 계층을 마운트합니다. - 전체 영화 먼저(
whole-film-rules.md§1): 한 명의 관객, 그 관객이 알아야 할 사항, 톤(단계 0에서 명명된 에너지; 없으면 제품과 관객에서 유추), 하나의 그라운드 색상(하이프 광고는 느슨해짐,whole-film-rules.md§6). 이 네 가지는 어떤 기기를 선택하기 전에 고정됩니다. 제품 문서에 기능이 해결하는 바가 명시되지 않은 경우, 소유자에게 물어보십시오(build-and-export.md§4 항목 7); 무인 상태에서는build/questions.md에 작성하고 고통점을 발명하지 마십시오. - 영화 유형(
film-types.md): 소개 광고, 하이프 광고, 제품 투어, 데이터 쇼릴, 내레이션 설명 영상, 또는 프로필 릴 — 단계 0의 목적에서 결정하며, 가장 가까운 템플릿에서 고르지 않습니다. 템플릿을 선택하십시오. 스토리보드(고정 콘텐츠) vs 한 단락(여러 번 실행 화면)을 결정합니다. - 리듬 원천(
rhythm-transitions-camera.md§1): 음악만 있음 → 섹션 변경이 마디 경계에서 발생; 내레이션 또는 가사가 있음 → 섹션 변경이 줄 시작에서 발생하며, 음악이 하드락되지 않습니다. 영화에 내레이션이 전혀 들어갈지 여부는 영화 유형과 톤(단계 1-2)을 따릅니다; 조용한 영화는 느린 섹션과 함께 음악을 사용할 수 있습니다. - 코드 전 스토리보드 테이블: 먼저
inputs/design-axes.md를 읽으십시오(라우팅 테이블, "스토리보드 전" 행). 섹션t마다 제목, 시각 자료, 데이터, 레이아웃, 전환(in/out), 카메라 목표, 모션 의도(움직이는 요소 및 중첩 효과 레이어당 한 줄: 모션이 말하는 바; 줄이 없는 요소는 정지하거나 사라짐,whole-film-rules.md§2a; 명명된 효과는 설명으로 해당 줄을 가짐, 이름만으로 카탈로그와 산업 의미가 충돌하는 경우 산업 의미로 구축 — 실험실 r28, 3/3 실행, 블라인드 리더; 실험실docs/text-motion-vocabulary.md§3/§5), 키 프레임(타임라인keys[]: 섹션당 최소 하나의role: key— 시청자가 읽거나 명확히 봐야 하는 순간, 선택적hold포함;role: breakdown은 섹션 내에서 모션이 어떻게 이동하는지를 결정하는 포즈; 섹션 간의 이음새는 파생되며 작성되지 않음, 실험실docs/agent-review-kbt-design.md§3), 및 참조 역할 K/툴박스(기본값none; 재사용된 생성기 또는 구성 요소는 해당 역할 K와 빌린 패싯을 명명해야 하며,open의--toolbox항목과 일치해야 함). 사용자가 있을 때 사용자에게 보여주고 확인을 기다리십시오. 자신이 내린 각 디자인 결정은python ~/.claude/tools/process-ledger/ledger.py add를 사용하여 결정하는 즉시 기록하십시오. 테이블의 운반체는 규칙에 따라 정해집니다(사용자 2026-10-08, 실험실docs/production-order.md마지막 섹션): JSONfilm.timeline.json과 생성된 읽기 전용 타임라인 페이지; 승인 시 필수 항목 = film_type, audience, energy, rhythm_source 및 섹션별 at, dur, freedom(locked / guided / free), motion_intent; camera goal / method는 고정 D1/D2 어휘를 사용합니다. 도구(tools/timeline/, 실험실docs/timeline-layer-design.md)는 TL-1 마일스톤 이전에 구축되지 않습니다. 그때까지는 해당 필드 이름을 사용하여 마크다운 테이블을 유지합니다(변경된 쇼트 레코드 이름은 설계의 §6.1 테이블에 매핑됨). - 기기: 각 기기는 고유한 톤을 가집니다. 단계 1의 톤과 충돌하는 기기는 폐기되며, 톤이 기기에 맞게 변경되지 않습니다(사용자 2026-09-30). 기본 기기(입자 폭발, 터널, 떠다니는 카드 더미, 글리치, 큰 텍스트 디자인, 가짜 HUD 숫자)는 콘텐츠와 연결된 모션 의도 라인(§2a)이 있을 때만 사용됩니다.
- 빌드(
build-and-export.md§1): 모든 프레임이 시간의 순수 함수인 하나의 HTML 페이지(window.__setTime(t)); 타이머나 CSS 전환 없음. - 내보내기(
build-and-export.md§2): filmkit, 실험실의tools/filmkit/render.py(프로필lab-round)를 사용하여 내보내며, 수동 캡처 스크립트를 사용하지 않습니다. 프레임별로 캡처하고, 인코딩하고, 검증한 후에만 출력 이름을 게시합니다.check.py는 FILE이 인도 가능한지 여부를 결정합니다. 공식 영화는@font-face로 글꼴을 번들링합니다(하나의 공개 라이선스 산세리프 패밀리로 CJK 및 라틴 문자를 모두 지원, 예: Noto Sans TC; 내보내기 또는 시청 기계에 설치된 글꼴에 의존하지 않음, 실험실 D26). 공식 영화는--profile delivery-web으로 내보냅니다(형식 필드, 그리고 영화가open으로 열린 작업 아이템이 아니거나 마운트가 오래된 경우 FK-R-18/FK-R-19 차단 포함). 음량과 최고 진폭은check.py가 사실로 보고합니다(FK-R-17, 정보). 플랫폼 기준으로 판단하려면--rules <rules file> --target <name>을 전달하십시오; 대상은 규칙 파일의 주장으로, 소스와review_when을 포함하며, 스킬에 의해 추정되지 않습니다. - 리뷰(
build-and-export.md§3): 먼저 1fps 전체 영화 시트, 그 다음 세부 사항; 피드백은 "초 / 위치 / 변경" 형식; 한 번에 한 가지 변경; 최대 3라운드. 공식 영화는 나란히 리뷰됩니다:works_contract.py review <item>은 태그로 선택된 승인된 동일 유형 영화 옆에 후보 시트를 배치하고(또는reference: none작성), 리뷰어는 빌더가 아닙니다(§3 항목 9) — 단일 세션에서 클린 컨텍스트 하위 에이전트가deliver/_review/side-by-side.png를 읽고, 평결의 첫 줄은reviewer: subagent-clean-context입니다.works_contract.py deliver <item>은deliver/_review/verdict.md가 후보보다 더 최신일 때까지 거부합니다. 에이전트 리뷰 경로(사용자 2026-10-19, 실험실docs/agent-review-kbt-design.md; 사용자는 방향과 디자인 콘텐츠만 제공): 메이커 하위 에이전트가 빌드하고, 파견 메인 루프 세션이 리뷰하며 영화를 편집하지 않음; 파일을 통해 대화(tools/review/review.py), 게이트 G0 스토리보드(메이커가 감독 리뷰) → G1 키 스틸(어려운 항목만) → G2 K/T 윈도우(느낌 = POLISH) → G3 전체 영화, 각각 최대 3라운드; 실패 목록, filmkit 차단 행, 제품 충실도 및 한 번 본 결함만 BLOCK 가능; 3라운드 후 최고 버전이 열린 항목과 함께 배송되며, 평결은reviewer: dispatcher-main-loop,user_watched: no(build-and-export.md§3 항목 10). - 인도는 아래의 승인 형태로 이루어집니다. 대상: 작업 아이템(
<works>/films\<film_id>\, 술어는<works>/README.md에 있음); 사용자가 명명한 프로젝트는 포인터(_MOVED_<date>.txt) 또는 자체 책/데이터만 유지합니다. 자체 프로젝트에서 빌드되고 채택된 영화(생성기 외부)는 각 승인 라운드 후works_contract.py adopt <same root> --id <id> --revise로 다시 진입합니다. 각 항목의 상태는<works>/STATUS.md에 있습니다(먼저 읽기). 실험 라운드는<lab>\experiments\<round>\로 이동합니다.
모델(사용자 2026-10-10, 실험실 CLAUDE.md 판결; experiments/r22-haiku/REPORT.md 원인): Haiku는 위 단계 중 어떤 단계에서도 영화를 제작하지 않으며, 지휘자나 작업자 역할 모두 불가합니다; 구성 요소의 고정 콘텐츠는 제작으로 간주됩니다(실험실 D-T12).
이 스킬이 내릴 수 있는 평결 및 각각의 검증 방법
- "섹션 변경이 마디/줄에 위치함" → 렌더링된 MP4에 대해
tools/measure_product.py또는tools/narrlock.py사용(실험실 경로). - "내레이션 아래에서 모션이 연속적임" →
tools/density.py이동 점유율 및 정지 실행. - "모든 숫자/기능이 실제임" →
tools/fidelity.py+build/claims.json(T05). - "카메라 움직임이 있음" →
tools/camflow.py;at_boundary실행은 프레임 확인 필요. - "파일이 인도 가능함"(읽을 수 있고, 예상 길이, 크기 및 코덱, 예상 시점에 사운드 존재, 현재 디스크의 입력에서 filmkit으로 작성됨) →
tools/filmkit/check.py(render.py가 자체 실행). 종료 코드 0은 차단 행이 없음을 의미하며, 화면에 대한 정보는 없음. - "좋아 보임 / 참조와 일치함" → 절대 숫자로 판단하지 않음. 모델이 읽은 프레임 시트와 사용자의 직접 시청(실험실 INV-6). 숫자는 데이터 경로를 증명할 뿐 화면을 증명하지 않습니다. 에이전트 리뷰 경로에서 이 평결은 제공되지 않습니다: 영화는 "사용자가 시청하지 않고 에이전트 리뷰 하에 인도됨"(평결
user_watched: no). - "음량이 목표에 적중함" →
check.py --rules F --target NAME; 허용 오차가 없는 대상에 UNDET는 규칙 파일 갭이지 통과가 아닙니다.
인도 형태(사람이 영화를 시청해야 함)
check.md 섹션 1-4(차단 / 확인됨 / 확인 필요 / 미결정)를 그대로 붙여넣습니다(섹션 5, 저자가 선언한 예외는 파일에 유지) — 공식 영화의 경우 --profile delivery-web 검사 결과이므로 FK-R-18(디자인 축 마운트) 및 FK-R-19(작업 스탬프) 행이 포함되며, deliver/_review/report.md의 reference: 줄(체크리스트 전 rerun 줄 포함)과 함께 제공됩니다. 세션의 자체 질문은 별도로 따르며 붙여넣은 섹션에 혼합되지 않습니다. 공식 영화에 대한 transform.py 작업(normalize는 filmkit M3부터 존재: transform.py normalize <in> --out <new> --target-lufs X --true-peak Y 또는 --rules F --target NAME; duck과 convert는 구축되지 않음)은 먼저 질문하며, 작업 결과의 새 파일 이름을 지정합니다.
—
참고: 원본 스킬 설명이 중간에 잘렸지만, 제공된 내용을 기반으로 번역을 완료했습니다.