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.
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èle | Résolutions | Remarques |
|---|---|---|
dreamina-seedance-2-0 | 480p, 720p, 1080p, 4K | Modèle complet |
dreamina-seedance-2-0-fast | 480p, 720p | Prix par seconde plus bas |
dreamina-seedance-2-0-mini | 480p, 720p | Prix 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ête | Valeur |
|---|---|
| Authorization | Bearer YOUR_API_KEY |
| Content-Type | application/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
| Nom | Type | Requis | Par défaut | Remarques |
|---|---|---|---|---|
model | string | Oui | — | L'un des trois ID de modèle ci-dessus. |
content | object[] | Oui | — | Le prompt et les médias ; voir ci-dessous. |
resolution | enum | Non | 720p | 480p, 720p, 1080p, 4k ; les ID Fast et Mini n'acceptent que 480p et 720p. |
ratio | enum | Non | adaptive | 16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive. |
duration | integer | Non | 5 | 4 à 15 secondes, ou -1 pour laisser le modèle choisir. |
generate_audio | boolean | Non | true | Génère le son avec la vidéo. |
watermark | boolean | Non | false | Ajoute un filigrane. |
return_last_frame | boolean | Non | false | Renvoie aussi l'image finale sous forme d'URL d'image. |
execution_expires_after | integer | Non | 172800 | 3600 à 259 200 secondes. Une tâche encore inachevée passé ce délai devient expired et n'est pas facturée. |
priority | integer | Non | 0 | 0 à 9. |
safety_identifier | string | Non | — | 1 à 64 caractères identifiant votre utilisateur final. Un hash convient. |
service_tier | enum | Non | default | Uniquement default. |
content_filter | boolean | Non | true | Extension SeedRouter. false désactive le filtrage du contenu pour cette requête. |
Éléments de content
| Élément | Forme | Rôle | Limite |
|---|---|---|---|
| Texte | {"type": "text", "text": "..."} | — | Un seul. |
| Image | {"type": "image_url", "image_url": {"url": "https://..."}, "role": "..."} | first_frame, last_frame, reference_image | Jusqu'à 9 images de référence. |
| Vidéo | {"type": "video_url", "video_url": {"url": "https://..."}, "role": "reference_video"} | reference_video | Jusqu'à 3. |
| Audio | {"type": "audio_url", "audio_url": {"url": "https://..."}, "role": "reference_audio"} | reference_audio | Jusqu'à 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.
| Mode | content |
|---|---|
| Texte vers vidéo | un élément texte |
| Première image | texte (facultatif) + une image avec le rôle first_frame, ou une image sans rôle |
| Première et dernière image | texte (facultatif) + une image first_frame + une image last_frame |
| Référence multimodale | texte + 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édia | Formats | Limites |
|---|---|---|
| Image | JPEG, PNG, WebP, BMP, TIFF, GIF, HEIC, HEIF | Moins 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éo | MP4, 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) |
| Audio | WAV, MP3 | 2 à 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 / 1024Le 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
}| Champ | Signification |
|---|---|
id | Conservez cet identifiant pour les requêtes ultérieures. |
status | queued, running, succeeded, failed ou expired. |
content.video_url | La vidéo générée. |
content.last_frame_url | L'image finale, lorsque return_last_frame vaut true. |
usage.completion_tokens | Tokens vidéo de la vidéo terminée ; la quantité facturée. |
duration, resolution, ratio, framespersecond, seed | Les valeurs réellement rendues ; seed est celle choisie par le modèle. |
created_at, updated_at | Horodatages 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
durationcourte, 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 commefirst_framede la tâche suivante.
