Seedance 2.5
Genera video con Seedance 2.5 partendo da testo, dal primo e dall'ultimo fotogramma o usando riferimenti multimodali. Questa pagina descrive l'intero flusso di lavoro, dalla richiesta al risultato finale.
ID del modello API: seedance-2-5
La generazione è asincrona. Salva il taskId restituito alla creazione del task, quindi interroga lo stato o ricevi un webhook.
Funzionalità
| Funzionalità | Valori supportati |
|---|---|
| Risoluzione video | 480p · 720p · 1080p |
| Durata video | 4–30 secondi |
| Proporzioni | 16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive |
| Immagini di riferimento | Fino a 30 immagini |
| Video di riferimento | Fino a 10 video |
| File audio di riferimento | Fino a 10 file audio |
| Tutti i riferimenti combinati | Fino a 50 file di riferimento in totale |
| Durata totale per gruppo video/audio | 30 secondi |
| seed | Non supportato |
Prezzi e crediti
La generazione di video viene tariffata in crediti in base alla durata fatturabile in secondi. Senza un video di input, la durata fatturabile corrisponde alla durata del video generato; in presenza di un video di input, include anche la durata del video di riferimento.
La tabella seguente mostra i crediti addebitati al secondo e non il costo totale di un'operazione. La tariffa varia a seconda del modello, della risoluzione finale e dell'eventuale inserimento di video di riferimento nella modalità reference-to-video. Per il calcolo del costo totale, consulta le formule e gli esempi riportati sotto la tabella.
| Risoluzione video | Senza video in input | Con video in input |
|---|---|---|
480p | 10 crediti al secondo | 6 crediti al secondo |
720p | 20 crediti al secondo | 12 crediti al secondo |
1080p | 30 crediti al secondo | 20 crediti al secondo |
- Senza video in input: secondi generati × tariffa senza video.
- Con video in input: (secondi generati + secondi effettivi del video di riferimento) × tariffa con video. Il server calcola la durata totale del video di riferimento arrotondandola al secondo superiore prima dell'addebito.
- I soli riferimenti di immagini o audio utilizzano la tariffa senza video. La tariffa con video si applica esclusivamente nella modalità da riferimento a video quando vengono forniti video come input.
Esempi di calcolo dei costi
Video da testo a video da 5 secondi a 720p: 5 × 20 = 100 crediti.
Video generato da 5 secondi a 720p con video di riferimento da 5 secondi: (5 + 5) × 12 = 120 crediti.
I crediti vengono prenotati all'invio e addebitati solo a completamento avvenuto. I task falliti o andati in timeout avviano la procedura di rimborso. Lo stato di fatturazione refund_failed indica che il rimborso non è andato a buon fine; verifica i log delle API o contatta l'assistenza.
Come vengono addebitati i crediti quando duration=-1
Quando la durata è impostata su -1, la durata finale dell'output non è fissa, ma viene stabilita dal modello.
Nella maggior parte dei casi, è consigliabile impostare la durata sull'effettiva lunghezza del video desiderata anziché su -1. Raccomandiamo di utilizzare il valore -1 solo per l'editing video e non per altri scenari di generazione video.
| Input di riferimento | Come viene calcolato l'addebito | Esempio |
|---|---|---|
| Con video di riferimento | Somma la durata di tutti i video di riferimento e arrotonda il totale al secondo intero successivo, definendolo T. L'addebito è pari a (T + T) × la tariffa con video: un T rappresenta la durata stimata del file di output e l'altro rappresenta la durata del video di input. | 720p con un video di riferimento di 5 secondi: (5 + 5) × 12 = 120 crediti. |
| Senza video di riferimento (solo immagini o audio) | Vengono utilizzati 30 secondi come durata stimata dell'output. L'addebito è pari a 30 × la tariffa senza video. | 720p senza video di riferimento: 30 × 20 = 600 crediti. |
Autenticazione
Crea una chiave API nella dashboard. La chiave completa viene mostrata una sola volta. Conservala sul tuo server e inviala come token Bearer in ogni richiesta.
URL di base
https://api.seevio.aiAuthorization: Bearer sk_live_your_api_key
Content-Type: application/jsonImposta la variabile d'ambiente SEEVIO_API_KEY prima di eseguire questi esempi. Gli esempi in JavaScript vengono eseguiti sul server con Node.js; gli esempi in Python utilizzano la libreria requests.
Avvio rapido
Invia questa richiesta minima, salva il taskId restituito e usa l'esempio di query del task riportato di seguito. Il valore dei crediti nella risposta di creazione corrisponde all'importo prenotato.
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-5",
"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
}
}'Esempio di risposta alla creazione del task
Una volta accettata la richiesta precedente, l'API restituisce questa risposta JSON. taskId è l'identificativo del task da utilizzare per le successive verifiche sullo stato; credits indica il numero di crediti riservati a questo task. Questa risposta conferma la corretta creazione del task, non che il video sia pronto. Sarà necessario monitorare periodicamente lo stato del task o utilizzare un Webhook per ricevere il video finale.
{
"taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"credits": 100
}Crea un task
POST https://api.seevio.ai/v1/videos/generationsInvia un oggetto JSON contenente model e input, insieme a un callback_url opzionale. Specifica sempre l'ID del modello indicato in questa pagina; se omesso, verrà selezionato seedance-2-0.
Corpo della richiesta
| Campo | Tipo | Obbligatorio | Descrizione e vincoli |
|---|---|---|---|
model | string | Sì | ID modello. Per utilizzare Seedance 2.5, imposta questo campo su seedance-2-5. |
callback_url | string | No | Endpoint HTTPS pubblico per le chiamate POST di callback in caso di completamento o errore. Non sono consentiti host locali o reti private. Esempio: https://example.com/webhooks/seevio |
input | object | Sì | Impostazioni di generazione. Deve contenere un prompt non vuoto. |
Parametri di input
Fornisci image_urls, video_urls e audio_urls sotto forma di array di stringhe URL (string[]). Ogni URL fornito deve essere accessibile pubblicamente tramite HTTPS, inclusi i contenuti multimediali ignorati dalla modalità selezionata.
| Campo | Tipo | Obbligatorio | Predefinito | Descrizione e vincoli |
|---|---|---|---|---|
input.prompt | string | Sì | — | Richiesto in qualsiasi modalità, compresi i riferimenti solo media. Fino a 10.000 caratteri prima del troncamento; deve contenere testo visibile (non solo spazi vuoti). Esempio: A cat surfing at sunset |
input.generation_type | string | No | text-to-video | text-to-video utilizza solo il prompt; image-to-video utilizza 1–2 immagini; reference-to-video utilizza riferimenti di immagini, video e/o audio. Valori supportati text-to-video | image-to-video | reference-to-video |
input.image_urls | string[] | Condizionale | [] | image-to-video: 1 immagine per il primo fotogramma, o 2 immagini ordinate per il primo e l'ultimo fotogramma. reference-to-video: fino a 30 immagini. Ignorato in text-to-video. Esempio: ["https://example.com/first-frame.jpg"] |
input.video_urls | string[] | Condizionale | [] | Inoltrato solo in reference-to-video; fino a 10 video e 30 secondi complessivi. Ignorato nelle altre modalità. Esempio: ["https://example.com/source.mp4"] |
input.audio_urls | string[] | Condizionale | [] | Inoltrato solo in reference-to-video; fino a 10 file audio e 30 secondi complessivi. Ignorato nelle altre modalità. Esempio: ["https://example.com/music.mp3"] |
input.duration | integer | No | 5 | Durata intera del video generato da 4 a 30 secondi. Accetta anche -1 solo in reference-to-video. Utilizzalo con un video sorgente per la modifica; la fatturazione segue la regola speciale descritta sopra. Valori supportati -1 | 4–30Esempio: 5 |
input.aspect_ratio | string | No | adaptive | Proporzioni del video generato. adaptive consente al modello di determinare le proporzioni ottimali. image-to-video supporta solo adaptive; ometti questo campo o impostalo su adaptive. Valori supportati 16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptiveEsempio: adaptive |
input.resolution | string | No | 720p | Usa una delle risoluzioni supportate elencate qui. Valori supportati 480p | 720p | 1080pEsempio: 720p |
input.generate_audio | boolean | No | true | Richiede la generazione di audio sincronizzato. Valori supportati true | falseEsempio: true |
input.watermark | boolean | No | false | Richiede l'applicazione di un watermark AI sul video generato. Valori supportati true | falseEsempio: false |
input.web_search | boolean | No | false | Abilita la ricerca web, se supportata dal modello. Valori supportati true | falseEsempio: false |
input.return_last_frame | boolean | No | false | Richiede il fotogramma finale. Il risultato della query conterrà data.last_frame_url quando disponibile, altrimenti sarà null. Valori supportati true | falseEsempio: true |
I campi booleani devono essere impostati su true o false in formato JSON, non come stringhe o numeri.
Risposta di creazione
La risposta HTTP 200 restituisce taskId (stringa) e credits (numero). Questo conferma la creazione del task, non il suo completamento. L'importo indicato sotto corrisponde all'avvio rapido a 720p di 5 secondi.
{
"taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"credits": 100
}Modalità di generazione ed esempi
Da testo a video
Genera a partire da un prompt testuale. Gli URL dei file multimediali non vengono considerati in questa modalità.
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-5",
"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
}
}'Primo fotogramma
Fornisci un'immagine come primo fotogramma e descrivi il movimento nel 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-5",
"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"
}
}'Primo e ultimo fotogramma
Fornisci due URL di immagini in ordine: primo fotogramma, poi ultimo fotogramma. Questo esempio richiede anche il fotogramma finale del video generato.
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-5",
"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
}
}'Riferimento multimodale
Combina riferimenti immagine, video e audio. Il prompt rimane obbligatorio. L'inserimento di un video di riferimento modifica la formula di fatturazione.
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-5",
"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"
}
}'Riferimento audio
Usa un file audio come unico riferimento, accompagnato da un prompt testuale obbligatorio che descrive il video desiderato.
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-5",
"input": {
"prompt": "Create a coastal sunrise scene matching the rhythm of this audio.",
"duration": 5,
"resolution": "720p",
"generation_type": "reference-to-video",
"audio_urls": [
"https://example.com/music.mp3"
]
}
}'Modifica video
Descrivi le modifiche e fornisci il video sorgente. Imposta duration=-1 e usa proporzioni adaptive. Per questo flusso di lavoro, usa una clip sorgente di almeno 4 secondi. La regola di fatturazione per duration=-1 è indicata sopra.
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-5",
"input": {
"prompt": "Edit the source video: change the character’s coat to blue and preserve the camera movement.",
"duration": -1,
"resolution": "720p",
"generation_type": "reference-to-video",
"video_urls": [
"https://example.com/source.mp4"
],
"aspect_ratio": "adaptive"
}
}'Estensione video
Descrivi come deve proseguire il video sorgente. Usa proporzioni adaptive e imposta una durata standard entro i limiti del modello.
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-5",
"input": {
"prompt": "Continue the camera movement from the source video, revealing a forest clearing.",
"duration": 8,
"resolution": "720p",
"generation_type": "reference-to-video",
"video_urls": [
"https://example.com/source.mp4"
],
"aspect_ratio": "adaptive"
}
}'Interroga un task
GET https://api.seevio.ai/v1/tasks/{taskId}Sostituisci l'ID di esempio con il taskId restituito alla creazione. Le query restituiscono solo i task associati all'utente della chiave API; ID non accessibili o inesistenti restituiscono HTTP 404.
Come punto di partenza, effettua un polling ogni 10–20 secondi, rallenta le richieste in caso di HTTP 429 e interrompi quando lo stato diventa completed o failed. Per gli ambienti di produzione, consigliamo l'uso dei webhook. Ogni esempio di codice seguente esegue una singola query.
curl --fail-with-body https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
-H "Authorization: Bearer $SEEVIO_API_KEY"| Stato | Descrizione e vincoli |
|---|---|
queued | Accettato e in attesa di elaborazione. |
generating | Generazione in corso. |
completed | Completato con successo. Scarica il file da data.results prima della scadenza. |
failed | Errore definitivo. Verifica failed_reason e billing_status. |
| Campo | Tipo | Descrizione e vincoli |
|---|---|---|
id | string | Identificatore del task. Corrisponde al taskId della risposta di creazione. |
created_at | number | Data e ora di creazione del task in formato Unix timestamp (secondi). |
model | string | L'ID pubblico del modello utilizzato per questo task. |
billing_status | string | Stato di fatturazione: reserved, charged, refunded o refund_failed. |
credits | number | Crediti prenotati per questo task. Questo valore viene conservato anche dopo un rimborso; verifica billing_status per determinare l'esito finanziario. |
failed_reason | string | null | Causa del problema per i task falliti; null in caso contrario. Le query fallite omettono la sezione data. |
data | object | Presente nelle query dei task non falliti. Contiene i dettagli di output ed elaborazione. |
data.results | string[] | Array di URL dei video. Vuoto fino al completamento o dopo la scadenza del video. |
data.video_expires_at | string | null | Scadenza del video in formato ISO 8601, oppure null prima che sia disponibile. Salva il file prima di questa data. |
data.last_frame_url | string | null | URL dell'ultimo fotogramma quando richiesto e disponibile, altrimenti null. |
data.processing_time | number | null | Durata dell'elaborazione da parte del provider in secondi, se disponibile, altrimenti null. |
Task completato: risposta alla query con i risultati video
Quando la query restituisce status=completed, la generazione del video è terminata. Puoi trovare gli URL del video in data.results; assicurati di scaricarli prima della data indicata in data.video_expires_at. Lo stato billing_status=charged indica che i crediti prenotati sono stati effettivamente addebitati.
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1788652800,
"model": "seedance-2-5",
"status": "completed",
"billing_status": "charged",
"credits": 100,
"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
}
}Task fallito: risposta alla query con dettagli sul fallimento e sulla fatturazione
Se la query restituisce status=failed, significa che la generazione non è andata a buon fine. Consulta failed_reason per conoscerne il motivo e billing_status per l'esito del rimborso. In questo esempio, lo stato refunded indica che i crediti sono stati riaccreditati. La voce credits mostra la quota inizialmente prenotata e la risposta non include la chiave data.
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1788652800,
"model": "seedance-2-5",
"status": "failed",
"billing_status": "refunded",
"credits": 100,
"failed_reason": "provider_failed"
}Webhook
Imposta callback_url nella richiesta di creazione per ricevere una richiesta POST JSON al completamento o al fallimento del task. Restituisci una risposta 2xx entro 15 secondi. Gli invii non riusciti verranno riprovati; gestisci le notifiche duplicate in modo idempotente tramite l'ID del task.
L'endpoint di callback deve accettare richieste POST con un corpo in formato JSON (Content-Type: application/json).
Crea un task con 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-5",
"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"
}'I payload dei webhook differiscono dalle risposte alle query sui task: omettono billing_status e credits; i dettagli sugli errori si trovano all'interno di data.failed_reason e data.credits_refunded. Il valore created_at del webhook indica il timestamp dell'evento in formato Unix (secondi).
Attività completata: payload di callback riuscito
In caso di generazione riuscita, la callback conterrà lo stato status=completed. Utilizza id per identificare l'attività e data.results per recuperare gli URL dei video. Assicurati di scaricare e salvare i risultati prima della scadenza indicata in data.video_expires_at.
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1788652800,
"model": "seedance-2-5",
"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
}
}Attività non riuscita: payload di callback fallito
In caso di errore durante la generazione, la callback conterrà lo stato status=failed. Utilizza id per identificare l'attività, data.failed_reason per conoscere il motivo del fallimento e data.credits_refunded per verificare il numero di crediti riaccreditati.
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1788652800,
"model": "seedance-2-5",
"status": "failed",
"data": {
"failed_reason": "provider_failed",
"credits_refunded": 100
}
}Esempio di ricevitore
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 });
}Questo esempio in Next.js legge il corpo JSON della callback e gestisce direttamente le attività completate e fallite. Ti consigliamo di aggiungere logiche di persistenza e deduplicazione dei task-ID per la tua applicazione, e di accodare i processi più lenti prima di confermare la callback.
Requisiti e limitazioni dei media
- Tutti i media e gli URL di callback devono essere URL HTTPS pubblici. Evita l'uso di localhost, IP privati o file che richiedono cookie o autenticazione. Gli URL dei file video/audio di riferimento devono indirizzare a file multimediali leggibili direttamente.
- In reference-to-video, fornisci almeno un riferimento, con un limite massimo di 30 immagini, 10 video, 10 file audio e 50 elementi multimediali complessivi. La durata totale dei video e quella degli audio non devono superare i 30 secondi ciascuna.
- La modalità text-to-video ignora tutti i riferimenti multimediali. La modalità image-to-video considera solo le immagini del primo e dell'ultimo fotogramma, ignorando i riferimenti video e audio. Usa la modalità reference-to-video per combinare più formati.
- Ogni file video o audio di riferimento deve avere una durata compresa tra 2 e 30 secondi. Per gli esempi di modifica video, usa clip sorgente di almeno 4 secondi.
Requisiti delle immagini
- Ogni immagine deve avere una dimensione inferiore a 30 MB.
- Formati supportati: jpeg, png, webp, bmp, tiff, gif.
- Rapporto d'aspetto (larghezza ÷ altezza): compreso tra 0,4 e 2,5.
- Larghezza e altezza devono essere comprese tra 300 e 6.000 pixel.
Requisiti dei video
- Formati supportati: mp4, mov.
- Ogni video non deve superare i 100 MB.
- Frequenza fotogrammi: compresa tra 24 e 60 fps.
- Rapporto d'aspetto (larghezza ÷ altezza): compreso tra 0,4 e 2,5.
- Pixel totali (larghezza × altezza): compresi tra 407.696 e 8.295.044. Ad esempio, 614 × 664 = 407.696 e 3.326 × 2.494 = 8.295.044. Questi sono solo esempi di calcolo dei pixel, non requisiti fissi per larghezza e altezza.
Requisiti dei file audio
- Formati supportati: wav, mp3.
- Ogni file audio non deve superare i 15 MB.
Errori
Gli errori HTTP contengono un oggetto error con code e message. Un task accettato correttamente può comunque fallire in una fase successiva; interroga lo stato del task o gestisci la chiamata di callback per l'errore.
{
"error": {
"code": "invalid_request",
"message": "input.prompt is required."
}
}| HTTP | Campo | Cosa fare |
|---|---|---|
| 400 | invalid_request | Correggi il formato JSON, il prompt mancante, l'intervallo dei parametri o l'URL del file multimediale prima di riprovare. |
| 401 | invalid_api_key | Controlla il token Bearer e verifica che la chiave API sia attiva. |
| 402 | insufficient_credits | Aggiungi crediti o riduci il costo del task. La risposta potrebbe indicare i crediti richiesti e quelli effettivamente disponibili. |
| 403 | forbidden | Verifica le limitazioni a livello di account descritte nel messaggio di errore. |
| 404 | not_found | Verifica l'ID del task e accertati che la chiave appartenga all'utente che ha avviato il task. |
| 429 | rate_limited | Attendi l'intervallo indicato in Retry-After prima di effettuare un nuovo tentativo. |
| 500 | internal_error | Verifica il messaggio d'errore e i log delle API. Riprova con attenzione: l'invio ripetuto di una richiesta di creazione può generare un nuovo task addebitabile. |
Limiti di frequenza
Creazione task: per impostazione predefinita, ciascuna chiave API consente fino a 100 richieste al minuto. Al momento non sono disponibili limiti di frequenza personalizzati.
Interrogazione task: per impostazione predefinita, ciascuna chiave API consente fino a 120 richieste al minuto. Le richieste di interrogazione e quelle di creazione dei task vengono conteggiate separatamente.