{
  "type": "object",
  "properties": {
    "scene_index": {"type": "integer"},
    "heading": {"type": "string"},
    "beat_title": {"type": "string", "description": "이 씬의 핵심을 한마디로"},
    "representative_moment": {"type": "string", "description": "스틸 이미지로 만들 대표 순간 (한 문장). 인물은 short_id(C01 등)로 참조."},
    "t2i_variations": {
      "type": "array",
      "description": "서로 다른 구성의 T2I 프롬프트들",
      "items": {
        "type": "object",
        "properties": {
          "variant_label": {"type": "string", "description": "var_1, var_2 등"},
          "camera_effect": {"type": "string", "description": "카메라 구도 + 색감 (필수)"},
          "t2i_prompt": {"type": "string", "description": "T2I 프롬프트. 인물+아웃룩은 복합 ID(C01O02)를 사용 — 합성 단계가 'the character from Image N'으로 자동 치환. 신체 부위 클로즈업/사진·거울 속 인물 등 system prompt가 명시한 예외 구도에서는 보통명사로 대체. 소품은 P01, 배경은 [L01: 설명] 형태. (정책 상세는 system prompt 참조)"},
          "outfit_assignments": {
            "type": "array",
            "description": "이 variation에서 각 인물이 입는 아웃룩. 인물별 1개씩. DB/UI 동기화용 — t2i_prompt의 복합 ID와 동일한 정보를 명시.",
            "items": {
              "type": "object",
              "properties": {
                "character_id": {"type": "string", "description": "인물 ID (C01 등)"},
                "outlook_id": {"type": "string", "description": "아웃룩 ID (O01 등)"}
              },
              "required": ["character_id", "outlook_id"],
              "additionalProperties": false
            }
          },
          "source_facts": {
            "type": "array",
            "items": {"type": "string"},
            "description": "scene_text 원문 + shot_extract description 만 (text-grounded). fixed_element 는 visual_inferences 에. 빈 배열이면 confidence=low 필수."
          },
          "visual_inferences": {
            "type": "array",
            "items": {"type": "string"},
            "description": "fixed_element 인용 + LLM 자체 추론. fixed_element 도 이미 canonized LLM 출력이라 source 가 아님."
          },
          "creative_decisions": {
            "type": "array",
            "items": {"type": "string"},
            "description": "camera_effect / framing 선택 등 작가적 결정."
          },
          "confidence": {
            "type": "string",
            "enum": ["high", "medium", "low"],
            "description": "LLM 출력은 high/medium/low 만 — 절대 'legacy' 금지."
          }
        },
        "required": [
          "variant_label", "camera_effect", "t2i_prompt", "outfit_assignments",
          "source_facts", "visual_inferences", "creative_decisions", "confidence"
        ],
        "additionalProperties": false
      }
    },
    "scene_type": {
      "type": "string",
      "enum": ["normal", "montage", "flashback", "dream", "voiceover", "transition"],
      "description": "씬의 유형"
    },
    "dependent_scene_index": {
      "type": "integer",
      "description": "앞쪽 시각 연관 씬. -1 if none"
    },
    "dependency_reason": {"type": "string"}
  },
  "required": [
    "scene_index", "heading", "beat_title", "representative_moment",
    "t2i_variations", "scene_type",
    "dependent_scene_index", "dependency_reason"
  ],
  "additionalProperties": false
}
