Vai al contenuto principale

Prosegui una clip con Seedance 2.0 Mini: l’ultimo fotogramma del video apre un nuovo segmento da 4 a 15 secondi con audio, e ricevi un solo file con originale e continuazione uniti, a 480p o 720p.

Da $0.025/s

Playground

Invia una richiesta

Guida rapida

Gli esempi usano le definizioni pubbliche dei parametri dell’endpoint selezionato. Sostituisci la chiave API e i media di esempio, poi invia la richiesta dal tuo server.

SDK e integrazioni
POSThttps://api.spicyapi.ai/api/v1/jobs/createTask

Autenticazione dell’API

Tieni la chiave API nella variabile d’ambiente del server SPICY_API_KEY. Per le richieste JSON usa l’autenticazione Bearer e Content-Type: application/json.

Authorization: Bearer $SPICY_API_KEY
# Generate the idempotency key once; reuse it when retrying after a lost response.
export SPICY_IDEMPOTENCY_KEY="${SPICY_IDEMPOTENCY_KEY:-$(uuidgen)}"
curl -X POST https://api.spicyapi.ai/api/v1/jobs/createTask \
  -H "Authorization: Bearer $SPICY_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $SPICY_IDEMPOTENCY_KEY" \
  -d '{
  "model": "bytedance/seedance-2.0-mini/video-extend",
  "input": {
    "bitrate_mode": "standard",
    "duration_seconds": 5,
    "enable_web_search": false,
    "generate_audio": true,
    "resolution": "720p",
    "video_url": "https://example.com/reference.mp4"
  }
}'

# Copy data.taskId from the response into TASK_ID, then poll the status.
TASK_ID="TASK_ID_FROM_RESPONSE"
curl "https://api.spicyapi.ai/api/v1/jobs/recordInfo?taskId=$TASK_ID" \
  -H "Authorization: Bearer $SPICY_API_KEY"

Generato dallo schema di input di questo modello, lo stesso su cui l’API valida ogni richiesta.

Parametri di input

Metti questi campi dentro l’oggetto input del corpo della richiesta. Nomi e tipi corrispondono all’API. Quando un valore predefinito non è indicato, non darlo per scontato.

video_urlstringObbligatorio

La clip da proseguire: MP4, MOV o WebM, fino a 60 secondi. Il suo ultimo fotogramma diventa il fotogramma iniziale del nuovo segmento, quindi tagliala su un fotogramma pulito e nitido. L’originale non viene addebitato.

Predefinito
Non specificato
Vincoli
minLength:1
format:"uri"
contentMediaType:["video/mp4","video/webm","video/quicktime"]
watermarkbooleanFacoltativo

Aggiunge al nuovo segmento la filigrana visibile «AI generated» propria del modello. Disattivata per impostazione predefinita; attivala quando il luogo in cui pubblichi richiede di etichettare i contenuti creati con l’IA. Nessun effetto sul prezzo.

Predefinito
false
bitrate_modestringFacoltativo

Bitrate di codifica del nuovo segmento così come lo consegna il modello: `standard` (predefinito) oppure `high`. High mantiene più nitidi le texture fini e il movimento veloce e rende molto più grande il file del segmento; il file unito viene codificato di nuovo dalla piattaforma. Nessun effetto sul prezzo.

Predefinito
"standard"
Valori ammessi
"standard""high"
seedintegerFacoltativo

Intero da 0 a 2147483647; se lo ometti, ogni esecuzione ne estrae uno proprio. Fissalo per confrontare un campo modificato alla volta; è uno strumento di confronto, non una promessa di ripetizioni identiche fotogramma per fotogramma.

Predefinito
Non specificato
Vincoli
minimum:0
maximum:2147483647
enable_web_searchbooleanFacoltativoIncide sul prezzo

Disattivata per impostazione predefinita. Attivata, il modello può cercare sul web informazioni legate al tuo prompt prima di generare il nuovo segmento. Le richieste con la ricerca attiva sono addebitate alla tariffa di ricerca web, più alta di quella standard; la stima mostrata prima dell’invio la include già.

Predefinito
false
generate_audiobooleanFacoltativo

Attivo per impostazione predefinita, quindi il nuovo segmento ha un suono generato; disattivarlo non abbassa il prezzo in questa fascia. L’originale mantiene comunque il proprio suono; se un lato è muto, il file unito viene completato con silenzio.

Predefinito
true
duration_secondsintegerFacoltativoIncide sul prezzo

Durata del nuovo segmento in secondi interi: da 4 a 15, oppure -1 per lasciar scegliere al modello; in tal caso 15 secondi vengono riservati in anticipo e l’addebito si assesta sulla durata consegnata. Predefinito 5. L’originale si aggiunge davanti e non viene addebitato.

Predefinito
5
Valori ammessi
-1456789101112131415
resolutionstringFacoltativoIncide sul prezzo

Dimensione del nuovo segmento: 480p o 720p, predefinita 720p. Allineala all’originale: stabilisce solo la qualità del nuovo segmento, e un’impostazione più bassa fa sembrare la parte nuova più morbida dell’originale. Il file unito mantiene l’inquadratura del tuo clip senza bande nere; per allineare la giunzione, l’immagine può essere ritagliata o regolata di qualche punto percentuale ai bordi. Se il modello restituisce proporzioni nettamente diverse, il nuovo segmento viene ridimensionato per riempire la tua inquadratura e centrato, e ciò che sporge viene ritagliato. Determina il prezzo.

Predefinito
"720p"
Valori ammessi
"480p""720p"
last_image_urlstringFacoltativo

Fotogramma finale di destinazione, facoltativo: il nuovo segmento termina su questa immagine invece di fermarsi dove decide il modello. Utile per una transizione o per tornare a un fotogramma noto. Dagli le stesse proporzioni dell’ultimo fotogramma della clip, altrimenti viene ritagliato per adattarsi. Ogni lato deve misurare tra 300 e 6000 pixel; un’immagine più piccola viene respinta dal controllo d’ingresso prima di qualsiasi addebito.

Predefinito
Non specificato
Vincoli
contentMediaType:["image/jpeg","image/png","image/webp","image/gif"]
promptstringFacoltativo

Facoltativo. Cosa succede dopo: l’azione che segue, il movimento di macchina e il suono. Se lo ometti, il modello decide il movimento a partire dall’ultimo fotogramma. Il fotogramma iniziale fissa già soggetto e ambientazione, quindi usa le parole per il movimento.

Predefinito
Non specificato
Vincoli
minLength:1

Segui l’attività

HTTP 202 significa che l’attività è stata accettata, non che sia finita. Salva il taskId restituito e interroga quell’attività. Non crearne un’altra mentre aspetti il risultato.

Risposta di accettazione
HTTP/1.1 202 Accepted
Location: /api/v1/jobs/recordInfo?taskId=job_01k3m8x9q2z4v7n5p6r8s0t1w3

{
  "code": 200,
  "msg": "success",
  "request_id": "req_example_create",
  "data": {
    "taskId": "job_01k3m8x9q2z4v7n5p6r8s0t1w3",
    "state": "queued",
    "estimatedCost": "0.750000"
  }
}

La risposta di accettazione include la stima, così la tua applicazione può mostrare lo stesso importo nella cronologia delle attività e nella fatturazione.

Leggi l’attività
curl --get "https://api.spicyapi.ai/api/v1/jobs/recordInfo" \
  --data-urlencode "taskId=$TASK_ID" \
  -H "Authorization: Bearer $SPICY_API_KEY"

Comincia a interrogare ogni 2 secondi circa e allunga l’intervallo man mano. Fermati a uno stato terminale. Dopo una caduta di connessione, interroga il taskId originale. Ripeti la creazione solo con la chiave di idempotenza e il corpo originali.

Oppure lascia che sia la callback a trovarti
import { verifyWebhook } from "@spicyapi/sdk";

// express.raw keeps the bytes we signed; express.json never matches.
app.post("/hooks/spicy", express.raw({ type: "application/json" }), (req, res) => {
  const { payload } = verifyWebhook({
    rawBody: req.body,
    timestamp: req.header("X-Webhook-Timestamp"),
    signature: req.header("X-Webhook-Signature"),
    payloadVersion: Number(req.header("X-Webhook-Payload-Version")),
    secret: process.env.SPICY_WEBHOOK_SECRET,
  });
  res.status(200).end();
  void handleFinishedTask(payload);
});

Passa callBackUrl quando crei l’attività e il record finito ti arriva via POST: nessun ciclo di polling. Ogni consegna porta X-Webhook-Timestamp, X-Webhook-Signature e X-Webhook-Payload-Version. La firma è un HMAC-SHA256 in base64 su taskId.timestamp.sha256(body), quindi va verificata sui byte grezzi: se analizzi il JSON e lo riserializzi i byte cambiano e la verifica fallisce. Le consegne fallite vengono ritentate, quindi lo stesso taskId può arrivare due volte: rendi idempotente il gestore. Rispondi prima con un 2xx e fai il lavoro dopo; un gestore lento viene trattato come una consegna fallita.

Leggi il risultato

Usa l’output solo quando lo stato è succeeded. In caso di fallimento, indaga con errorCode, errorMessage e request_id. Costi e stati degli esempi non rappresentano un addebito reale.

Esempio di risposta completata
{
  "code": 200,
  "msg": "success",
  "request_id": "req_example_record",
  "data": {
    "taskId": "job_01k3m8x9q2z4v7n5p6r8s0t1w3",
    "model": "bytedance/seedance-2.0-mini/video-extend",
    "state": "succeeded",
    "output": {
      "assets": [
        {
          "key": "tasks/2026/08/28/job_01k3m8x9q2z4v7n5p6r8s0t1w3/3f7a1c9e5b2d48f0a6c1e3d5b7f9a1c3.mp4",
          "mime": "video/mp4",
          "url": "https://example.r2.cloudflarestorage.com/results/job_01k3m8x9q2z4v7n5p6r8s0t1w3/result.mp4?X-Amz-Signature=SIGNATURE_FROM_RESPONSE",
          "expiresAt": "2026-08-28T12:20:08.000Z"
        }
      ]
    },
    "cost": "0.750000",
    "settled": true,
    "createdAt": "2026-08-28T12:00:00Z",
    "completedAt": "2026-08-28T12:00:30Z"
  }
}

Per ogni asset disponibile, apri o scarica assets[].url direttamente, senza l’header Authorization dell’API. L’URL firmato scade a expiresAt; interroga di nuovo l’attività per rinnovarlo finché l’asset resta entro il periodo di conservazione. Un asset in attesa o non disponibile non ha URL. Tratta gli URL firmati come privati.

SDK e integrazioni

Usa SpicyAPI nella tua app, nel terminale, con un assistente IA o in un workflow visivo. Scegli una guida di configurazione.

Usalo in ComfyUI

Installa i nodi SpicyAPI da ComfyUI Manager o con il comando qui sotto, poi cerca Seedance 2.0 Mini · Video Extend sulla tela. Il nodo ha le stesse opzioni di questa pagina e mostra il prezzo prima dell’esecuzione.

cd ComfyUI/custom_nodes
git clone https://github.com/spicyapi-ai/comfyui-spicyapi