> ## Documentation Index
> Fetch the complete documentation index at: https://apidoc.cometapi.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Tạo một video Seedance

> Tạo một tác vụ video Seedance trên CometAPI. Seedance 2.0 hỗ trợ các giá trị WxH chính xác lên đến 4K để tạo video từ văn bản và ảnh tham chiếu.

<Info>
  Chọn một giá trị `WxH` được ghi trong tài liệu từ bảng bên dưới cho trường `size`.
</Info>

## Sử dụng ảnh tham chiếu

Chỉ các mô hình Seedance 2.0 mới chấp nhận `input_reference`. Thêm một tệp `input_reference` để tạo nội dung có hướng dẫn bằng ảnh. Đối với các Prompt nhiều ảnh tham chiếu nâng cao, hãy lặp lại cùng một trường multipart theo thứ tự tải lên.

Seedance 2.0 nhạy với cách Prompt liên kết từng ảnh tham chiếu với cảnh. Hãy tham chiếu đến các tệp đã tải lên theo thứ tự, chẳng hạn `[Image 1]`, `[Image 2]` và `[Image 3]`, rồi gán cho mỗi ảnh một vai trò rõ ràng:

* Dùng `[Image 1]` cho chủ thể chính, nhân vật hoặc sản phẩm.
* Dùng `[Image 2]` cho chủ thể phụ, đạo cụ hoặc bạn đồng hành.
* Dùng `[Image 3]` cho nền, bối cảnh, ánh sáng hoặc phong cách.

Mô tả những gì cần vẫn dễ nhận biết, những gì có thể thay đổi, hành động, chuyển động máy quay, phong cách hình ảnh và cảnh. Một Prompt mơ hồ có thể khiến video được tạo trông như thể ảnh tham chiếu không được sử dụng, ngay cả khi tệp tải lên đã được chấp nhận.

Cấu trúc Prompt này đáng tin cậy hơn việc chỉ liệt kê ảnh:

```text theme={null}
Use the uploaded images in order: keep the boy wearing glasses and a blue T-shirt from [Image 1], add the corgi puppy from [Image 2], and use the lawn from [Image 3] as the setting. Create a 4-second 3D cartoon video with the boy and puppy sitting together, a slow camera push-in, soft daylight, and no extra characters.
```

## Thời lượng theo mô hình

Nếu bỏ qua `seconds`, CometAPI sẽ yêu cầu một clip dài 5 giây. Gửi `seconds` dưới dạng chuỗi khi bạn cần thời lượng cụ thể.

| Dòng mô hình                      | Được hỗ trợ `seconds` | Mặc định | Hành vi ở giới hạn                    |
| --------------------------------- | --------------------- | -------- | ------------------------------------- |
| Seedance 2.0 và Seedance 2.0 Fast | `4`-`15`              | `5`      | Sử dụng số giây nguyên trong phạm vi. |
| Seedance 1.5 Pro                  | `4`-`12`              | `5`      | Sử dụng số giây nguyên trong phạm vi. |
| Seedance 1.0 Pro                  | `2`-`10`              | `5`      | Sử dụng số giây nguyên trong phạm vi. |

## Hỗ trợ kích thước theo model

Bảng dưới đây tuân theo ánh xạ độ phân giải Seedance chính thức và tập hợp các giá trị kích thước đã công bố tại một nơi.

Đối với `1080p`, cột ngoài cùng bên phải liệt kê các giá trị `Seedance 1.5 Pro` và `Seedance 2.0` đã được ghi nhận. `Seedance 2.0 Fast` không được liệt kê trong bảng `1080p` chính thức đó.

Các mục `4K` chỉ áp dụng cho `doubao-seedance-2-0`. Bạn có thể dùng chúng cho yêu cầu chuyển văn bản thành video hoặc chuyển hình ảnh thành video có bao gồm `input_reference`. Chúng không áp dụng cho `doubao-seedance-2-0-fast`. Hãy truyền chính xác giá trị `WxH` hiển thị trong bảng.

| Lớp độ phân giải | Tỷ lệ khung hình | Giá trị pixel cho dòng Seedance 1.0 | Giá trị pixel cho Seedance 1.5 Pro / Seedance 2.0 / Seedance 2.0 Fast |
| ---------------- | ---------------- | ----------------------------------- | --------------------------------------------------------------------- |
| `480p`           | `16:9`           | `864x480`                           | `864x496`                                                             |
|                  | `4:3`            | `736x544`                           | `752x560`                                                             |
|                  | `1:1`            | `640x640`                           | `640x640`                                                             |
|                  | `3:4`            | `544x736`                           | `560x752`                                                             |
|                  | `9:16`           | `480x864`                           | `496x864`                                                             |
|                  | `21:9`           | `960x416`                           | `992x432`                                                             |
| `720p`           | `16:9`           | `1248x704`                          | `1280x720`                                                            |
|                  | `4:3`            | `1120x832`                          | `1112x834`                                                            |
|                  | `1:1`            | `960x960`                           | `960x960`                                                             |
|                  | `3:4`            | `832x1120`                          | `834x1112`                                                            |
|                  | `9:16`           | `704x1248`                          | `720x1280`                                                            |
|                  | `21:9`           | `1504x640`                          | `1470x630`                                                            |
| `1080p`          | `16:9`           | `1920x1088`                         | `1920x1080`                                                           |
|                  | `4:3`            | `1664x1248`                         | `1664x1248`                                                           |
|                  | `1:1`            | `1440x1440`                         | `1440x1440`                                                           |
|                  | `3:4`            | `1248x1664`                         | `1248x1664`                                                           |
|                  | `9:16`           | `1088x1920`                         | `1080x1920`                                                           |
|                  | `21:9`           | `2176x928`                          | `2206x946`                                                            |
| `4K`             | `16:9`           | —                                   | `3840x2160` (Chỉ dành cho Seedance 2.0)                               |
|                  | `4:3`            | —                                   | `3326x2494` (Chỉ dành cho Seedance 2.0)                               |
|                  | `1:1`            | —                                   | `2880x2880` (Chỉ dành cho Seedance 2.0)                               |
|                  | `3:4`            | —                                   | `2494x3326` (Chỉ dành cho Seedance 2.0)                               |
|                  | `9:16`           | —                                   | `2160x3840` (Chỉ dành cho Seedance 2.0)                               |
|                  | `21:9`           | —                                   | `4398x1886` (Chỉ dành cho Seedance 2.0)                               |

Chọn giá trị `WxH` đã được ghi nhận cho model đích. Hỗ trợ `WxH` chính xác vẫn phụ thuộc vào model, vì vậy hãy kiểm tra media đã hoàn tất trước khi dựa vào một kích thước chưa được ghi nhận.


## OpenAPI

````yaml api/openapi/video/seedance/post-seedance-create.openapi.json POST /v1/videos
openapi: 3.1.0
info:
  title: Seedance Video Generation API
  version: 1.0.0
  description: >-
    Create an asynchronous ByteDance Seedance video task through CometAPI.
    Seedance 2.0 models also accept one or more input_reference image files; for
    multiple files, repeat the same multipart field and bind each image in the
    prompt as [Image 1], [Image 2], and so on. Set size to an exact WxH value
    such as 1280x720. The standard doubao-seedance-2-0 model accepts these exact
    4K sizes for text-to-video and reference-image generation: 3840x2160,
    3326x2494, 2880x2880, 2494x3326, 2160x3840, and 4398x1886. These 4K sizes do
    not apply to doubao-seedance-2-0-fast. Save the returned id and poll GET
    /v1/videos/{id} until the status reaches completed.
servers:
  - url: https://api.cometapi.com
security:
  - bearerAuth: []
paths:
  /v1/videos:
    post:
      summary: Create a Seedance video task
      description: >-
        Submit a text-to-video or image-to-video job for any Seedance model
        family. The request body is multipart/form-data so that optional
        input_reference images can be uploaded in the same call. Set size to an
        exact WxH value. The standard doubao-seedance-2-0 model accepts these
        six exact 4K sizes for text-to-video and reference-image generation:
        3840x2160, 3326x2494, 2880x2880, 2494x3326, 2160x3840, and 4398x1886.
        These 4K sizes do not apply to doubao-seedance-2-0-fast. Image-to-video
        is supported only by the Seedance 2.0 models (doubao-seedance-2-0,
        doubao-seedance-2-0-fast); the 1.0 Pro and 1.5 Pro models accept text
        prompts only. For multiple reference images, repeat input_reference in
        upload order and describe each image's role in the prompt with labels
        such as [Image 1], [Image 2], and [Image 3]. The endpoint returns
        immediately with a task id; use GET /v1/videos/{id} to read the final
        result.
      operationId: seedance_create_video
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              required:
                - prompt
                - model
              properties:
                prompt:
                  type: string
                  description: >-
                    Text prompt that describes the video. Required. When using
                    reference images, describe what each uploaded image should
                    control, such as the subject from [Image 1], the secondary
                    object from [Image 2], and the background or style from
                    [Image 3]. Also state the action, camera motion, visual
                    style, and scene.
                  example: >-
                    A slow cinematic camera push across a coastal landscape at
                    sunrise.
                model:
                  type: string
                  description: >-
                    Seedance model id. Only the two 2.0 models accept
                    input_reference.
                  enum:
                    - doubao-seedance-2-0
                    - doubao-seedance-2-0-fast
                    - doubao-seedance-1-5-pro
                    - doubao-seedance-1-0-pro
                  example: doubao-seedance-2-0
                seconds:
                  type: integer
                  description: >-
                    Video duration in seconds. The accepted range depends on the
                    model: doubao-seedance-2-0 and doubao-seedance-2-0-fast
                    accept 4 to 15, doubao-seedance-1-5-pro accepts 4 to 12, and
                    doubao-seedance-1-0-pro accepts 2 to 10. The default is 5
                    for every model.
                  minimum: 2
                  maximum: 15
                  default: 5
                  example: 5
                size:
                  type: string
                  description: >-
                    Output size as an exact WxH value, such as 1280x720. For
                    doubao-seedance-2-0 4K output, use 3840x2160, 3326x2494,
                    2880x2880, 2494x3326, 2160x3840, or 4398x1886. These 4K
                    values work for text-to-video and requests with
                    input_reference, but they do not apply to
                    doubao-seedance-2-0-fast. Exact WxH support remains
                    model-dependent, and an undocumented value can normalize to
                    another size or fail.
                  pattern: ^[1-9]\d{2,3}x[1-9]\d{2,3}$
                  examples:
                    - 1280x720
                    - 1920x1080
                    - 3840x2160
                    - 3326x2494
                    - 2880x2880
                    - 2494x3326
                    - 2160x3840
                    - 4398x1886
                    - 1112x834
                    - 960x960
                    - 834x1112
                    - 720x1280
                    - 1080x1920
                    - 1470x630
                  example: 1280x720
                input_reference:
                  type: string
                  format: binary
                  description: >-
                    Optional reference image uploaded as a multipart file.
                    Repeat this field to send multiple reference images; the
                    order of repeated fields is the order you should reference
                    in the prompt as [Image 1], [Image 2], and so on. Use JPEG
                    or PNG files for best compatibility. Only
                    doubao-seedance-2-0 and doubao-seedance-2-0-fast accept this
                    field; sending it with a 1.0 Pro or 1.5 Pro model returns
                    HTTP 400.
            encoding:
              input_reference:
                contentType: image/jpeg, image/png, image/webp
            examples:
              seedance_2_0_4k_text_to_video:
                summary: Seedance 2.0 4K text-to-video
                value:
                  prompt: >-
                    A slow cinematic camera push across a coastal landscape at
                    sunrise.
                  model: doubao-seedance-2-0
                  seconds: 4
                  size: 3840x2160
      responses:
        '200':
          description: Task created. Save the returned id and poll GET /v1/videos/{id}.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateVideoResponse'
              example:
                id: task_abc123
                task_id: task_abc123
                object: video
                model: doubao-seedance-2-0
                status: queued
                progress: 0
                created_at: 1776681149
        '400':
          description: >-
            The request is missing a required field or contains an out-of-range
            value.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                missing_prompt:
                  summary: prompt field missing
                  value:
                    code: invalid_request
                    message: prompt is required
                missing_model:
                  summary: model field missing
                  value:
                    error:
                      code: ''
                      message: model name is required
                      type: comet_api_error
                invalid_duration:
                  summary: seconds outside the per-model range
                  value:
                    code: InvalidParameter
                    message: >-
                      the parameter duration specified in the request is not
                      valid
                i2v_not_supported:
                  summary: input_reference sent with a 1.0 Pro or 1.5 Pro model
                  value:
                    code: InvalidParameter
                    message: >-
                      The parameter task_type specified in the request is not
                      valid: the specified task_type r2v does not support model
                      seedance-1-5-pro
        '401':
          description: The API key is missing or invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                invalid_token:
                  summary: Bearer token rejected
                  value:
                    error:
                      code: ''
                      message: invalid token
                      type: comet_api_error
      x-codeSamples:
        - lang: Shell
          label: Text-to-video 4K (Seedance 2.0, exact 3840x2160)
          source: |-
            curl https://api.cometapi.com/v1/videos \
              -H "Authorization: Bearer $COMETAPI_KEY" \
              -F 'prompt="A slow cinematic camera push across a coastal landscape at sunrise"' \
              -F 'model="doubao-seedance-2-0"' \
              -F 'seconds="4"' \
              -F 'size="3840x2160"'
        - lang: Python
          label: Text-to-video 4K (Seedance 2.0, exact 3840x2160)
          source: |
            import os
            import requests

            response = requests.post(
                "https://api.cometapi.com/v1/videos",
                headers={"Authorization": "Bearer " + os.environ["COMETAPI_KEY"]},
                data={
                    "prompt": "A slow cinematic camera push across a coastal landscape at sunrise",
                    "model": "doubao-seedance-2-0",
                    "seconds": "4",
                    "size": "3840x2160",
                },
                timeout=30,
            )

            response.raise_for_status()
            print(response.json())
        - lang: JavaScript
          label: Text-to-video 4K (Seedance 2.0, exact 3840x2160)
          source: >
            const form = new FormData();

            form.append("prompt", "A slow cinematic camera push across a coastal
            landscape at sunrise");

            form.append("model", "doubao-seedance-2-0");

            form.append("seconds", "4");

            form.append("size", "3840x2160");


            const response = await fetch("https://api.cometapi.com/v1/videos", {
              method: "POST",
              headers: { Authorization: `Bearer ${process.env.COMETAPI_KEY}` },
              body: form,
            });


            const result = await response.json();

            console.log(result);
        - lang: Shell
          label: Single reference image (Seedance 2.0)
          source: |-
            curl https://api.cometapi.com/v1/videos \
              -H "Authorization: Bearer $COMETAPI_KEY" \
              -F 'prompt="Use [Image 1] as the main visual reference. Preserve the subject identity, clothing colors, and overall composition from [Image 1]. Create a 4-second video with a gentle camera push-in, subtle natural motion, warm daylight, and a realistic cinematic style."' \
              -F 'model="doubao-seedance-2-0"' \
              -F 'seconds="4"' \
              -F 'size="720x1280"' \
              -F 'input_reference=@"/path/to/reference.png"'
        - lang: Python
          label: Single reference image (Seedance 2.0)
          source: >
            import os

            import requests


            prompt = "Use [Image 1] as the main visual reference. Preserve the
            subject identity, clothing colors, and overall composition from
            [Image 1]. Create a 4-second video with a gentle camera push-in,
            subtle natural motion, warm daylight, and a realistic cinematic
            style."


            with open("/path/to/reference.png", "rb") as image:
                response = requests.post(
                    "https://api.cometapi.com/v1/videos",
                    headers={"Authorization": "Bearer " + os.environ["COMETAPI_KEY"]},
                    data={
                        "prompt": prompt,
                        "model": "doubao-seedance-2-0",
                        "seconds": "4",
                        "size": "720x1280",
                    },
                    files=[("input_reference", ("reference.png", image, "image/png"))],
                    timeout=30,
                )

            response.raise_for_status()

            print(response.json())
        - lang: JavaScript
          label: Single reference image (Seedance 2.0)
          source: >
            import { readFile } from "node:fs/promises";


            const prompt = "Use [Image 1] as the main visual reference. Preserve
            the subject identity, clothing colors, and overall composition from
            [Image 1]. Create a 4-second video with a gentle camera push-in,
            subtle natural motion, warm daylight, and a realistic cinematic
            style.";

            const image = await readFile("/path/to/reference.png");


            const form = new FormData();

            form.append("prompt", prompt);

            form.append("model", "doubao-seedance-2-0");

            form.append("seconds", "4");

            form.append("size", "720x1280");

            form.append("input_reference", new Blob([image], { type: "image/png"
            }), "reference.png");


            const response = await fetch("https://api.cometapi.com/v1/videos", {
              method: "POST",
              headers: { Authorization: `Bearer ${process.env.COMETAPI_KEY}` },
              body: form,
            });


            const result = await response.json();

            console.log(result);
        - lang: Shell
          label: Multiple reference images (Seedance 2.0)
          source: |-
            curl https://api.cometapi.com/v1/videos \
              -H "Authorization: Bearer $COMETAPI_KEY" \
              -F 'prompt="Use the uploaded images in order: keep the boy wearing glasses and a blue T-shirt from [Image 1], add the corgi puppy from [Image 2], and use the lawn from [Image 3] as the setting. Create a 4-second 3D cartoon video with the boy and puppy sitting together, a slow camera push-in, soft daylight, and no extra characters."' \
              -F 'model="doubao-seedance-2-0"' \
              -F 'seconds="4"' \
              -F 'size="720x1280"' \
              -F 'input_reference=@"/path/to/seelite_ref_1.png"' \
              -F 'input_reference=@"/path/to/seelite_ref_2.png"' \
              -F 'input_reference=@"/path/to/seelite_ref_3.png"'
        - lang: Python
          label: Multiple reference images (Seedance 2.0)
          source: >
            import os

            import requests


            prompt = "Use the uploaded images in order: keep the boy wearing
            glasses and a blue T-shirt from [Image 1], add the corgi puppy from
            [Image 2], and use the lawn from [Image 3] as the setting. Create a
            4-second 3D cartoon video with the boy and puppy sitting together, a
            slow camera push-in, soft daylight, and no extra characters."


            with open("/path/to/seelite_ref_1.png", "rb") as image_1,
            open("/path/to/seelite_ref_2.png", "rb") as image_2,
            open("/path/to/seelite_ref_3.png", "rb") as image_3:
                response = requests.post(
                    "https://api.cometapi.com/v1/videos",
                    headers={"Authorization": "Bearer " + os.environ["COMETAPI_KEY"]},
                    data={
                        "prompt": prompt,
                        "model": "doubao-seedance-2-0",
                        "seconds": "4",
                        "size": "720x1280",
                    },
                    files=[
                        ("input_reference", ("seelite_ref_1.png", image_1, "image/png")),
                        ("input_reference", ("seelite_ref_2.png", image_2, "image/png")),
                        ("input_reference", ("seelite_ref_3.png", image_3, "image/png")),
                    ],
                    timeout=30,
                )

            response.raise_for_status()

            print(response.json())
        - lang: JavaScript
          label: Multiple reference images (Seedance 2.0)
          source: >
            import { readFile } from "node:fs/promises";


            const prompt = "Use the uploaded images in order: keep the boy
            wearing glasses and a blue T-shirt from [Image 1], add the corgi
            puppy from [Image 2], and use the lawn from [Image 3] as the
            setting. Create a 4-second 3D cartoon video with the boy and puppy
            sitting together, a slow camera push-in, soft daylight, and no extra
            characters.";

            const image1 = await readFile("/path/to/seelite_ref_1.png");

            const image2 = await readFile("/path/to/seelite_ref_2.png");

            const image3 = await readFile("/path/to/seelite_ref_3.png");


            const form = new FormData();

            form.append("prompt", prompt);

            form.append("model", "doubao-seedance-2-0");

            form.append("seconds", "4");

            form.append("size", "720x1280");

            form.append("input_reference", new Blob([image1], { type:
            "image/png" }), "seelite_ref_1.png");

            form.append("input_reference", new Blob([image2], { type:
            "image/png" }), "seelite_ref_2.png");

            form.append("input_reference", new Blob([image3], { type:
            "image/png" }), "seelite_ref_3.png");


            const response = await fetch("https://api.cometapi.com/v1/videos", {
              method: "POST",
              headers: { Authorization: `Bearer ${process.env.COMETAPI_KEY}` },
              body: form,
            });


            const result = await response.json();

            console.log(result);
        - lang: Shell
          label: Text-to-video (exact 1920x1080)
          source: |-
            curl https://api.cometapi.com/v1/videos \
              -H "Authorization: Bearer $COMETAPI_KEY" \
              -F 'prompt="A slow cinematic camera push across a coastal landscape at sunrise"' \
              -F 'model="doubao-seedance-1-5-pro"' \
              -F 'seconds="4"' \
              -F 'size="1920x1080"'
        - lang: Python
          label: Text-to-video (exact 1920x1080)
          source: |
            import os
            import requests

            response = requests.post(
                "https://api.cometapi.com/v1/videos",
                headers={"Authorization": "Bearer " + os.environ["COMETAPI_KEY"]},
                data={
                    "prompt": "A slow cinematic camera push across a coastal landscape at sunrise",
                    "model": "doubao-seedance-2-0",
                    "seconds": "4",
                    "size": "1920x1080",
                },
                timeout=30,
            )

            response.raise_for_status()
            print(response.json())
        - lang: JavaScript
          label: Text-to-video (exact 1920x1080)
          source: >
            const form = new FormData();

            form.append("prompt", "A slow cinematic camera push across a coastal
            landscape at sunrise");

            form.append("model", "doubao-seedance-1-5-pro");

            form.append("seconds", "4");

            form.append("size", "1920x1080");


            const response = await fetch("https://api.cometapi.com/v1/videos", {
              method: "POST",
              headers: { Authorization: `Bearer ${process.env.COMETAPI_KEY}` },
              body: form,
            });


            const result = await response.json();

            console.log(result);
components:
  schemas:
    CreateVideoResponse:
      type: object
      required:
        - id
        - object
        - model
        - status
        - progress
        - created_at
      properties:
        id:
          type: string
          description: Task id. Use it as the path parameter for GET /v1/videos/{id}.
        task_id:
          type: string
          description: Alias of id returned for compatibility. The value matches id.
        object:
          type: string
          description: Object type, always video.
        model:
          type: string
          description: Echo of the requested model id.
        status:
          type: string
          description: Initial task status. Newly created tasks are returned as queued.
          enum:
            - queued
            - in_progress
            - completed
            - failed
            - error
        progress:
          type: integer
          minimum: 0
          maximum: 100
          description: Completion percentage. 0 at creation.
        created_at:
          type: integer
          description: Task creation time as a Unix timestamp in seconds.
      additionalProperties: true
    ErrorResponse:
      description: >-
        Error body. The endpoint returns one of two shapes depending on where
        the validation fails.
      oneOf:
        - type: object
          properties:
            code:
              type:
                - string
                - 'null'
              description: Short error code such as invalid_request or InvalidParameter.
            message:
              type: string
              description: Human-readable error message.
          required:
            - message
          additionalProperties: true
        - type: object
          properties:
            error:
              type: object
              properties:
                code:
                  type:
                    - string
                    - 'null'
                message:
                  type: string
                type:
                  type: string
                  description: Error category, for example comet_api_error.
              required:
                - message
                - type
              additionalProperties: true
          required:
            - error
          additionalProperties: true
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Bearer token authentication. Use your CometAPI key.

````