{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://theamateur.co.uk/schemas/dpl/dpl.shoot-pack-1.schema.json",
  "title": "DPL shoot-day pack (dpl.shoot-pack/1)",
  "description": "What `dpl shoot-pack <plan> [--day D] --format json` writes: the call sheet, a card for each setup (framing, lens, move and support, who stands where, the action, the lines with speaker and listener, the eyeline, what to match from the shot before, the takes and why the shot exists), a continuity sheet for each scene, sound notes, and the shots to get against the shots to get if there is time. Every member listed here is always written, or left out when null; nothing else appears.",
  "$comment": "A plan with no schedule has `timed` false: the cards run scene by scene and carry no clock times (the `notice` says so). `must_get` holds the shots whose priority is must; `if_time` the should shots, then the nice ones.",
  "type": "object",
  "properties": {
    "format": {
      "type": "string",
      "const": "dpl.shoot-pack/1"
    },
    "work_id": {
      "type": "string"
    },
    "title": {
      "type": "string"
    },
    "plan_hash": {
      "type": "string",
      "pattern": "^[0-9a-f]{64}$"
    },
    "rules_version": {
      "type": "string"
    },
    "timed": {
      "type": "boolean"
    },
    "notice": {
      "type": [
        "string",
        "null"
      ]
    },
    "day": {
      "type": [
        "string",
        "null"
      ]
    },
    "call_sheet": {
      "$ref": "#/$defs/CallSheetDocument"
    },
    "cards": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/SetupCard"
      }
    },
    "continuity": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/ContinuitySheet"
      }
    },
    "sound": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/SoundNote"
      }
    },
    "must_get": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/GetItem"
      }
    },
    "if_time": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/GetItem"
      }
    }
  },
  "required": [
    "format",
    "work_id",
    "title",
    "plan_hash",
    "rules_version",
    "timed",
    "call_sheet",
    "cards",
    "continuity",
    "sound",
    "must_get",
    "if_time"
  ],
  "additionalProperties": false,
  "$defs": {
    "CallSheetDay": {
      "type": "object",
      "description": "One shoot day.",
      "properties": {
        "id": {
          "type": "string"
        },
        "date": {
          "type": [
            "string",
            "null"
          ]
        },
        "weekday": {
          "type": [
            "string",
            "null"
          ]
        },
        "start": {
          "type": "string"
        },
        "end": {
          "type": "string"
        },
        "totals": {
          "$ref": "#/$defs/DayTotals"
        },
        "locations": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/PlaceNote"
          }
        },
        "calls": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/PersonCall"
          }
        },
        "timeline": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/TimelineEntry"
          }
        },
        "setups": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/SetupRun"
          }
        },
        "kit": {
          "$ref": "#/$defs/KitNeeded"
        },
        "light": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/LightWindow"
          }
        },
        "tasks": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/TimelineEntry"
          }
        },
        "moves": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/TimelineEntry"
          }
        },
        "notes": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "open_findings": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/OpenFeasibility"
          }
        }
      },
      "required": [
        "id",
        "start",
        "end",
        "totals",
        "locations",
        "calls",
        "timeline",
        "setups",
        "kit",
        "light",
        "tasks",
        "moves",
        "notes",
        "open_findings"
      ],
      "additionalProperties": false
    },
    "CallSheetDocument": {
      "type": "object",
      "description": "The call sheet (dpl call-sheet, dpl.call-sheet/1): per shoot day, the date and window, the places and how to get in, who is called when, the setups in order with clock times, the kit, the light, the room-tone and voiceover tasks, the moves, the spare time and any open feasibility finding.",
      "properties": {
        "format": {
          "type": "string",
          "const": "dpl.call-sheet/1"
        },
        "work_id": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "plan_hash": {
          "type": "string",
          "pattern": "^[0-9a-f]{64}$"
        },
        "rules_version": {
          "type": "string"
        },
        "profile": {
          "type": "string"
        },
        "timed": {
          "type": "boolean"
        },
        "notice": {
          "type": [
            "string",
            "null"
          ]
        },
        "days": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/CallSheetDay"
          }
        },
        "scenes": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/UntimedScene"
          }
        },
        "unscheduled_shots": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "open_findings": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/OpenFeasibility"
          }
        }
      },
      "required": [
        "format",
        "work_id",
        "title",
        "plan_hash",
        "rules_version",
        "profile",
        "timed",
        "days",
        "scenes",
        "unscheduled_shots",
        "open_findings"
      ],
      "additionalProperties": false
    },
    "CardLine": {
      "type": "object",
      "description": "A spoken line inside a shot: who says it to whom, and whether each is in the picture.",
      "properties": {
        "id": {
          "type": "string"
        },
        "speaker": {
          "type": "string"
        },
        "to": {
          "type": [
            "string",
            "null"
          ]
        },
        "text": {
          "type": [
            "string",
            "null"
          ]
        },
        "turn": {
          "type": "boolean"
        },
        "at": {
          "type": "string"
        },
        "speaker_in_frame": {
          "type": "boolean"
        },
        "listener_in_frame": {
          "type": "boolean"
        }
      },
      "required": [
        "id",
        "speaker",
        "turn",
        "at",
        "speaker_in_frame",
        "listener_in_frame"
      ],
      "additionalProperties": false
    },
    "ChangeNote": {
      "type": "object",
      "properties": {
        "prop": {
          "type": "string"
        },
        "from": {
          "type": "string"
        },
        "to": {
          "type": "string"
        },
        "at": {
          "type": "string"
        },
        "shown": {
          "type": "boolean"
        }
      },
      "required": [
        "prop",
        "from",
        "to",
        "at",
        "shown"
      ],
      "additionalProperties": false
    },
    "ClockSpan": {
      "type": "object",
      "description": "A span of clock time (\"09:30\" to \"11:00\").",
      "properties": {
        "from": {
          "type": "string",
          "pattern": "^[0-9]{2}:[0-9]{2}$",
          "description": "Clock time, 24-hour HH:MM."
        },
        "to": {
          "type": "string",
          "pattern": "^[0-9]{2}:[0-9]{2}$",
          "description": "Clock time, 24-hour HH:MM."
        }
      },
      "required": [
        "from",
        "to"
      ],
      "additionalProperties": false
    },
    "ContinuityCharacter": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "appearance": {
          "type": [
            "string",
            "null"
          ]
        },
        "costume": {
          "type": [
            "string",
            "null"
          ]
        },
        "performance": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "required": [
        "id",
        "description"
      ],
      "additionalProperties": false
    },
    "ContinuityNote": {
      "type": "object",
      "properties": {
        "visual_state": {
          "type": [
            "string",
            "null"
          ]
        },
        "prop_states": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/PropStateNote"
          }
        },
        "changes": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/ChangeNote"
          }
        },
        "rules": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/RuleNote"
          }
        },
        "must_not": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "match": {
          "anyOf": [
            {
              "$ref": "#/$defs/MatchPrevious"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "prop_states",
        "changes",
        "rules",
        "must_not"
      ],
      "additionalProperties": false
    },
    "ContinuityProp": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "appearance": {
          "type": [
            "string",
            "null"
          ]
        },
        "states": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/PropStateAt"
          }
        }
      },
      "required": [
        "id",
        "description",
        "states"
      ],
      "additionalProperties": false
    },
    "ContinuitySheet": {
      "type": "object",
      "description": "A scene's continuity sheet, as a script supervisor keeps it: who is in it and how they look, the props and their states, what changes and which shots cover it, the lines and which shots cover them.",
      "properties": {
        "scene": {
          "type": "string"
        },
        "purpose": {
          "type": "string"
        },
        "location": {
          "type": [
            "string",
            "null"
          ]
        },
        "cut_start": {
          "type": "string"
        },
        "cut_end": {
          "type": "string"
        },
        "axis": {
          "type": [
            "string",
            "null"
          ]
        },
        "travel": {
          "type": [
            "string",
            "null"
          ]
        },
        "characters": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/ContinuityCharacter"
          }
        },
        "props": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/ContinuityProp"
          }
        },
        "changes": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/CoveredChange"
          }
        },
        "rules": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/RuleNote"
          }
        },
        "lines": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/CoveredLine"
          }
        },
        "setups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "required": [
        "scene",
        "purpose",
        "cut_start",
        "cut_end",
        "characters",
        "props",
        "changes",
        "rules",
        "lines",
        "setups"
      ],
      "additionalProperties": false
    },
    "CoveredChange": {
      "type": "object",
      "properties": {
        "prop": {
          "type": "string"
        },
        "from": {
          "type": "string"
        },
        "to": {
          "type": "string"
        },
        "at": {
          "type": "string"
        },
        "shown": {
          "type": "boolean"
        },
        "covered_by": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "required": [
        "prop",
        "from",
        "to",
        "at",
        "shown",
        "covered_by"
      ],
      "additionalProperties": false
    },
    "CoveredLine": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "speaker": {
          "type": "string"
        },
        "to": {
          "type": [
            "string",
            "null"
          ]
        },
        "text": {
          "type": [
            "string",
            "null"
          ]
        },
        "turn": {
          "type": "boolean"
        },
        "at": {
          "type": "string"
        },
        "covered_by": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "required": [
        "id",
        "speaker",
        "turn",
        "at",
        "covered_by"
      ],
      "additionalProperties": false
    },
    "DayTotals": {
      "type": "object",
      "description": "How the day adds up, in minutes: the profile's own figures.",
      "properties": {
        "window_minutes": {
          "type": "number"
        },
        "preparation_minutes": {
          "type": "number"
        },
        "setup_minutes": {
          "type": "number"
        },
        "filming_minutes": {
          "type": "number"
        },
        "move_minutes": {
          "type": "number"
        },
        "wait_minutes": {
          "type": "number"
        },
        "work_minutes": {
          "type": "number"
        },
        "spare_minutes": {
          "type": "number"
        },
        "committed_minutes": {
          "type": "number"
        },
        "overrun_minutes": {
          "type": "integer"
        },
        "window_left_minutes": {
          "type": "number"
        }
      },
      "required": [
        "window_minutes",
        "preparation_minutes",
        "setup_minutes",
        "filming_minutes",
        "move_minutes",
        "wait_minutes",
        "work_minutes",
        "spare_minutes",
        "committed_minutes",
        "overrun_minutes",
        "window_left_minutes"
      ],
      "additionalProperties": false
    },
    "EyelineNote": {
      "type": "object",
      "description": "Where one subject looks. side is the side of the frame they look toward; at is who or what they look at.",
      "properties": {
        "subject": {
          "type": "string"
        },
        "looks": {
          "type": "string"
        },
        "at": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "required": [
        "subject",
        "looks"
      ],
      "additionalProperties": false
    },
    "FramingNote": {
      "type": "object",
      "description": "How the shot is framed and moved.",
      "properties": {
        "size": {
          "type": "string"
        },
        "lens_multiplier": {
          "type": [
            "number",
            "null"
          ]
        },
        "focal_mm": {
          "type": [
            "number",
            "null"
          ]
        },
        "lens": {
          "type": [
            "string",
            "null"
          ]
        },
        "angle": {
          "type": [
            "string",
            "null"
          ]
        },
        "perspective": {
          "type": [
            "string",
            "null"
          ]
        },
        "orientation": {
          "type": [
            "string",
            "null"
          ]
        },
        "aspect": {
          "type": [
            "string",
            "null"
          ]
        },
        "move": {
          "type": "string"
        },
        "support": {
          "type": [
            "string",
            "null"
          ]
        },
        "device": {
          "type": [
            "string",
            "null"
          ]
        },
        "frame_rate": {
          "type": [
            "number",
            "null"
          ]
        },
        "feel": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "required": [
        "size",
        "move"
      ],
      "additionalProperties": false
    },
    "GetItem": {
      "type": "object",
      "description": "A shot on the \"must get\" or \"if time\" list.",
      "properties": {
        "shot": {
          "type": "string"
        },
        "setup": {
          "type": "string"
        },
        "scene": {
          "type": "string"
        },
        "priority": {
          "type": "string",
          "enum": [
            "must",
            "should",
            "nice"
          ]
        },
        "role": {
          "type": [
            "string",
            "null"
          ]
        },
        "purpose": {
          "type": "string"
        },
        "day": {
          "type": [
            "string",
            "null"
          ]
        },
        "start": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "required": [
        "shot",
        "setup",
        "scene",
        "priority",
        "purpose"
      ],
      "additionalProperties": false
    },
    "KitNeeded": {
      "type": "object",
      "description": "What to bring: the kit the day's shots use.",
      "properties": {
        "cameras": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "lens_multipliers": {
          "type": "array",
          "items": {
            "type": "number"
          }
        },
        "focal_mm": {
          "type": "array",
          "items": {
            "type": "number"
          }
        },
        "supports": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "sound": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "lights": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "frame_rates": {
          "type": "array",
          "items": {
            "type": "number"
          }
        }
      },
      "required": [
        "cameras",
        "lens_multipliers",
        "focal_mm",
        "supports",
        "sound",
        "lights",
        "frame_rates"
      ],
      "additionalProperties": false
    },
    "LightWindow": {
      "type": "object",
      "description": "The light a place gives on the day and how the filming sits in it.",
      "properties": {
        "location": {
          "type": "string"
        },
        "windows": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/ClockSpan"
          }
        },
        "sun": {
          "type": [
            "string",
            "null"
          ]
        },
        "first_shot": {
          "type": "string"
        },
        "last_shot": {
          "type": "string"
        },
        "start": {
          "type": "string"
        },
        "end": {
          "type": "string"
        },
        "minutes_before": {
          "type": [
            "integer",
            "null"
          ]
        },
        "minutes_after": {
          "type": [
            "integer",
            "null"
          ]
        },
        "inside": {
          "type": "boolean"
        }
      },
      "required": [
        "location",
        "windows",
        "first_shot",
        "last_shot",
        "start",
        "end",
        "inside"
      ],
      "additionalProperties": false
    },
    "MatchPrevious": {
      "type": "object",
      "description": "What the previous shot of the scene left behind, for this one to match.",
      "properties": {
        "shot": {
          "type": "string"
        },
        "setup": {
          "type": [
            "string",
            "null"
          ]
        },
        "props": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/PropStateNote"
          }
        },
        "staging": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/StagingNote"
          }
        }
      },
      "required": [
        "shot",
        "props",
        "staging"
      ],
      "additionalProperties": false
    },
    "OpenFeasibility": {
      "type": "object",
      "description": "An open production-feasibility finding (people, light, kit, time, delivery, the coverage recipes) the crew should know about before the day.",
      "properties": {
        "id": {
          "type": "string",
          "pattern": "^f-[0-9a-f]{12}$"
        },
        "code": {
          "type": "string",
          "pattern": "^RDY-[A-Z0-9-]+$"
        },
        "severity": {
          "type": "string"
        },
        "scene": {
          "type": [
            "string",
            "null"
          ]
        },
        "shot": {
          "type": [
            "string",
            "null"
          ]
        },
        "message": {
          "type": "string"
        }
      },
      "required": [
        "id",
        "code",
        "severity",
        "message"
      ],
      "additionalProperties": false
    },
    "PersonCall": {
      "type": "object",
      "description": "When one person is wanted on a day, in which roles, and why then.",
      "properties": {
        "id": {
          "type": "string"
        },
        "name": {
          "type": [
            "string",
            "null"
          ]
        },
        "roles": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "character": {
          "type": [
            "string",
            "null"
          ]
        },
        "call": {
          "type": "string"
        },
        "wrap": {
          "type": "string"
        },
        "first_for": {
          "type": "string"
        },
        "available": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/ClockSpan"
          }
        },
        "note": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "required": [
        "id",
        "roles",
        "call",
        "wrap",
        "first_for",
        "available"
      ],
      "additionalProperties": false
    },
    "PlaceNote": {
      "type": "object",
      "description": "A place the day goes to, with the notes a crew needs to get in and work there.",
      "properties": {
        "id": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "setting": {
          "type": [
            "string",
            "null"
          ]
        },
        "access": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/ClockSpan"
          }
        },
        "access_note": {
          "type": "string"
        },
        "acoustics": {
          "type": [
            "string",
            "null"
          ]
        },
        "quieter_position": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "usable_light": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/ClockSpan"
          }
        },
        "sun": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "required": [
        "id",
        "description",
        "access",
        "access_note",
        "usable_light"
      ],
      "additionalProperties": false
    },
    "PropStateAt": {
      "type": "object",
      "properties": {
        "shot": {
          "type": "string"
        },
        "state": {
          "type": "string"
        }
      },
      "required": [
        "shot",
        "state"
      ],
      "additionalProperties": false
    },
    "PropStateNote": {
      "type": "object",
      "properties": {
        "prop": {
          "type": "string"
        },
        "state": {
          "type": "string"
        }
      },
      "required": [
        "prop",
        "state"
      ],
      "additionalProperties": false
    },
    "RoomToneNote": {
      "type": "object",
      "properties": {
        "planned": {
          "type": "boolean"
        },
        "task": {
          "type": [
            "string",
            "null"
          ]
        },
        "minutes": {
          "type": [
            "number",
            "null"
          ]
        },
        "start": {
          "type": [
            "string",
            "null"
          ]
        },
        "note": {
          "type": "string"
        }
      },
      "required": [
        "planned",
        "note"
      ],
      "additionalProperties": false
    },
    "RuleNote": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "rule": {
          "type": "string"
        }
      },
      "required": [
        "id",
        "rule"
      ],
      "additionalProperties": false
    },
    "SetupCard": {
      "type": "object",
      "description": "A card for one camera setup: where and when, what it is made of, and the shots filmed from it.",
      "properties": {
        "setup": {
          "type": "string"
        },
        "order": {
          "type": "integer"
        },
        "day": {
          "type": [
            "string",
            "null"
          ]
        },
        "start": {
          "type": [
            "string",
            "null"
          ]
        },
        "end": {
          "type": [
            "string",
            "null"
          ]
        },
        "location": {
          "type": [
            "string",
            "null"
          ]
        },
        "scene": {
          "type": "string"
        },
        "device": {
          "type": [
            "string",
            "null"
          ]
        },
        "support": {
          "type": [
            "string",
            "null"
          ]
        },
        "lens": {
          "type": "string"
        },
        "people": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "speech": {
          "type": "boolean"
        },
        "fixed_start": {
          "type": [
            "string",
            "null"
          ]
        },
        "shots": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/ShotCard"
          }
        }
      },
      "required": [
        "setup",
        "order",
        "scene",
        "lens",
        "people",
        "speech",
        "shots"
      ],
      "additionalProperties": false
    },
    "SetupRun": {
      "type": "object",
      "description": "A camera position and the shots filmed from it, in the order the day films them.",
      "properties": {
        "setup": {
          "type": "string"
        },
        "start": {
          "type": "string"
        },
        "end": {
          "type": "string"
        },
        "location": {
          "type": [
            "string",
            "null"
          ]
        },
        "shots": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "device": {
          "type": [
            "string",
            "null"
          ]
        },
        "support": {
          "type": [
            "string",
            "null"
          ]
        },
        "lens": {
          "type": "string"
        },
        "people": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "speech": {
          "type": "boolean"
        },
        "fixed_start": {
          "type": [
            "string",
            "null"
          ]
        },
        "with_shot": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "required": [
        "setup",
        "start",
        "end",
        "shots",
        "lens",
        "people",
        "speech"
      ],
      "additionalProperties": false
    },
    "ShotCard": {
      "type": "object",
      "description": "One shot on a card: framing, angle, move and support, who stands where, the action, the lines, the eyeline, what to match, the takes and why the shot exists. priority is must, should or nice; a must goes on the \"must get\" list, the others on the \"if time\" list.",
      "properties": {
        "id": {
          "type": "string"
        },
        "scene": {
          "type": "string"
        },
        "priority": {
          "type": "string",
          "enum": [
            "must",
            "should",
            "nice"
          ]
        },
        "role": {
          "type": [
            "string",
            "null"
          ]
        },
        "purpose": {
          "type": "string"
        },
        "subject": {
          "type": "string"
        },
        "cut_start": {
          "type": "string"
        },
        "cut_end": {
          "type": "string"
        },
        "shot_seconds": {
          "type": "number"
        },
        "start": {
          "type": [
            "string",
            "null"
          ]
        },
        "end": {
          "type": [
            "string",
            "null"
          ]
        },
        "framing": {
          "$ref": "#/$defs/FramingNote"
        },
        "staging": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/StagingNote"
          }
        },
        "action": {
          "type": [
            "string",
            "null"
          ]
        },
        "camera_note": {
          "type": [
            "string",
            "null"
          ]
        },
        "lines": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/CardLine"
          }
        },
        "eyeline": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/EyelineNote"
          }
        },
        "eyeline_note": {
          "type": [
            "string",
            "null"
          ]
        },
        "continuity": {
          "$ref": "#/$defs/ContinuityNote"
        },
        "takes": {
          "type": [
            "integer",
            "null"
          ]
        },
        "record_seconds": {
          "type": [
            "number",
            "null"
          ]
        },
        "once": {
          "type": "boolean"
        },
        "speech": {
          "type": "boolean"
        },
        "with_shot": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "required": [
        "id",
        "scene",
        "priority",
        "purpose",
        "subject",
        "cut_start",
        "cut_end",
        "shot_seconds",
        "framing",
        "staging",
        "lines",
        "eyeline",
        "continuity",
        "once",
        "speech"
      ],
      "additionalProperties": false
    },
    "SoundNote": {
      "type": "object",
      "description": "Sound for one scene at its place: what to record with, where it is quiet, and the room tone.",
      "properties": {
        "scene": {
          "type": "string"
        },
        "location": {
          "type": [
            "string",
            "null"
          ]
        },
        "acoustics": {
          "type": [
            "string",
            "null"
          ]
        },
        "quieter_position": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "speech": {
          "type": "boolean"
        },
        "speech_setups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "mic": {
          "type": "string"
        },
        "quiet": {
          "type": "string"
        },
        "room_tone": {
          "$ref": "#/$defs/RoomToneNote"
        },
        "intent": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "voiceover_tasks": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "required": [
        "scene",
        "speech",
        "speech_setups",
        "mic",
        "quiet",
        "room_tone",
        "intent",
        "voiceover_tasks"
      ],
      "additionalProperties": false
    },
    "StagingNote": {
      "type": "object",
      "description": "Where a subject stands in frame and which way they look.",
      "properties": {
        "subject": {
          "type": "string"
        },
        "side": {
          "type": "string"
        },
        "facing": {
          "type": "string"
        },
        "moving": {
          "type": [
            "string",
            "null"
          ]
        },
        "actions": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "required": [
        "subject",
        "side",
        "facing",
        "actions"
      ],
      "additionalProperties": false
    },
    "TimelineEntry": {
      "type": "object",
      "description": "One stretch of the day. kind is preparation, move, wait, location_setup, sound_check, shot or task.",
      "properties": {
        "kind": {
          "type": "string",
          "enum": [
            "preparation",
            "move",
            "wait",
            "location_setup",
            "sound_check",
            "shot",
            "task"
          ]
        },
        "start": {
          "type": "string"
        },
        "end": {
          "type": "string"
        },
        "minutes": {
          "type": "number"
        },
        "location": {
          "type": [
            "string",
            "null"
          ]
        },
        "setup": {
          "type": [
            "string",
            "null"
          ]
        },
        "shots": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": "string"
          }
        },
        "task": {
          "type": [
            "string",
            "null"
          ]
        },
        "note": {
          "type": "string"
        }
      },
      "required": [
        "kind",
        "start",
        "end",
        "minutes",
        "note"
      ],
      "additionalProperties": false
    },
    "UntimedScene": {
      "type": "object",
      "description": "A scene of a plan that has no schedule: what is needed, with no clock time.",
      "properties": {
        "id": {
          "type": "string"
        },
        "purpose": {
          "type": "string"
        },
        "location": {
          "type": [
            "string",
            "null"
          ]
        },
        "place": {
          "anyOf": [
            {
              "$ref": "#/$defs/PlaceNote"
            },
            {
              "type": "null"
            }
          ]
        },
        "people": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "setups": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/UntimedSetup"
          }
        }
      },
      "required": [
        "id",
        "purpose",
        "people",
        "setups"
      ],
      "additionalProperties": false
    },
    "UntimedSetup": {
      "type": "object",
      "properties": {
        "setup": {
          "type": "string"
        },
        "shots": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "device": {
          "type": [
            "string",
            "null"
          ]
        },
        "support": {
          "type": [
            "string",
            "null"
          ]
        },
        "lens": {
          "type": "string"
        },
        "speech": {
          "type": "boolean"
        }
      },
      "required": [
        "setup",
        "shots",
        "lens",
        "speech"
      ],
      "additionalProperties": false
    }
  }
}
