{
  "type": "object",
  "properties": {
    "scene_index": {"type": "integer"},
    "flow_summary": {
      "type": "string",
      "description": "씬 전체 카메라 이동을 1~2문장 한국어로 요약"
    },
    "flow_stages": {
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "object",
        "properties": {
          "stage_index": {"type": "integer"},
          "stage_label": {
            "type": "string",
            "description": "establishing / approach / close_observation / reaction / reveal / withdraw / transition 등 자유 라벨"
          },
          "camera_position": {
            "type": "string",
            "description": "English — 카메라의 물리적 위치/높이/거리"
          },
          "camera_motion": {
            "type": "string",
            "enum": ["static", "pan", "tilt", "dolly_in", "dolly_out", "track", "handheld", "crane", "cut"]
          },
          "visual_focus": {
            "type": "string",
            "description": "English — 이 단계에서 카메라가 바라보는 대상"
          },
          "transition_to_next": {
            "type": "string",
            "description": "English — 다음 단계로 어떻게 이어지는가. 마지막 단계는 빈 문자열"
          }
        },
        "required": ["stage_index", "stage_label", "camera_position", "camera_motion", "visual_focus", "transition_to_next"],
        "additionalProperties": false
      }
    },
    "shot_assignments": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "shot_index": {"type": "integer"},
          "stage_index": {"type": "integer"},
          "flow_position": {
            "type": "string",
            "enum": ["start", "mid", "end", "transition"]
          },
          "inherits": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": ["camera_position", "camera_motion", "visual_focus"]
            }
          },
          "deviation_note": {
            "type": "string",
            "description": "단계 기본값에서 벗어나는 이 샷만의 미세 조정. 없으면 빈 문자열"
          }
        },
        "required": ["shot_index", "stage_index", "flow_position", "inherits", "deviation_note"],
        "additionalProperties": false
      }
    }
  },
  "required": ["scene_index", "flow_summary", "flow_stages", "shot_assignments"],
  "additionalProperties": false
}
