All video models

Jevrouter Video API · image-to-video

q3 · drama clip

vidu/q3/drama-clip:video

Vidu Q3 Drama Clip creates short 8-12 second story-driven drama clips from structured assets, including characters, scenes, and tools.

Create an API key

Options and pricing

Task: image-to-video. Catalog base price: $1.12. The exact quote depends on your inputs; the catalog price is not a fixed per-task charge.

We reserve the quoted maximum before submission, settle the actual generation cost and release the remainder. Set jev.max_cost_usd to your maximum reservation. A quote above this limit is rejected before generation.

Input fieldTypeRequiredOptions / default
namestringYesSee schema
imagestringNoSee schema
stylestringNoSee schema
assetsarrayYesSee schema
contentstringYesSee schema
durationintegerNo[8,9,10,11,12]
placementstringNo["panorama","upload","step"]
resolutionstringNo["720p","1080p"]
aspect_ratiostringNo["9:16","16:9"]
Complete input schema
{
  "type": "object",
  "required": [
    "name",
    "content",
    "assets"
  ],
  "properties": {
    "name": {
      "type": "string",
      "maxLength": 20,
      "description": "The name of the drama generation task. Maximum 20 characters."
    },
    "image": {
      "type": "string",
      "description": "The positioning reference map uploaded by the user."
    },
    "style": {
      "type": "string",
      "maxLength": 30,
      "maxlength": 30,
      "description": "Video style. You can enter styles such as 3D modeling style, 2D animation style, etc. Limited to 30 characters. No punctuation allowed. Default: live action photorealistic."
    },
    "assets": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "name",
          "type",
          "image_uri"
        ],
        "properties": {
          "id": {
            "type": "string",
            "default": "1",
            "description": "Numbers, such as 01, 02, 03, and so on. Note 1: Up to 14 assets can be uploaded, and 3 to 10 are recommended."
          },
          "name": {
            "type": "string",
            "maxLength": 30,
            "description": "Asset name, no more than 30 characters."
          },
          "type": {
            "enum": [
              "character",
              "scene",
              "tool"
            ],
            "type": "string",
            "default": "character",
            "description": "Asset type. Supported values: character, scene, tool.",
            "x-ui-component": "select"
          },
          "image_uri": {
            "type": "string",
            "description": "Reference image for this asset. Supports image URL or Base64-encoded PNG, JPEG, JPG, or WebP.",
            "x-ui-component": "uploader"
          },
          "description": {
            "type": "string",
            "x-rows": 3,
            "maxLength": 600,
            "description": "Optional asset description, such as identity, appearance, or age.",
            "x-ui-component": "textarea"
          }
        },
        "x-order-properties": [
          "id",
          "name",
          "type",
          "image_uri",
          "description"
        ]
      },
      "maxItems": 14,
      "description": "Asset list. Asset IDs are generated automatically by order as 01, 02, 03, and so on.",
      "x-ui-component": "array"
    },
    "content": {
      "type": "string",
      "x-rows": 5,
      "description": "Drama content or script. Supports up to 5000 characters.",
      "x-ui-component": "textarea"
    },
    "duration": {
      "enum": [
        8,
        9,
        10,
        11,
        12
      ],
      "type": "integer",
      "default": 8,
      "description": "Select the fixed duration for this drama clip. This model is designed for short drama fragments, storyboard shots, and scene-level clips. Supported values are 8, 9, 10, 11, and 12 seconds only. Choose the exact clip length you want to generate.",
      "x-ui-component": "select"
    },
    "placement": {
      "enum": [
        "panorama",
        "upload",
        "step"
      ],
      "type": "string",
      "default": "panorama",
      "description": "Placement mode: upload, panorama, or step. Upload is the default and fastest mode. Panorama and step only take effect when upload_image_url is empty. Panorama uses a panoramic reference image. Step uses a sequential reference: pass the previous shot's four-panel grid to the next shot.",
      "x-ui-component": "select"
    },
    "resolution": {
      "enum": [
        "720p",
        "1080p"
      ],
      "type": "string",
      "default": "1080p",
      "description": "Video resolution.",
      "x-ui-component": "select"
    },
    "aspect_ratio": {
      "enum": [
        "9:16",
        "16:9"
      ],
      "type": "string",
      "default": "9:16",
      "description": "The aspect ratio of the generated media.",
      "x-ui-component": "select"
    }
  },
  "x-order-properties": [
    "name",
    "content",
    "assets",
    "image",
    "placement",
    "duration",
    "resolution",
    "aspect_ratio",
    "style"
  ],
  "additionalProperties": false
}

Required fields and conditional rules come from the published schema. Catalog support does not mean every option has been independently tested by Jevrouter. Synchronous generation, base64 output and customer callbacks are unavailable.

1. Submit a video task

Allow this model on your Jevrouter key. Replace every placeholder below with a value of the correct type, set a USD limit, and supply any conditional fields required by the schema. Media inputs must use your own accessible URLs; this endpoint does not upload files.

curl https://api.jevrouter.io/v1/videos \
  -H "Authorization: Bearer $JEVROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: video-demo-001" \
  -d @- <<'JSON'
{
  "model": "vidu/q3/drama-clip:video",
  "input": {
    "name": "<name: provide string>",
    "assets": "<assets: provide array>",
    "content": "<content: provide string>",
    "duration": 8,
    "placement": "panorama",
    "resolution": "1080p",
    "aspect_ratio": "9:16"
  },
  "jev": {
    "max_cost_usd": "YOUR_USD_LIMIT"
  }
}
JSON

Save data.id and data.urls.get. An accepted task continues even if you disconnect.

Let Jevrouter choose

Use jev/auto as the model and set task to image-to-video. Your project must enable Auto, and both the project and key must allow Auto and the candidate models.

Auto checks the task type and all supplied input fields against each candidate. It compares live quotes for up to eight compatible candidates, shortlisted by catalog base price. It selects the lowest quote within that shortlist and your budget; this is not a quality ranking or a guarantee of the cheapest model in the entire catalog.

Use common options such as duration, resolution and aspect_ratio at the top level where available. Model-specific options belong in input and may narrow the pool. Unsupported options are rejected, never silently dropped. Without task, Auto defaults to text-to-video.

2. Check the result

curl https://api.jevrouter.io/v1/videos/REQUEST_ID \
  -H "Authorization: Bearer $JEVROUTER_API_KEY"

Replace REQUEST_ID with your task ID. Wait at least three seconds between checks. Status progresses from queued to processing, then completed or failed. Results appear in data.outputs as media URLs or structured output objects.

If the submission response is lost, repeat the original request with the same idempotency key. A new key may create another billed task.

Results and billing

View the request in your dashboard or query /v1/requests/REQUEST_ID for reservation and settlement details. Results may be ready before the bill arrives.

Result links are retained for up to seven days and may expire earlier. Save your video while it is available. Anyone with a media URL may be able to access it. Cancellation and customer webhooks are not available.

Build the complete flow