{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/aicontentdrop-com/json-schema/aicontentdrop-com-drop-brief-schema.json",
  "title": "DropBrief",
  "description": "What is being made, for what, how long, on which recipe. Every field is optional: a brief is filled in as it is settled. `reference_class` and `reference_facts` are settings, not questions: send the `facts` POST /v1/engine/analyze answered to skip the drop's own reading step, which otherwise copies that reading, or waits for it while a long clip is still being read; send a class to choose it yourself.",
  "x-generated": "2026-11-01",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/aicontentdrop-com-openapi.json#/components/schemas/DropBrief",
  "type": "object",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "image",
        "video"
      ]
    },
    "goal": {
      "type": "string",
      "enum": [
        "viral",
        "sales",
        "social"
      ]
    },
    "duration_s": {
      "type": "integer",
      "enum": [
        5,
        10,
        15,
        20,
        30,
        60
      ],
      "description": "Running time in seconds. A still image has none."
    },
    "lane": {
      "type": "string",
      "enum": [
        "cinematic",
        "ugc",
        "marketing",
        "drama",
        "recreate"
      ],
      "description": "Which recipe to follow. GET /v1/engine/lanes says which ones are open for this account; a closed one is refused with its reason."
    },
    "reference": {
      "type": "object",
      "description": "Where the material comes from. `upload` carries its url (for a reference read by POST /v1/engine/analyze, the `reference_url` it answered) and `template` its template id; a reference missing either is not one.",
      "required": [
        "kind"
      ],
      "properties": {
        "kind": {
          "type": "string",
          "enum": [
            "none",
            "upload",
            "template"
          ]
        },
        "url": {
          "type": "string",
          "format": "uri"
        },
        "template_id": {
          "type": "string"
        }
      }
    },
    "model": {
      "type": "object",
      "description": "A pinned model. Absent means the recipe's own default, revealed before anything is charged."
    },
    "reference_class": {
      "$ref": "#/$defs/ReferenceClass"
    },
    "reference_facts": {
      "$ref": "#/$defs/ReferenceFacts"
    }
  },
  "$defs": {
    "ReferenceClass": {
      "type": "string",
      "description": "What kind of material a reference is, as the reading judged it or as the caller set it: `cel_anime` (cel anime), `western_animation` (Western animation), `3d_animation` (3D animation), `live_action` (live action), `ugc` (a creator video), `product` (a product shot), `unknown` (not sure yet). It steers how a drop directs and reviews the work.",
      "enum": [
        "cel_anime",
        "western_animation",
        "3d_animation",
        "live_action",
        "ugc",
        "product",
        "unknown"
      ]
    },
    "ReferenceFacts": {
      "type": "object",
      "description": "What was seen in a reference, in words only: no frame, thumbnail or link to the media ever appears here. An answer always carries every list, empty when nothing of that kind was seen.",
      "required": [
        "summary",
        "look",
        "frameCount"
      ],
      "properties": {
        "summary": {
          "type": "string",
          "maxLength": 600,
          "description": "The reference in a few sentences."
        },
        "shots": {
          "type": "array",
          "maxItems": 60,
          "default": [],
          "description": "One entry per shot, in order.",
          "items": {
            "$ref": "#/$defs/ReferenceShot"
          }
        },
        "cast": {
          "type": "array",
          "maxItems": 12,
          "default": [],
          "description": "The people and characters in it.",
          "items": {
            "type": "object",
            "required": [
              "key",
              "role",
              "look"
            ],
            "properties": {
              "key": {
                "type": "string",
                "maxLength": 40,
                "description": "A short handle for this person or character, the same in every shot."
              },
              "role": {
                "type": "string",
                "maxLength": 120
              },
              "look": {
                "type": "string",
                "maxLength": 400,
                "description": "How they look, in words."
              }
            }
          }
        },
        "look": {
          "type": "object",
          "required": [
            "register"
          ],
          "description": "The visual style.",
          "properties": {
            "register": {
              "type": "string",
              "maxLength": 300,
              "description": "The style in a phrase."
            },
            "palette": {
              "type": "array",
              "maxItems": 12,
              "default": [],
              "items": {
                "type": "string",
                "maxLength": 40
              }
            },
            "notes": {
              "type": "string",
              "maxLength": 400
            }
          }
        },
        "lines": {
          "type": "array",
          "maxItems": 40,
          "default": [],
          "description": "Dialogue or on-screen words heard or read, in order.",
          "items": {
            "type": "string",
            "maxLength": 200
          }
        },
        "durationSeconds": {
          "type": "number",
          "minimum": 0
        },
        "frameCount": {
          "type": "integer",
          "minimum": 0,
          "description": "How many frames were read to write this."
        }
      }
    },
    "ReferenceShot": {
      "type": "object",
      "description": "One shot of a reference, in plain words.",
      "required": [
        "index",
        "size",
        "camera",
        "action"
      ],
      "properties": {
        "index": {
          "type": "integer",
          "minimum": 0
        },
        "size": {
          "type": "string",
          "maxLength": 40,
          "description": "The shot size: close-up, medium, wide and so on."
        },
        "camera": {
          "type": "string",
          "maxLength": 120,
          "description": "What the camera does: static, slow push-in, handheld follow and so on."
        },
        "action": {
          "type": "string",
          "maxLength": 400,
          "description": "What happens in the shot."
        },
        "beatTags": {
          "type": "array",
          "maxItems": 4,
          "default": [],
          "description": "The kinds of beat the shot carries.",
          "items": {
            "type": "string",
            "enum": [
              "action",
              "camera",
              "vfx",
              "dialogue",
              "product",
              "emotion",
              "transition",
              "performance"
            ]
          }
        },
        "durationSeconds": {
          "type": "number",
          "minimum": 0
        }
      }
    }
  }
}