Video
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.
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 à POST /v1/videos/generations, conservez l'identifiant de tâche renvoyé et récupérez la vidéo terminée depuis GET /v1/tasks/{id}. Les images, vidéos et audios se placent dans content sous forme d'URL.
ID de modèle
| ID de modèle | Résolutions | Durée |
|---|---|---|
dreamina-seedance-2-5 | 480p, 720p, 1080p | 4 à 30 secondes, ou automatique |
Consultez la page du modèle pour les prix actuels.
Exemple rapide
curl https://api.seedrouter.ai/v1/videos/generations \
-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/videos/generations| En-tête | Valeur |
|---|---|
| Authorization | Bearer YOUR_API_KEY |
| Content-Type | application/json |
Le corps est le corps de requête officiel ModelArk « créer une tâche de génération vidéo » ; c'est le même point de terminaison utilisé par tous les modèles vidéo SeedRouter. La réponse est la nouvelle tâche (id, status: "processing"), 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 | — | dreamina-seedance-2-5. |
content | object[] | Oui | — | Le prompt et les médias ; voir ci-dessous. |
draft | boolean | Non | false | true crée un brouillon en 480p. |
resolution | enum | Non | 480p, 720p, 1080p. Par défaut : 720p pour une génération standard et 480p pour un brouillon. Pour une vidéo finale issue d’un brouillon, 1080p doit être indiqué explicitement. | 480p, 720p, 1080p. |
ratio | enum | Non | adaptive | 16: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. |
duration | integer | Non | -1 | 4 à 30 secondes, ou -1 pour laisser le modèle choisir. Doit valoir -1 pour edit. |
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. |
output_format | enum | Non | mp4 | mp4 ou mov. |
omni_reference_task_type | enum | Non | auto | auto, reference, edit, extend. edit et extend nécessitent une vidéo de référence. |
execution_expires_after | integer | Non | 172800 | 3600 à 259 200 secondes. Une tâche encore inachevée passé ce délai échoue avec task_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'à 30 images de référence. |
| Vidéo | {"type": "video_url", "video_url": {"url": "https://..."}, "role": "reference_video"} | reference_video | Jusqu'à 10. |
| Audio | {"type": "audio_url", "audio_url": {"url": "https://..."}, "role": "reference_audio"} | reference_audio | Jusqu'à 10. |
Les champs inconnus sont rejetés. Non pris en charge : seed, callback_url (interrogez plutôt la tâche), 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.
| 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 |
| Éditer une vidéo | texte + une reference_video, avec omni_reference_task_type: "edit" |
| Prolonger une vidéo | texte + 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/videos/generations \
-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é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 à 30 images de référence |
| Vidéo | MP4, 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) |
| Audio | WAV, MP3 | 2 à 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 / 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 9 607,5 tokens en 480p (854×480), 21 600 en 720p et 48 600 en 1080p.
Les requêtes avec des vidéos de référence sont également soumises à un seuil minimal de tokens. Pour les estimations, comptez au moins ceil(output seconds × 2 / 3) secondes de vidéo de référence dans la formule, même si les vidéos de référence d’origine sont plus courtes. Cette règle s’applique aux tâches de brouillon comme aux tâches de vidéo finale ; le clip du brouillon lui-même ne devient pas une vidéo de référence. La facturation réelle suit l’utilisation déclarée par la tâche terminée.
La facturation suit les tokens déclarés par la vidéo terminée (output.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 ne sont pas facturées.
Schéma de sortie
La soumission renvoie la nouvelle tâche :
{"id": "task_...", "model": "dreamina-seedance-2-5", "status": "processing", "created_at": 1790321515}Récupérer la tâche
curl https://api.seedrouter.ai/v1/tasks/YOUR_TASK_ID \
-H "Authorization: Bearer $SEEDROUTER_API_KEY"Interrogez toutes les 10 à 20 secondes jusqu'à ce que status vaille completed ou failed. 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/tasks/{task_id}",
headers={"Authorization": f"Bearer {os.environ['SEEDROUTER_API_KEY']}"},
timeout=30,
)
result.raise_for_status()
task = result.json()
if task["status"] == "completed":
print(task["output"]["video_url"])
break
if task["status"] == "failed":
raise RuntimeError(task["error"]["message"])
time.sleep(15)
else:
raise TimeoutError(f"Still waiting. Resume polling task {task_id}.")Tâche terminée
{
"id": "task_...",
"model": "dreamina-seedance-2-5",
"status": "completed",
"created_at": 1790321515,
"finished_at": 1790321652,
"output": {
"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",
"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
}
}| Champ | Signification |
|---|---|
id | Conservez cet identifiant pour les requêtes ultérieures. |
status | processing, completed ou failed. |
output.video_url | La vidéo générée. |
output.last_frame_url | L'image finale, lorsque return_last_frame vaut true. |
output.content | Les mêmes URL dans la forme du schéma ModelArk officiel. |
output.usage.completion_tokens | Tokens vidéo de la vidéo terminée ; la quantité facturée. |
output.duration, output.resolution, output.ratio, output.framespersecond, output.seed | Les valeurs réellement rendues ; seed est celle choisie par le modèle. |
created_at, finished_at | Horodatages Unix en secondes. |
error | {"code", "message"} pour une tâche échoué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.
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" 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 échoue 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 historique 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. - Pour éditer une vidéo existante, réglez
omni_reference_task_typesureditet ne décrivez que ce qui doit changer.
Ressources liées
Aperçu en brouillon et vidéo finale
Définissez draft: true pour générer un aperçu en 480p. Les autres résolutions ne sont pas valides en mode brouillon. Le calcul de l’utilisation des tokens et le prix unitaire sont les mêmes que pour une génération standard en 480p.
{
"model": "dreamina-seedance-2-5",
"content": [{ "type": "text", "text": "A fox walks through a sunny garden." }],
"draft": true,
"resolution": "480p",
"duration": 4,
"ratio": "16:9"
}Interrogez l’ID de tâche SeedRouter renvoyé jusqu’à ce que status soit completed et output.draft soit true. Dans les 7 jours suivant la création du brouillon, envoyez une requête distincte avec cet ID :
{
"model": "dreamina-seedance-2-5",
"content": [{ "type": "draft_task", "draft_task": { "id": "task_YOUR_DRAFT_ID" } }],
"resolution": "1080p"
}Le brouillon doit appartenir à votre compte, avoir terminé et utiliser le même modèle. content doit contenir uniquement un élément draft_task. Définissez explicitement resolution sur 1080p ; omettez draft ou définissez-le sur false. Ne renvoyez pas duration, ratio, seed, generate_audio, omni_reference_task_type, de texte ou de médias, même avec des valeurs identiques. Ces paramètres sont hérités du brouillon.
Vous pouvez définir watermark, return_last_frame, output_format, execution_expires_after, priority, safety_identifier et service_tier: "default" pour la nouvelle tâche. Les options de sortie omises utilisent leurs valeurs par défaut. content_filter est hérité et ne peut pas être modifié. Une vidéo finale générée avec succès renvoie un nouvel ID de tâche, output.draft: false et output.draft_task_id contenant l’ID de votre brouillon SeedRouter d’origine. Un même brouillon peut servir à plusieurs générations finales distinctes avant son expiration.
Le brouillon et la vidéo finale sont facturés indépendamment. La vidéo finale utilise le tarif 1080p correspondant à la catégorie d’entrée du brouillon d’origine : si le brouillon utilisait une vidéo de référence, la vidéo finale utilise aussi le tarif avec vidéo de référence et inclut la durée de cette vidéo d’origine dans l’utilisation des tokens. Le clip du brouillon lui-même n’est pas compté comme une vidéo d’entrée supplémentaire. Chaque tâche utilise le prix en vigueur au moment de son envoi. Les requêtes échouées ne sont pas facturées.
