Claude Opus 5.5 est disponible sur SeedRouter
SeedRouter Docs

Seedance 2.0

Générez des vidéos avec Seedance 2.0 via l'API de tâches officielle ModelArk : texte vers vidéo, première et dernière image, et références image, vidéo et audio, de 480p à 4K.

View Markdown

Seedance 2.0 est le modèle de génération vidéo de ByteDance (Dreamina Seedance 2.0). Envoyez le corps de tâche officiel ModelArk, conservez l'identifiant de tâche renvoyé et récupérez la vidéo terminée depuis la tâche. Les images, vidéos et audios se placent dans content sous forme d'URL.

ID de modèle

ID de modèleRésolutionsRemarques
dreamina-seedance-2-0480p, 720p, 1080p, 4KModèle complet
dreamina-seedance-2-0-fast480p, 720pPrix par seconde plus bas
dreamina-seedance-2-0-mini480p, 720pPrix par seconde le plus bas

Les trois ID acceptent les mêmes paramètres. Consultez la page du modèle pour les prix actuels.

Exemple rapide

curl https://api.seedrouter.ai/v1/contents/generations/tasks \
  -H "Authorization: Bearer $SEEDROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "dreamina-seedance-2-0",
    "content": [{"type": "text", "text": "A red paper boat drifts across a calm pond at sunrise, slow dolly-in"}],
    "resolution": "720p",
    "ratio": "16:9",
    "duration": 5,
    "generate_audio": true
  }'

Point de terminaison

POST https://api.seedrouter.ai/v1/contents/generations/tasks
En-têteValeur
AuthorizationBearer YOUR_API_KEY
Content-Typeapplication/json

Le corps est la requête officielle ModelArk « créer une tâche de génération vidéo ». Si vous appelez déjà ModelArk, changez uniquement l'URL de base en https://api.seedrouter.ai/v1 ainsi que la clé API. La réponse est {"id": "task_..."}, pas la vidéo terminée. Conservez les clés API dans du code côté serveur.

Paramètres

NomTypeRequisPar défautRemarques
modelstringOui—L'un des trois ID de modèle ci-dessus.
contentobject[]Oui—Le prompt et les médias ; voir ci-dessous.
resolutionenumNon720p480p, 720p, 1080p, 4k ; les ID Fast et Mini n'acceptent que 480p et 720p.
ratioenumNonadaptive16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive.
durationintegerNon54 à 15 secondes, ou -1 pour laisser le modèle choisir.
generate_audiobooleanNontrueGénère le son avec la vidéo.
watermarkbooleanNonfalseAjoute un filigrane.
return_last_framebooleanNonfalseRenvoie aussi l'image finale sous forme d'URL d'image.
execution_expires_afterintegerNon1728003600 à 259 200 secondes. Une tâche encore inachevée passé ce délai devient expired et n'est pas facturée.
priorityintegerNon00 à 9.
safety_identifierstringNon—1 à 64 caractères identifiant votre utilisateur final. Un hash convient.
service_tierenumNondefaultUniquement default.
content_filterbooleanNontrueExtension SeedRouter. false désactive le filtrage du contenu pour cette requête.

Éléments de content

ÉlémentFormeRôleLimite
Texte{"type": "text", "text": "..."}—Un seul.
Image{"type": "image_url", "image_url": {"url": "https://..."}, "role": "..."}first_frame, last_frame, reference_imageJusqu'à 9 images de référence.
Vidéo{"type": "video_url", "video_url": {"url": "https://..."}, "role": "reference_video"}reference_videoJusqu'à 3.
Audio{"type": "audio_url", "audio_url": {"url": "https://..."}, "role": "reference_audio"}reference_audioJusqu'à 3. Nécessite une image ou une vidéo de référence.

Les champs inconnus sont rejetés. Non pris en charge : seed, callback_url (interrogez plutôt la tâche), draft et draft_task, tools, ainsi que frames et camera_fixed, propres à la version 1.x, et output_format et omni_reference_task_type (Seedance 2.5 uniquement). Les tâches ne peuvent être ni annulées ni supprimées.

Modes

Le mode découle des éléments de content ; il n'existe pas de paramètre de mode.

Modecontent
Texte vers vidéoun élément texte
Première imagetexte (facultatif) + une image avec le rôle first_frame, ou une image sans rôle
Première et dernière imagetexte (facultatif) + une image first_frame + une image last_frame
Référence multimodaletexte + toute combinaison d'éléments reference_image, reference_video et reference_audio

Les modes à première image ne peuvent pas être combinés avec des éléments de référence. Avec plusieurs images ou tout autre média, chaque image doit avoir un role.

Exemple avec références

curl https://api.seedrouter.ai/v1/contents/generations/tasks \
  -H "Authorization: Bearer $SEEDROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "dreamina-seedance-2-0",
    "content": [
      {"type": "text", "text": "The character from the image walks through the market in the video, same camera move"},
      {"type": "image_url", "image_url": {"url": "https://example.com/character.png"}, "role": "reference_image"},
      {"type": "video_url", "video_url": {"url": "https://example.com/market.mp4"}, "role": "reference_video"}
    ],
    "ratio": "adaptive",
    "duration": 8
  }'

Remplacez les URL d'exemple par vos propres fichiers accessibles.

Entrées média

Cette API n'accepte que des références par URL. Le base64, les URL data:, les identifiants asset:// et les envois multipart ne sont pas acceptés. Le Playground téléverse les fichiers sélectionnés vers le stockage avant d'en soumettre les URL.

Les médias doivent être des URL HTTP(S) publiques et respecter les limites officielles du modèle :

MédiaFormatsLimites
ImageJPEG, PNG, WebP, BMP, TIFF, GIF, HEIC, HEIFMoins de 30 Mo ; largeur et hauteur de 300 à 6000 px ; rapport d'aspect (largeur / hauteur) de 0,4 à 2,5 ; 1 à 9 images de référence
VidéoMP4, MOV (H.264 ou H.265)2 à 15 secondes chacune, jusqu'à 3, 15 secondes au total au maximum ; 200 Mo au maximum ; 24 à 60 FPS ; largeur et hauteur de 300 à 6000 px ; rapport d'aspect de 0,4 à 2,5 ; 407 696 à 8 295 044 pixels (largeur × hauteur)
AudioWAV, MP32 à 15 secondes chacun, jusqu'à 3, 15 secondes au total au maximum ; nécessite une image ou une vidéo de référence ; 15 Mo au maximum

Les images et vidéos de référence contenant de vrais visages humains ne sont pas prises en charge par le modèle.

Les médias sont vérifiés au démarrage de la tâche, avant toute génération. Une tâche dont un média enfreint l'une de ces limites se termine en failed avec invalid_request_error et un message indiquant la règle, par exemple The request was rejected: content reference videos must total at most 15 seconds., et n'est pas facturée. Un fichier illisible à ce stade est transmis au modèle, qui l'accepte ou le rejette ; dans les deux cas, une tâche échouée n'est pas facturée.

Facteurs de coût

Consultez la section tarifs du modèle pour les tarifs actuels. Seedance 2.0 facture des tokens vidéo, l'unité officielle :

video tokens = (output seconds + reference video seconds) × width × height × 24 / 1024

Le tarif par million de tokens dépend de la résolution de sortie et de la présence ou non d'une vidéo de référence dans la requête ; une requête avec vidéo de référence applique un tarif plus bas à tous ses tokens. Les entrées texte, image et audio ne sont pas facturées. En 16:9, une seconde représente 10 044 tokens en 480p (864×496), 21 600 en 720p, 48 600 en 1080p et 194 400 en 4K.

La facturation suit les tokens déclarés par la vidéo terminée (usage.completion_tokens) ; avec duration: -1, c'est donc la durée réellement générée qui est facturée. Les clips rendus dépassent légèrement la durée demandée : une requête de 5 secondes en 720p et 16:9 produit 121 images et déclare 108 900 tokens au lieu de 108 000. Consultez les frais définitifs dans l'historique d'utilisation de votre compte. Les tâches échouées et expirées ne sont pas facturées.

Schéma de sortie

La soumission renvoie l'identifiant de tâche :

{"id": "task_..."}

Récupérer la tâche

curl https://api.seedrouter.ai/v1/contents/generations/tasks/YOUR_TASK_ID \
  -H "Authorization: Bearer $SEEDROUTER_API_KEY"

Interrogez toutes les 10 à 20 secondes jusqu'à ce que status vaille succeeded, failed ou expired. Un dépassement de délai réseau pendant l'interrogation ne signifie pas que la génération a échoué : conservez l'identifiant de tâche et reprenez la vérification. Ne créez pas une autre tâche pour vérifier l'avancement.

Exemple d'interrogation complet

Exécutez ceci après l'exemple de soumission Python ci-dessus.

import time

deadline = time.monotonic() + 1800
while time.monotonic() < deadline:
    result = requests.get(
        f"https://api.seedrouter.ai/v1/contents/generations/tasks/{task_id}",
        headers={"Authorization": f"Bearer {os.environ['SEEDROUTER_API_KEY']}"},
        timeout=30,
    )
    result.raise_for_status()
    task = result.json()
    if task["status"] == "succeeded":
        print(task["content"]["video_url"])
        break
    if task["status"] in ("failed", "expired"):
        raise RuntimeError(task["error"]["message"])
    time.sleep(15)
else:
    raise TimeoutError(f"Still waiting. Resume polling task {task_id}.")

Tâche réussie

{
  "id": "task_...",
  "model": "dreamina-seedance-2-0",
  "status": "succeeded",
  "content": {
    "video_url": "https://static.seedrouter.ai/media/tasks/task_example/0.mp4",
    "last_frame_url": "https://static.seedrouter.ai/media/tasks/task_example/last_frame/0.jpg"
  },
  "usage": {"completion_tokens": 108900, "total_tokens": 108900},
  "seed": 42,
  "resolution": "720p",
  "ratio": "16:9",
  "duration": 5,
  "framespersecond": 24,
  "generate_audio": true,
  "draft": false,
  "output_format": "mp4",
  "service_tier": "default",
  "execution_expires_after": 172800,
  "priority": 0,
  "created_at": 1790321515,
  "updated_at": 1790321652
}
ChampSignification
idConservez cet identifiant pour les requêtes ultérieures.
statusqueued, running, succeeded, failed ou expired.
content.video_urlLa vidéo générée.
content.last_frame_urlL'image finale, lorsque return_last_frame vaut true.
usage.completion_tokensTokens vidéo de la vidéo terminée ; la quantité facturée.
duration, resolution, ratio, framespersecond, seedLes valeurs réellement rendues ; seed est celle choisie par le modèle.
created_at, updated_atHorodatages Unix en secondes.
error{"code", "message"} pour une tâche échouée ou expirée.

Les URL des vidéos sont hébergées sur notre stockage. Enregistrez le fichier dans votre propre stockage si vous avez besoin d'une copie durable.

Lister les tâches

curl "https://api.seedrouter.ai/v1/contents/generations/tasks?page_num=1&page_size=20&filter.status=succeeded" \
  -H "Authorization: Bearer $SEEDROUTER_API_KEY"

Renvoie {"total": N, "items": [...]} avec les objets de tâche des 7 derniers jours, les plus récents en premier. page_num et page_size vont de 1 à 500 (1 et 20 par défaut). Filtres : filter.status, filter.model, filter.task_ids (répétable) et filter.service_tier.

Erreurs

Les requêtes rejetées avant la création d'une tâche renvoient une erreur HTTP accompagnée d'un objet error et ne sont pas facturées. Une tâche qui échoue après acceptation renvoie HTTP 200 à l'interrogation, avec status: "failed" (ou "expired") et un objet error. Une sortie bloquée par le filtrage du contenu échoue avec content_policy_violation ; une tâche qui dépasse execution_expires_after se termine en expired avec task_expired.

Voir le catalogue d'erreurs commun pour les codes, les statuts HTTP et les conseils de reprise.

{
  "id": "task_...",
  "model": "dreamina-seedance-2-0",
  "status": "failed",
  "error": {
    "code": 60001,
    "message": "The request was rejected by the content policy. Please revise the prompt or input images."
  }
}

Si la soumission elle-même dépasse le délai, vérifiez votre liste de tâches avant de soumettre à nouveau : la première requête a peut-être déjà été acceptée.

Conseils

  • Décrivez le sujet, l'action, le mouvement de caméra et l'éclairage en phrases complètes.
  • Faites vos brouillons en 480p avec une duration courte, puis rendez la version retenue dans une résolution plus élevée.
  • Enchaînez les plans avec return_last_frame : utilisez l'image renvoyée comme first_frame de la tâche suivante.

Ressources liées