| name | webtoon-shot-planning |
| description | 한 회차의 시놉시스를 받아 세로 스크롤 웹툰의 컷 리스트(shot_list.json)로 분해하는 스킬. 시각 시그니처 의무 출현, 스크롤 호흡 분배, 임팩트 컷 배치, 침묵 컷 삽입을 모두 처리한다. scene-director 에이전트가 호출한다. |
Webtoon Shot Planning — 컷 리스트 설계
입력 → 출력
- 입력:
systemless-player/02_episodes.md의 회차 섹션 + systemless-player/03_visual.md의 해당 시퀀스(있으면)
- 출력:
_workspace/episodes/ep{NN}/shot_list.json
컷 분해 규칙
1. 한 회차 = 8-15컷
- 평균 10-12컷이 적정. 마디 회차(5/10/15/20/25/30화)는 12-15컷.
- 한 컷에 두 가지 정보를 욱여넣지 않는다. 컷 = 한 호흡.
2. 스크롤 길이 분배
| 컷 유형 | scroll_length | 회차당 개수 |
|---|
| 침묵/인서트 | 1 | 1-2개 (충격 컷 직전 의무) |
| 일반 와이드/대사 | 2 | 5-8개 (회차의 본문) |
| 큰 임팩트/클로즈업 정점 | 3 | 1-2개 (마디 회차 2-3개) |
| 시즌 단일 컷 최대 | 4 | 회차당 0-1개, 시즌 전체 4-5컷 한정 |
3. 시그니처 의무 출현
- signature_1_pov_compare (청록 UI 헌터 시점 vs 도현 공허 흑 시점 대구): 매 회차 1회 이상
- signature_2_silhouette (몬스터 흑백 실루엣): 던전 회차(1·5·7·9·12·15·17·23·24·28·29) 1회 이상 / 비-던전은 도현 환각으로 변주
- 자홍 글리치 쿼터: 1막 1회 / 2막 2회 / 3막 3회 / 4막 4회 / 5막 5-6회 — 회차 메타에 명시한 쿼터 안에서 분배
4. 표정 클로즈업 비율
- 회차당 3-5컷의 클로즈업: 도현 2 / 윤세아 1-2 / 박재준·정하린·강도경 중 1
- 60% 눈동자 단독 / 30% 얼굴 절반 / 10% 손·입술 단독
5. 마지막 컷 = 클리프행어
- 시각 닻(예: 자홍 1픽셀, 검정 텍스트 한 줄) + 다음 화 예고 텍스트("다음 화 — ...")
- 회차의 감정 정점은 마지막 2-3컷에 집중
shot_list.json 작성 절차
Step 1 — 시놉시스를 4-6개의 '비트(beat)'로 쪼개기
- 도입 비트 (회차 시작 1-2컷)
- 사건 진입 비트 (3-4컷)
- 갈등/감정 고조 비트 (3-5컷)
- 임팩트 비트 (1-2컷)
- 클리프행어 비트 (1-2컷)
Step 2 — 각 비트에 컷 할당
비트별로 컷 종류(wide·close-up·silence)와 scroll_length를 분배. 임팩트 컷은 비트 사이 경계가 아닌 비트 내부 정점에 배치.
Step 3 — 시그니처/글리치 배치
- POV 비교 컷은 도입 비트 또는 사건 진입 비트에 배치
- 흑백 실루엣은 임팩트 비트에 배치
- 글리치는 클리프행어 비트 직전 또는 직후에 배치
Step 4 — 침묵 컷 삽입
임팩트 컷 직전에 scroll_length:1 침묵 컷(흰 칸 또는 단색 + 점 하나)을 의무 삽입.
Step 5 — 텍스트 메타 작성
각 컷의 text_overlay 필드에 narration_doh_yun / dialogue / onomatopoeia / system_ui_text / operator_text 분리 작성. 이미지에 텍스트를 그려 넣지 않는다 — panel-assembler가 HTML로 처리.
03_visual.md의 시퀀스 회차 처리
1·5·15·23·28·29·30화는 03_visual.md에 컷 단위 정답이 이미 있다. 그 컷 흐름을 90% 이상 보존, 창작 여지 5컷 이내. 베끼되 shot_list.json 스키마로 변환.
예시: 1화 도입 (시퀀스 1, 8컷)
03_visual.md 시퀀스 1을 그대로 변환:
{
"episode": 1,
"title": "F급은 미끼다",
"act": 1,
"magenta_glitch_quota": 1,
"cuts": [
{"cut_id": 1, "purpose": "도시 부감 오프닝", "shot_type": "high_angle_wide", "aspect_ratio": "9:16", "scroll_length": 2, "location": "새벽 서울 부감", "characters": [], "key_visual": "빌딩 창문에서 새어 나오는 청록 빛 — 도시의 별처럼", "palette": ["void_black", "system_cyan"], "signatures_used": ["cyan_grid"], "text_overlay": {"narration_doh_yun": "이 도시에선 다섯 명 중 한 명이 시스템을 본다."}, "glitch": false},
{"cut_id": 2, "purpose": "거리 헌터 뒷모습", "shot_type": "wide", "scroll_length": 2, "location": "출근 시간 횡단보도", "characters": [], "key_visual": "행인 5명 중 1명 뒤통수 옆 청록 격자 1조각", "palette": ["void_black", "system_cyan"], "signatures_used": ["cyan_grid"], "text_overlay": {"narration_doh_yun": "그들은 세계를 정답으로 본다.", "onomatopoeia": ["ping —"]}, "glitch": false},
{"cut_id": 3, "purpose": "헌터 어깨 너머 UI 노출", "shot_type": "medium", "scroll_length": 1, "location": "같은 거리", "characters": [], "key_visual": "헌터 어깨 너머 청록 UI 'QUEST: OKSUDONG-31 / REWARD +180pt'", "palette": ["system_cyan"], "signatures_used": ["cyan_grid"], "text_overlay": {"system_ui_text": "QUEST: OKSUDONG-31 / REWARD +180pt"}, "glitch": false},
{"cut_id": 4, "purpose": "도현 시점 첫 노출 (시그니처 #1)", "shot_type": "high_angle_wide", "aspect_ratio": "9:16", "scroll_length": 2, "location": "같은 횡단보도", "characters": ["han-do-hyun"], "key_visual": "시야 좌상단 텅 빔, 어떤 UI도 격자도 없다", "palette": ["void_black"], "signatures_used": [], "text_overlay": {"narration_doh_yun": "나는 안 보인다. 시스템도, 나도."}, "glitch": false},
{"cut_id": 5, "purpose": "침묵 컷", "shot_type": "silence", "aspect_ratio": "1:1", "scroll_length": 1, "location": "공허", "characters": [], "key_visual": "완전한 검정 한 칸 + 작은 흰 점 정중앙", "palette": ["void_black"], "signatures_used": [], "text_overlay": {}, "glitch": false},
{"cut_id": 6, "purpose": "도현 얼굴 클로즈업", "shot_type": "close_up", "scroll_length": 2, "location": "거리", "characters": ["han-do-hyun"], "key_visual": "23세 도현 정면 클로즈업, 후드, 다크서클, 손목 빨간 밴드", "palette": ["void_black", "anger_brown_red"], "signatures_used": [], "text_overlay": {"onomatopoeia": ["지직—"], "dialogue": [{"speaker": "phone_notification", "text": "빚 잔액: 14,000,000원 / 다음 납기 D-3"}]}, "glitch": false},
{"cut_id": 7, "purpose": "미끼조 집결 와이드", "shot_type": "wide", "scroll_length": 2, "location": "옥수동 31번 게이트 앞", "characters": ["han-do-hyun", "park-jae-jun"], "key_visual": "한 채 집만 한 청록 게이트 앞 미끼조 5인 등 보임", "palette": ["system_cyan", "void_black"], "signatures_used": ["cyan_grid"], "text_overlay": {"dialogue": [{"speaker": "park-jae-jun", "text": "오늘만 살아 돌아와라."}]}, "glitch": false},
{"cut_id": 8, "purpose": "4분할 시점 비교 정착", "shot_type": "split_panel", "aspect_ratio": "1:1", "scroll_length": 2, "location": "게이트 내부", "characters": ["han-do-hyun"], "key_visual": "4분할 헌터 A·B·C·D 청록 UI 풀세트 + 중앙 도현 시점 청록 0%", "palette": ["system_cyan", "void_black"], "signatures_used": ["cyan_grid"], "text_overlay": {"system_ui_text": "ENTERING SAFE ROUTE", "narration_doh_yun": "근데 저기서 누가 운다."}, "glitch": false}
],
"production_notes": "컷 4·8이 시점 비교 대구. 컷 5 침묵 컷이 스크롤 호흡 잡음."
}
검증 체크리스트