МоделиЦеныПредприятие
500+ API моделей ИИ, всё в одном API. Только в CometAPI
API моделей
Разработчик
Быстрый стартДокументацияПанель управления API
Компания
О насПредприятие
Ресурсы
AI МоделиБлогЖурнал измененийПоддержка
Условия обслуживанияПолитика конфиденциальности
© 2026 CometAPI · All rights reserved
Home/Models/Doubao/Doubao-Seedance-2-0
D

Doubao-Seedance-2-0

В секунду:$0.08
Seedance 2.0 — это базовая мультимодальная модель для видео нового поколения компании ByteDance, ориентированная на кинематографическую генерацию многокадровых повествовательных видео. В отличие от однокадровых демонстраций text-to-video, Seedance 2.0 делает упор на управление на основе референсов (изображения, короткие клипы, аудио), последовательную согласованность персонажа и стиля между кадрами и нативную синхронизацию аудио/видео — с целью сделать видео на основе ИИ полезным для профессиональных творческих и превизуализационных рабочих процессов.
Новый
Коммерческое использование
Обзор
Функции
Цены
API
Версии

Технические характеристики Doubao Seedance 2.0

ПараметрПодробности
Семейство продуктовСемейство генерации видео ByteDance Seedance
Слаг CometAPIdoubao-seedance-2-0
ПоставщикByteDance / BytePlus ModelArk
Тип моделиМодель генерации видео
Режимы вводаТекст, изображение, аудио, видео
Вместимость референсовДо 9 изображений, 3 видеоклипов и 3 аудиоклипов в одном мультимодальном запросе
Тип выводаВидео в формате MP4
Разрешение вывода480p, 720p, 1080p
Соотношения сторон21:9, 16:9, 4:3, 1:1, 3:4, 9:16
Длительность вывода4–15 секунд
Стиль APIАсинхронная генерация видео на базе задач

Что такое Doubao Seedance 2.0?

Doubao Seedance 2.0 — флагманская мультимодальная модель генерации видео компании ByteDance (выпущена в феврале 2026 года). Она использует унифицированную архитектуру совместной аудио‑видеогенерации, которая обеспечивает точный контроль на уровне режиссуры, позволяя одновременно ссылаться на несколько изображений, видеоклипов и аудиофайлов. Модель особенно хорошо справляется с созданием кинематографичных, устойчивых по движению роликов с нативной аудиосинхронизацией — это оптимально для профессиональных создателей, которым нужны реалистичная физика, консистентность персонажей и сложная композиция сцен.

Основные возможности Doubao Seedance 2.0 в CometAPI

  • Унифицированная мультимодальная генерация: Принимает текст, изображения, аудио и видео в одном процессе, позволяя режиссировать сцену с более богатым референс‑материалом, чем в генераторах, работающих только с текстом.
  • Режиссерский контроль: Модель создана для точного следования промптам по исполнению, свету, теням, движениям камеры, ритму движения и звуковым характеристикам.
  • Монтаж и расширение видео: Seedance 2.0 не ограничивается первичной генерацией; поддерживает редактирование конкретных клипов, персонажей, действий и сюжетных линий, а также продление вперёд/назад.
  • Сильная аудиовизуальная синхронизация: ByteDance подчёркивает двухканальный стереовыход и синхронизированные фоновую музыку, окружающие звуки и поведение закадровой речи для более глубокого погружения.
  • Высокая управляемость в сложных сценах: По сравнению с Seedance 1.5 улучшена обработка сложных взаимодействий, динамичных сцен и физической правдоподобности.
  • Ориентация на продакшен: API поддерживает настраиваемые соотношение сторон, длительность и параметры водяного знака, что делает модель удобной для повторяемых контент‑пайплайнов.

Производительность в бенчмарках

По словам ByteDance, Seedance 2.0 использует внутреннюю оценку SeedVideoBench-2.0 и занимает лидирующие позиции в задачах text‑to‑video, image‑to‑video и мультимодальных сценариях. Модель улучшает качество генерации, физическую точность, реалистичность и управляемость по сравнению с Seedance 1.5, особенно в сценах со сложными взаимодействиями и активным движением.

Режимы Seedance 2.0 API и Seedance 2.0 Fast API в CometAPI

МодельИмя модели в CometAPIЛучше всего подходит дляОсновное различие
Seedance 2.0doubao-seedance-2-0Мультимодальная видеогенерация наивысшего качестваСамый широкий стек референсов и наибольшая управляемость в семействе Seedance 2.0.
Seedance 2.0 fastdoubao-seedance-2-0-fastБолее быстрая генерация при небольшой уступке в качествеПо словам ByteDance, сохраняет те же возможности модели, что и Seedance 2.0, но генерирует быстрее.
Seedance 1.5 Prodoubao-seedance-1-5-proПредыдущее поколение аудио‑видеогенерацииSeedance 1.5 Pro позиционируется как нативная совмещённая аудио‑видео модель, тогда как Seedance 2.0 расширяет стек мультимодальных референсов и инструментов редактирования.

Преимущества по сравнению с конкурентами:

  • против Kling 3.0: Лучший контроль мультимодальных референсов и нативное аудио.
  • против Sora 2: Более высокая точность работы с референсами и мультикадровые возможности; немного меньше максимальная длительность.
  • против Veo 3.1: Сильнее в консистентности персонажей и следовании промптам в сценариях с большим числом референсов; Veo лидирует в чистом кинематографическом грейдинге и более длинных клипах.

Особенно хороша для видео, ориентированных на людей и перформанс.

Попробуйте генератор видео Seedance 2.0 на базе ИИ в CometAPI

Шаг 1: Шаг 1: Зарегистрируйтесь, чтобы получить ключ API

Начните прямо в CometAPI Playground, чтобы опробовать Doubao Seedance 2.0 без какой‑либо настройки или кода. Просто войдите в свой аккаунт CometAPI, перейдите на страницу модели doubao-seedance-2-0, загрузите референсные изображения, короткие видеоклипы или аудиофайлы, добавьте описательный промпт и мгновенно сгенерируйте предпросмотры видео. Это самый быстрый способ понять, как Seedance 2.0 обеспечивает согласованность движения, внешний вид персонажей, движения камеры и нативную аудиосинхронизацию.

Шаг 2: Получите доступ к API для Seedance 2.0 в CometAPI

Создайте ключ CometAPI или используйте существующий, чтобы получить полный доступ к Doubao Seedance 2.0. После входа перейдите в раздел API Token в консоли, сгенерируйте новый ключ и скопируйте его. Затем посетите страницу модели Seedance 2.0 и документацию по API в CometAPI, чтобы ознакомиться с поддерживаемыми параметрами для интеграции в ваши проекты.

Шаг 3: Отправьте свой первый запрос к Seedance 2.0 API

Используйте конечную точку CometAPI, чтобы отправить первый запрос на генерацию видео с понятным текстовым промптом и необязательными референс‑файлами (изображения, видео или аудио). Система обработает задачу асинхронно, вернёт идентификатор задачи и предоставит загружаемый MP4‑видеофайл по завершении. Затем вы сможете уточнять промпты, менять настройки и масштабировать решение для маркетинговых роликов, контента для соцсетей, автоматизированных видео‑пайплайнов или креативных приложений на базе Seedance 2.0.

Этот рабочий процесс обеспечивает быстрые эксперименты в CometAPI Playground и плавный переход к использованию в продакшене через CometAPI.

Главные причины выбрать Seedance 2.0 в CometAPI

Почему стоит использовать CometAPI для Seedance 2.0

  • Прямой доступ через API или Playground
  • Удобное управление параметрами (длительность, разрешение, формат)
  • Поддержка сценариев как text‑to‑video, так и image‑to‑video
  • Встроенная обработка задач для асинхронной генерации видео

Унифицированный и удобный для разработчиков API

CometAPI предлагает чистую, стандартизованную конечную точку, которая бесшовно работает с привычными форматами в стиле OpenAI или специализированными эндпойнтами для видеозадач. Вы получаете простое создание задач, опрос статуса и загрузку MP4 без необходимости разбираться со сложной аутентификацией Volcengine или региональными ограничениями.

Выгодное ценообразование

CometAPI, как правило, предлагает более конкурентные по‑секундные тарифы по сравнению с прямыми провайдерами, что позволяет генерировать высококачественные видео в масштабе для маркетинга, соцсетей или автоматизированных пайплайнов без превышения бюджета.

Быстрое тестирование в Playground

Экспериментируйте сразу в CometAPI Playground. Загружайте референсные изображения, видео и аудиофайлы, корректируйте промпты и просматривайте результаты за считанные минуты — идеально для итераций над стилем, движением и аудиосинхронизацией до выхода в продакшен.

Короче говоря, если вам нужна творческая мощь Seedance 2.0 — лучший в классе контроль референсов, естественная динамика и нативное аудио — без хлопот прямого доступа к ByteDance, CometAPI на данный момент — одна из лучших платформ для его использования.

ЧАВО

What kinds of inputs does Seedance 2.0 support for video generation?

Seedance 2.0 поддерживает мультимодальные входные данные, включая текстовые подсказки, до 9 изображений, до 3 коротких видеоклипов и до 3 аудиофайлов, которые можно свободно комбинировать для насыщенной и управляемой генерации.

Can Seedance 2.0 maintain character and style consistency across multiple video shots?

Да — Seedance 2.0 разработан для цельного многокадрового повествования с последовательными персонажами, визуальным стилем и атмосферой между сценами, что снижает типичные проблемы дрейфа AI‑видео.

What outputs and quality levels can I expect from Seedance 2.0 videos?

Seedance 2.0 может создавать видео кинематографического уровня (с разрешением до 2K) с нативной аудиодорожкой, синхронизированным диалогом и естественным синтезом движения, как правило, длительностью 5–60 секунд.

How does Seedance 2.0 handle audio and lip synchronization?

Модель совместно генерирует аудио и видео, обеспечивая нативную аудио‑визуальную синхронизацию с синхронизацией губ на уровне фонем на 8+ языках для естественной речи и звуковых эффектов.

Is Seedance 2.0 suitable for professional creative projects like marketing or narrative shorts?

Да — мультимодальное управление, межсценовая непрерывность и высокая точность вывода Seedance 2.0 делают его подходящим для маркетинговых видео, повествовательных короткометражек, рекламных роликов и других профессиональных задач.

How do referencing assets (images, video clips) work in Seedance 2.0 prompts?

Пользователи могут загружать референсные материалы и затем на естественном языке описывать, как каждый из них должен влиять на движение, работу камеры или стилистические элементы, обеспечивая тонкий контроль над генерируемым контентом.

Does Seedance 2.0 allow editing and extension of existing videos?

Да — модель поддерживает расширение видео и точечное редактирование, например добавление сцен, замену персонажей или изменение отдельных сегментов при сохранении неизменённых частей.

What are known limitations or typical generation lengths with Seedance 2.0?

Типичная длительность результата составляет от ~5 до ~60 секунд на одно видео, а комбинирование большого числа ассетов или использование настроек высокого разрешения может увеличить время генерации.

Функции для Doubao-Seedance-2-0

Изучите ключевые функции Doubao-Seedance-2-0, разработанные для повышения производительности и удобства использования. Узнайте, как эти возможности могут принести пользу вашим проектам и улучшить пользовательский опыт.

Цены для Doubao-Seedance-2-0

Изучите конкурентоспособные цены на Doubao-Seedance-2-0, разработанные для различных бюджетов и потребностей использования. Наши гибкие планы гарантируют, что вы платите только за то, что используете, что упрощает масштабирование по мере роста ваших требований. Узнайте, как Doubao-Seedance-2-0 может улучшить ваши проекты, сохраняя при этом управляемые расходы.

doubao-seedance Video Generation Pricing

Parameters

ParameterDescription
Duration (seconds)4–15 seconds, default 5 seconds
Aspect Ratio (size)21:9 / 16:9 / 4:3 / 1:1 / 3:4 / 9:16, default 16:9
Resolution480p / 720p / 1080p*, default 720p

*1080p only available for doubao-seedance-1-5-pro and doubao-seedance-1-0-pro

Pricing (Per Second)

Model480p720p1080p
doubao-seedance-2-0$0.08$0.24—
doubao-seedance-2-0-fast$0.064$0.192—
doubao-seedance-1-5-pro$0.018$0.04147$0.09331
doubao-seedance-1-0-pro$0.01875$0.0432$0.0972

💡 Billed per second. Total cost = price per second × video duration (seconds). Duration range: 4–15 seconds.

Пример кода и API для Doubao-Seedance-2-0

Получите доступ к исчерпывающим примерам кода и ресурсам API для Doubao-Seedance-2-0, чтобы упростить процесс интеграции. Наша подробная документация предоставляет пошаговые инструкции, помогая вам использовать весь потенциал Doubao-Seedance-2-0 в ваших проектах.
POST
/v1/videos
Python
JavaScript
Curl
import json
import os
import time

import requests

# Get your CometAPI key from https://www.cometapi.com/console/token, and paste it here
COMETAPI_KEY = os.environ.get("COMETAPI_KEY") or "<YOUR_COMETAPI_KEY>"
BASE_URL = "https://api.cometapi.com"
OUTPUT_DIR = "./output"
POLL_INTERVAL_SECONDS = 10
RETRY_DELAY_SECONDS = 5
MAX_CREATE_ATTEMPTS = 5
MAX_QUERY_ATTEMPTS = 3
TERMINAL_STATUSES = {"success", "completed", "failed", "error"}
SUCCESS_STATUSES = {"success", "completed"}

def is_progress_complete(progress):
    if isinstance(progress, int):
        return progress >= 100
    if isinstance(progress, float):
        return progress >= 100
    if isinstance(progress, str):
        try:
            return float(progress.rstrip("%")) >= 100
        except ValueError:
            return False
    return False

def is_transient_status(status_code):
    return status_code == 429 or 500 <= status_code < 600

def create_task(files):
    for attempt in range(1, MAX_CREATE_ATTEMPTS + 1):
        response = requests.post(
            f"{BASE_URL}/v1/videos",
            headers=headers,
            files=files,
            timeout=30,
        )
        if response.ok:
            return response
        if not is_transient_status(response.status_code) or attempt == MAX_CREATE_ATTEMPTS:
            response.raise_for_status()
        print(f"Create request returned {response.status_code}, retrying...")
        time.sleep(RETRY_DELAY_SECONDS)

    raise SystemExit("Failed to create task.")

def get_task(task_id):
    for attempt in range(1, MAX_QUERY_ATTEMPTS + 1):
        response = requests.get(
            f"{BASE_URL}/v1/videos/{task_id}",
            headers=headers,
            timeout=15,
        )
        if response.ok:
            return response
        if not is_transient_status(response.status_code) or attempt == MAX_QUERY_ATTEMPTS:
            response.raise_for_status()
        print(f"Status request returned {response.status_code}, retrying...")
        time.sleep(RETRY_DELAY_SECONDS)

    raise SystemExit("Failed to query task.")

if COMETAPI_KEY == "<YOUR_COMETAPI_KEY>":
    print("Set COMETAPI_KEY before running this example.")
    raise SystemExit(0)

headers = {"Authorization": f"Bearer {COMETAPI_KEY}"}

create_response = create_task(
    {
        "prompt": (None, "A slow cinematic camera push across a coastal landscape at sunrise."),
        "model": (None, "doubao-seedance-2-0"),
        "seconds": (None, "5"),
        "size": (None, "16:9"),
        "resolution": (None, "720p"),
    }
)
create_response.raise_for_status()
create_result = create_response.json()

task_id = create_result.get("id") or create_result.get("task_id")
if not task_id:
    print(json.dumps(create_result, indent=2))
    raise SystemExit("No task id returned.")

print(f"Task created: {task_id}")
print(f"Initial status: {create_result.get('status')}")

while True:
    task_response = get_task(task_id)
    task_response.raise_for_status()
    task = task_response.json()
    status = str(task.get("status") or "unknown")
    normalized_status = status.lower()
    progress = task.get("progress")
    should_try_download = normalized_status in SUCCESS_STATUSES or (
        normalized_status == "unknown" and is_progress_complete(progress)
    )

    print(f"Status: {status}, progress: {progress}")

    if should_try_download or normalized_status in TERMINAL_STATUSES:
        if should_try_download:
            video_url = task.get("video_url") or ""
            content_url = f"{BASE_URL}/v1/videos/{task_id}/content"
            output_path = os.path.join(OUTPUT_DIR, f"{task_id}.mp4")

            os.makedirs(OUTPUT_DIR, exist_ok=True)
            with requests.get(
                content_url,
                headers=headers,
                timeout=120,
                stream=True,
            ) as video_response:
                video_response.raise_for_status()
                with open(output_path, "wb") as output_file:
                    for chunk in video_response.iter_content(chunk_size=8192):
                        if chunk:
                            output_file.write(chunk)

            print(f"Video URL: {video_url}")
            print(f"Content endpoint: {content_url}")
            print(f"Saved to {output_path}")
            print(f"File size: {os.path.getsize(output_path)} bytes")
        else:
            print(json.dumps(task, indent=2))
            raise SystemExit(1)
        break

    time.sleep(POLL_INTERVAL_SECONDS)

Python Code Example

import json
import os
import time

import requests

# Get your CometAPI key from https://www.cometapi.com/console/token, and paste it here
COMETAPI_KEY = os.environ.get("COMETAPI_KEY") or "<YOUR_COMETAPI_KEY>"
BASE_URL = "https://api.cometapi.com"
OUTPUT_DIR = "./output"
POLL_INTERVAL_SECONDS = 10
RETRY_DELAY_SECONDS = 5
MAX_CREATE_ATTEMPTS = 5
MAX_QUERY_ATTEMPTS = 3
TERMINAL_STATUSES = {"success", "completed", "failed", "error"}
SUCCESS_STATUSES = {"success", "completed"}


def is_progress_complete(progress):
    if isinstance(progress, int):
        return progress >= 100
    if isinstance(progress, float):
        return progress >= 100
    if isinstance(progress, str):
        try:
            return float(progress.rstrip("%")) >= 100
        except ValueError:
            return False
    return False


def is_transient_status(status_code):
    return status_code == 429 or 500 <= status_code < 600


def create_task(files):
    for attempt in range(1, MAX_CREATE_ATTEMPTS + 1):
        response = requests.post(
            f"{BASE_URL}/v1/videos",
            headers=headers,
            files=files,
            timeout=30,
        )
        if response.ok:
            return response
        if not is_transient_status(response.status_code) or attempt == MAX_CREATE_ATTEMPTS:
            response.raise_for_status()
        print(f"Create request returned {response.status_code}, retrying...")
        time.sleep(RETRY_DELAY_SECONDS)

    raise SystemExit("Failed to create task.")


def get_task(task_id):
    for attempt in range(1, MAX_QUERY_ATTEMPTS + 1):
        response = requests.get(
            f"{BASE_URL}/v1/videos/{task_id}",
            headers=headers,
            timeout=15,
        )
        if response.ok:
            return response
        if not is_transient_status(response.status_code) or attempt == MAX_QUERY_ATTEMPTS:
            response.raise_for_status()
        print(f"Status request returned {response.status_code}, retrying...")
        time.sleep(RETRY_DELAY_SECONDS)

    raise SystemExit("Failed to query task.")

if COMETAPI_KEY == "<YOUR_COMETAPI_KEY>":
    print("Set COMETAPI_KEY before running this example.")
    raise SystemExit(0)

headers = {"Authorization": f"Bearer {COMETAPI_KEY}"}

create_response = create_task(
    {
        "prompt": (None, "A slow cinematic camera push across a coastal landscape at sunrise."),
        "model": (None, "doubao-seedance-2-0"),
        "seconds": (None, "5"),
        "size": (None, "16:9"),
        "resolution": (None, "720p"),
    }
)
create_response.raise_for_status()
create_result = create_response.json()

task_id = create_result.get("id") or create_result.get("task_id")
if not task_id:
    print(json.dumps(create_result, indent=2))
    raise SystemExit("No task id returned.")

print(f"Task created: {task_id}")
print(f"Initial status: {create_result.get('status')}")

while True:
    task_response = get_task(task_id)
    task_response.raise_for_status()
    task = task_response.json()
    status = str(task.get("status") or "unknown")
    normalized_status = status.lower()
    progress = task.get("progress")
    should_try_download = normalized_status in SUCCESS_STATUSES or (
        normalized_status == "unknown" and is_progress_complete(progress)
    )

    print(f"Status: {status}, progress: {progress}")

    if should_try_download or normalized_status in TERMINAL_STATUSES:
        if should_try_download:
            video_url = task.get("video_url") or ""
            content_url = f"{BASE_URL}/v1/videos/{task_id}/content"
            output_path = os.path.join(OUTPUT_DIR, f"{task_id}.mp4")

            os.makedirs(OUTPUT_DIR, exist_ok=True)
            with requests.get(
                content_url,
                headers=headers,
                timeout=120,
                stream=True,
            ) as video_response:
                video_response.raise_for_status()
                with open(output_path, "wb") as output_file:
                    for chunk in video_response.iter_content(chunk_size=8192):
                        if chunk:
                            output_file.write(chunk)

            print(f"Video URL: {video_url}")
            print(f"Content endpoint: {content_url}")
            print(f"Saved to {output_path}")
            print(f"File size: {os.path.getsize(output_path)} bytes")
        else:
            print(json.dumps(task, indent=2))
            raise SystemExit(1)
        break

    time.sleep(POLL_INTERVAL_SECONDS)

JavaScript Code Example

import fs from "fs";
import path from "path";

// Get your CometAPI key from https://www.cometapi.com/console/token, and paste it here
const api_key = process.env.COMETAPI_KEY || "<YOUR_COMETAPI_KEY>";
const base_url = "https://api.cometapi.com";
const output_dir = "./output";
const poll_interval_ms = 10_000;
const retry_delay_ms = 5_000;
const max_create_attempts = 5;
const max_query_attempts = 3;
const terminal_statuses = new Set(["success", "completed", "failed", "error"]);
const success_statuses = new Set(["success", "completed"]);

function is_progress_complete(progress) {
  if (typeof progress === "number") {
    return progress >= 100;
  }

  if (typeof progress === "string") {
    const numeric = Number(progress.replace(/%$/, ""));
    return Number.isFinite(numeric) && numeric >= 100;
  }

  return false;
}

function is_transient_status(status) {
  return status === 429 || status >= 500;
}

async function fetch_with_retry(url, options, attempts, label) {
  for (let attempt = 1; attempt <= attempts; attempt += 1) {
    const response = await fetch(url, options);
    if (response.ok) {
      return response;
    }

    if (!is_transient_status(response.status) || attempt === attempts) {
      return response;
    }

    console.log(`${label} returned ${response.status}, retrying...`);
    await new Promise((resolve) => setTimeout(resolve, retry_delay_ms));
  }

  throw new Error(`${label} failed`);
}

if (api_key === "<YOUR_COMETAPI_KEY>") {
  console.log("Set COMETAPI_KEY before running this example.");
  process.exit(0);
}

const headers = {
  Authorization: `Bearer ${api_key}`,
};

const form = new FormData();
form.set("prompt", "A slow cinematic camera push across a coastal landscape at sunrise.");
form.set("model", "doubao-seedance-2-0");
form.set("seconds", "5");
form.set("size", "16:9");
form.set("resolution", "720p");

const create_response = await fetch_with_retry(`${base_url}/v1/videos`, {
  method: "POST",
  headers,
  body: form,
}, max_create_attempts, "Create request");

if (!create_response.ok) {
  console.log(await create_response.text());
  process.exit(1);
}

const create_result = await create_response.json();
const task_id = create_result.id || create_result.task_id;

if (!task_id) {
  console.log(JSON.stringify(create_result, null, 2));
  process.exit(1);
}

console.log(`Task created: ${task_id}`);
console.log(`Initial status: ${create_result.status}`);

while (true) {
  const task_response = await fetch_with_retry(`${base_url}/v1/videos/${task_id}`, {
    headers,
  }, max_query_attempts, "Status request");

  if (!task_response.ok) {
    console.log(await task_response.text());
    process.exit(1);
  }

  const task = await task_response.json();
  const status = String(task.status || "unknown");
  const normalized_status = status.toLowerCase();
  const progress = task.progress;
  const should_try_download = success_statuses.has(normalized_status) || (
    normalized_status === "unknown" && is_progress_complete(progress)
  );

  console.log(`Status: ${status}, progress: ${progress}`);

  if (should_try_download || terminal_statuses.has(normalized_status)) {
    if (should_try_download) {
      const video_url = task.video_url || "";
      const content_url = `${base_url}/v1/videos/${task_id}/content`;
      const output_path = path.join(output_dir, `${task_id}.mp4`);

      if (!fs.existsSync(output_dir)) {
        fs.mkdirSync(output_dir, { recursive: true });
      }

      const video_response = await fetch(content_url, { headers });
      if (!video_response.ok) {
        console.log(await video_response.text());
        process.exit(1);
      }

      const video_buffer = Buffer.from(await video_response.arrayBuffer());
      fs.writeFileSync(output_path, video_buffer);

      console.log(`Video URL: ${video_url}`);
      console.log(`Content endpoint: ${content_url}`);
      console.log(`Saved to ${output_path}`);
      console.log(`File size: ${fs.statSync(output_path).size} bytes`);
    } else {
      console.log(JSON.stringify(task, null, 2));
      process.exit(1);
    }
    break;
  }

  await new Promise((resolve) => setTimeout(resolve, poll_interval_ms));
}

Curl Code Example

#!/bin/bash

set -euo pipefail

# Get your CometAPI key from https://www.cometapi.com/console/token
# Export it as: export COMETAPI_KEY="your-key-here"

if [[ -z "${COMETAPI_KEY:-}" ]]; then
  echo "Set COMETAPI_KEY before running this example."
  exit 0
fi

BASE_URL="https://api.cometapi.com"
OUTPUT_DIR="./output"
POLL_INTERVAL_SECONDS=10
RETRY_DELAY_SECONDS=5
MAX_CREATE_ATTEMPTS=5
MAX_QUERY_ATTEMPTS=3

is_progress_complete() {
  local progress="$1"
  local normalized="${progress%%%}"

  if [[ -z "$normalized" ]]; then
    return 1
  fi

  [[ "$normalized" =~ ^[0-9]+([.][0-9]+)?$ ]] || return 1
  awk -v value="$normalized" 'BEGIN { exit !(value >= 100) }'
}

create_task() {
  local attempt=1
  while (( attempt <= MAX_CREATE_ATTEMPTS )); do
    local response
    local status_code
    response=$(curl -sS -w $'\n%{http_code}' "${BASE_URL}/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="5"' \
      -F 'size="16:9"' \
      -F 'resolution="720p"')

    status_code=$(echo "$response" | tail -n 1)
    CREATE_RESPONSE=$(echo "$response" | sed '$d')

    if [[ "$status_code" =~ ^2 ]]; then
      return 0
    fi

    if [[ "$status_code" == "429" || "$status_code" =~ ^5 ]] && (( attempt < MAX_CREATE_ATTEMPTS )); then
      echo "Create request returned ${status_code}, retrying..."
      sleep "$RETRY_DELAY_SECONDS"
      (( attempt += 1 ))
      continue
    fi

    echo "$CREATE_RESPONSE"
    return 1
  done
}

get_task() {
  local task_id="$1"
  local attempt=1
  while (( attempt <= MAX_QUERY_ATTEMPTS )); do
    local response
    local status_code
    response=$(curl -sS -w $'\n%{http_code}' "${BASE_URL}/v1/videos/${task_id}" \
      -H "Authorization: Bearer $COMETAPI_KEY")

    status_code=$(echo "$response" | tail -n 1)
    TASK_RESPONSE=$(echo "$response" | sed '$d')

    if [[ "$status_code" =~ ^2 ]]; then
      return 0
    fi

    if [[ "$status_code" == "429" || "$status_code" =~ ^5 ]] && (( attempt < MAX_QUERY_ATTEMPTS )); then
      echo "Status request returned ${status_code}, retrying..."
      sleep "$RETRY_DELAY_SECONDS"
      (( attempt += 1 ))
      continue
    fi

    echo "$TASK_RESPONSE"
    return 1
  done
}

create_task

TASK_ID=$(echo "$CREATE_RESPONSE" | jq -r '.id // .task_id // empty')

if [[ -z "$TASK_ID" ]]; then
  echo "$CREATE_RESPONSE" | jq .
  echo "No task id returned."
  exit 1
fi

echo "Task created: $TASK_ID"
echo "Initial status: $(echo "$CREATE_RESPONSE" | jq -r '.status // empty')"

while true; do
  get_task "$TASK_ID"

  STATUS=$(echo "$TASK_RESPONSE" | jq -r '.status // empty')
  NORMALIZED_STATUS=$(echo "$STATUS" | tr '[:upper:]' '[:lower:]')
  PROGRESS=$(echo "$TASK_RESPONSE" | jq -r '.progress // empty')
  SHOULD_TRY_DOWNLOAD=0

  if [[ "$NORMALIZED_STATUS" == "success" || "$NORMALIZED_STATUS" == "completed" ]]; then
    SHOULD_TRY_DOWNLOAD=1
  elif [[ "$NORMALIZED_STATUS" == "unknown" ]] && is_progress_complete "$PROGRESS"; then
    SHOULD_TRY_DOWNLOAD=1
  fi

  echo "Status: ${STATUS}, progress: ${PROGRESS}"

  if [[ "$SHOULD_TRY_DOWNLOAD" == "1" || "$NORMALIZED_STATUS" == "failed" || "$NORMALIZED_STATUS" == "error" ]]; then
    if [[ "$SHOULD_TRY_DOWNLOAD" == "1" ]]; then
      VIDEO_URL=$(echo "$TASK_RESPONSE" | jq -r '.video_url // empty')
      CONTENT_URL="${BASE_URL}/v1/videos/${TASK_ID}/content"
      OUTPUT_PATH="${OUTPUT_DIR}/${TASK_ID}.mp4"

      mkdir -p "$OUTPUT_DIR"
      curl -fsS "$CONTENT_URL" \
        -H "Authorization: Bearer $COMETAPI_KEY" \
        -o "$OUTPUT_PATH"

      if [[ ! -s "$OUTPUT_PATH" ]]; then
        echo "Failed to download video"
        exit 1
      fi

      echo "Video URL: ${VIDEO_URL}"
      echo "Content endpoint: ${CONTENT_URL}"
      echo "Saved to ${OUTPUT_PATH}"
      echo "File size: $(wc -c < "$OUTPUT_PATH" | tr -d ' ') bytes"
    else
      echo "$TASK_RESPONSE" | jq .
      exit 1
    fi
    break
  fi

  sleep "$POLL_INTERVAL_SECONDS"
done

Версии Doubao-Seedance-2-0

Причина наличия нескольких снимков Doubao-Seedance-2-0 может включать такие потенциальные факторы, как: изменения в выходных данных после обновлений, требующие сохранения старых снимков для обеспечения согласованности; предоставление разработчикам переходного периода для адаптации и миграции; а также наличие разных снимков, соответствующих глобальным или региональным конечным точкам для оптимизации пользовательского опыта. Для получения подробной информации о различиях между версиями обратитесь к официальной документации.
version
doubao-seedance-2-0
doubao-seedance-2-0-fast

Больше моделей

O

Sora 2 Pro

В секунду:$0.24
Sora 2 Pro — наша самая передовая и мощная модель генерации медиаконтента, способная создавать видео с синхронизированным звуком. Она может создавать детализированные, динамичные видеоролики из текста на естественном языке или из изображений.
O

Sora 2

В секунду:$0.08
Сверхмощная модель для генерации видео со звуковыми эффектами, поддерживает формат чата.
M

mj_fast_video

За запрос:$0.6
Midjourney video generation
X

Grok Imagine Video

В секунду:$0.04
Создавайте видео на основе текстовых подсказок, анимируйте статические изображения или редактируйте существующие видео с помощью естественного языка. API позволяет настраивать длительность, соотношение сторон и разрешение создаваемых видео — при этом SDK автоматически выполняет асинхронный опрос.
G

Veo 3.1 Pro

В секунду:$0.25
Veo 3.1-Pro обозначает доступ/конфигурацию с расширенными возможностями семейства Veo 3.1 от Google — поколения видеомоделей короткой формы с поддержкой аудио, которые добавляют более богатый встроенный звук, улучшенные средства управления повествованием и монтажом, а также инструменты расширения сцен.
G

Veo 3.1

В секунду:$0.05
Veo 3.1 — инкрементальное, но существенное обновление Google для семейства Veo «текст и изображение→видео», которое добавляет более богатое нативное аудио, более длинные и лучше контролируемые видеоролики, а также более тонкое редактирование и управление на уровне сцен.

Связанные блоги

Как использовать API Seedance 2.0
Apr 17, 2026

Как использовать API Seedance 2.0

Seedance 2.0 API — это новейшая мультимодальная модель ИИ для генерации видео от ByteDance (запущенная 9 апреля 2026 года). Она принимает текст, изображения, видеофрагменты и аудио в одном запросе, чтобы создавать кинематографичные 4–15-секундные видео в формате MP4 с родной синхронизацией звука, управлением камерой уровня режиссёра и исключительной согласованностью движения. Для использования: зарегистрируйтесь на CometAPI.com, получите ключ API, отправьте асинхронное задание через REST, опрашивайте до завершения и скачайте видео по URL.
Что такое HappyHorse-1.0? Как сравнить Seedance 2.0?
Apr 11, 2026
seedance-2-0

Что такое HappyHorse-1.0? Как сравнить Seedance 2.0?

Узнайте, что такое HappyHorse-1.0, почему он возглавил рейтинг видео Artificial Analysis, как он сравнивается с Seedance 2.0 и что означают последние рейтинги для генерации видео с ИИ.
Что такое Seedance 2.0? Всесторонний анализ
Mar 24, 2026
seedance-2-0

Что такое Seedance 2.0? Всесторонний анализ

Seedance 2.0 — мультимодальная модель генерации видео на базе ИИ нового поколения, разработанная ByteDance, способная создавать высококачественные, кинематографичные видеоролики из текста, изображений, аудио и референсных видео. Она отличается совместной генерацией аудио и видео, устойчивостью движения и редактированием на основе референсов, и быстро поднялась в глобальных рейтингах, таких как Artificial Analysis leaderboard, войдя в число ведущих моделей ИИ для видео в 2026 году.