Claude Opus 5.5 est disponible sur SeedRouter
SeedRouter Docs

Seedance 2.5

Générez, éditez et prolongez des vidéos avec Seedance 2.5 via l'API de tâches officielle ModelArk : jusqu'à 30 secondes en 1080p, avec jusqu'à 30 références image, 10 vidéo et 10 audio.

View Markdown

Seedance 2.5 est le modèle de génération vidéo le plus récent de ByteDance (Dreamina Seedance 2.5). 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ésolutionsDurée
dreamina-seedance-2-5480p, 720p, 1080p4 à 30 secondes, ou automatique

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-5",
    "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—dreamina-seedance-2-5.
contentobject[]Oui—Le prompt et les médias ; voir ci-dessous.
resolutionenumNon720p480p, 720p, 1080p.
ratioenumNonadaptive16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive. Doit valoir adaptive (ou être omis) avec une première image, ainsi que pour edit et extend.
durationintegerNon-14 à 30 secondes, ou -1 pour laisser le modèle choisir. Doit valoir -1 pour edit.
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.
output_formatenumNonmp4mp4 ou mov.
omni_reference_task_typeenumNonautoauto, reference, edit, extend. edit et extend nécessitent une vidéo de référence.
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'à 30 images de référence.
Vidéo{"type": "video_url", "video_url": {"url": "https://..."}, "role": "reference_video"}reference_videoJusqu'à 10.
Audio{"type": "audio_url", "audio_url": {"url": "https://..."}, "role": "reference_audio"}reference_audioJusqu'à 10.

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. 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
Éditer une vidéotexte + une reference_video, avec omni_reference_task_type: "edit"
Prolonger une vidéotexte + une reference_video, avec omni_reference_task_type: "extend"

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-5",
    "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 à 30 images de référence
VidéoMP4, MOV (H.264 ou H.265)2 à 30 secondes chacune (4 à 30 secondes pour edit), jusqu'à 10, 30 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 à 30 secondes chacun, jusqu'à 10, 30 secondes au total au maximum ; 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.5 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 9 607,5 tokens en 480p (854×480), 21 600 en 720p et 48 600 en 1080p.

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-5",
  "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-5",
  "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.
  • Pour éditer une vidéo existante, réglez omni_reference_task_type sur edit et ne décrivez que ce qui doit changer.

Ressources liées