{
  "type": "object",
  "properties": {
    "shots": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "scene_index": {"type": "integer"},
          "shot_index": {"type": "integer"},
          "perspective": {
            "type": "string",
            "description": "Camera POV: subjective_pov, over_shoulder, observer, omniscient, object_pov, voyeur"
          },
          "pov_character": {
            "type": "string",
            "description": "For subjective POV: the character whose eyes we see through (must NOT appear in image). Empty string if not subjective."
          },
          "perception_mode": {
            "type": "string",
            "description": "How the scene is perceived: direct (normal vision), hallucination, dream, memory, reflection, through_device (CCTV/phone/binoculars), projection. Affects visual treatment."
          },
          "camera_direction": {
            "type": "string",
            "description": "Creative camera placement, framing, physical layout, and composition including POV (2-3 sentences, English)"
          },
          "lighting_mood": {
            "type": "string",
            "description": "Lighting technique and color mood (1 sentence, English)"
          },
          "character_angles": {
            "type": "array",
            "description": "Camera-relative angle and body pose for each visible character (exclude POV character)",
            "items": {
              "type": "object",
              "properties": {
                "character": {"type": "string", "description": "Character name (as registered)"},
                "angle": {"type": "string", "description": "Camera-relative direction: facing_camera, back_to_camera, profile_left, profile_right, three_quarter_left, three_quarter_right, over_shoulder, looking_away"},
                "body_pose": {"type": "string", "description": "Specific body posture in English (2-5 words). Must NOT use 'standing' alone — use action-grounded or state-grounded poses such as 'one foot on pedal', 'leaning against doorframe', 'crouching behind desk', 'slumping into chair', 'mid-stride paused'. See system prompt 'body_pose 다양화' for full guidance."},
                "gaze_target": {"type": "string", "description": "Where the character's eyes are looking: another character's name, an object name, 'camera', 'down', 'up', 'distant', 'closed', 'unconscious', 'dead', 'severely_injured'"}
              },
              "required": ["character", "angle", "body_pose", "gaze_target"],
              "additionalProperties": false
            }
          },
          "key_bg_elements": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "element": {"type": "string", "description": "Background element name"},
                "state": {"type": "string", "description": "State in this shot (open/closed, clean/dirty, on/off, etc.)"},
                "orientation": {
                  "type": "string",
                  "description": "Natural-language description tied to directionality_class. For content_surface: which face/side is visible to camera and what is on it. For reflective_surface: what is being reflected and how. For transparent_surface: surface state and what is seen through it. For directional_3d: which side faces camera. For non_directional: empty allowed. content_surface and reflective_surface MUST have a non-empty orientation."
                },
                "camera_use": {"type": "string", "description": "How this element is used in the shot (foreground frame, focal point, light source, etc.)"},
                "directionality_class": {
                  "type": "string",
                  "enum": ["content_surface", "reflective_surface", "transparent_surface", "directional_3d", "non_directional"],
                  "description": "Semantic classification of this element. content_surface = thin object that carries content on one face; which face is visible changes the meaning. reflective_surface = object whose surface reflects content; what is reflected determines meaning. transparent_surface = object the camera sees through; surface state and what lies beyond determine meaning. directional_3d = 3D object with multiple faces where the camera-facing side matters. non_directional = texture/surface/ambient element with no directional meaning. Judge by meaning, not by surface vocabulary or specific examples (non-exhaustive examples, do not classify by this list)."
                }
              },
              "required": ["element", "state", "orientation", "camera_use", "directionality_class"],
              "additionalProperties": false
            }
          }
        },
        "required": ["scene_index", "shot_index", "perspective", "pov_character", "perception_mode", "camera_direction", "lighting_mood", "character_angles", "key_bg_elements"],
        "additionalProperties": false
      }
    }
  },
  "required": ["shots"],
  "additionalProperties": false
}
