{
  "schema_version": "motioncontrol.scene_timeline.v1",
  "scene": "scene_01",
  "source": "prompt-derived tracker aligned to attached AI video",
  "unit": "meters",
  "output": {
    "duration_s": 6,
    "fps": 24,
    "aspect_ratio": "9:16",
    "resolution_px": {
      "width": 1080,
      "height": 1920
    }
  },
  "video": {
    "file": "motioncontrol-demo.mp4",
    "duration_s": 6.041667,
    "fps": 24,
    "frame_count": 145,
    "resolution": {
      "width": 720,
      "height": 1090
    }
  },
  "coordinate_system": {
    "x": "screen left is negative",
    "y": "vertical root height",
    "z": "depth toward camera",
    "yaw": "0 faces camera",
    "pitch": "0 neutral upright"
  },
  "actor": {
    "id": "woman_01",
    "kind": "human",
    "height_m": 1.72,
    "appearance": "woman wearing a blue and white outfit",
    "identity_lock": true,
    "origin": "root"
  },
  "environment": {
    "type": "indoor",
    "space_size_m": {
      "width": 10,
      "depth": 10
    },
    "lighting": "soft studio lighting",
    "background": "minimal white studio"
  },
  "camera": {
    "position_m": {
      "x": 0,
      "y": 1.5,
      "z": 6
    },
    "look_at_m": {
      "x": 0,
      "y": 1.2,
      "z": 0
    },
    "fov_deg": 45,
    "movement": "static"
  },
  "composition_timeline": {
    "sample_rate_hz": 10,
    "coordinate_space": "normalized_camera_frame",
    "objects": [
      {
        "actor_id": "woman_01",
        "samples": [
          {
            "time_s": 0,
            "center_norm": { "x": 0.72, "y": 0.52 },
            "bbox_norm": { "x": 0.61, "y": 0.08, "width": 0.22, "height": 0.82 },
            "visible_percent": 100,
            "depth_layer": "foreground"
          },
          {
            "time_s": 4,
            "center_norm": { "x": 0.72, "y": 0.52 },
            "bbox_norm": { "x": 0.61, "y": 0.08, "width": 0.22, "height": 0.82 },
            "visible_percent": 100,
            "depth_layer": "foreground"
          },
          {
            "time_s": 5,
            "center_norm": { "x": 0.3, "y": 0.52 },
            "bbox_norm": { "x": 0.19, "y": 0.08, "width": 0.22, "height": 0.82 },
            "visible_percent": 100,
            "depth_layer": "foreground"
          },
          {
            "time_s": 5.5,
            "center_norm": { "x": 0.04, "y": 0.52 },
            "bbox_norm": { "x": -0.07, "y": 0.08, "width": 0.22, "height": 0.82 },
            "visible_percent": 68,
            "depth_layer": "foreground"
          },
          {
            "time_s": 6,
            "center_norm": { "x": -0.12, "y": 0.52 },
            "bbox_norm": { "x": -0.23, "y": 0.08, "width": 0.22, "height": 0.82 },
            "visible_percent": 0,
            "depth_layer": "foreground"
          }
        ]
      }
    ]
  },
  "scenes": [
    {
      "scene_id": "scene_01_turn_40_deg",
      "type": "turn",
      "time": {
        "start_s": 0,
        "end_s": 0.5,
        "duration_s": 0.5,
        "start_frame": 0,
        "end_frame": 12
      },
      "motion": {
        "position_start_m": { "x": 0, "y": 0, "z": 0 },
        "position_end_m": { "x": 0, "y": 0, "z": 0 },
        "yaw_start_deg": 0,
        "yaw_end_deg": 40,
        "pitch_start_deg": 0,
        "pitch_end_deg": 0,
        "speed_mps": 0
      },
      "instruction": "rotate in place 40 degrees, then settle into the pause"
    },
    {
      "scene_id": "scene_02_hold_40_deg",
      "type": "hold",
      "time": {
        "start_s": 0.5,
        "end_s": 1,
        "duration_s": 0.5,
        "start_frame": 12,
        "end_frame": 24
      },
      "motion": {
        "position_start_m": { "x": 0, "y": 0, "z": 0 },
        "position_end_m": { "x": 0, "y": 0, "z": 0 },
        "yaw_start_deg": 40,
        "yaw_end_deg": 40,
        "pitch_start_deg": 0,
        "pitch_end_deg": 0,
        "speed_mps": 0
      },
      "instruction": "hold the 40-degree pose for 0.5 seconds"
    },
    {
      "scene_id": "scene_02_turn_80_deg",
      "type": "turn",
      "time": {
        "start_s": 1,
        "end_s": 1.5,
        "duration_s": 0.5,
        "start_frame": 24,
        "end_frame": 36
      },
      "motion": {
        "position_start_m": { "x": 0, "y": 0, "z": 0 },
        "position_end_m": { "x": 0, "y": 0, "z": 0 },
        "yaw_start_deg": 40,
        "yaw_end_deg": 80,
        "pitch_start_deg": 0,
        "pitch_end_deg": 0,
        "speed_mps": 0
      },
      "instruction": "continue the same-direction in-place rotation to 80 degrees"
    },
    {
      "scene_id": "scene_04_hold_80_deg",
      "type": "hold",
      "time": {
        "start_s": 1.5,
        "end_s": 2,
        "duration_s": 0.5,
        "start_frame": 36,
        "end_frame": 48
      },
      "motion": {
        "position_start_m": { "x": 0, "y": 0, "z": 0 },
        "position_end_m": { "x": 0, "y": 0, "z": 0 },
        "yaw_start_deg": 80,
        "yaw_end_deg": 80,
        "pitch_start_deg": 0,
        "pitch_end_deg": 0,
        "speed_mps": 0
      },
      "instruction": "hold the 80-degree pose for 0.5 seconds"
    },
    {
      "scene_id": "scene_03_turn_back_to_camera",
      "type": "turn",
      "time": {
        "start_s": 2,
        "end_s": 3,
        "duration_s": 1,
        "start_frame": 48,
        "end_frame": 72
      },
      "motion": {
        "position_start_m": { "x": 0, "y": 0, "z": 0 },
        "position_end_m": { "x": 0, "y": 0, "z": 0 },
        "yaw_start_deg": 80,
        "yaw_end_deg": 0,
        "pitch_start_deg": 0,
        "pitch_end_deg": 0,
        "speed_mps": 0
      },
      "instruction": "rotate back toward the camera"
    },
    {
      "scene_id": "scene_06_hold_front",
      "type": "hold",
      "time": {
        "start_s": 3,
        "end_s": 4,
        "duration_s": 1,
        "start_frame": 72,
        "end_frame": 96
      },
      "motion": {
        "position_start_m": { "x": 0, "y": 0, "z": 0 },
        "position_end_m": { "x": 0, "y": 0, "z": 0 },
        "yaw_start_deg": 0,
        "yaw_end_deg": 0,
        "pitch_start_deg": 0,
        "pitch_end_deg": 0,
        "speed_mps": 0
      },
      "instruction": "pause facing camera for one full second"
    },
    {
      "scene_id": "scene_07_walk_exit_left",
      "type": "translate",
      "time": {
        "start_s": 4,
        "end_s": 6,
        "duration_s": 2,
        "start_frame": 96,
        "end_frame": 144
      },
      "motion": {
        "position_start_m": { "x": 0, "y": 0, "z": 0 },
        "position_end_m": { "x": -3, "y": 0, "z": 0 },
        "yaw_start_deg": -90,
        "yaw_end_deg": -90,
        "pitch_start_deg": 0,
        "pitch_end_deg": 0,
        "speed_mps": 1.5
      },
      "instruction": "walk confidently to screen-left and exit frame"
    }
  ],
  "turn_scene_ids": [
    "scene_01_turn_40_deg",
    "scene_02_turn_80_deg",
    "scene_03_turn_back_to_camera"
  ],
  "continuity_rules": [
    "Keep the same actor identity, outfit, body proportions, and studio background throughout the shot.",
    "Keep the camera static unless the camera_timeline explicitly changes it.",
    "Preserve the actor's measured height and full-body framing until the exit-left segment.",
    "Do not teleport the actor between timed samples."
  ],
  "negative_prompt": [
    "no extra people",
    "no camera shake",
    "no outfit changes",
    "no body distortion",
    "no sudden background changes",
    "no object popping"
  ],
  "model_adapter": {
    "target": "model_agnostic_ai_video",
    "strictness": "high",
    "prompt_style": "precise director instructions plus structured JSON"
  },
  "natural_language_prompt_guidelines": [
    "Use the attached MotionControl JSON as the source of truth.",
    "If the natural language prompt and JSON disagree, the JSON wins.",
    "Keep one camera setup, one primary subject action, and one lighting recipe per shot block.",
    "Use clear, direct language for subject action, camera motion, timing, direction, and speed.",
    "Describe motion in beats with exact seconds, pauses, counts, and final-frame outcomes.",
    "Explain normalized camera-frame ratios as composition targets instead of raw pixels.",
    "Separate visual style, lighting, and palette from movement instructions.",
    "Use negative prompt language as a compact exclusion list when exporting to models that support it."
  ],
  "natural_language_prompt": "Create a 6-second AI video in a minimal white studio. A woman wearing a blue and white outfit stands full-body in frame. Keep her identity, clothing, body proportions, and background consistent throughout the shot. From 0.0 to 0.5 seconds, she rotates in place 40 degrees to her right. From 0.5 to 1.0 seconds, she holds that pose. From 1.0 to 1.5 seconds, she continues rotating to 80 degrees. From 1.5 to 2.0 seconds, she holds. From 2.0 to 3.0 seconds, she rotates back toward the camera. From 3.0 to 4.0 seconds, she pauses facing the camera. From 4.0 to 6.0 seconds, she walks confidently toward screen-left and exits the frame. Use a static camera facing the actor. Keep the actor full-body visible at the beginning. During the final walk, her screen position moves from the right side of the frame to off-screen left. Do not add extra people, change clothing, distort the body, or introduce sudden camera movement.",
  "notes": [
    "The visible overlay remains prompt-derived and is not changed by this file.",
    "The composition_timeline uses normalized camera-frame ratios so the same control data can apply to multiple output resolutions.",
    "Frame numbers use 24 fps and treat end_frame as the boundary frame for the segment.",
    "The final encoded video duration is 6.041667 seconds; motion control ends at 6.0 seconds so the last frame can settle."
  ]
}
