{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/hermoso-ai/json-schema/hermoso-ai-generation-create-schema.json",
  "title": "GenerationCreate",
  "x-generated": "2026-11-11",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/app_hermoso_ai_rest.json#/components/schemas/GenerationCreate",
  "type": "object",
  "required": [
    "type",
    "prompt"
  ],
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "image",
        "video"
      ],
      "description": "What to make. This enum MAY GROW."
    },
    "prompt": {
      "type": "string",
      "description": "What the ad should show, in plain words."
    },
    "model": {
      "type": "string",
      "description": "A model id from the live catalog (the `hermoso_capabilities` tool lists them with prices). Omit to let Hermoso pick; the quote then prices the model the server would pick."
    },
    "aspect_ratio": {
      "type": "string",
      "description": "e.g. 1:1, 4:5, 9:16, 16:9. Each model lists the ratios it renders."
    },
    "image_size": {
      "type": "string",
      "description": "Image only: a size tier the model lists (for example 1K, 2K)."
    },
    "duration_seconds": {
      "type": "integer",
      "description": "Video only: one of the chosen model’s listed lengths."
    },
    "ref_image": {
      "type": "string",
      "description": "Video only: a Hermoso-hosted image to animate (image-to-video)."
    },
    "ref_images": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Image only: up to 3 Hermoso-hosted images (a `POST /v1/media` or Library `url`) the render uses as its reference. When present the brand’s product photos are not attached for you; the quote prices exactly this."
    },
    "use_brand": {
      "type": "boolean",
      "description": "Image only, default true: attach the profile’s own product photos (and its logo when the prompt asks for one) so the render shows the real product. The quote prices exactly what this attaches."
    },
    "format": {
      "type": "string",
      "enum": [
        "png",
        "gif",
        "svg"
      ],
      "description": "Image only, default png. gif = a short looping animated GIF, svg = an editable vector. Both render on gpt-image-2.6 (default) or gpt-image-2.6-flare from the prompt alone: no ref_images, and the profile’s photos are not attached."
    },
    "frames": {
      "type": "integer",
      "minimum": 2,
      "maximum": 16,
      "description": "format gif only: frames in the loop (default 9)."
    },
    "frame_ms": {
      "type": "integer",
      "minimum": 20,
      "maximum": 2000,
      "description": "format gif only: milliseconds per frame, rounded to 10 (default 200)."
    },
    "complexity": {
      "type": "string",
      "enum": [
        "low",
        "medium",
        "high"
      ],
      "description": "gpt-image-2.6 models only: how much the model plans before drawing (default high). No separate charge."
    }
  }
}