Skip to main content
Glama

Propose Brief

propose_brief

Saves a new brief and shows it on the board: the looks to shoot, their direction and the Automation they run through. The previous brief is kept (one that ran stays in Brief History). Returns the saved brief, or the problems to fix.

Input Schema

NameRequiredDescriptionDefault
looksYesThe looks to shoot, each one outfit worn in the shoot, with ids from read_shoot_board.
titleNoThe shoot's name, only in the user's own words; otherwise leave it out.
board_idYesThe open Shoot Board's board_id, from Open Shoot Board or your context.
directionYesRequired: what every shot of every look follows, exactly what Generate runs: 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_workflow_idNoThe Automation every look runs through, as it is saved: a workflow_id from brief_inputs.automations or save_automation. Omitted while the board pins one (brief_inputs.pinned_automation): every look runs it.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 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"
      -}
    • removedInput schema / properties / flow
      Removed value: -{
      -  "$ref": "#/$defs/RecipeSpec",
      -  "default": null,
      -  "description": "The complete photoshoot flow to build for this shoot: shots and their dependent steps. Omit to reuse recipe_workflow_id, the pinned flow or the current flow. Does not save a reusable library Automation."
      -}
  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": "The complete photoshoot flow to build for this shoot: shots and their dependent steps. Omit to reuse recipe_workflow_id, the pinned flow or the current flow. Does not save a reusable library Automation."
      +}
    • changedInput schema / properties / recipe_workflow_id / description
      Previous value: -"The Automation every look runs through, as it is saved: a workflow_id from brief_inputs.automations or create_automation. Omitted while the board pins one (brief_inputs.pinned_automation): every look runs it."New value: +"The Automation every look runs through, as it is saved: a workflow_id from brief_inputs.automations or save_automation. Omitted while the board pins one (brief_inputs.pinned_automation): every look runs it."
  3. Changed8 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"
      -}
    • addedInput schema / properties / image_model
      Added value: +{
      +  "default": null,
      +  "description": "The shoot's image model: a slug from brief_inputs.ai_models (omit: kept).",
      +  "type": "string"
      +}
    • removedInput schema / properties / recipe
      Removed value: -{
      -  "$ref": "#/$defs/RecipeSpec",
      -  "default": null,
      -  "description": "The shots and steps the user described (views, crops, edits, upscale, video): Uwear builds them as a new automation. Not with recipe_workflow_id."
      -}
    • changedInput schema / properties / recipe_workflow_id / description
      Previous value: -"An automation from read_shoot_board's brief_inputs.automations that every look runs through as is (only when it matches what the user asked for). Not with recipe. Omitted while the board pins one (brief_inputs.pinned_automation): every look runs it."New value: +"The Automation every look runs through, as it is saved: a workflow_id from brief_inputs.automations or create_automation. Omitted while the board pins one (brief_inputs.pinned_automation): every look runs it."
    • addedInput schema / properties / video_model
      Added value: +{
      +  "default": null,
      +  "description": "The shoot's video model: a slug from brief_inputs.ai_models (omit: kept).",
      +  "type": "string"
      +}
  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 direction: prompt, art_direction_id (a saved art direction), or both."New value: +"Required: what every shot of every look follows, exactly what Generate runs: 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."
    • removedInput schema / properties / image_model
      Removed value: -{
      -  "default": null,
      -  "description": "The brief's image model (a slug from brief_inputs.ai_models). Not with recipe.",
      -  "type": "string"
      -}
    • 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 that every look runs through as is (only when it matches what the user asked for). Not with recipe. Omitted while the board pins one (brief_inputs.pinned_automation): every look runs it."
    • removedInput schema / properties / video_model
      Removed value: -{
      -  "default": null,
      -  "description": "The brief's video model (a slug from brief_inputs.ai_models). Not with recipe.",
      -  "type": "string"
      -}
  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: -"What every shot of every look follows: 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 direction: 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 that every look runs through as is (only when it matches what the user asked for), or a past brief's. Not with recipe. Omitted: the board's pinned one (brief_inputs.pinned_automation), else the board brief's."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. Changed5 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 / direction / description
      Previous value: -"What every shot of every look follows, exactly what Generate runs: 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: +"What every shot of every look follows: 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: -"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: -"The Automation every look runs through as is: one from read_shoot_board's brief_inputs.automations that matches what the user asked for, or a past brief's (get_brief recipes[].workflow_id) to shoot it again; Uwear may save a copy as this shoot's automation draft. Not with recipe. Omitted: the board's pinned Automation (brief_inputs.pinned_automation), else the board brief's."New value: +"An automation from read_shoot_board's brief_inputs.automations that every look runs through as is (only when it matches what the user asked for), or a past brief's. Not with recipe. Omitted: the board's pinned one (brief_inputs.pinned_automation), else the board brief's."
  8. Changed11 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
      +}
    • removedInput schema / properties / direction / default
      Removed value: -null
    • changedInput schema / properties / direction / description
      Previous value: -"Required unless from_brief_id: what every shot of every look follows, exactly what Generate runs: 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: +"What every shot of every look follows, exactly what Generate runs: 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."
    • removedInput schema / properties / from_brief_id
      Removed value: -{
      -  "default": null,
      -  "description": "\"The same\" on other clothing: a brief_id that ran. The new brief keeps its automations as they are now, its direction, AI model and output (leave out direction, recipe and recipe_workflow_id); a model_id, location_id or reference_ids left out or empty is that brief's looks' in turn. If the user asked to run it, call confirm_brief in the same turn; otherwise do not.",
      -  "minimum": 1,
      -  "type": "integer"
      -}
    • addedInput schema / properties / image_model
      Added value: +{
      +  "default": null,
      +  "description": "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).",
      +  "type": "string"
      +}
    • 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 that every look runs through as is (only when it matches what the user asked for). Not with recipe. Omitted while the board pins one (brief_inputs.pinned_automation): every look runs it."New value: +"The Automation every look runs through as is: one from read_shoot_board's brief_inputs.automations that matches what the user asked for, or a past brief's (get_brief recipes[].workflow_id) to shoot it again; Uwear may save a copy as this shoot's automation draft. Not with recipe. Omitted: the board's pinned Automation (brief_inputs.pinned_automation), else the board brief's."
    • addedInput schema / properties / video_model
      Added value: +{
      +  "default": null,
      +  "description": "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).",
      +  "type": "string"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "looks",
      -  "board_id"
      -]New value: +[
      +  "looks",
      +  "direction",
      +  "board_id"
      +]
  9. Changed6 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 / direction / default
      Added value: +null
    • changedInput schema / properties / direction / description
      Previous value: -"Required: what every shot of every look follows, exactly what Generate runs: 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: +"Required unless from_brief_id: what every shot of every look follows, exactly what Generate runs: 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."
    • addedInput schema / properties / from_brief_id
      Added value: +{
      +  "default": null,
      +  "description": "\"The same\" on other clothing: a brief_id that ran. The new brief keeps its automations as they are now, its direction, AI model and output (leave out direction, recipe and recipe_workflow_id); a model_id, location_id or reference_ids left out or empty is that brief's looks' in turn. If the user asked to run it, call confirm_brief in the same turn; otherwise do not.",
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • 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."
      +}
    • changedInput schema / required
      Previous value: -[
      -  "looks",
      -  "direction",
      -  "board_id"
      -]New value: +[
      +  "looks",
      +  "board_id"
      +]
  10. Changed4 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": "The shoot's one art direction (a library id, or the id save_art_direction returns); omit it to keep the current one.",
      -  "minimum": 1,
      -  "type": "integer"
      -}
    • addedInput schema / properties / direction
      Added value: +{
      +  "$ref": "#/$defs/ProposedDirection",
      +  "description": "Required: what every shot of every look follows, exactly what Generate runs: 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 / required
      Previous value: -[
      -  "looks",
      -  "board_id"
      -]New value: +[
      +  "looks",
      +  "direction",
      +  "board_id"
      +]
  11. Changed19 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: -"Propose a brief made exclusively of canonical generation commands."
    • addedInput schema / properties / art_direction_id
      Added value: +{
      +  "default": null,
      +  "description": "The shoot's one art direction (a library id, or the id save_art_direction returns); omit it to keep the current one.",
      +  "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"
      +}
    • 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"
      -}
    • removedInput schema / properties / execute_immediately
      Removed value: -{
      -  "default": false,
      -  "description": "Set true only when the user explicitly asks to prepare/create/generate/run the photoshoot without another review step. When true, Uwear persists the brief, confirms it, and executes it directly if credits and validation allow; otherwise it falls back to the editable BriefProposal.",
      -  "type": "boolean"
      -}
    • addedInput schema / properties / looks
      Added value: +{
      +  "description": "The looks to shoot, each one outfit worn in the shoot, with ids from read_shoot_board.",
      +  "items": {
      +    "$ref": "#/$defs/LookInput"
      +  },
      +  "maxItems": 50,
      +  "minItems": 1,
      +  "type": "array"
      +}
    • addedInput schema / properties / recipe
      Added value: +{
      +  "$ref": "#/$defs/RecipeSpec",
      +  "default": null,
      +  "description": "The shots and steps the user described (views, crops, edits, upscale, video): Uwear builds them as a new automation. Not with recipe_workflow_id."
      +}
    • addedInput schema / properties / recipe_workflow_id
      Added value: +{
      +  "default": null,
      +  "description": "An automation from read_shoot_board's brief_inputs.automations that every look runs through as is (only when it matches what the user asked for). Not with recipe. Omitted while the board pins one (brief_inputs.pinned_automation): every look runs it.",
      +  "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": "",
      +  "description": "The shoot's name, only in the user's own words; otherwise leave it out.",
      +  "maxLength": 80,
      +  "type": "string"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "commands"
      -]New value: +[
      +  "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

A3.8/5.0
Behavior4/5

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

Annotations already declare it is not read-only, not destructive, and not idempotent; the description adds real context beyond that by stating the previous brief is preserved in Brief History and that the call returns either the saved brief or "the problems to fix" (i.e. validation failures). It stops short of describing what problems look like or whether a failed call leaves partial state.

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?

Two sentences, front-loaded with the action, then the persistence rule and the return contract. No filler and nothing buried.

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 7-parameter mutation with nested look objects and no output schema, the description covers the essential outcome (new brief saved, old one retained, success/failure return). It omits prerequisites such as needing an open board or what "problems" resolve to, which is the main remaining gap.

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 100%, so the schema already documents looks, direction, board_id, and the model/automation slugs in detail. The description restates the high-level shape (looks, direction, automation) without adding format or constraint detail beyond the schema, so the baseline 3 applies.

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?

"Saves a new brief and shows it on the board" gives a specific verb and resource, and the follow-on clause enumerates what the brief contains (looks, direction, automation). An agent can tell it creates a brief rather than reading or editing one, but it never names siblings like confirm_brief or update_brief, so the boundary against those is left implicit.

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

Usage Guidelines3/5

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

The parenthetical about Brief History implies this is the create path and that prior briefs survive, which hints at when to use it. However, there is no explicit statement of when to choose propose_brief over confirm_brief, update_brief, or mcp_edit_brief, and no prerequisites (e.g. an open board) are spelled out.

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