Skip to main content
Glama

Revise Brief

update_brief

Revise shoot looks, direction or model settings, or assign a saved Automation by ID. Accepts no operation definitions; use the separately published plan_shoot tools to change individual steps. Returns the revised plan and quote. No media generation, credit charge or reusable-library write.

Input Schema

NameRequiredDescriptionDefault
looksYesThe complete new look list (not a diff); an unchanged look keeps its key.
titleNoA new name for the shoot, only the user's own words (omit: kept).
board_idYesThe open Shoot Board's board_id, from Open Shoot Board or your context.
brief_idYesThe brief being revised: the board's brief_id from read_shoot_board.
directionNoA new Direction for the whole shoot, replacing the brief's (omit: kept): prompt, art_direction_id (a saved art direction), or both. Write one direction for every look from what the user wants (setting, light, mood, poses, purpose). Never name a garment, model, location or look: the same words run on every look.
image_modelNoThe shoot's image model: a slug from brief_inputs.ai_models (omit: kept).
video_modelNoThe shoot's video model: a slug from brief_inputs.ai_models (omit: kept).
recipe_look_keysNoThe looks (keys you send) that move to recipe_workflow_id; omit for every look.
recipe_workflow_idNoThe Automation the looks below move to, run as it is saved: a workflow_id from brief_inputs.automations or save_automation.
expected_brief_revisionNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changed
    • removedInput schema / $defs / RecipeSpec
      Removed value: -{
      -  "additionalProperties": false,
      -  "description": "The recipe a demand asks for: its shots and their steps.",
      -  "properties": {
      -    "asks_for": {
      -      "default": null,
      -      "description": "What each look gives it besides its clothing: model (a Model wears the look), location, references (reference photos). Omit: references, and model and location when the board holds them.",
      -      "items": {
      -        "enum": [
      -          "model",
      -          "location",
      -          "references"
      -        ],
      -        "type": "string"
      -      },
      -      "type": "array"
      -    },
      -    "aspect_ratio": {
      -      "default": null,
      -      "description": "Photo aspect ratio, e.g. \"3:4\".",
      -      "pattern": "^\\d{1,2}(\\.\\d{1,2})?:\\d{1,2}(\\.\\d{1,2})?$",
      -      "type": "string"
      -    },
      -    "image_model": {
      -      "default": null,
      -      "description": "A listed image model's slug, only when the user named it.",
      -      "type": "string"
      -    },
      -    "name": {
      -      "description": "What the automation is for, 1-3 words, e.g. 'PDP', 'Lookbook', 'Campaign': Uwear names it with its views and steps ('PDP · front, side, upper').",
      -      "maxLength": 80,
      -      "minLength": 1,
      -      "type": "string"
      -    },
      -    "resolution": {
      -      "default": null,
      -      "description": "Photo resolution, e.g. \"2K\".",
      -      "pattern": "^\\d{1,2}(\\.\\d)?K$",
      -      "type": "string"
      -    },
      -    "shots": {
      -      "description": "One shot per view, in order.",
      -      "items": {
      -        "$ref": "#/$defs/ShotSpec"
      -      },
      -      "maxItems": 8,
      -      "minItems": 1,
      -      "type": "array"
      -    },
      -    "video_model": {
      -      "default": null,
      -      "description": "A listed video model's slug, only when the user named it.",
      -      "type": "string"
      -    }
      -  },
      -  "required": [
      -    "name",
      -    "shots"
      -  ],
      -  "type": "object"
      -}
    • removedInput schema / $defs / ShotSpec
      Removed value: -{
      -  "additionalProperties": false,
      -  "description": "One photo of each look, from one camera.",
      -  "properties": {
      -    "camera": {
      -      "description": "The view, from the camera list.",
      -      "enum": [
      -        "auto",
      -        "full_body_front",
      -        "full_body_back",
      -        "full_body_side",
      -        "upper_body_front",
      -        "upper_body_back",
      -        "upper_body_side",
      -        "lower_body_front",
      -        "lower_body_back",
      -        "lower_body_side",
      -        "clothing_detail_front",
      -        "clothing_detail_back",
      -        "clothing_detail_side"
      -      ],
      -      "type": "string"
      -    },
      -    "then": {
      -      "description": "Steps on this shot's photo, in order (a video ends the chain).",
      -      "items": {
      -        "$ref": "#/$defs/StepSpec"
      -      },
      -      "maxItems": 4,
      -      "type": "array"
      -    }
      -  },
      -  "required": [
      -    "camera"
      -  ],
      -  "type": "object"
      -}
    • removedInput schema / $defs / StepSpec
      Removed value: -{
      -  "additionalProperties": false,
      -  "description": "One step on a shot's photo (or on the step before it).",
      -  "properties": {
      -    "camera_edit_id": {
      -      "default": null,
      -      "description": "camera_edit only: the view, one of full_body_front, full_body_back, full_body_side, upper_body_front, upper_body_back, upper_body_side, lower_body_front, lower_body_back, lower_body_side, clothing_detail_front, clothing_detail_back, clothing_detail_side.",
      -      "type": "string"
      -    },
      -    "factor": {
      -      "default": null,
      -      "description": "upscale only: the upscale factor, e.g. 2.",
      -      "exclusiveMinimum": 0,
      -      "type": "number"
      -    },
      -    "kind": {
      -      "description": "camera_edit: the same photo from another view (camera_edit_id); edit: a written change (prompt); upscale: a larger photo; video: a clip opening on the photo (prompt: the motion); remove_background: the subject on transparency.",
      -      "enum": [
      -        "camera_edit",
      -        "edit",
      -        "upscale",
      -        "video",
      -        "remove_background"
      -      ],
      -      "type": "string"
      -    },
      -    "length_seconds": {
      -      "default": null,
      -      "description": "video only: the video length in seconds.",
      -      "minimum": 1,
      -      "type": "integer"
      -    },
      -    "prompt": {
      -      "default": null,
      -      "description": "edit: the change; video: the motion (optional).",
      -      "maxLength": 1000,
      -      "type": "string"
      -    },
      -    "sound": {
      -      "default": null,
      -      "description": "video only: whether the video has sound.",
      -      "type": "boolean"
      -    }
      -  },
      -  "required": [
      -    "kind"
      -  ],
      -  "type": "object"
      -}
    • addedInput schema / properties / expected_brief_revision
      Added value: +{
      +  "default": null,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • removedInput schema / properties / flow
      Removed value: -{
      -  "$ref": "#/$defs/RecipeSpec",
      -  "default": null,
      -  "description": "Complete replacement shots and dependent steps for this shoot only. recipe_look_keys selects affected looks; omit it for all looks. Saved library Automations and earlier shoot flows remain unchanged."
      -}
  2. Changed5 schema fields changed
    • addedInput schema / $defs / RecipeSpec
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "The recipe a demand asks for: its shots and their steps.",
      +  "properties": {
      +    "asks_for": {
      +      "default": null,
      +      "description": "What each look gives it besides its clothing: model (a Model wears the look), location, references (reference photos). Omit: references, and model and location when the board holds them.",
      +      "items": {
      +        "enum": [
      +          "model",
      +          "location",
      +          "references"
      +        ],
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "aspect_ratio": {
      +      "default": null,
      +      "description": "Photo aspect ratio, e.g. \"3:4\".",
      +      "pattern": "^\\d{1,2}(\\.\\d{1,2})?:\\d{1,2}(\\.\\d{1,2})?$",
      +      "type": "string"
      +    },
      +    "image_model": {
      +      "default": null,
      +      "description": "A listed image model's slug, only when the user named it.",
      +      "type": "string"
      +    },
      +    "name": {
      +      "description": "What the automation is for, 1-3 words, e.g. 'PDP', 'Lookbook', 'Campaign': Uwear names it with its views and steps ('PDP · front, side, upper').",
      +      "maxLength": 80,
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "resolution": {
      +      "default": null,
      +      "description": "Photo resolution, e.g. \"2K\".",
      +      "pattern": "^\\d{1,2}(\\.\\d)?K$",
      +      "type": "string"
      +    },
      +    "shots": {
      +      "description": "One shot per view, in order.",
      +      "items": {
      +        "$ref": "#/$defs/ShotSpec"
      +      },
      +      "maxItems": 8,
      +      "minItems": 1,
      +      "type": "array"
      +    },
      +    "video_model": {
      +      "default": null,
      +      "description": "A listed video model's slug, only when the user named it.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "name",
      +    "shots"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / $defs / ShotSpec
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "One photo of each look, from one camera.",
      +  "properties": {
      +    "camera": {
      +      "description": "The view, from the camera list.",
      +      "enum": [
      +        "auto",
      +        "full_body_front",
      +        "full_body_back",
      +        "full_body_side",
      +        "upper_body_front",
      +        "upper_body_back",
      +        "upper_body_side",
      +        "lower_body_front",
      +        "lower_body_back",
      +        "lower_body_side",
      +        "clothing_detail_front",
      +        "clothing_detail_back",
      +        "clothing_detail_side"
      +      ],
      +      "type": "string"
      +    },
      +    "then": {
      +      "description": "Steps on this shot's photo, in order (a video ends the chain).",
      +      "items": {
      +        "$ref": "#/$defs/StepSpec"
      +      },
      +      "maxItems": 4,
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "camera"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / $defs / StepSpec
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "One step on a shot's photo (or on the step before it).",
      +  "properties": {
      +    "camera_edit_id": {
      +      "default": null,
      +      "description": "camera_edit only: the view, one of full_body_front, full_body_back, full_body_side, upper_body_front, upper_body_back, upper_body_side, lower_body_front, lower_body_back, lower_body_side, clothing_detail_front, clothing_detail_back, clothing_detail_side.",
      +      "type": "string"
      +    },
      +    "factor": {
      +      "default": null,
      +      "description": "upscale only: the upscale factor, e.g. 2.",
      +      "exclusiveMinimum": 0,
      +      "type": "number"
      +    },
      +    "kind": {
      +      "description": "camera_edit: the same photo from another view (camera_edit_id); edit: a written change (prompt); upscale: a larger photo; video: a clip opening on the photo (prompt: the motion); remove_background: the subject on transparency.",
      +      "enum": [
      +        "camera_edit",
      +        "edit",
      +        "upscale",
      +        "video",
      +        "remove_background"
      +      ],
      +      "type": "string"
      +    },
      +    "length_seconds": {
      +      "default": null,
      +      "description": "video only: the video length in seconds.",
      +      "minimum": 1,
      +      "type": "integer"
      +    },
      +    "prompt": {
      +      "default": null,
      +      "description": "edit: the change; video: the motion (optional).",
      +      "maxLength": 1000,
      +      "type": "string"
      +    },
      +    "sound": {
      +      "default": null,
      +      "description": "video only: whether the video has sound.",
      +      "type": "boolean"
      +    }
      +  },
      +  "required": [
      +    "kind"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / properties / flow
      Added value: +{
      +  "$ref": "#/$defs/RecipeSpec",
      +  "default": null,
      +  "description": "Complete replacement shots and dependent steps for this shoot only. recipe_look_keys selects affected looks; omit it for all looks. Saved library Automations and earlier shoot flows remain unchanged."
      +}
    • changedInput schema / properties / recipe_workflow_id / description
      Previous value: -"The Automation the looks below move to, run as it is saved: a workflow_id from brief_inputs.automations or create_automation."New value: +"The Automation the looks below move to, run as it is saved: a workflow_id from brief_inputs.automations or save_automation."
  3. Changed9 schema fields changed
    • changedInput schema / $defs / ProposedDirection / description
      Previous value: -"The shoot's Direction as the host writes it: its words, a saved art direction, or both; never neither\n(``NO_DIRECTION``), so every brief says what runs."New value: +"The shoot's Direction as the host writes it: its words, a saved art direction, or both; never neither,\nso every brief says what runs."
    • removedInput schema / $defs / RecipeSpec
      Removed value: -{
      -  "additionalProperties": false,
      -  "description": "The recipe a demand asks for: its shots and their steps.",
      -  "properties": {
      -    "aspect_ratio": {
      -      "default": null,
      -      "description": "Photo aspect ratio, e.g. \"3:4\".",
      -      "pattern": "^\\d{1,2}(\\.\\d{1,2})?:\\d{1,2}(\\.\\d{1,2})?$",
      -      "type": "string"
      -    },
      -    "image_model": {
      -      "default": null,
      -      "description": "A listed image model's slug, only when the user named it.",
      -      "type": "string"
      -    },
      -    "name": {
      -      "description": "What the automation is for, 1-3 words, e.g. 'PDP', 'Lookbook', 'Campaign': Uwear names it with its views and steps ('PDP · front, side, upper').",
      -      "maxLength": 80,
      -      "minLength": 1,
      -      "type": "string"
      -    },
      -    "resolution": {
      -      "default": null,
      -      "description": "Photo resolution, e.g. \"2K\".",
      -      "pattern": "^\\d{1,2}(\\.\\d)?K$",
      -      "type": "string"
      -    },
      -    "shots": {
      -      "description": "One shot per view, in order.",
      -      "items": {
      -        "$ref": "#/$defs/ShotSpec"
      -      },
      -      "maxItems": 8,
      -      "minItems": 1,
      -      "type": "array"
      -    },
      -    "video_model": {
      -      "default": null,
      -      "description": "A listed video model's slug, only when the user named it.",
      -      "type": "string"
      -    }
      -  },
      -  "required": [
      -    "name",
      -    "shots"
      -  ],
      -  "type": "object"
      -}
    • removedInput schema / $defs / ShotSpec
      Removed value: -{
      -  "additionalProperties": false,
      -  "description": "One photo of each look, from one camera.",
      -  "properties": {
      -    "camera": {
      -      "description": "The view, from the camera list.",
      -      "enum": [
      -        "auto",
      -        "full_body_front",
      -        "full_body_back",
      -        "full_body_side",
      -        "upper_body_front",
      -        "upper_body_back",
      -        "upper_body_side",
      -        "lower_body_front",
      -        "lower_body_back",
      -        "lower_body_side",
      -        "clothing_detail_front",
      -        "clothing_detail_back",
      -        "clothing_detail_side"
      -      ],
      -      "type": "string"
      -    },
      -    "then": {
      -      "description": "Steps on this shot's photo, in order (a video ends the chain).",
      -      "items": {
      -        "$ref": "#/$defs/StepSpec"
      -      },
      -      "maxItems": 4,
      -      "type": "array"
      -    }
      -  },
      -  "required": [
      -    "camera"
      -  ],
      -  "type": "object"
      -}
    • removedInput schema / $defs / StepSpec
      Removed value: -{
      -  "additionalProperties": false,
      -  "description": "One step on a shot's photo (or on the step before it).",
      -  "properties": {
      -    "camera_edit_id": {
      -      "default": null,
      -      "description": "camera_edit only: the view, one of full_body_front, full_body_back, full_body_side, upper_body_front, upper_body_back, upper_body_side, lower_body_front, lower_body_back, lower_body_side, clothing_detail_front, clothing_detail_back, clothing_detail_side.",
      -      "type": "string"
      -    },
      -    "factor": {
      -      "default": null,
      -      "description": "upscale only: the upscale factor, e.g. 2.",
      -      "exclusiveMinimum": 0,
      -      "type": "number"
      -    },
      -    "kind": {
      -      "description": "camera_edit: the same photo from another view (camera_edit_id); edit: a written change (prompt); upscale: a larger photo; video: a clip opening on the photo (prompt: the motion); remove_background: the subject on transparency.",
      -      "enum": [
      -        "camera_edit",
      -        "edit",
      -        "upscale",
      -        "video",
      -        "remove_background"
      -      ],
      -      "type": "string"
      -    },
      -    "length_seconds": {
      -      "default": null,
      -      "description": "video only: the video length in seconds.",
      -      "minimum": 1,
      -      "type": "integer"
      -    },
      -    "prompt": {
      -      "default": null,
      -      "description": "edit: the change; video: the motion (optional).",
      -      "maxLength": 1000,
      -      "type": "string"
      -    },
      -    "sound": {
      -      "default": null,
      -      "description": "video only: whether the video has sound.",
      -      "type": "boolean"
      -    }
      -  },
      -  "required": [
      -    "kind"
      -  ],
      -  "type": "object"
      -}
    • changedInput schema / properties / image_model / description
      Previous value: -"A listed image model's slug the user asked for (\"use GPT Image\"): the shoot's AI model, every shot and edit of every look runs on it; the automation is unchanged. Not with recipe (name it in recipe.image_model)."New value: +"The shoot's image model: a slug from brief_inputs.ai_models (omit: kept)."
    • removedInput schema / properties / recipe
      Removed value: -{
      -  "$ref": "#/$defs/RecipeSpec",
      -  "default": null,
      -  "description": "The complete new shots and steps, built as a new automation for the looks below (e.g. the old shots plus a side view). Not with recipe_workflow_id."
      -}
    • changedInput schema / properties / recipe_look_keys / description
      Previous value: -"The looks (keys you send) that move to recipe / recipe_workflow_id; omit for every look."New value: +"The looks (keys you send) that move to recipe_workflow_id; omit for every look."
    • changedInput schema / properties / recipe_workflow_id / description
      Previous value: -"An automation from read_shoot_board's brief_inputs.automations for the looks below. Not with recipe."New value: +"The Automation the looks below move to, run as it is saved: a workflow_id from brief_inputs.automations or create_automation."
    • changedInput schema / properties / video_model / description
      Previous value: -"A listed video model's slug the user asked for: the shoot's videos run on it. Not with recipe (name it in recipe.video_model)."New value: +"The shoot's video model: a slug from brief_inputs.ai_models (omit: kept)."
  4. Changed13 schema fields changed
    • removedInput schema / $defs / OutputInput
      Removed value: -{
      -  "additionalProperties": false,
      -  "description": "This brief's output; a field left out is kept, null follows the board's default again.",
      -  "properties": {
      -    "aspect_ratio": {
      -      "default": null,
      -      "description": "Photo aspect ratio, e.g. \"3:4\".",
      -      "pattern": "^\\d{1,2}(\\.\\d{1,2})?:\\d{1,2}(\\.\\d{1,2})?$",
      -      "type": "string"
      -    },
      -    "duration": {
      -      "default": null,
      -      "description": "Video length in seconds.",
      -      "minimum": 1,
      -      "type": "integer"
      -    },
      -    "generate_audio": {
      -      "default": null,
      -      "description": "Whether videos have sound.",
      -      "type": "boolean"
      -    },
      -    "resolution": {
      -      "default": null,
      -      "description": "Photo resolution, e.g. \"2K\".",
      -      "pattern": "^\\d{1,2}(\\.\\d)?K$",
      -      "type": "string"
      -    },
      -    "upscale_factor": {
      -      "anyOf": [
      -        {
      -          "exclusiveMinimum": 0,
      -          "type": "integer"
      -        },
      -        {
      -          "exclusiveMinimum": 0,
      -          "type": "number"
      -        }
      -      ],
      -      "default": null,
      -      "description": "Upscale factor, e.g. 2."
      -    }
      -  },
      -  "type": "object"
      -}
    • changedInput schema / $defs / ProposedDirection / description
      Previous value: -"The shoot's Direction as the host writes it: its words, a saved art direction, or both; never neither."New value: +"The shoot's Direction as the host writes it: its words, a saved art direction, or both; never neither\n(``NO_DIRECTION``), so every brief says what runs."
    • changedInput schema / $defs / ProposedDirection / properties / prompt / description
      Previous value: -"The direction in words, in English. Optional with an art_direction_id."New value: +"Your words for this shoot, in English, 1-3 sentences. Write one direction for every look from what the user wants (setting, light, mood, poses, purpose). Never name a garment, model, location or look: the same words run on every look. Not needed with an art_direction_id."
    • addedInput schema / $defs / RecipeSpec / properties / aspect_ratio
      Added value: +{
      +  "default": null,
      +  "description": "Photo aspect ratio, e.g. \"3:4\".",
      +  "pattern": "^\\d{1,2}(\\.\\d{1,2})?:\\d{1,2}(\\.\\d{1,2})?$",
      +  "type": "string"
      +}
    • addedInput schema / $defs / RecipeSpec / properties / resolution
      Added value: +{
      +  "default": null,
      +  "description": "Photo resolution, e.g. \"2K\".",
      +  "pattern": "^\\d{1,2}(\\.\\d)?K$",
      +  "type": "string"
      +}
    • addedInput schema / $defs / StepSpec / properties / factor
      Added value: +{
      +  "default": null,
      +  "description": "upscale only: the upscale factor, e.g. 2.",
      +  "exclusiveMinimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / $defs / StepSpec / properties / length_seconds
      Added value: +{
      +  "default": null,
      +  "description": "video only: the video length in seconds.",
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • addedInput schema / $defs / StepSpec / properties / sound
      Added value: +{
      +  "default": null,
      +  "description": "video only: whether the video has sound.",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / direction / description
      Previous value: -"The brief's new direction, replacing its current one (omit: kept): prompt, art_direction_id (a saved art direction), or both."New value: +"A new Direction for the whole shoot, replacing the brief's (omit: kept): prompt, art_direction_id (a saved art direction), or both. Write one direction for every look from what the user wants (setting, light, mood, poses, purpose). Never name a garment, model, location or look: the same words run on every look."
    • changedInput schema / properties / image_model / description
      Previous value: -"The brief's image model (a slug from brief_inputs.ai_models). Not with recipe."New value: +"A listed image model's slug the user asked for (\"use GPT Image\"): the shoot's AI model, every shot and edit of every look runs on it; the automation is unchanged. Not with recipe (name it in recipe.image_model)."
    • removedInput schema / properties / output
      Removed value: -{
      -  "$ref": "#/$defs/OutputInput",
      -  "default": null,
      -  "description": "This brief's output settings; a field left out keeps the brief's."
      -}
    • changedInput schema / properties / recipe_workflow_id / description
      Previous value: -"An Automation for the looks (a workflow_id from brief_inputs.automations). Not with recipe."New value: +"An automation from read_shoot_board's brief_inputs.automations for the looks below. Not with recipe."
    • changedInput schema / properties / video_model / description
      Previous value: -"The brief's video model (a slug from brief_inputs.ai_models). Not with recipe."New value: +"A listed video model's slug the user asked for: the shoot's videos run on it. Not with recipe (name it in recipe.video_model)."
  5. Changed2 schema fields changed
    • changedInput schema / $defs / OutputInput / properties / upscale_factor / anyOf
      Previous value: -[
      -  {
      -    "type": "integer"
      -  },
      -  {
      -    "type": "number"
      -  }
      -]New value: +[
      +  {
      +    "exclusiveMinimum": 0,
      +    "type": "integer"
      +  },
      +  {
      +    "exclusiveMinimum": 0,
      +    "type": "number"
      +  }
      +]
    • removedInput schema / $defs / OutputInput / properties / upscale_factor / gt
      Removed value: -0
  6. Changed11 schema fields changed
    • changedInput schema / $defs / OutputInput / properties / aspect_ratio / description
      Previous value: -"e.g. \"3:4\", \"1:1\", \"9:16\": one of the shoot image model's aspect_ratios."New value: +"Photo aspect ratio, e.g. \"3:4\"."
    • changedInput schema / $defs / OutputInput / properties / duration / description
      Previous value: -"Video steps only: the clip's length in seconds, one of the video model's durations (a longer one costs more)."New value: +"Video length in seconds."
    • changedInput schema / $defs / OutputInput / properties / generate_audio / description
      Previous value: -"Video steps only: true for a clip with sound (only a video model that supports audio), false for a silent one."New value: +"Whether videos have sound."
    • changedInput schema / $defs / OutputInput / properties / resolution / description
      Previous value: -"e.g. \"1K\", \"2K\", \"4K\": one of the shoot image model's resolutions (a higher one costs more)."New value: +"Photo resolution, e.g. \"2K\"."
    • changedInput schema / $defs / OutputInput / properties / upscale_factor / description
      Previous value: -"Upscale steps only: e.g. 2, 4: one of the upscale model's upscale_factors."New value: +"Upscale factor, e.g. 2."
    • changedInput schema / $defs / ProposedDirection / properties / prompt / description
      Previous value: -"Your words for this shoot, in English, 1-3 sentences. Write one direction for every look from what the user wants (setting, light, mood, poses, purpose). Never name a garment, model, location or look: the same words run on every look. Not needed with an art_direction_id."New value: +"The direction in words, in English. Optional with an art_direction_id."
    • changedInput schema / properties / direction / description
      Previous value: -"A new Direction for the whole shoot, replacing the brief's (omit: kept): prompt, art_direction_id (a saved art direction), or both. Write one direction for every look from what the user wants (setting, light, mood, poses, purpose). Never name a garment, model, location or look: the same words run on every look."New value: +"The brief's new direction, replacing its current one (omit: kept): prompt, art_direction_id (a saved art direction), or both."
    • changedInput schema / properties / image_model / description
      Previous value: -"A listed image model's slug the user asked for, or a past brief's ai_models.image: the shoot's AI model, every shot and edit of every look runs on it; the automation is unchanged. Not with recipe (name it in recipe.image_model)."New value: +"The brief's image model (a slug from brief_inputs.ai_models). Not with recipe."
    • changedInput schema / properties / output / description
      Previous value: -"The shoot's output, only the fields the user asked for; omit to keep the brief's (the user's preferences by default): the photos' aspect ratio and resolution, the videos' duration and generate_audio, the upscales' upscale_factor (only when the brief makes them). The brief's output is what is priced; a value its AI model does not offer is refused with the values it offers: pick one of them."New value: +"This brief's output settings; a field left out keeps the brief's."
    • changedInput schema / properties / recipe_workflow_id / description
      Previous value: -"An automation from read_shoot_board's brief_inputs.automations (or a past brief's) for the looks below. Not with recipe."New value: +"An Automation for the looks (a workflow_id from brief_inputs.automations). Not with recipe."
    • changedInput schema / properties / video_model / description
      Previous value: -"A listed video model's slug the user asked for, or a past brief's ai_models.video: the shoot's videos run on it. Not with recipe (name it in recipe.video_model)."New value: +"The brief's video model (a slug from brief_inputs.ai_models). Not with recipe."
  7. Changed4 schema fields changed
    • changedInput schema / $defs / ProposedDirection / description
      Previous value: -"The shoot's Direction as the host writes it: its words, a saved art direction, or both; never neither\n(``NO_DIRECTION``), so every brief says what runs."New value: +"The shoot's Direction as the host writes it: its words, a saved art direction, or both; never neither."
    • changedInput schema / properties / image_model / description
      Previous value: -"A listed image model's slug the user asked for (\"use GPT Image\"), or a past brief's ai_models.image: the shoot's AI model, every shot and edit of every look runs on it; the automation is unchanged. Not with recipe (name it in recipe.image_model)."New value: +"A listed image model's slug the user asked for, or a past brief's ai_models.image: the shoot's AI model, every shot and edit of every look runs on it; the automation is unchanged. Not with recipe (name it in recipe.image_model)."
    • changedInput schema / properties / output / description
      Previous value: -"The shoot's output, only the fields the user asked for; omit to keep the brief's (the user's preferences by default): the Shoots' aspect ratio and resolution, the Video steps' duration and generate_audio, the Upscale steps' upscale_factor (only when its Automation has that step). The brief's output is what runs and is priced; a value the step's AI model does not offer is refused with the values it offers: pick one of them."New value: +"The shoot's output, only the fields the user asked for; omit to keep the brief's (the user's preferences by default): the photos' aspect ratio and resolution, the videos' duration and generate_audio, the upscales' upscale_factor (only when the brief makes them). The brief's output is what is priced; a value its AI model does not offer is refused with the values it offers: pick one of them."
    • changedInput schema / properties / recipe_workflow_id / description
      Previous value: -"An automation from read_shoot_board's brief_inputs.automations (or a past brief's) for the looks below; Uwear may save a copy as this shoot's automation draft. Not with recipe. On a board that pins an Automation, only one this brief already runs."New value: +"An automation from read_shoot_board's brief_inputs.automations (or a past brief's) for the looks below. Not with recipe."
  8. Changed7 schema fields changed
    • addedInput schema / $defs / OutputInput / properties / duration
      Added value: +{
      +  "default": null,
      +  "description": "Video steps only: the clip's length in seconds, one of the video model's durations (a longer one costs more).",
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • addedInput schema / $defs / OutputInput / properties / generate_audio
      Added value: +{
      +  "default": null,
      +  "description": "Video steps only: true for a clip with sound (only a video model that supports audio), false for a silent one.",
      +  "type": "boolean"
      +}
    • addedInput schema / $defs / OutputInput / properties / upscale_factor
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "number"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Upscale steps only: e.g. 2, 4: one of the upscale model's upscale_factors.",
      +  "gt": 0
      +}
    • changedInput schema / properties / image_model / description
      Previous value: -"A listed image model's slug the user asked for (\"use GPT Image\"): the shoot's AI model, every shot and edit of every look runs on it; the automation is unchanged. Not with recipe (name it in recipe.image_model)."New value: +"A listed image model's slug the user asked for (\"use GPT Image\"), or a past brief's ai_models.image: the shoot's AI model, every shot and edit of every look runs on it; the automation is unchanged. Not with recipe (name it in recipe.image_model)."
    • changedInput schema / properties / output / description
      Previous value: -"The shoot's aspect ratio and resolution, only when the user asked for them; omit to keep the brief's (the user's preferences by default). The brief's output is what runs and is priced; a value the image model does not offer runs at the nearest one it does."New value: +"The shoot's output, only the fields the user asked for; omit to keep the brief's (the user's preferences by default): the Shoots' aspect ratio and resolution, the Video steps' duration and generate_audio, the Upscale steps' upscale_factor (only when its Automation has that step). The brief's output is what runs and is priced; a value the step's AI model does not offer is refused with the values it offers: pick one of them."
    • changedInput schema / properties / recipe_workflow_id / description
      Previous value: -"An automation from read_shoot_board's brief_inputs.automations for the looks below. Not with recipe."New value: +"An automation from read_shoot_board's brief_inputs.automations (or a past brief's) for the looks below; Uwear may save a copy as this shoot's automation draft. Not with recipe. On a board that pins an Automation, only one this brief already runs."
    • changedInput schema / properties / video_model / description
      Previous value: -"A listed video model's slug the user asked for: the shoot's videos run on it. Not with recipe (name it in recipe.video_model)."New value: +"A listed video model's slug the user asked for, or a past brief's ai_models.video: the shoot's videos run on it. Not with recipe (name it in recipe.video_model)."
  9. Changed2 schema fields changed
    • addedInput schema / $defs / OutputInput
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "This brief's output; a field left out is kept, null follows the board's default again.",
      +  "properties": {
      +    "aspect_ratio": {
      +      "default": null,
      +      "description": "e.g. \"3:4\", \"1:1\", \"9:16\": one of the shoot image model's aspect_ratios.",
      +      "pattern": "^\\d{1,2}(\\.\\d{1,2})?:\\d{1,2}(\\.\\d{1,2})?$",
      +      "type": "string"
      +    },
      +    "resolution": {
      +      "default": null,
      +      "description": "e.g. \"1K\", \"2K\", \"4K\": one of the shoot image model's resolutions (a higher one costs more).",
      +      "pattern": "^\\d{1,2}(\\.\\d)?K$",
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / output
      Added value: +{
      +  "$ref": "#/$defs/OutputInput",
      +  "default": null,
      +  "description": "The shoot's aspect ratio and resolution, only when the user asked for them; omit to keep the brief's (the user's preferences by default). The brief's output is what runs and is priced; a value the image model does not offer runs at the nearest one it does."
      +}
  10. Changed3 schema fields changed
    • addedInput schema / $defs / ProposedDirection
      Added value: +{
      +  "additionalProperties": false,
      +  "anyOf": [
      +    {
      +      "required": [
      +        "prompt"
      +      ]
      +    },
      +    {
      +      "required": [
      +        "art_direction_id"
      +      ]
      +    }
      +  ],
      +  "description": "The shoot's Direction as the host writes it: its words, a saved art direction, or both; never neither\n(``NO_DIRECTION``), so every brief says what runs.",
      +  "properties": {
      +    "art_direction_id": {
      +      "default": null,
      +      "description": "A saved art direction (a library id, or the id save_art_direction returns).",
      +      "minimum": 1,
      +      "type": "integer"
      +    },
      +    "prompt": {
      +      "default": null,
      +      "description": "Your words for this shoot, in English, 1-3 sentences. Write one direction for every look from what the user wants (setting, light, mood, poses, purpose). Never name a garment, model, location or look: the same words run on every look. Not needed with an art_direction_id.",
      +      "maxLength": 2000,
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • removedInput schema / properties / art_direction_id
      Removed value: -{
      -  "default": null,
      -  "description": "A new art direction for the whole shoot (omit: kept). Changing it never changes the automation. For a new look and feel, call save_art_direction first and pass its id.",
      -  "minimum": 1,
      -  "type": "integer"
      -}
    • addedInput schema / properties / direction
      Added value: +{
      +  "$ref": "#/$defs/ProposedDirection",
      +  "default": null,
      +  "description": "A new Direction for the whole shoot, replacing the brief's (omit: kept): prompt, art_direction_id (a saved art direction), or both. Write one direction for every look from what the user wants (setting, light, mood, poses, purpose). Never name a garment, model, location or look: the same words run on every look."
      +}
  11. Changed22 schema fields changed
    • removedInput schema / $defs / GenerationCommand
      Removed value: -{
      -  "additionalProperties": false,
      -  "description": "Versioned command shared by REST, Agent, MCP, jobs, and briefs.\n\nThe nested ``input`` is intentionally the API's public intent model. A\nfield added there therefore appears automatically in this command's JSON\nschema, serialization, and persisted brief representation.",
      -  "properties": {
      -    "input": {
      -      "$ref": "#/$defs/GenerationIntent"
      -    },
      -    "schema_version": {
      -      "const": 2,
      -      "type": "integer"
      -    },
      -    "source": {
      -      "default": null,
      -      "discriminator": {
      -        "propertyName": "type"
      -      },
      -      "oneOf": [
      -        {
      -          "properties": {
      -            "generation_result_id": {
      -              "minimum": 1,
      -              "type": "integer"
      -            },
      -            "type": {
      -              "const": "generation_result",
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "type",
      -            "generation_result_id"
      -          ],
      -          "type": "object"
      -        },
      -        {
      -          "properties": {
      -            "type": {
      -              "const": "uploaded_file",
      -              "type": "string"
      -            },
      -            "uploaded_file_id": {
      -              "minimum": 1,
      -              "type": "integer"
      -            }
      -          },
      -          "required": [
      -            "type",
      -            "uploaded_file_id"
      -          ],
      -          "type": "object"
      -        },
      -        {
      -          "properties": {
      -            "image_url": {
      -              "minLength": 1,
      -              "type": "string"
      -            },
      -            "type": {
      -              "const": "public_url",
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "type",
      -            "image_url"
      -          ],
      -          "type": "object"
      -        },
      -        {
      -          "description": "Durable identity for a source produced by an earlier pipeline step.",
      -          "properties": {
      -            "output_index": {
      -              "minimum": 0,
      -              "type": "integer"
      -            },
      -            "post_claim_reference": {
      -              "minLength": 1,
      -              "type": "string"
      -            },
      -            "step_index": {
      -              "minimum": 0,
      -              "type": "integer"
      -            },
      -            "type": {
      -              "const": "pipeline_step",
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "type",
      -            "post_claim_reference",
      -            "step_index",
      -            "output_index"
      -          ],
      -          "type": "object"
      -        }
      -      ],
      -      "properties": {
      -        "generation_result_id": {
      -          "minimum": 1,
      -          "type": "integer"
      -        },
      -        "image_url": {
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "output_index": {
      -          "minimum": 0,
      -          "type": "integer"
      -        },
      -        "post_claim_reference": {
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "step_index": {
      -          "minimum": 0,
      -          "type": "integer"
      -        },
      -        "type": {
      -          "enum": [
      -            "generation_result",
      -            "uploaded_file",
      -            "public_url",
      -            "pipeline_step"
      -          ],
      -          "type": "string"
      -        },
      -        "uploaded_file_id": {
      -          "minimum": 1,
      -          "type": "integer"
      -        }
      -      },
      -      "type": "object"
      -    }
      -  },
      -  "required": [
      -    "schema_version",
      -    "input"
      -  ],
      -  "type": "object"
      -}
    • removedInput schema / $defs / GenerationIntent
      Removed value: -{
      -  "additionalProperties": false,
      -  "description": "Caller-owned model-generation intent shared by every public adapter.\n\nAuthentication-derived identity deliberately does not belong here. REST,\nAgent, MCP, batch, and integrations all submit this exact contract; the\ncommand planner combines it with server-owned execution context later. MCP omits webhook callback configuration, which remains API-only.",
      -  "properties": {
      -    "alignment": {
      -      "default": null,
      -      "enum": [
      -        "left",
      -        "center",
      -        "right",
      -        "top",
      -        "bottom"
      -      ],
      -      "type": "string"
      -    },
      -    "art_direction_id": {
      -      "default": null,
      -      "minimum": 1,
      -      "type": "integer"
      -    },
      -    "aspect_ratio": {
      -      "default": null,
      -      "type": "string"
      -    },
      -    "audio_ref_urls": {
      -      "default": null,
      -      "description": "Public audio URLs supplied as model references. Only models that declare a positive max_reference_audio capability accept them.",
      -      "items": {
      -        "type": "string"
      -      },
      -      "type": "array"
      -    },
      -    "avatar_id": {
      -      "default": null,
      -      "minimum": 1,
      -      "type": "integer"
      -    },
      -    "backdrop_mode": {
      -      "default": null,
      -      "description": "Canonical Backdrop mode for new generation requests.",
      -      "enum": [
      -        "transparent",
      -        "solid",
      -        "image"
      -      ],
      -      "type": "string"
      -    },
      -    "background_image_url": {
      -      "default": null,
      -      "description": "Canonical Backdrop background image URL.",
      -      "type": "string"
      -    },
      -    "camera": {
      -      "default": "",
      -      "type": "string"
      -    },
      -    "camera_edit_id": {
      -      "default": null,
      -      "type": "string"
      -    },
      -    "children": {
      -      "default": null,
      -      "description": "Nested generation requests to run after this generation completes. Every child must provide model_slug.",
      -      "items": {
      -        "$ref": "#/$defs/GenerationIntent"
      -      },
      -      "type": "array"
      -    },
      -    "clothing_item_ids": {
      -      "default": null,
      -      "items": {
      -        "type": "integer"
      -      },
      -      "type": "array"
      -    },
      -    "color_hex": {
      -      "default": null,
      -      "description": "Canonical Backdrop solid or fallback color.",
      -      "type": "string"
      -    },
      -    "do_qa": {
      -      "default": null,
      -      "description": "When true, enqueue QA after result storage and gate acceptance on QA.",
      -      "type": "boolean"
      -    },
      -    "duration": {
      -      "default": null,
      -      "type": "integer"
      -    },
      -    "enhance_user_prompt": {
      -      "default": null,
      -      "deprecated": true,
      -      "description": "Deprecated REST compatibility alias. true is normalized at command preparation to the legacy prompt-enhancement ArtDirection ID; false has no effect. Prefer art_direction_id. Removal requires 90 consecutive days without production use; usage was last observed on 2026-07-26.",
      -      "type": "boolean",
      -      "ui": {
      -        "editable": false,
      -        "visibility": [
      -          "rest"
      -        ]
      -      }
      -    },
      -    "extra_params": {
      -      "additionalProperties": true,
      -      "default": null,
      -      "description": "Model-specific extension parameters. Backdrop controls are not accepted here; use backdrop_mode, color_hex, and background_image_url.",
      -      "type": "object"
      -    },
      -    "generate_audio": {
      -      "default": false,
      -      "description": "Include audio in the delivered video. False delivers a file with no audio stream; fixed-audio providers are muted after generation, without reducing native-generation credits.",
      -      "type": "boolean"
      -    },
      -    "generation_result_parent_id": {
      -      "default": null,
      -      "minimum": 1,
      -      "type": "integer"
      -    },
      -    "image_url": {
      -      "default": null,
      -      "type": "string"
      -    },
      -    "img_ref_urls": {
      -      "default": null,
      -      "items": {
      -        "type": "string"
      -      },
      -      "type": "array"
      -    },
      -    "last_frame_attachment": {
      -      "$ref": "#/$defs/GenerationReferenceAttachmentInput",
      -      "default": null,
      -      "description": "Durable reference to the photo the clip closes on, resolved to a URL at dispatch. The durable form of last_frame_url, for callers that hold an id rather than a link — a workflow wiring a step's output into a later step's last frame cannot know the URL when the graph is authored."
      -    },
      -    "last_frame_url": {
      -      "default": null,
      -      "type": "string"
      -    },
      -    "location_id": {
      -      "default": null,
      -      "minimum": 1,
      -      "type": "integer"
      -    },
      -    "max_qa_retries": {
      -      "default": null,
      -      "description": "Maximum QA-triggered retry generations after the initial attempt.",
      -      "maximum": 5,
      -      "minimum": 0,
      -      "type": "integer"
      -    },
      -    "model_slug": {
      -      "description": "Active AI model slug. Required for every generation command.",
      -      "minLength": 1,
      -      "type": "string"
      -    },
      -    "negative_prompt": {
      -      "default": null,
      -      "type": "string"
      -    },
      -    "num_images": {
      -      "minimum": 1,
      -      "type": "integer"
      -    },
      -    "outfit_id": {
      -      "default": null,
      -      "minimum": 1,
      -      "type": "integer"
      -    },
      -    "prompt": {
      -      "default": "",
      -      "description": "Scene brief for this shot: setting, lighting, mood, camera/framing, pose — 2-5 compact positive sentences. Without art_direction_id this prompt reaches the image model as-is and is the entire creative direction: carry the shoot's world, lighting, and atmosphere here. With art_direction_id, the saved direction carries reusable style; add only per-shot intent. Supplied garment/avatar/reference images carry product appearance: refer to them semantically ('the supplied jacket'), never by image number — the backend appends the numbered reference map at dispatch. Styling intent (fit, tuck, drape, opening state) belongs here when it matters; re-described garment construction, product-fidelity warnings, and negative 'do not ...' blocks do not — with good references they degrade output. Say what to show, not what to avoid. Video commands: describe motion and camera movement. Video does not inherit the source generation's ArtDirection; omit art_direction_id to use only the source frame and this prompt. May be empty for upscale; generation routes validate separately.",
      -      "type": "string"
      -    },
      -    "reference_attachments": {
      -      "default": null,
      -      "items": {
      -        "$ref": "#/$defs/GenerationReferenceAttachmentInput"
      -      },
      -      "type": "array"
      -    },
      -    "resolution": {
      -      "default": null,
      -      "description": "Model-defined output resolution. Legacy image tiers are normalized to 1K, 2K, or 4K; video and exact pixel presets retain their model-defined casing.",
      -      "maxLength": 32,
      -      "minLength": 2,
      -      "type": "string"
      -    },
      -    "seed": {
      -      "default": null,
      -      "type": "integer"
      -    },
      -    "tag_ids": {
      -      "default": null,
      -      "items": {
      -        "type": "integer"
      -      },
      -      "type": "array"
      -    },
      -    "target_resolution": {
      -      "default": null,
      -      "type": "string"
      -    },
      -    "upscale_factor": {
      -      "default": null,
      -      "type": "number"
      -    },
      -    "use_case": {
      -      "default": null,
      -      "type": "string"
      -    },
      -    "video_ref_urls": {
      -      "default": null,
      -      "description": "Public video URLs supplied as model references. Only models that declare a positive max_reference_videos capability accept them.",
      -      "items": {
      -        "type": "string"
      -      },
      -      "type": "array"
      -    }
      -  },
      -  "required": [
      -    "num_images",
      -    "model_slug"
      -  ],
      -  "type": "object"
      -}
    • removedInput schema / $defs / GenerationReferenceAttachmentInput
      Removed value: -{
      -  "properties": {
      -    "avatar_id": {
      -      "default": null,
      -      "minimum": 1,
      -      "type": "integer"
      -    },
      -    "clothing_item_asset_id": {
      -      "default": null,
      -      "description": "Exact durable clothing asset reference. Provide with clothing_item_id; preferred over the deprecated side selector for repeated detail assets.",
      -      "minimum": 1,
      -      "type": "integer"
      -    },
      -    "clothing_item_id": {
      -      "default": null,
      -      "minimum": 1,
      -      "type": "integer"
      -    },
      -    "generation_result_id": {
      -      "default": null,
      -      "minimum": 1,
      -      "type": "integer"
      -    },
      -    "location_id": {
      -      "default": null,
      -      "minimum": 1,
      -      "type": "integer"
      -    },
      -    "outfit_id": {
      -      "default": null,
      -      "description": "Outfit reference. The generation uses the front image of every garment in the outfit, as if each were attached as clothing_item.",
      -      "minimum": 1,
      -      "type": "integer"
      -    },
      -    "side": {
      -      "default": null,
      -      "enum": [
      -        "front",
      -        "back"
      -      ],
      -      "type": "string"
      -    },
      -    "type": {
      -      "enum": [
      -        "uploaded_file",
      -        "generation_result",
      -        "location",
      -        "avatar",
      -        "clothing_item",
      -        "outfit"
      -      ],
      -      "type": "string"
      -    },
      -    "uploaded_file_id": {
      -      "default": null,
      -      "minimum": 1,
      -      "type": "integer"
      -    }
      -  },
      -  "required": [
      -    "type"
      -  ],
      -  "type": "object"
      -}
    • addedInput schema / $defs / LookInput
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "One look: one outfit worn in the shoot, with who wears it and where.",
      +  "properties": {
      +    "clothing_ids": {
      +      "description": "Clothing worn together.",
      +      "items": {
      +        "minimum": 1,
      +        "type": "integer"
      +      },
      +      "maxItems": 4,
      +      "type": "array"
      +    },
      +    "key": {
      +      "default": null,
      +      "description": "update_brief: an existing look's key, to keep that look.",
      +      "pattern": "^look_\\d{2,3}$",
      +      "type": "string"
      +    },
      +    "label": {
      +      "default": "",
      +      "description": "The look's name, e.g. 'Linen summer set'.",
      +      "maxLength": 120,
      +      "type": "string"
      +    },
      +    "location_id": {
      +      "default": null,
      +      "description": "Where the look is shot.",
      +      "minimum": 1,
      +      "type": "integer"
      +    },
      +    "model_id": {
      +      "default": null,
      +      "description": "The Model who wears the look.",
      +      "minimum": 1,
      +      "type": "integer"
      +    },
      +    "outfit_id": {
      +      "default": null,
      +      "description": "A saved outfit.",
      +      "minimum": 1,
      +      "type": "integer"
      +    },
      +    "reference_ids": {
      +      "description": "Reference photos (uploaded file ids from the board's References).",
      +      "items": {
      +        "minimum": 1,
      +        "type": "integer"
      +      },
      +      "maxItems": 50,
      +      "type": "array"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / $defs / RecipeSpec
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "The recipe a demand asks for: its shots and their steps.",
      +  "properties": {
      +    "image_model": {
      +      "default": null,
      +      "description": "A listed image model's slug, only when the user named it.",
      +      "type": "string"
      +    },
      +    "name": {
      +      "description": "What the automation is for, 1-3 words, e.g. 'PDP', 'Lookbook', 'Campaign': Uwear names it with its views and steps ('PDP · front, side, upper').",
      +      "maxLength": 80,
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "shots": {
      +      "description": "One shot per view, in order.",
      +      "items": {
      +        "$ref": "#/$defs/ShotSpec"
      +      },
      +      "maxItems": 8,
      +      "minItems": 1,
      +      "type": "array"
      +    },
      +    "video_model": {
      +      "default": null,
      +      "description": "A listed video model's slug, only when the user named it.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "name",
      +    "shots"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / $defs / ShotSpec
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "One photo of each look, from one camera.",
      +  "properties": {
      +    "camera": {
      +      "description": "The view, from the camera list.",
      +      "enum": [
      +        "auto",
      +        "full_body_front",
      +        "full_body_back",
      +        "full_body_side",
      +        "upper_body_front",
      +        "upper_body_back",
      +        "upper_body_side",
      +        "lower_body_front",
      +        "lower_body_back",
      +        "lower_body_side",
      +        "clothing_detail_front",
      +        "clothing_detail_back",
      +        "clothing_detail_side"
      +      ],
      +      "type": "string"
      +    },
      +    "then": {
      +      "description": "Steps on this shot's photo, in order (a video ends the chain).",
      +      "items": {
      +        "$ref": "#/$defs/StepSpec"
      +      },
      +      "maxItems": 4,
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "camera"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / $defs / StepSpec
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "One step on a shot's photo (or on the step before it).",
      +  "properties": {
      +    "camera_edit_id": {
      +      "default": null,
      +      "description": "camera_edit only: the view, one of full_body_front, full_body_back, full_body_side, upper_body_front, upper_body_back, upper_body_side, lower_body_front, lower_body_back, lower_body_side, clothing_detail_front, clothing_detail_back, clothing_detail_side.",
      +      "type": "string"
      +    },
      +    "kind": {
      +      "description": "camera_edit: the same photo from another view (camera_edit_id); edit: a written change (prompt); upscale: a larger photo; video: a clip opening on the photo (prompt: the motion); remove_background: the subject on transparency.",
      +      "enum": [
      +        "camera_edit",
      +        "edit",
      +        "upscale",
      +        "video",
      +        "remove_background"
      +      ],
      +      "type": "string"
      +    },
      +    "prompt": {
      +      "default": null,
      +      "description": "edit: the change; video: the motion (optional).",
      +      "maxLength": 1000,
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "kind"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / additionalProperties
      Added value: +false
    • removedInput schema / description
      Removed value: -"Input schema for updating a visible brief without immediate execution."
    • addedInput schema / properties / art_direction_id
      Added value: +{
      +  "default": null,
      +  "description": "A new art direction for the whole shoot (omit: kept). Changing it never changes the automation. For a new look and feel, call save_art_direction first and pass its id.",
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • addedInput schema / properties / board_id
      Added value: +{
      +  "description": "The open Shoot Board's board_id, from Open Shoot Board or your context.",
      +  "type": "string"
      +}
    • addedInput schema / properties / brief_id
      Added value: +{
      +  "description": "The brief being revised: the board's brief_id from read_shoot_board.",
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • removedInput schema / properties / commands
      Removed value: -{
      -  "description": "Canonical generation commands. Each command contains the MCP-safe GenerationIntent fields and a durable source reference. Write each input.prompt as a compact positive scene description (setting, lighting, mood, camera, pose — for video, motion and camera movement); without art_direction_id the prompt is the entire creative direction, so give it the full scene. The attached garment/avatar/reference images carry product appearance, so never pad prompts with restated garment construction details, product-fidelity warnings, or negative 'do not' instruction blocks; styling intent (fit, tuck, drape) is fine. For video commands, attach available full back or side garment assets that the camera may reveal through input.reference_attachments when capacity permits. Do not combine reference_attachments with img_ref_urls; uploaded garment assets are not attached automatically. Webhook callback configuration is API-only.",
      -  "items": {
      -    "$ref": "#/$defs/GenerationCommand"
      -  },
      -  "minItems": 1,
      -  "type": "array"
      -}
    • removedInput schema / properties / creative_context
      Removed value: -{
      -  "default": null,
      -  "description": "Required for photoshoot proposals and brief rewrites. Summarize the shoot-level creative approach that guided garment combos, avatars, prompts, and pipeline steps. By default prefer one cohesive art direction across the photoshoot, e.g. 'urban summer editorial', 'standard grey e-commerce', or 'sporty studio catalog'. Per-look prompts may differ for garment details, pose, framing, or avatar, but should feel part of the same shoot unless the user explicitly asks for multiple art directions, split concepts, A/B routes, or varied campaign directions. The assistant should explain this art direction to the user after proposing the brief and ask if they want changes.",
      -  "type": "string"
      -}
    • addedInput schema / properties / image_model
      Added value: +{
      +  "default": null,
      +  "description": "A listed image model's slug the user asked for (\"use GPT Image\"): the shoot's AI model, every shot and edit of every look runs on it; the automation is unchanged. Not with recipe (name it in recipe.image_model).",
      +  "type": "string"
      +}
    • addedInput schema / properties / looks
      Added value: +{
      +  "description": "The complete new look list (not a diff); an unchanged look keeps its key.",
      +  "items": {
      +    "$ref": "#/$defs/LookInput"
      +  },
      +  "maxItems": 50,
      +  "minItems": 1,
      +  "type": "array"
      +}
    • addedInput schema / properties / recipe
      Added value: +{
      +  "$ref": "#/$defs/RecipeSpec",
      +  "default": null,
      +  "description": "The complete new shots and steps, built as a new automation for the looks below (e.g. the old shots plus a side view). Not with recipe_workflow_id."
      +}
    • addedInput schema / properties / recipe_look_keys
      Added value: +{
      +  "default": null,
      +  "description": "The looks (keys you send) that move to recipe / recipe_workflow_id; omit for every look.",
      +  "items": {
      +    "pattern": "^look_\\d{2,3}$",
      +    "type": "string"
      +  },
      +  "maxItems": 50,
      +  "type": "array"
      +}
    • addedInput schema / properties / recipe_workflow_id
      Added value: +{
      +  "default": null,
      +  "description": "An automation from read_shoot_board's brief_inputs.automations for the looks below. Not with recipe.",
      +  "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
      +  "type": "string"
      +}
    • addedInput schema / properties / title
      Added value: +{
      +  "default": null,
      +  "description": "A new name for the shoot, only the user's own words (omit: kept).",
      +  "maxLength": 80,
      +  "type": "string"
      +}
    • addedInput schema / properties / video_model
      Added value: +{
      +  "default": null,
      +  "description": "A listed video model's slug the user asked for: the shoot's videos run on it. Not with recipe (name it in recipe.video_model).",
      +  "type": "string"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "commands"
      -]New value: +[
      +  "brief_id",
      +  "looks",
      +  "board_id"
      +]
  12. Changed2 schema fields changed
    • addedInput schema / $defs / GenerationReferenceAttachmentInput / properties / outfit_id
      Added value: +{
      +  "default": null,
      +  "description": "Outfit reference. The generation uses the front image of every garment in the outfit, as if each were attached as clothing_item.",
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • changedInput schema / $defs / GenerationReferenceAttachmentInput / properties / type / enum
      Previous value: -[
      -  "uploaded_file",
      -  "generation_result",
      -  "location",
      -  "avatar",
      -  "clothing_item"
      -]New value: +[
      +  "uploaded_file",
      +  "generation_result",
      +  "location",
      +  "avatar",
      +  "clothing_item",
      +  "outfit"
      +]
  13. Changed1 schema field changed
    • addedInput schema / $defs / GenerationIntent / properties / generate_audio / description
      Added value: +"Include audio in the delivered video. False delivers a file with no audio stream; fixed-audio providers are muted after generation, without reducing native-generation credits."
  14. Changed2 schema fields changed
    • addedInput schema / $defs / GenerationIntent / properties / audio_ref_urls
      Added value: +{
      +  "default": null,
      +  "description": "Public audio URLs supplied as model references. Only models that declare a positive max_reference_audio capability accept them.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / $defs / GenerationIntent / properties / video_ref_urls
      Added value: +{
      +  "default": null,
      +  "description": "Public video URLs supplied as model references. Only models that declare a positive max_reference_videos capability accept them.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  15. Changed1 schema field changed
    • changedInput schema / $defs / GenerationIntent / properties / prompt / description
      Previous value: -"Scene brief for this shot: setting, lighting, mood, camera/framing, pose — 2-5 compact positive sentences. Without art_direction_id this prompt reaches the image model as-is and is the entire creative direction: carry the shoot's world, lighting, and atmosphere here. With art_direction_id, the saved direction carries reusable style; add only per-shot intent. Supplied garment/avatar/reference images carry product appearance: refer to them semantically ('the supplied jacket'), never by image number — the backend appends the numbered reference map at dispatch. Styling intent (fit, tuck, drape, opening state) belongs here when it matters; re-described garment construction, product-fidelity warnings, and negative 'do not ...' blocks do not — with good references they degrade output. Say what to show, not what to avoid. Video commands: describe motion and camera movement. May be empty for upscale; generation routes validate separately."New value: +"Scene brief for this shot: setting, lighting, mood, camera/framing, pose — 2-5 compact positive sentences. Without art_direction_id this prompt reaches the image model as-is and is the entire creative direction: carry the shoot's world, lighting, and atmosphere here. With art_direction_id, the saved direction carries reusable style; add only per-shot intent. Supplied garment/avatar/reference images carry product appearance: refer to them semantically ('the supplied jacket'), never by image number — the backend appends the numbered reference map at dispatch. Styling intent (fit, tuck, drape, opening state) belongs here when it matters; re-described garment construction, product-fidelity warnings, and negative 'do not ...' blocks do not — with good references they degrade output. Say what to show, not what to avoid. Video commands: describe motion and camera movement. Video does not inherit the source generation's ArtDirection; omit art_direction_id to use only the source frame and this prompt. May be empty for upscale; generation routes validate separately."
  16. Changed1 schema field changed
    • addedInput schema / $defs / GenerationIntent / properties / last_frame_attachment
      Added value: +{
      +  "$ref": "#/$defs/GenerationReferenceAttachmentInput",
      +  "default": null,
      +  "description": "Durable reference to the photo the clip closes on, resolved to a URL at dispatch. The durable form of last_frame_url, for callers that hold an id rather than a link — a workflow wiring a step's output into a later step's last frame cannot know the URL when the graph is authored."
      +}
  17. Changed5 schema fields changed
    • changedInput schema / $defs / GenerationIntent / description
      Previous value: -"Caller-owned model-generation intent shared by every public adapter.\n\nAuthentication-derived identity deliberately does not belong here. REST,\nAgent, MCP, batch, and integrations all submit this exact contract; the\ncommand planner combines it with server-owned execution context later."New value: +"Caller-owned model-generation intent shared by every public adapter.\n\nAuthentication-derived identity deliberately does not belong here. REST,\nAgent, MCP, batch, and integrations all submit this exact contract; the\ncommand planner combines it with server-owned execution context later. MCP omits webhook callback configuration, which remains API-only."
    • removedInput schema / $defs / GenerationIntent / properties / webhook_events
      Removed value: -{
      -  "default": null,
      -  "items": {
      -    "enum": [
      -      "generation.completed",
      -      "generation.failed"
      -    ],
      -    "type": "string"
      -  },
      -  "type": "array"
      -}
    • removedInput schema / $defs / GenerationIntent / properties / webhook_secret
      Removed value: -{
      -  "default": null,
      -  "description": "Optional HMAC signing secret for customer callbacks.",
      -  "type": "string",
      -  "ui": {
      -    "sensitive": true
      -  }
      -}
    • removedInput schema / $defs / GenerationIntent / properties / webhook_url
      Removed value: -{
      -  "default": null,
      -  "type": "string"
      -}
    • changedInput schema / properties / commands / description
      Previous value: -"Canonical generation commands. Each command contains the exact REST GenerationIntent contract and a durable source reference. Write each input.prompt as a compact positive scene description (setting, lighting, mood, camera, pose — for video, motion and camera movement); without art_direction_id the prompt is the entire creative direction, so give it the full scene. The attached garment/avatar/reference images carry product appearance, so never pad prompts with restated garment construction details, product-fidelity warnings, or negative 'do not' instruction blocks; styling intent (fit, tuck, drape) is fine. For video commands, attach available full back or side garment assets that the camera may reveal through input.reference_attachments when capacity permits. Do not combine reference_attachments with img_ref_urls; uploaded garment assets are not attached automatically."New value: +"Canonical generation commands. Each command contains the MCP-safe GenerationIntent fields and a durable source reference. Write each input.prompt as a compact positive scene description (setting, lighting, mood, camera, pose — for video, motion and camera movement); without art_direction_id the prompt is the entire creative direction, so give it the full scene. The attached garment/avatar/reference images carry product appearance, so never pad prompts with restated garment construction details, product-fidelity warnings, or negative 'do not' instruction blocks; styling intent (fit, tuck, drape) is fine. For video commands, attach available full back or side garment assets that the camera may reveal through input.reference_attachments when capacity permits. Do not combine reference_attachments with img_ref_urls; uploaded garment assets are not attached automatically. Webhook callback configuration is API-only."
  18. Changed5 schema fields changed
    • removedInput schema / $defs / GenerationCommand / properties / source / discriminator / mapping
      Removed value: -{
      -  "generation_result": "#/$defs/GenerationResultCommandSource",
      -  "pipeline_step": "#/$defs/PipelineStepCommandSource",
      -  "public_url": "#/$defs/PublicUrlCommandSource",
      -  "uploaded_file": "#/$defs/UploadedFileCommandSource"
      -}
    • removedInput schema / $defs / GenerationResultCommandSource
      Removed value: -{
      -  "properties": {
      -    "generation_result_id": {
      -      "minimum": 1,
      -      "type": "integer"
      -    },
      -    "type": {
      -      "const": "generation_result",
      -      "type": "string"
      -    }
      -  },
      -  "required": [
      -    "type",
      -    "generation_result_id"
      -  ],
      -  "type": "object"
      -}
    • removedInput schema / $defs / PipelineStepCommandSource
      Removed value: -{
      -  "description": "Durable identity for a source produced by an earlier pipeline step.",
      -  "properties": {
      -    "output_index": {
      -      "minimum": 0,
      -      "type": "integer"
      -    },
      -    "post_claim_reference": {
      -      "minLength": 1,
      -      "type": "string"
      -    },
      -    "step_index": {
      -      "minimum": 0,
      -      "type": "integer"
      -    },
      -    "type": {
      -      "const": "pipeline_step",
      -      "type": "string"
      -    }
      -  },
      -  "required": [
      -    "type",
      -    "post_claim_reference",
      -    "step_index",
      -    "output_index"
      -  ],
      -  "type": "object"
      -}
    • removedInput schema / $defs / PublicUrlCommandSource
      Removed value: -{
      -  "properties": {
      -    "image_url": {
      -      "minLength": 1,
      -      "type": "string"
      -    },
      -    "type": {
      -      "const": "public_url",
      -      "type": "string"
      -    }
      -  },
      -  "required": [
      -    "type",
      -    "image_url"
      -  ],
      -  "type": "object"
      -}
    • removedInput schema / $defs / UploadedFileCommandSource
      Removed value: -{
      -  "properties": {
      -    "type": {
      -      "const": "uploaded_file",
      -      "type": "string"
      -    },
      -    "uploaded_file_id": {
      -      "minimum": 1,
      -      "type": "integer"
      -    }
      -  },
      -  "required": [
      -    "type",
      -    "uploaded_file_id"
      -  ],
      -  "type": "object"
      -}
  19. First observed

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With destructiveHint=false and readOnlyHint=false already declared, the description adds genuine value by disclaiming side effects the agent would otherwise worry about on a mutation: no media generation, no credit charge, no reusable-library write. It also discloses the return payload (revised plan and quote). It does not explain the concurrency/staleness behavior implied by expected_brief_revision, which is the main unaddressed risk for a revision tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the capability, then the exclusion, then the return/side-effect profile. Every sentence carries distinct information and nothing repeats the schema or the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter mutation with no output schema, the description covers scope, exclusions, return values, and side-effect boundaries, and the nested LookInput/ProposedDirection types are well documented in-schema. The gap is expected_brief_revision, whose optimistic-concurrency meaning is left entirely implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 90%, so the schema already carries nearly all parameter meaning and the baseline of 3 applies. The description adds only marginal semantics — that the Automation is assigned "by ID" and that operation definitions are not accepted. The one undocumented parameter, expected_brief_revision, gets no explanation in the description either.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states a specific verb and enumerates the resources it mutates: shoot looks, direction, model settings, and Automation assignment. It clearly separates itself from the plan_shoot_* family. It does not explain how it differs from the similarly named mcp_edit_brief or modify_shoot_board siblings, so differentiation is incomplete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Accepts no operation definitions; use the separately published plan_shoot tools to change individual steps" is an explicit exclusion plus a named alternative, which is strong guidance. However, it gives no criteria for choosing between update_brief, propose_brief, mcp_edit_brief, and modify_shoot_board, all of which appear to touch brief/board state.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources