Hierarchical Film Data Model
1. 소유 관계
Sequence와 Scene은 분석 방식과 무관하게 정식 데이터로 존재한다. Beat와 Shot은 Scene 아래의 형제 엔티티다. Prompt Package는 Shot의 파생 자식이며 별도 영화 계층이 아니다.
2. 엔티티 책임
| 엔티티 | 책임 | 대표 데이터 |
|---|---|---|
| Project | 작품 전체 기준 | title, genre, theme, logline, visualStyle, globalNotes |
| ScriptRevision | 분석 기준 시나리오 | version, contentSnapshot, contentHash |
| Sequence | 하나의 서사 목적을 이루는 Scene 묶음 | purpose, emotionalArc, defaults, notes |
| Scene | 같은 장소·시간의 사건과 제작 문맥 | source range, location, time, environment, lighting, notes |
| Beat | 사건·행동·감정·관계 변화 | narrativeGoal, observableAction, emotion, performance, notes |
| Shot | 카메라가 끊기기 전까지의 화면 사양 | purpose, Beat mappings, camera, lens, composition, subject, duration, notes |
| Beat-Shot Mapping | Shot의 Beat coverage | beatId, shotId, role, order, notes |
| Shot Prompt Package | Shot에서 파생된 두 Prompt | framePrompt, motionPrompt, shotDefinitionVersion, promptVersion, status |
3. 상속과 해석
상위 기본값은 Shot Prompt를 만들 때 해석한다.
Project defaults
-> Sequence direction
-> Scene physical and narrative context
-> mapped Beats
-> Shot-specific specification
-> Frame Prompt / Motion Prompt
같은 값을 모든 하위 row에 복사하지 않는다. Shot의 명시적 값이 상위 기본값보다 우선하며, Prompt 생성기는 현재 Shot에 필요한 정보만 선택한다.
4. Beat와 Shot
Beat와 Shot은 M:N 관계다.
- 하나의 Beat를 여러 Shot으로 표현할 수 있다.
- 하나의 Shot이 여러 Beat를 이어서 다룰 수 있다.
- Mapping은 coverage 역할과 순서를 소유한다.
- Shot은 최소 하나의 활성 Beat를 다룬다.
- 모든 활성 Beat는 최소 하나의 승인 Shot에서 coverage된다.
이 관계는 UI에서 Scene -> Beat -> Shot의 수직 흐름으로 보이더라도 데이터 모델에서는 M:N을 유지한다.
5. Shot의 범위
Shot은 Prompt를 만들기에 충분한 제작 사양을 직접 소유한다. 별도 FrameSpec·MotionSpec 컬럼을 사용하지 않는다.
Shot
├── identity and purpose
├── Beat mappings
├── camera, lens, framing and composition
├── duration
└── direction note
6. Shot Prompt Package
CinemaShotPromptPackage
├── shotId (unique)
├── status
├── framePrompt
├── motionPrompt
├── shotDefinitionVersion
├── promptVersion
├── profileKey / provider / model
├── errorCode / errorMessage
└── timestamps
- Shot 계획 확정 시 생성 작업을 등록한다.
- 두 Prompt는 한 요청에서 생성하되 독립적으로 사용할 수 있다.
- Shot 입력이 바뀌면
definitionVersion을 증가시키고 새 Package 생성을 등록한다. - 생성 완료 시 요청 당시의
shotDefinitionVersion과 현재 Shot 버전이 다르면 그 결과를 반영하지 않는다. promptVersion은 사용자 편집 횟수가 아니라 compiler·출력 계약 버전이다.- 생성 실패는 Shot 계획을 취소하지 않으며 재시도할 수 있다.
7. ScriptRevision 소유권
승인 Sequence와 그 하위 Scene은 분석한 ScriptRevision에 귀속한다. 새 ScriptRevision은 이전 버전의 Sequence를 자동 공유하지 않는다. 사용자가 새 버전을 분석하고 승인해야 한다.
Project 수준 연출 메모와 Character Asset Binding은 특정 ScriptRevision에 종속되지 않는다. 반면 분석 결과와 원문 범위는 해당 ScriptRevision을 명시적으로 참조한다.
8. 삭제된 데이터 모델
다음 구조는 현재 모델에 포함되지 않는다.
- FrameSpec, MotionSpec, Render Plan
- Generation Attempt와 선택 Frame
- Edit Relation과 경계 관계
- Scene Proxy, Depth Map, Camera Revision, Guide Render
개발 데이터 보존 요구가 없어 migration에서 관련 테이블과 enum을 물리 삭제했다. 새 기능은 이 스키마를 호환 계층으로 참조하지 않는다.