Sari la documentație
Pe această pagină

Seedance 2.0

Generează videoclipuri cu Seedance 2.0 folosind text, primul și ultimul cadru sau referințe multimodale. Această pagină acoperă întregul flux, de la solicitare până la rezultat.

ID model API: seedance-2-0

Generarea este asincronă. Salvează parametrul taskId returnat la crearea sarcinii, apoi interoghează statusul acesteia sau primește un webhook.

Funcționalități

FuncțieValori acceptate
Rezoluție de ieșire480p · 720p · 1080p · 4k
Durată de ieșire4–15 secunde
Raport de aspect16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive
Imagini de referințăMaxim 9 imagini
Videoclipuri de referințăMaxim 3 videoclipuri
Fișiere audio de referințăMaxim 3 fișiere audio
Toate referințele combinateMaxim 12 fișiere de referință în total
Durată totală per grup video/audio15 secunde
seed-1 până la 4294967295

Tarife și credite

Generarea video este tarifată în credite, în funcție de durata facturabilă exprimată în secunde. În absența unui videoclip de intrare, durata facturabilă este egală cu durata videoclipului generat; în cazul utilizării unui videoclip de intrare, durata facturabilă include și durata videoclipului de referință.

Tabelul de mai jos prezintă creditele tarifate pe secundă, nu costul total al unei sarcini. Tariful depinde de model, de rezoluția de redare și de utilizarea videoclipurilor de referință în modul de conversie referință-video. Consultați formulele și exemplele de sub tabel pentru calculul costului total.

Rezoluție de ieșireFără intrare videoCu intrare video
480p6 credite/secundă4 credite/secundă
720p12 credite/secundă8 credite/secundă
1080p30 credite/secundă20 credite/secundă
4k70 credite/secundă40 credite/secundă
  • Fără intrare video: secunde de ieșire × tariful fără video.
  • Cu intrare video: (secunde de ieșire + secunde măsurate ale videoclipului de referință) × tariful cu video. Serverul măsoară durata totală a videoclipului de referință și o rotunjește în plus la secunde întregi înainte de facturare.
  • Referințele de tip imagine sau exclusiv audio folosesc tariful fără video. Tariful de facturare cu video de referință se aplică doar în modul referință-la-video, atunci când sunt furnizate referințe video.

Exemple de calcul al costurilor

Generare text-la-video de 5 secunde la 720p: 5 × 12 = 60 credite.

Generare de 5 secunde la 720p cu un videoclip de referință de 5 secunde: (5 + 5) × 8 = 80 credite.

Creditele sunt rezervate la trimiterea solicitării și sunt încasate doar în caz de succes. Sarcinile eșuate sau care au expirat intră în fluxul de rambursare. Statusul de facturare refund_failed înseamnă că rambursarea nu s-a putut finaliza; verifică jurnalele API sau contactează echipa de asistență.

Autentificare

Creează o cheie API în panoul de control. Cheia completă este afișată o singură dată. Păstreaz-o în siguranță pe serverul tău și trimite-o ca token Bearer la fiecare solicitare.

URL de bază

https://api.seevio.ai
Authorization: Bearer sk_live_your_api_key
Content-Type: application/json

Setează variabila de mediu SEEVIO_API_KEY înainte de a rula aceste exemple. Exemplele în JavaScript rulează pe serverul tău cu Node.js; exemplele în Python utilizează pachetul requests.

Ghid rapid

Trimite această solicitare minimă, salvează valoarea taskId returnată, apoi folosește exemplul de interogare a sarcinii de mai jos. Valoarea creditelor din răspunsul de creare reprezintă suma rezervată.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-0",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "text-to-video",
    "aspect_ratio": "16:9",
    "generate_audio": true
  }
}'

Exemplu de răspuns pentru crearea sarcinii

După acceptarea cererii de mai sus, API-ul returnează acest răspuns JSON. Valoarea taskId este identificatorul de sarcină utilizat pentru interogările ulterioare de stare, iar credits reprezintă numărul de credite rezervate pentru această sarcină. Acest răspuns confirmă crearea sarcinii, nu și faptul că videoclipul este gata. Trebuie să interogați periodic starea sarcinii (polling) sau să folosiți un Webhook pentru a primi rezultatele video.

{
  "taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "credits": 60
}

Creează o sarcină

POST https://api.seevio.ai/v1/videos/generations

Trimite un obiect JSON care să conțină model și input, plus un parametru opțional callback_url. Specifică întotdeauna ID-ul exact al modelului indicat pe această pagină; omiterea parametrului model va selecta automat seedance-2-0.

Corp solicitare

CâmpTipObligatoriuDescriere și constrângeri
model
stringDa

ID model. Pentru a utiliza Seedance 2.0, setează acest câmp la seedance-2-0.

callback_url
stringNu

Endpoint HTTPS public pentru callback-urile de tip POST în caz de finalizare sau eșec. Rețelele private și localhost nu sunt permise.

Exemplu: https://example.com/webhooks/seevio
input
objectDa

Setările de generare. Trebuie să conțină un prompt completat.

Parametri de intrare

Proprietatea image_urls este obligatorie în modul image-to-video. Modul reference-to-video necesită cel puțin o referință validă în image_urls, video_urls sau audio_urls.

Furnizați image_urls, video_urls și audio_urls ca liste de șiruri URL (string[]). Fiecare URL furnizat trebuie să fie accesibil public prin HTTPS, inclusiv fișierele media ignorate de modul selectat.

CâmpTipObligatoriuValoare implicităDescriere și constrângeri
input.prompt
stringDa

Fiecare mod necesită introducerea unui prompt. Acesta poate conține cel mult 10.000 de caractere înainte de trunchiere și nu poate fi format exclusiv din spații goale.

Exemplu: A cat surfing at sunset
input.generation_type
stringNutext-to-video

text-to-video folosește doar promptul; image-to-video folosește 1–2 imagini; reference-to-video folosește referințe de tip imagine, video și/sau audio.

Valori acceptate
text-to-video | image-to-video | reference-to-video
input.image_urls
string[]Condiționat[]

image-to-video: 1 imagine pentru primul cadru, sau 2 imagini ordonate pentru primul și ultimul cadru. reference-to-video: până la 9 imagini. Ignorat în modul text-to-video.

Exemplu: ["https://example.com/first-frame.jpg"]
input.video_urls
string[]Condiționat[]

Transmis doar în modul reference-to-video; până la 3 videoclipuri și în limita a 15 secunde combinate. Ignorat în alte moduri.

Exemplu: ["https://example.com/source.mp4"]
input.audio_urls
string[]Condiționat[]

Transmis doar în modul reference-to-video; până la 3 fișiere audio și în limita a 15 secunde combinate. Ignorat în alte moduri. Fișierele audio nu pot fi folosite ca singurele materiale de referință pentru acest model. Când furnizați audio_urls, trebuie să adăugați și cel puțin o imagine de referință în image_urls sau un videoclip de referință în video_urls.

Exemplu: ["https://example.com/music.mp3"]
input.duration
integerNu5

Număr întreg reprezentând durata de ieșire, de la 4 la 15 secunde.

Valori acceptate
4–15
Exemplu: 5
input.aspect_ratio
stringNuadaptive

Raportul de aspect al videoclipului generat. Valoarea adaptive permite modelului să determine raportul optim.

Valori acceptate
16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive
Exemplu: adaptive
input.resolution
stringNu720p

Folosește una dintre rezoluțiile de ieșire acceptate și enumerate aici.

Valori acceptate
480p | 720p | 1080p | 4k
Exemplu: 720p
input.generate_audio
booleanNutrue

Solicită generarea unui sunet sincronizat.

Valori acceptate
true | false
Exemplu: true
input.watermark
booleanNufalse

Solicită aplicarea unui filigran AI pe videoclipul generat.

Valori acceptate
true | false
Exemplu: false
input.web_search
booleanNufalse

Permite căutarea pe web, atunci când această funcție este susținută de model.

Valori acceptate
true | false
Exemplu: false
input.return_last_frame
booleanNufalse

Solicită ultimul cadru generat. Rezultatul interogării va conține adresa în data.last_frame_url când cadrul este disponibil; în caz contrar, valoarea va fi null.

Valori acceptate
true | false
Exemplu: true
input.seed
integerNu-1

Număr întreg de la -1 la 4294967295. Valoarea -1 alege un seed aleatoriu.

Valori acceptate
-1 până la 4294967295
Exemplu: 42

Câmpurile booleene trebuie să fie true sau false în format JSON, nu stringuri sau numere.

Răspuns creare

Codul HTTP 200 returnează taskId (string) și credits (număr). Acest lucru confirmă crearea sarcinii, nu și finalizarea ei. Suma de mai jos corespunde ghidului rapid pentru un clip de 5 secunde la 720p.

{
  "taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "credits": 60
}

Moduri de generare și exemple

Înlocuiește URL-urile media de tip example.com cu propriile tale fișiere accesibile public prin HTTPS. URL-urile din exemplu au scop demonstrativ pentru structura solicitării și nu reprezintă resurse descărcabile.

Text în video

Generează pornind de la un prompt text. URL-urile media nu sunt transmise în acest mod.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-0",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "text-to-video",
    "aspect_ratio": "16:9",
    "generate_audio": true
  }
}'

Primul cadru

Furnizează o imagine ca prim cadru, apoi descrie mișcarea dorită în prompt.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-0",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "image-to-video",
    "image_urls": [
      "https://example.com/first-frame.jpg"
    ],
    "aspect_ratio": "adaptive"
  }
}'

Primul și ultimul cadru

Furnizează două URL-uri de imagini în ordine: mai întâi primul cadru, apoi ultimul cadru. Acest exemplu solicită, de asemenea, ultimul cadru al videoclipului generat.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-0",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "image-to-video",
    "image_urls": [
      "https://example.com/first-frame.jpg",
      "https://example.com/last-frame.jpg"
    ],
    "aspect_ratio": "adaptive",
    "return_last_frame": true
  }
}'

Referință multimodală

Combină referințe de tip imagine, video și audio. Promptul text rămâne obligatoriu. Introducerea unui videoclip de referință modifică formula de facturare.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-0",
  "input": {
    "prompt": "Follow the reference camera movement and keep the character consistent. Use the audio for ambience.",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "reference-to-video",
    "image_urls": [
      "https://example.com/character.jpg"
    ],
    "video_urls": [
      "https://example.com/camera.mp4"
    ],
    "audio_urls": [
      "https://example.com/ambience.mp3"
    ],
    "aspect_ratio": "adaptive"
  }
}'

Interoghează o sarcină

GET https://api.seevio.ai/v1/tasks/{taskId}

Înlocuiește ID-ul din exemplu cu valoarea taskId returnată la crearea sarcinii. Interogările returnează doar sarcinile asociate utilizatorului cheii API; ID-urile inaccesibile sau necunoscute returnează HTTP 404.

Ca punct de pornire, interoghează la fiecare 10–20 secunde, redu frecvența în caz de HTTP 429 și oprește interogarea când statusul devine completed sau failed. Pentru mediile de producție, recomandăm utilizarea webhookurilor. Fiecare exemplu de cod de mai jos efectuează o singură interogare.

curl --fail-with-body https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
  -H "Authorization: Bearer $SEEVIO_API_KEY"
StatusDescriere și constrângeri
queuedAcceptat și în așteptare pentru procesare.
generatingGenerarea este în curs de desfășurare.
completedSucces. Descarcă elementele din data.results înainte de expirare.
failedEșec definitiv. Inspectează failed_reason și billing_status.
CâmpTipDescriere și constrângeri
idstring
Identificatorul sarcinii. Acesta reprezintă valoarea taskId din răspunsul de creare.
created_atnumber
Data creării sarcinii, exprimată în secunde Unix.
modelstring
ID-ul public al modelului utilizat pentru această sarcină.
billing_statusstring
statusul facturării: reserved, charged, refunded sau refund_failed.
creditsnumber
Credite rezervate pentru această sarcină. Această valoare este păstrată după o rambursare; inspectează billing_status pentru a determina rezultatul final al facturării.
failed_reasonstring | null
Motivul eșecului pentru sarcinile eșuate; în caz contrar, are valoarea null. Răspunsurile de interogare eșuate nu conțin obiectul data.
dataobject
Prezent în interogările sarcinilor care nu au eșuat. Conține detalii despre rezultat și procesare.
data.resultsstring[]
Array cu URL-urile videoclipurilor generate. Rămâne gol până la finalizare sau după ce videoclipul a expirat.
data.video_expires_atstring | null
Expirarea videoclipului ca timestamp ISO 8601 sau null înainte ca acesta să fie disponibil. Salvează rezultatul înainte de acest termen.
data.last_frame_urlstring | null
URL-ul ultimului cadru când este solicitat și disponibil, în caz contrar null.
data.processing_timenumber | null
Durata de procesare la furnizor în secunde, când este disponibilă, în caz contrar null.

Sarcină finalizată: răspuns la interogare cu rezultatele video

Atunci când interogarea returnează status=completed, generarea videoclipului s-a încheiat. Citiți URL-urile videoclipurilor din data.results și descărcați-le înainte de data.video_expires_at. billing_status=charged indică faptul că au fost debitate creditele rezervate.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652800,
  "model": "seedance-2-0",
  "status": "completed",
  "billing_status": "charged",
  "credits": 60,
  "failed_reason": null,
  "data": {
    "results": [
      "https://cdn.seevio.ai/api/videos/example.mp4"
    ],
    "video_expires_at": "2026-09-07T00:00:00Z",
    "last_frame_url": null,
    "processing_time": 48
  }
}

Sarcină eșuată: răspuns la interogare cu detalii despre eroare și facturare

Atunci când interogarea returnează status=failed, procesul de generare s-a încheiat fără succes. Consultați failed_reason pentru a afla cauza și billing_status pentru rezultatul rambursării. În acest exemplu, refunded înseamnă că toate creditele au fost returnate. Parametrul credits păstrează valoarea inițială rezervată, iar răspunsul nu include obiectul data.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652800,
  "model": "seedance-2-0",
  "status": "failed",
  "billing_status": "refunded",
  "credits": 60,
  "failed_reason": "provider_failed"
}

Webhookuri

Setează parametrul callback_url în solicitarea de creare pentru a primi un POST JSON atunci când sarcina se finalizează sau eșuează. Returnează un răspuns de tip 2xx în decurs de 15 secunde. Livrările eșuate vor fi reîncercate; procesează livrările repetate în mod idempotent pe baza ID-ului sarcinii.

Endpoint-ul dumneavoastră de callback trebuie să accepte solicitări de tip POST cu un corp de solicitare JSON (Content-Type: application/json).

Creează o sarcină cu callback

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-0",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "text-to-video",
    "aspect_ratio": "16:9",
    "generate_audio": true
  },
  "callback_url": "https://example.com/webhooks/seevio"
}'

Payload-ul webhookului diferă de cel al interogării de sarcină: exclude proprietățile billing_status și credits; detaliile despre eșec se află în data.failed_reason și data.credits_refunded. Proprietatea created_at din webhook reprezintă momentul creării evenimentului în secunde Unix.

Sarcină finalizată: payload de callback reușit

Atunci când generarea reușește, callback-ul conține status=completed. Utilizați id pentru a identifica sarcina și data.results pentru a prelua URL-urile videoclipurilor. Descărcați și salvați rezultatele înainte de data.video_expires_at.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652800,
  "model": "seedance-2-0",
  "status": "completed",
  "data": {
    "results": [
      "https://cdn.seevio.ai/api/videos/example.mp4"
    ],
    "video_expires_at": "2026-09-07T00:00:00Z",
    "last_frame_url": null,
    "processing_time": 48
  }
}

Sarcină eșuată: payload de callback eșuat

Atunci când generarea eșuează, callback-ul conține status=failed. Utilizați id pentru a identifica sarcina, data.failed_reason pentru motivul eșecului și data.credits_refunded pentru numărul de credite returnate.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652800,
  "model": "seedance-2-0",
  "status": "failed",
  "data": {
    "failed_reason": "provider_failed",
    "credits_refunded": 60
  }
}

Exemplu de receptor

export async function POST(request: Request) {
  const callbackData = await request.json();

  if (callbackData.status === "completed") {
    const videoUrls = callbackData.data.results;
    // Save the video URLs and mark this task as completed in your application.
    console.log(callbackData.id, videoUrls);
  }

  if (callbackData.status === "failed") {
    const { failed_reason, credits_refunded } = callbackData.data;
    // Record the failure reason and refunded credits for this task.
    console.error(callbackData.id, failed_reason, credits_refunded);
  }

  return new Response(null, { status: 200 });
}

Acest exemplu de Next.js citește corpul JSON al callback-ului și gestionează direct sarcinile finalizate și cele eșuate. Adăugați persistență și deduplicare a ID-urilor de sarcini pentru aplicația dumneavoastră; puneți în coadă procesele lente înainte de a confirma callback-ul.

Cerințe și limitări media

  • Toate URL-urile pentru fișierele media și cele de callback trebuie să fie adrese HTTPS publice. Evită localhost, IP-urile private și fișierele care necesită cookie-uri sau autentificare. URL-urile pentru videoclipurile/fișierele audio de referință trebuie să returneze direct fluxul media.
  • În modul reference-to-video, furnizează cel puțin o referință, fără a depăși 9 imagini, 3 videoclipuri, 3 fișiere audio și în total maximum 12 elemente combinate. Durata video totală și durata audio totală trebuie să fie de maximum 15 secunde fiecare.
  • Modul text-to-video ignoră toate referințele media. Modul image-to-video transmite doar imaginile pentru primul/ultimul cadru și ignoră referințele video și audio. Folosește modul reference-to-video pentru a combina mai multe tipuri de fișiere media.
  • Pentru modelele Seedance 2.0, folosește fișiere audio împreună cu cel puțin o imagine sau un videoclip pentru compatibilitatea cu modelul. Exemplele exclusiv audio sunt disponibile pe pagina modelului Seedance 2.5.

Cerințe privind imaginile

  • Fiecare imagine trebuie să aibă o dimensiune mai mică de 30 MB.
  • Formate acceptate: jpeg, png, webp, bmp, tiff, gif.
  • Raport de aspect (lățime ÷ înălțime): între 0,4 și 2,5, inclusiv.
  • Atât lățimea, cât și înălțimea trebuie să fie între 300 și 6.000 de pixeli, inclusiv.

Cerințe privind videoclipurile

  • Formate acceptate: mp4, mov.
  • Fiecare videoclip nu trebuie să depășească 100 MB.
  • Frecvență cadre: între 24 și 60 FPS, inclusiv.
  • Raport de aspect (lățime ÷ înălțime): între 0,4 și 2,5, inclusiv.
  • Număr total de pixeli (lățime × înălțime): între 407.696 și 8.295.044, inclusiv. De exemplu, 614 × 664 = 407.696 și 3.326 × 2.494 = 8.295.044. Acestea sunt exemple de număr de pixeli, nu cerințe fixe pentru lățime și înălțime.

Cerințe privind fișierele audio

  • Formate acceptate: wav, mp3.
  • Fiecare fișier audio nu trebuie să depășească 15 MB.

Erori

Erorile HTTP conțin un obiect error cu proprietățile code și message. O sarcină acceptată cu succes poate eșua ulterior; interoghează sarcina sau gestionează callback-ul de eșec primit.

{
  "error": {
    "code": "invalid_request",
    "message": "input.prompt is required."
  }
}
HTTPCâmpSoluție recomandată
400invalid_request
Corectează codul JSON, promptul lipsă, limitele parametrilor sau URL-ul media înainte de a reîncerca.
401invalid_api_key
Verifică tokenul Bearer și dacă cheia API este activă.
402insufficient_credits
Adaugă credite sau redu costul sarcinii. Răspunsul poate include sumele necesare și cele disponibile.
403forbidden
Verificați restricția la nivel de cont descrisă în mesajul de eroare.
404not_found
Verifică ID-ul sarcinii și asigură-te că cheia aparține utilizatorului care a creat sarcina.
429rate_limited
Așteaptă intervalul indicat în antetul Retry-After înainte de a reîncerca.
500internal_error
Inspectează mesajul de eroare și jurnalele API. Reîncearcă cu atenție; retrimiterea unei solicitări de creare poate genera o nouă sarcină facturabilă.

Limite de rată

Crearea de sarcini: în mod implicit, fiecare cheie API permite maximum 100 de solicitări pe minut. Limitele personalizate de rată nu sunt disponibile în prezent.

Interogarea sarcinilor: în mod implicit, fiecare cheie API permite maximum 120 de solicitări pe minut. Solicitările de interogare și cele de creare a sarcinilor sunt contorizate separat.

Codul HTTP 429 include Retry-After: 60 pentru creare și Retry-After: 5 pentru interogări. Folosește o strategie de backoff și evită interogările mai frecvente decât este necesar.