feat: add versioned Blender production contracts
This commit is contained in:
@@ -1,39 +1,32 @@
|
||||
---
|
||||
name: short-video-motion
|
||||
description: 승인된 컷·장면과 실제 시작/끝 이미지로 12-motion 영상 요청을 작성하고 받은 MP4의 길이·상태·연결을 확인한다.
|
||||
description: 승인된 실제 Blender 원본·Scene·끝점·실측 컷으로 12 렌더 요청을 작성하고 실제 MP4의 길이·상태·연결을 확인한다.
|
||||
---
|
||||
|
||||
# 컷 영상 요청과 결과 확인
|
||||
# Blender 컷 영상 렌더
|
||||
|
||||
## 시작 조건
|
||||
## 입력과 경계
|
||||
|
||||
[공통 계약](../../../docs/workflow-contracts.md)의 저장·전달, 실제 파일과 시간, 승인·수정 규칙과 [제작 지침](../../../docs/short-video-guide.md)의 설명에 필요한 움직임·장면 연결 절을 읽는다. [12 양식](../../../templates/stages/12-motion.json)과 [결과 스키마](../../../contracts/artifact.schema.json)의 `12-motion` 정의를 사용하며 새 필드를 추가하지 않는다.
|
||||
[공통 계약](../../../docs/workflow-contracts.md), [전달 형식](../../../docs/contracts.md), [제작 지침](../../../docs/short-video-guide.md), [결과 스키마](../../../contracts/artifact.schema.json), [검토 양식](../../../templates/review.md)을 읽는다. 새 결과는 1.1이고 기존 1.0 결과를 보존·참조한다. 필수 입력 topic/language, Qwen3-TTS 기존 qwen3-tts 환경, 세로 9:16·최종 180000ms 이하·실측 컷 5000ms 이하를 유지한다.
|
||||
|
||||
개별 호출에서도 같은 제작물의 유효한 `07-cuts`, `08-scenes`, `11-images`와 그 선행 관계를 확인한다. 실제 사용한 세 결과의 `{stage_id, revision}`을 `inputs`에 기록한다. `project.json`에서 story·scenes가 사용 버전과 연결된 실제 사용자 승인인지 확인하며 pending·changes_requested·stale 승인을 우회하지 않는다. 이미 승인된 같은 버전은 재승인을 요구하지 않는다. 자료·승인이 없으면 빠진 항목과 돌아갈 단계를 총괄에 보고한다.
|
||||
같은 제작물의 유효한 선행 버전·실제 파일과 topic/story/scenes 승인을 확인하고 사용 버전을 inputs에 기록한다. 필요한 결과·승인이 없거나 stale이면 누락과 돌아갈 단계를 총괄에 보고한다. 같은 유효 승인 버전은 다시 묻지 않는다. 08의 제한된 대표 화면·짧은 움직임만 scenes 승인 전 검토용으로 허용하며 정식 10–12 전체 제작·완료와 구분한다. 새 08·09 승인 후 정식 제작한다.
|
||||
|
||||
선행 조건인 Qwen3-TTS 통합 WAV의 실측 컷, `gpt-image-2.5-sunburst`의 실제 PNG, `references/1.png` 그림체를 유지한다. 그림체 참고에 캠핑 소재를 강제하지 않는다. 이 스킬은 영상 엔진을 선택·구현하거나 실제 모델 API·영상 생성을 실행하지 않고 도구에 중립적인 요청과 받은 결과 확인을 담당한다.
|
||||
원본 references/1.png를 보존하고 단순 형태·정돈된 색을 교육용 3D로 해석한다. 단순 배경·부드러운 조명·선명한 형태를 사용하며 평면 복제·캠핑 소재·상표를 강제하지 않는다. 02의 조사와 대본 근거로 모델·재질·방향·상태·수치를 확인하고 사실에 없는 구조를 만들지 않는다. 설명 텍스트는 검증한 합성 텍스트로 배치한다.
|
||||
|
||||
## 요청 작성
|
||||
## 원본과 프레임 범위
|
||||
|
||||
`payload.request.clips`는 07의 컷 순서대로 모든 컷을 정확히 한 번 포함한다. 각 항목은 다음 기존 필드만 사용한다.
|
||||
[12 양식](../../../templates/stages/12-motion.json)을 사용한다. 유효한 07/08/11, 실제 Qwen 통합 WAV의 실측 컷, 11의 검증된 .blend·시작/끝 PNG를 확인한다. request={engine:"Blender",scene_path,render_profile,clips}. scene_path는 11의 실제 원본 경로, render_profile은 11과 동일하다.
|
||||
|
||||
- `cut_id`: 07의 컷 ID. 08 장면과 11 프레임의 컷 참조가 같은지 확인한다.
|
||||
- `start_frame_id`, `end_frame_id`: 11 요청에서 해당 컷의 start/end인 ID. 11 결과의 `frame_id`로 실제 PNG를 찾고 `media.verified=true`와 이미지 내용을 확인한다.
|
||||
- `duration_ms`: 07의 실측 `end_ms-start_ms`. 양수이고 5000ms 이하이며 글자 수 추정으로 대체하지 않는다.
|
||||
- `motion_prompt`: 08의 시작→끝 상태, 설명에 필요한 물체·인물 동작, 흐름 방향과 카메라 동작을 전달한다. 별도 camera 필드를 만들지 않는다.
|
||||
clip={cut_id,start_frame_id,end_frame_id,duration_ms,motion_prompt,scene_name,start_frame,end_frame}. 07 순서의 모든 컷을 정확히 한 번 포함한다. 끝점 ID는 11의 같은 컷·위치이며 Scene 이름·논리 프레임도 일치해야 한다. start_frame/end_frame은 0 이상이며 end_frame>start_frame이다. duration_ms는 실측 end_ms-start_ms이고 0 초과 5000 이하이며 프레임 수×1000/fps와 정확히 같아야 한다. 미작성 null은 실행 준비가 아니다.
|
||||
|
||||
물높이 변화·부품 조작 등 원인과 결과를 보여주는 움직임을 우선한다. 줌·흔들림으로 설명을 대신하거나 근거 없는 구조·수치를 더하지 않는다. 시작/끝 이미지와 요청이 같은 변화를 설명해야 한다. continuous 연결은 이전 끝과 다음 시작의 위치·방향·카메라·인물·배경을 맞추고 cut 전환은 승인된 이유를 보존한다.
|
||||
원인과 결과를 보여주는 실제 물체·상태 변화와 카메라 동작을 motion_prompt에 적고 줌·흔들림으로 설명을 대신하지 않는다. [start_frame,end_frame) 프레임을 렌더링하고 논리 번호+1을 Blender에 전달한다. continuous 경계의 실제 상태를 맞추고 cut의 서로 다른 Scene·캐시를 구별한다. PNG end 자체와 MP4의 마지막 프레임(end-1) 검사를 구분한다.
|
||||
|
||||
## 받은 결과 확인
|
||||
result는 기존 null 또는 {clips:[{cut_id,media:video}]}다. 모든 요청 컷의 실제 MP4·길이·화면·동작·연속성을 검증한다. 요청과 실측이 다르면 12/11/08/07 중 문제 단계와 컷을 보고하고 음성·시간·속도를 임의 변경하지 않는다. 모든 파일이 확인되어야 13 합성에 전달한다.
|
||||
|
||||
요청만 준비되면 `payload.result=null`을 유지하고 awaiting_input으로 보고한다. 실제 결과는 `payload.result.clips`의 `{cut_id, media}`로 기록한다. 각 요청 cut_id에 MP4 한 개씩 대응해야 하며 누락·중복·요청 외 ID를 허용하지 않는다. 부분 결과는 보존하되 전체 요청을 받기 전 complete로 보고하지 않는다.
|
||||
## 실제 결과와 전달
|
||||
|
||||
media는 기존 `{path, kind, verified, duration_ms, width, height}`다. path는 저장소 루트 기준 상대 경로, kind는 video다. 실제 파일 존재·MP4 형식·재생 내용·길이·화면 크기를 확인한 뒤에만 verified=true와 실측 메타데이터를 기록한다. 파일 미확인은 verified=false, 확인하지 못한 메타데이터는 null이다. 요청값이나 확장자만으로 실측했다고 쓰지 않는다.
|
||||
승인된 저장소 내 Blender 실행 경로를 사용한다. 기존 설치를 무단 변경하거나 다른 도구로 바꾸지 않는다. 설치·요청 준비와 실제 렌더링 성공을 구분한다. .blend는 BlendFile={path,verified,sha256,blender_version}로 기록하고 실제 파일·해시·버전·재열기·Scene/자산을 검증한다. PNG/MP4 media로 위장하지 않는다. RenderProfile의 실제 지원을 확인하며 요청값을 실측 결과로 복사하지 않는다.
|
||||
|
||||
각 실제 클립 길이를 요청 duration_ms와 비교한다. 다르면 cut_id·요청/실측 길이·수정할 `12-motion`을 보고하며 임의로 컷·음성을 늘리거나 속도를 바꿔 통과시키지 않는다. 실제 시작/끝 상태와 동작·카메라·인접 연결도 확인한다. 프레임 문제는 `11-images`, 장면 설계 문제는 `08-scenes`, 시간 기준 문제는 `07-cuts`로 돌린다. 모든 컷의 실제 파일·길이·상태가 맞아야 합성 전달 준비로 보고한다.
|
||||
media는 기존 여섯 키 {path,kind,verified,duration_ms,width,height}다. PNG는 image·duration_ms=null, MP4는 video·실측 양수 길이이며 실제 형식·해상도·9:16·내용을 확인한다. 확인한 파일만 verified=true이고 미확인 크기·시간은 null이다. 데이터 경로는 루트 상대 경로다. 실제 파일이 없으면 result=null·awaiting_input, 실행/검증 실패는 failed로 보고한다. 부분 결과와 실패 시도를 보존하며 전체 요청 결과가 검증되기 전 complete로 보고하지 않는다.
|
||||
|
||||
## 저장과 보고
|
||||
|
||||
담당은 `projects/<project_id>/stages/12-motion/r<revision>/artifact.json`과 같은 버전 `review.md`만 작성한다. 이전 버전을 덮어쓰지 않고 [검토 양식](../../../templates/review.md)에 선행 버전, 요청 대비 실측 결과, 적용한 움직임 원칙·적용하지 않은 구성과 이유, 문제 단계·컷을 적는다.
|
||||
|
||||
총괄만 project.json의 상태·포인터·승인을 작성한다. 담당은 준비 여부·미확인 내용·후속 13/14 및 final 검토에 미치는 수정 영향을 보고한다. 사용자 final 승인 전 제작 완료를 선언하지 않는다.
|
||||
자기 단계의 projects/<project_id>/stages/<stage_id>/r<revision>/artifact.json과 같은 버전 review.md만 작성하고 이전 결과를 덮어쓰지 않는다. 실제 사용 버전·파일별 검사·명령·종료코드·미확인 영역·적용 원칙과 비적용 이유를 적는다. project.json·상태·현재 포인터·사용자 승인은 총괄만 갱신한다. 필드·열거값은 계약을 따르고 새 필수 입력·승인 지점을 만들지 않는다.
|
||||
|
||||
Reference in New Issue
Block a user