# Shot별 등장 요소 판정 (변형 형태 확정)

씬 내에서 shot 순서에 따라 각 shot 에 **카메라 프레임 안에 물리적으로 보이는** 요소를 결정합니다.

## 핵심 원칙

- **visible_entity_ids = 카메라 프레임 안에 물리적으로 보이는 entity SOT.**
- 단순히 씬 안에 존재하거나 beat 와 관련 있다고 해서 포함하지 않습니다.
- 프레임 밖에 있는 entity 는 (씬 맥락상 관련 있더라도) 제외합니다.
- character / location / prop **모두 동일 기준** — 프레임 안 가시성.

## 핵심 규칙

### 일반 요소 (변형 아닌 것)
- 해당 shot 의 설명(description)과 등장 인물(characters)을 기준으로 판단
- shot 에 언급되지 않은 캐릭터는 visible 에서 제외
- **단, 시신/무의식/부상/잠든 인물이 카메라에 보이면 반드시 포함** (살아있든 죽었든 무관)

### 배경(L) / 소품(P) — frame-visible 만 포함

- shot description 에 **언급되었다는 이유만으로** 포함하지 **않는다**.
- **카메라 프레임 안에 실제로 보이는 경우에만** visible_entity_ids 에 포함.
- **ECU / CU / macro shot** 에서 프레임 밖에 있는 scene-relevant prop / location 은 제외.
  - 예: "ECU on 캐릭터A's face" framing → 같은 방에 있는 책상, 사진, 지도, 가구 등 프레임에 안 잡히면 모두 제외 (L01 방 자체도 ECU 에서 보이지 않으면 제외).
  - 예: "Macro insert on a paper corner" framing → 그 종이 자체만 포함, 옆에 놓인 다른 소품은 제외.
- **WS / MS / two-shot** 등 넓은 framing 에서는 frame 에 보이는 L/P 모두 포함.
- 판단 기준은 항상 "이 shot 의 카메라가 실제로 잡는 것" — scene 상위 맥락 아님.

### Off-camera / Gaze target 제외 (중요)

description 안에 등장하지만 **카메라 프레임 밖**에 있는 인물은 visible_entity_ids 에서 **반드시 제외**합니다. 다음 패턴은 모두 off-camera 신호입니다:

- **Gaze-target close-up 패턴** — `X[를을] (응시하|올려다보|내려다보|바라보|쳐다보|마주보|노려보|돌아보)... Y[의] (얼굴|눈|표정|상체|뒷모습|시선|옆얼굴|옆모습) (클로즈업|CU|ECU|MCU|샷|숏)`
  - 이 패턴에서 **X 는 시선의 대상 (off-camera)**, **Y 는 시선의 주체 (in-frame)** 입니다.
  - 예: "캐릭터A**를** 올려다보**며** ... 캐릭터B의 얼굴 클로즈업" → 캐릭터A = off-camera (제외), 캐릭터B = in-frame (포함)
  - 예: "남자 직원**을** 응시하**는** 캐릭터B의 얼굴 클로즈업" → 남자 직원 = off-camera (제외)

- **명시적 off-camera/off-screen phrase** — description 또는 staging 단서에 다음 phrase 가 인물 이름과 인접:
  - 영어: `off-camera`, `off-screen`, `offscreen`, `out of frame`, `out of shot`
  - 한국어: `화면 밖`, `프레임 밖`, `카메라 밖`
  - 예: "캐릭터A는 화면 밖에서 외친다" → 캐릭터A = off-camera (제외)

- **차단(blocking) 패턴** — `(차단|막다|가리다|block|obstruct) (대상)[을를]?`
  - 예: "캐릭터B가 캐릭터C를 가로막아 캐릭터C는 보이지 않는다" → 캐릭터C = off-camera (제외)
  - 예: "to block 캐릭터C offscreen" → 캐릭터C = off-camera (제외)

- **Reaction-only 패턴** — description 이 한 인물의 표정/시선만 close-up 으로 잡고 다른 인물은 그 인물에 대한 반응 trigger 로만 언급:
  - "(상대) 의 목소리를 듣고 굳어진 (주체) 의 얼굴" → 상대 = off-camera (제외)

### 변형 캐릭터/소품/배경
- 변형 전환은 씬 텍스트에서 명확한 변신/변형 묘사가 있는 시점에 발생
- **전환 이후 shot들은 모두 변형된 형태를 유지** (매 shot마다 바뀌지 않음)
- 다시 원래 형태로 돌아오는 묘사가 없으면 변형 형태를 끝까지 유지
- 동시 존재(분신, 클론, 환각)인 경우에만 둘 다 포함

### visible_entity_ids에 넣을 ID 규칙
- **변형된 형태이면 변형 ID를 넣으세요** (원본 ID 아님)
  - 예: 캐릭터A 가 변형된 후이면 → C01 대신 C02를 visible_entity_ids에 넣음
- **원본 형태이면 원본 ID를 넣으세요**
  - 예: 캐릭터A 가 아직 변형 전이면 → C01을 visible_entity_ids에 넣음
- 한 shot에서 원본과 변형이 동시에 보이는 경우 둘 다 넣으세요

### variant_resolved 규칙
- 변형 쌍이 있는 경우, 해당 shot에서 실제로 보이는 형태를 기록
- base_short_id를 key로, 실제 사용할 short_id를 value로
- 원본 형태이면: `{"C01": "C01"}` (base 그대로)
- 변형 형태이면: `{"C01": "C02"}` (variant로 교체)
- 해당 shot에 등장하지 않으면 key 자체를 생략
