МодельдерБағалауКәсіпорын
500+ AI Model 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-тың кинематографиялық, көп кадрлы оқиғалы бейне генерациясына бағытталған келесі буын көпмодальды бейнеге арналған іргелі моделі. Бір кадрлы мәтіннен бейнеге арналған демо-нұсқалардан өзгеше, Seedance 2.0 референстерге негізделген басқаруға (суреттер, қысқа клиптер, аудио), кадрлар арасындағы кейіпкер/стиль бірізділігіне және аудио/бейненің табиғи синхрондалуына баса назар аударады — кәсіби шығармашылық және алдын ала визуализациялау жұмыс үдерістері үшін ЖИ бейнені пайдалы етуге бағытталған.
Жаңа
Коммерциялық пайдалану
Шолу
Мүмкіндіктер
Баға белгілеу
API
Нұсқалар

Doubao Seedance 2.0 техникалық сипаттамалары

ТармақМәліметтер
Өнімдер желісіByteDance Seedance бейне генерациясы желісі
CometAPI slugdoubao-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 жылғы ақпанда шығарылған). Ол бірнеше суреттерге, бейне клиптерге және аудио файлдарға бір уақытта сілтеме жасай отырып, режиссер деңгейінде дәл басқаруға мүмкіндік беретін біріктірілген аудио‑бейне бірлескен генерациялау архитектурасын қолданады. Табиғи аудио синхронизациясымен кинематографиялық, қозғалысы тұрақты бейнелер жасауға ерекше бейім — шынайы физика, кейіпкерлердің бірізділігі және күрделі сахна композициясы қажет кәсіби авторлар үшін таптырмас шешім.

CometAPI‑дегі Doubao Seedance 2.0‑дің негізгі мүмкіндіктері

  • Біріктірілген мультимодальды генерация: Бір жұмыс ағымында мәтін, сурет, аудио және бейне енгізулерін қабылдайды, осылайша пайдаланушылар тек мәтіндік генераторға қарағанда неғұрлым бай анықтамалық материалмен сахнаны қоя алады.
  • Режиссерлік деңгейдегі басқару: Модель орындау, жарық, көлеңке, камера қозғалысы, қозғалыс ырғағы және дыбыс сипаттамалары бойынша нұсқауларды орындауға арналған.
  • Бейнені өңдеу және кеңейту: Тек алғашқы генерациямен шектелмейді; нақты клиптерді, кейіпкерлерді, әрекеттерді және оқиға желілерін өңдеуді, сондай‑ақ алға/артқа кеңейтуді қолдайды.
  • Күшті аудио‑бейне синхронизациясы: ByteDance екі арналы стерео шығаруды және фондық музыка, қоршаған орта дыбыстары мен дикторлық дауыс әрекетінің синхронизациясын ерекшелейді, нәтижені неғұрлым шынайы әрі әсерлі етеді.
  • Күрделі сахналарда жоғары басқарылушылық: Seedance 1.5‑пен салыстырғанда күрделі өзара әрекеттесулерді, қозғалыс көріністерін және физикалық қисындылықты жақсырақ өңдеу.
  • Өндірістік қолдануға бағытталған шығару: API пропорция, ұзақтық және сутаңба параметрлерін баптауды қолдайды, бұл модельді қайталанатын контент жұмыс ағымдары үшін практикалық етеді.

Эталондық өнімділік

ByteDance Seedance 2.0 ішкі SeedVideoBench-2.0 бағалауын қолданатынын және мәтін‑бейне, сурет‑бейне және мультимодальды тапсырмалар өлшемдері бойынша жетекші орында орналасатынын айтады. Модель Seedance 1.5‑пен салыстырғанда генерация сапасын, физикалық дәлдігін, реализмін және басқарылушылығын жақсартады, әсіресе күрделі өзара әрекеттесу мен қозғалыс көріністерінде.

CometAPI‑дегі Seedance 2.0 API және Seedance 2.0 Fast API режимдері

Модель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‑мен салыстырғанда: Сілтемелік дәлдік пен multi‑shot мүмкіндігі жоғарырақ; ең жоғарғы ұзақтығы сәл қысқа.
  • Veo 3.1‑мен салыстырғанда: Кейіпкер тұрақтылығы мен нұсқауларға адалдықта (reference‑ке бай жұмыс ағымдарында) күштірек; Veo кинематографиялық грейдингте және ұзағырақ клиптерде алда.

Адамға бағдарланған және орындаушылыққа негізделген бейнелерде үздік.

CometAPI‑де Seedance 2.0 AI Video Generator‑ды қолданып көріңіз

1‑қадам: 1‑қадам: API кілтіне тіркелу

Кез келген орнатусыз және кодсыз Doubao Seedance 2.0 мүмкіндіктерін көру үшін бірден CometAPI Playground ішінде бастаңыз. CometAPI тіркелгіңізге кіріп, doubao-seedance-2-0 модель бетіне өтіп, анықтамалық суреттерді, қысқа бейне клиптерді немесе аудио файлдарды жүктеңіз, сипаттамалы нұсқау қосып, бірден алдын ала қарау бейнелерін генерациялаңыз. Бұл Seedance 2.0‑дің қозғалыс тұрақтылығын, кейіпкерлердің келбетін, камера қозғалыстарын және нативті аудио синхронизациясын қалай өңдейтінін тез түсінудің ең жылдам жолы.

2‑қадам: CometAPI арқылы Seedance 2.0 үшін API қолжетімділігін алыңыз

Doubao Seedance 2.0‑ге толық қол жеткізу үшін CometAPI кілтін жасаңыз немесе барын пайдаланыңыз. Кіру жасағаннан кейін консоліңіздегі API Token бөліміне өтіп, жаңа кілт жасаңыз да көшіріңіз. Содан кейін CometAPI‑дағы Seedance 2.0 модель бетіне және API құжаты бөліміне барып, жобаңызға біріктіруге арналған қолдау көрсетілетін параметрлерді қараңыз.

3‑қадам: Seedance 2.0 API арқылы алғашқы сұранысыңызды жіберіңіз

CometAPI endpoint‑ін пайдаланып, айқын мәтіндік нұсқаумен және қажет болса, анықтамалық файлдармен (суреттер, бейне немесе аудио) алғашқы бейне генерациялау сұранысын жіберіңіз. Жүйе тапсырманы асинхронды түрде өңдеп, task ID қайтарады және аяқталғаннан кейін жүктеп алуға болатын MP4 бейнесін ұсынады. Одан соң нұсқауларыңызды нақтылап, баптауларды өзгертіп, маркетингтік бейнелер, әлеуметтік желі контенті, автоматтандырылған бейне құбырлары немесе Seedance 2.0 негізіндегі креативті қолданбалар үшін ауқымды өндіріске көше аласыз.

Бұл жұмыс ағыны сізге Playground‑та жылдам тәжірибе жасап, CometAPI арқылы өндірістік қолдануға біркелкі өтуді қамтамасыз етеді.

CometAPI‑дегі Seedance 2.0‑ды таңдаудың басты себептері

Неліктен Seedance 2.0 үшін CometAPI пайдалану керек

  • API немесе Playground арқылы тікелей қолжетімділік
  • Параметрлерді оңай басқару (ұзақтық, айқындық, формат)
  • Мәтіннен бейнеге және суреттен бейнеге жұмыс ағымдарын қолдайды
  • Асинхронды бейне генерациясы үшін кіріктірілген тапсырма басқаруы

Бірегей әрі әзірлеушіге ыңғайлы API

CometAPI таныс OpenAI‑стиліндегі пішімдермен немесе арнайы бейне тапсырмаларының endpoint‑терімен үздіксіз жұмыс істейтін таза, стандартталған endpoint ұсынады. Volcengine‑нің күрделі аутентификациясы мен аймақтық шектеулеріне тап болмай‑ақ, қарапайым тапсырма құру, polling және MP4 жүктеп алуларға қол жеткізесіз.

Тиімді баға саясаты

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 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.

Doubao-Seedance-2-0 үшін үлгі код және API

[Модель атауы] үшін кешенді үлгі кодтары мен API ресурстарына қол жеткізіп, интеграция процесіңізді жеңілдетіңіз. Біздің толық құжаттама қадам-қадаммен нұсқаулық береді, жобаларыңызда [Модель атауы] мүмкіндіктерін толық пайдалануға көмектеседі.
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 Google-дың Veo 3.1 отбасының жоғары мүмкіндікті қолжетімділігі/конфигурациясын білдіреді — бұл қысқа форматтағы, аудио қолдауы бар бейне модельдерінің буыны, ол одан да бай нативті аудионы, жақсартылған баяндау/монтажды басқару элементтерін және сахнаны кеңейту құралдарын ұсынады.
G

Veo 3.1

Секундына:$0.05
Veo 3.1 — Google компаниясының Veo мәтін мен кескін→бейне модельдер отбасына арналған эволюциялық, бірақ елеулі жаңарту, ол неғұрлым бай нативті аудионы, ұзағырақ әрі басқаруға көбірек икемді бейне нәтижелерін және неғұрлым нәзік өңдеу мен көрініс деңгейіндегі басқару мүмкіндіктерін енгізеді.

Байланысты блогтар

Seedance 2.0 API-ді қалай пайдалану керек
Apr 17, 2026

Seedance 2.0 API-ді қалай пайдалану керек

Seedance 2.0 API — ByteDance компаниясының ең жаңа көпмодальды AI бейне генерациялау моделі (2026 жылғы 9 сәуірде іске қосылды). Ол бір ғана сұрауда мәтін, кескіндер, бейне клиптер және аудионы қабылдап, ұзақтығы 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-пен қалай салыстырылатынын және соңғы рейтингтердің AI арқылы бейне жасауға нені білдіретінін біліңіз.
Seedance 2.0 деген не? Кешенді талдау
Mar 24, 2026
seedance-2-0

Seedance 2.0 деген не? Кешенді талдау

Seedance 2.0 — ByteDance әзірлеген, мәтін, кескіндер, аудио және үлгі бейнелерден жоғары сапалы, кинематографиялық бейнелерді жасай алатын келесі буындағы көпмодальды ЖИ бейне генерациялау моделі. Онда аудио мен бейненің бірлескен генерациясы, қозғалыс тұрақтылығы және үлгіге негізделген өңдеу бар, әрі Artificial Analysis leaderboard сияқты жаһандық бенчмарктерде жылдам көтеріліп, 2026 жылғы үздік ЖИ бейне модельдерінің қатарына енді.