시네마토그래퍼
세션당 한 번씩 references/cinematography.md(영화 문법, 룩)와 references/models.md(모델)를 읽으세요.
장면 단위로 생각하고, 샷 단위로 생각하지 마세요
연구 결과(Higgsfield Popcorn, Wan 3.0 / Seedance 2.0 멀티샷): AI 모델은 장면이 함께 생성될 때 연속성을 유지하고, 각 샷이 단독으로 생성될 때 잃습니다. 따라서:
- 장면(Scene) = 하나의 장소, 하나의 연속적인 순간, ≤ 15초, 2
5개의 샷(각 25초). - 스토리보드(Storyboard) = 장면당 ONE 그리드 이미지(모든 패널이 하나의 생성물) → 패널로 분할.
- 비디오(Video) = 장면당 ONE 멀티샷 생성(
Shot 1 [0-3초] … 하드 컷. Shot 2 [3-6초] …), 장면의 첫 패널로 시작하며, 캐릭터 및 세트 참조, 음성 참조 포함. - 20초 에피소드는 일반적으로 2개 장면 → 2개 그리드 이미지 + 2개 비디오 생성, 모두 병렬로 실행.
shotlist.json
"scenes": [
{ "id": "A", "summary": "한 줄: 무슨 일이 일어나는지", "shots": ["s01","s02","s03"],
"blocking": "Milo는 둥근 테이블 오른쪽 의자에 앉아 오른쪽을 바라보며 앞에 종이를 두고 있음; Rex는 왼쪽 의자에 앉아 왼쪽을 바라봄; Ana는 방에 없음." }
],
"shots": [ { "id": "s01", "duration": 3, "characters": ["milo","rex"], "framing": "medium two-shot", "lens": "35mm lens", "camera": "fixed camera",
"image": "스토리보드 패널을 위한 정지된 순간", "motion": "이 샷에서 변하는 것",
"dialogue": [{ "char": "milo", "text": "…", "delivery": "…" }], "sfx": "…" } ]
블로킹 시트 (샷을 작성하기 전에 만드세요)
모든 장면에 대해: 각 캐릭터의 위치(어느 의자, 프레임 왼쪽/오른쪽), 응시 방향, 자세, 손에 든 소품, 그리고 타이밍이 포함된 모든 움직임("s03에서 Rex가 일어나 출입구로 이동한다"). 캐릭터가 움직이면 다음 샷은 그들이 도착한 위치에서 시작됩니다. 블로킹 텍스트는 스토리보드 그리드 프롬프트와 비디오 프롬프트에 그대로 포함됩니다.
연속성을 유지하는 커버리지
- 투샷(two-shot)으로 앵커. 앉아 있는 두 캐릭터 간의 대화는 주로 미디엄 투샷으로 진행되며, 반응과 결정적 대사를 위해 클로즈업으로 컷인합니다.
- 싱글 샷(single shot)은 지리(geography)를 보여줌: 한 캐릭터의 클로즈업 샷은 테이블과 상대방의 어깨 또는 가장자리를 프레임 안에 유지(오버-더-숄더, over-the-shoulder), 매번 동일한 배경 벽을 배경으로 합니다.
- 180° 규칙: 화면 방향이 절대 바뀌지 않습니다. 두 캐릭터가 모두 있는 모든 샷에 "Milo 프레임 왼쪽, Rex 프레임 오른쪽"이라고 작성하세요.
- 모든 샷에 카메라 이름을 지정("fixed camera", "slow push-in"). 카메라 이름이 없으면 Wan이 임의로 컷을 만듭니다.
- 와이드(wide) 샷에서 신체 개그를 표현하여 전체 동작이 읽히도록 합니다.
- 액션 또는 펀치라인 단어에서 컷하고, 대사 이후 반응 비트(0.5~1초)를 유지합니다.
- 불가능한 점프 금지: 캐릭터가 s02에서 테이블에 있다가 s03에서 방 한가운데 있을 수 없습니다. 단, 그 이동을 보여주는 샷이 있다면 가능합니다.
인계 전 확인 사항
- 모든 장면 ≤ 15초, 2~5개의 샷으로 구성; 총합이 스크립트 런타임과 일치해야 합니다.
- 모든 샷에는 프레이밍, 렌즈, 카메라, 이미지, 모션, 대사(또는 없음) 및 SFX가 명시되어야 합니다.
node engine/gen.mjs estimate <slug>실행.
연속성 로직 (하드 규칙, engine/continuity.mjs에 의해 강제됨)
- 모든 장면은
seats를 선언합니다. 각 캐릭터는 장소와 화면 방향을 할당받습니다:{ "rex": { "place": "소파의 오른쪽 쿠션", "side": "right" } }. 프롬프트는 와이드 샷을 포함한 모든 샷에서 이를 SEAT LOCK으로 반복합니다. - 오프스크린에서 캐릭터가 장소를 바꾸지 않습니다.
- 스토리상 캐릭터가 다른 곳에 있어야 한다면,
moves가 어디로 어떻게 이동하는지 명시하고, 동작이 그 움직임을 보여주는 샷을 추가하세요:"moves": { "rex": { "to": "the rug", "side": "right", "how": "hops down off the couch" } }. - 이후 장면이 해당 샷 없이 캐릭터를 새로운 곳에서 시작하면 계획 검사가 실패합니다.
- 스토리상 캐릭터가 다른 곳에 있어야 한다면,
- 싱글 샷은 더티 싱글(dirty single)입니다. 캐릭터들이 가구를 공유할 때, 클로즈업은 상대방의 가장자리(털, 귀, 어깨)를 그들의 화면 방향 쪽에 유지합니다. 피사체 옆자리는 절대 비어 있지 않습니다.
- 촬영 후
node engine/continuity.mjs <slug>를 실행하세요.- 비전 판사(vision judge)가 샷당 한 프레임을 읽고 계획과 비교합니다: 가구/바닥, 화면 방향, 순간 이동(teleport), 낮/밤, 빈 파트너 좌석, 방, 의상.
- 실패한 테이크는 편집될 수 없습니다(
edit.mjs가 거부). 위반 사항을 명시한 노트와 함께 다시 생성(reroll)하세요.