{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/venice-ai/main/json-schema/venice-ai-queue-video-request-schema.json",
  "title": "QueueVideoRequest",
  "description": "Request body for video generation. Available fields and valid values vary by model.",
  "x-generated": "2026-10-13",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/venice-ai-openapi.yml#/components/schemas/QueueVideoRequest",
  "type": "object",
  "properties": {
    "model": {
      "type": "string",
      "description": "The model to use for video generation."
    },
    "consents": {
      "type": "object",
      "properties": {
        "seedance": {
          "type": "object",
          "properties": {
            "confirmed_terms_and_privacy": {
              "type": "boolean",
              "enum": [
                true
              ],
              "description": "Confirms acceptance of the current provider policy text returned in the needs_consent response."
            },
            "confirmed_legal_right": {
              "type": "boolean",
              "enum": [
                true
              ],
              "description": "Confirms the API user has the legal right to use the submitted media."
            },
            "confirmed_screening_acknowledged": {
              "type": "boolean",
              "enum": [
                true
              ],
              "description": "Acknowledges that submitted media may be screened before processing."
            }
          },
          "required": [
            "confirmed_terms_and_privacy",
            "confirmed_legal_right",
            "confirmed_screening_acknowledged"
          ]
        }
      },
      "description": "Optional provider-specific consent attestations. Required only for models that return a needs_consent response."
    },
    "prompt": {
      "type": "string",
      "minLength": 1,
      "maxLength": 20000,
      "description": "The prompt to use for video generation. Required for most models; optional for H3 Max Multi-Angle. The maximum length varies by model (default 2500 characters, up to 20000 for some models)."
    },
    "negative_prompt": {
      "type": "string",
      "maxLength": 20000,
      "description": "Optional negative prompt. The maximum length varies by model (default 2500 characters, up to 20000 for some models)."
    },
    "duration": {
      "type": "string",
      "enum": [
        "1s",
        "2s",
        "3s",
        "4s",
        "5s",
        "6s",
        "7s",
        "8s",
        "9s",
        "10s",
        "11s",
        "12s",
        "13s",
        "14s",
        "15s",
        "16s",
        "17s",
        "18s",
        "19s",
        "20s",
        "21s",
        "22s",
        "23s",
        "24s",
        "25s",
        "26s",
        "27s",
        "28s",
        "29s",
        "30s",
        "-1",
        "1 gen",
        "auto",
        "Auto"
      ],
      "description": "The duration of the video to generate. Available options vary by model. For Seedance 2.5 reference-to-video edit jobs, `-1` or `auto` matches output length to the source clip (requires reference_video_urls on queue, or reference_video_total_duration on quote; source must be 4–30s)."
    },
    "aspect_ratio": {
      "type": "string",
      "enum": [
        61,
        123,
        182,
        184,
        243,
        245,
        304,
        556,
        561,
        969,
        1269,
        "adaptive",
        "auto"
      ],
      "description": "The aspect ratio of the video. Available options vary by model. Some models do not support aspect_ratio. For Seedance 2.x reference-to-video edit/extend, `adaptive` or `auto` matches output aspect ratio to the source clip (requires reference_video_urls on queue, or reference_video_total_duration on quote)."
    },
    "omni_reference_task_type": {
      "type": "string",
      "enum": [
        "auto",
        "reference",
        "edit",
        "extend"
      ],
      "description": "Optional Seedance 2.5 reference-to-video task-type hint forwarded to BytePlus (`auto` | `reference` | `edit` | `extend`). Aliases `editing`→`edit` and `extension`→`extend` are accepted on the queue API. Pre-guides classification to reduce async TaskTypeConstraint errors. The prompt must still match the chosen type. When omitted, Venice infers from the prompt if reference_video_urls are present. Not supported on other models."
    },
    "resolution": {
      "type": "string",
      "enum": [
        "256p",
        "360p",
        "480p",
        "540p",
        "580p",
        "720p",
        "1080p",
        "1440p",
        "2160p",
        "2k",
        "4k",
        "1x",
        "2x",
        "4x",
        "2K",
        "480P",
        "768P",
        "1080P",
        "true_1080p"
      ],
      "description": "The resolution of the video. Available options vary by model. Some models do not support resolution. Use upscale_factor for upscale models."
    },
    "upscale_factor": {
      "type": "integer",
      "description": "For upscale models only. 1 = quality enhancement, 2 = double resolution (default), 4 = quadruple.",
      "enum": [
        1,
        2,
        4
      ],
      "default": 2
    },
    "enhancement_model": {
      "type": "string",
      "description": "For enhancement models only. The provider-side enhancement model. Available values are listed per model in GET /models constraints.topaz.models."
    },
    "target_fps": {
      "type": "integer",
      "description": "For enhancement models only. Target FPS for frame interpolation (16-120). Doubles the price on upscaling endpoints when ≥48; scales linearly on interpolation. Omit to keep the source frame rate."
    },
    "softness": {
      "type": "number",
      "minimum": 1,
      "maximum": 5,
      "description": "For enhancement models only. Softness level (1-5, sharpest to softest)."
    },
    "creativity": {
      "type": "number",
      "minimum": 0,
      "maximum": 1,
      "description": "For enhancement models only. How much new detail the model invents (0.0-1.0)."
    },
    "realism": {
      "type": "number",
      "minimum": 0,
      "maximum": 1,
      "description": "For enhancement models only. Bias generated detail toward photorealism (0.0-1.0)."
    },
    "sharp": {
      "type": "number",
      "minimum": 0,
      "maximum": 1,
      "description": "For enhancement models only. Output sharpness (0.0 softens, 0.5 neutral, 1.0 strong)."
    },
    "compression": {
      "type": "number",
      "minimum": 0,
      "maximum": 1,
      "description": "For enhancement models only. Compression artifact removal level (0.0-1.0)."
    },
    "noise": {
      "type": "number",
      "minimum": 0,
      "maximum": 1,
      "description": "For enhancement models only. Noise reduction level (0.0-1.0)."
    },
    "halo": {
      "type": "number",
      "minimum": 0,
      "maximum": 1,
      "description": "For enhancement models only. Halo reduction level (0.0-1.0)."
    },
    "grain": {
      "type": "number",
      "minimum": 0,
      "maximum": 0.1,
      "description": "For enhancement models only. Film grain amount (0.0-0.1)."
    },
    "recover_detail": {
      "type": "number",
      "minimum": 0,
      "maximum": 1,
      "description": "For enhancement models only. Recover original detail level (0.0-1.0)."
    },
    "h264_output": {
      "type": "boolean",
      "description": "For enhancement models only. Output H.264 instead of the default H.265."
    },
    "output_format": {
      "type": "string",
      "enum": [
        "mp4",
        "prores"
      ],
      "description": "For enhancement models only (SDR-to-HDR). Output container: mp4 (10-bit H265 HDR10) or prores (10-bit ProRes)."
    },
    "slowdown_factor": {
      "type": "integer",
      "description": "For enhancement models only (frame interpolation). Slow-motion factor: 2 makes the output twice as long at the target FPS, up to 8x. Multiplies the billed duration.",
      "enum": [
        1,
        2,
        4,
        8
      ]
    },
    "audio": {
      "type": "boolean",
      "default": true,
      "description": "For models which support audio generation and configuration. Defaults to true."
    },
    "camera_trajectory": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "time": {
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "azimuth": {
            "type": "number"
          },
          "elevation": {
            "type": "number",
            "minimum": -90,
            "maximum": 90
          },
          "distance": {
            "type": "number",
            "minimum": 0,
            "exclusiveMinimum": true
          }
        },
        "required": [
          "time",
          "azimuth",
          "elevation",
          "distance"
        ],
        "additionalProperties": false
      },
      "minItems": 2,
      "maxItems": 12,
      "description": "For H3 Max Multi-Angle only. 2–12 camera keyframes with strictly increasing normalized time (0–1), azimuth in degrees (signed; total absolute travel at most 32 turns), elevation in degrees (−90 to 90), and positive distance relative to the initial camera (1 = unchanged). Omit to leave the camera path to the model. Requires image_url; aspect ratio follows that image."
    },
    "image_url": {
      "type": "string",
      "description": "For image-to-video models, the reference image. Must be a URL (http/https) or a data URL (data:image/...)."
    },
    "end_image_url": {
      "type": "string",
      "description": "For models that support end images or transitions, the end frame image. Must be a URL or data URL."
    },
    "image_strength": {
      "type": "number",
      "minimum": 0,
      "maximum": 1,
      "description": "How strongly the input image guides an image-to-video generation, from 0 to 1. Supported on models that declare image strength. Omitted values use the provider default (1). Does not change the quoted price."
    },
    "audio_url": {
      "type": "string",
      "description": "For models that support audio input, background music. Must be a URL or data URL. Supported: WAV, MP3. Max: 30s, 15MB."
    },
    "video_url": {
      "type": "string",
      "description": "For models that support video input (video-to-video, upscale). Must be a URL or data URL. Supported: MP4, MOV, WebM."
    },
    "reference_image_urls": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 30,
      "description": "For models with reference image support, up to 30 images for character/style consistency. Each must be a URL or data URL."
    },
    "reference_video_urls": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 10,
      "description": "For models with reference video support (e.g. Seedance 2.0 R2V), up to 10 reference video URLs (`role: \"reference_video\"`) used to inherit subject motion, camera movement, and overall style. Per-clip 2–15 s, .mp4 or .mov, ≤50 MB; aggregate duration ≤15 s. Each must be a URL or data URL."
    },
    "reference_audio_urls": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 10,
      "description": "For models with reference audio support (e.g. Seedance 2.0 R2V), up to 10 reference audio URLs (`role: \"reference_audio\"`) used as donors for vocal timbre, narration, or sound effects. Per-clip 2–15 s, .wav or .mp3; aggregate duration ≤15 s. Must be paired with at least one reference image or reference video — audio-only Reference workflows are rejected at validation. Each must be a URL or data URL."
    },
    "reference_document_urls": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 1,
      "description": "For models with document / webpage Omni-Reference (Wan 3.0), up to 1 URL. Document files and public webpage URLs are fetched by Venice and forwarded as `type: \"file\"` (≤100 MB). Each must be a URL or data URL."
    },
    "elements": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "frontal_image_url": {
            "type": "string"
          },
          "reference_image_urls": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "maxItems": 3
          },
          "video_url": {
            "type": "string"
          }
        }
      },
      "maxItems": 4,
      "description": "For models with advanced element support (e.g., Kling O3 R2V). Up to 4 elements defining characters/objects. Reference in prompt as @Element1, @Element2, etc."
    },
    "scene_image_urls": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 4,
      "description": "For models with advanced element support. Up to 4 scene reference images. Reference in prompt as @Image1, @Image2, etc."
    },
    "keyframes": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "image_url": {
            "type": "string"
          },
          "frame_index": {
            "type": "integer",
            "minimum": 0
          }
        },
        "required": [
          "image_url",
          "frame_index"
        ]
      },
      "maxItems": 10,
      "description": "For keyframe-driven models. Up to 10 keyframe images pinned to frame positions in the generated 24 fps video. Each frame_index must be unique and no greater than duration × 24."
    }
  },
  "required": [
    "model",
    "duration"
  ]
}