Claude Opus 5.5 est disponible sur SeedRouter

Comment réaliser un court métrage avec Claude Opus 5.5 et Seedance 2.5

Faites de Claude Opus 5.5 le réalisateur : il écrit découpage et prompts, GPT Image 2.5 dessine le personnage, Seedance 2.5 génère chaque plan avec le son.

Lire en Markdown

Pour réaliser un court métrage avec Claude Opus 5.5 et Seedance 2.5, confiez la réalisation à Opus et laissez les deux autres modèles dessiner et filmer. Vous donnez à Opus une idée d’histoire ; il écrit une description fixe du personnage, un prompt pour la fiche personnage et un prompt vidéo par plan. GPT Image 2.5 transforme ces prompts en fiche personnage et en images de départ. Seedance 2.5 génère chaque plan, avec dialogues et son, en utilisant ces images comme références. Il vous reste à assembler les plans en un seul fichier. Les trois modèles répondent sur SeedRouter avec la même clé API. Chaque requête ci-dessous suit les références API de SeedRouter, vérifiées le 30 septembre 2026.

Comment fonctionne le workflow Claude Opus 5.5 et Seedance 2.5 ?

L’idée vient d’un workflow partagé par un créateur sur r/Seedance_AI en septembre 2026 (le post d’origine) : « Je n’ai pas écrit un seul prompt à la main. J’ai donné à Opus 5.5 un concept central et quelques captures d’écran de référence pour le style que je voulais. » Opus a écrit les prompts de la fiche personnage, des images de départ, des mouvements de caméra, du rythme des dialogues et du son ; GPT Image 2.5 a dessiné la fiche personnage et l’image de départ ; Seedance 2.5 a généré les plans.

Chaque modèle a une seule tâche :

ÉtapeModèleEntréeSortie
1. PlanifierClaude Opus 5.5Idée d’histoire, images de style facultativesDescription du personnage, prompt de fiche, un prompt d’image de départ et un prompt vidéo par plan
2. ConcevoirGPT Image 2.5Prompt de fiche, puis prompts d’images de départ avec la fiche en référenceFiche personnage et images de départ, sous forme d’URL
3. TournerSeedance 2.5Prompt vidéo, plus la fiche et l’image de départ comme images de référenceUne vidéo avec son par plan
4. Monterffmpeg ou n’importe quel logiciel de montageLes fichiers des plansLe film terminé

Les étapes sont reliées par des URL. GPT Image 2.5 renvoie des images hébergées sur le stockage de SeedRouter, et Seedance 2.5 accepte les images de référence sous forme d’URL publiques : la sortie de l’étape 2 passe donc directement à l’étape 3, sans téléchargement ni envoi.

De quoi avez-vous besoin avant de commencer ?

  • Une clé API SeedRouter dans votre environnement :
export SEEDROUTER_API_KEY="your-key"
  • Python 3 avec requests et le SDK Anthropic : pip install requests anthropic.
  • ffmpeg pour assembler les plans à la fin.
  • Du crédit. Chaque appel est une requête payante. Les tâches échouées ne sont pas facturées, et les nouveaux comptes démarrent avec un petit solde gratuit.

Tous les extraits Python ci-dessous partagent ces deux lignes :

import os
import requests

HEADERS = {"Authorization": f"Bearer {os.environ['SEEDROUTER_API_KEY']}"}

Étape 1 : comment faire planifier les plans par Claude Opus 5.5 ?

Donnez à Opus un prompt système qui explique comment Seedance 2.5 lit un prompt, et demandez le plan en JSON pour que votre script puisse l’utiliser. Les règles de ce prompt système viennent des guides de prompts Seedance officiels de ByteDance, résumés dans le guide des prompts Seedance 2.5 : sujet et action d’abord, un seul mouvement de caméra par plan, des plages horaires pour les plans longs, des fichiers de référence désignés par leur numéro.

import json
import anthropic

client = anthropic.Anthropic(
    api_key=os.environ["SEEDROUTER_API_KEY"],
    base_url="https://api.seedrouter.ai",
)

DIRECTOR = """You are the director of a short film made with AI models.
Return only JSON, no other text, in this shape:
{"character": "...", "sheet_prompt": "...",
 "shots": [{"duration": 5, "frame_prompt": "...", "video_prompt": "..."}]}

character: one fixed paragraph describing the main character's face, hair,
build and clothes. Repeat it word for word inside every other prompt.

sheet_prompt: an image prompt for one character reference sheet: a front,
three-quarter, profile and back view, plus four facial expressions, on a plain
light background, with no text other than small panel labels.

shots: 3 to 5 shots, each 4 to 15 seconds.
frame_prompt: an image prompt for the first frame of the shot.
video_prompt: a video prompt for Seedance 2.5. Write it in this order: subject
and action, scene, visual style, camera, audio. Image 1 is the character sheet
and Image 2 is the start frame of the shot; refer to them by those names.
Use one camera move per shot. Say who is holding the camera and how they move.
For shots longer than 5 seconds, split the action into time ranges such as
0-3s. Put dialogue in quotes as: Character's line (emotion): content.
Describe the ambient sound. Do not ask for subtitles or on-screen text.

The character must not look like a real, identifiable person. Use a stylized
look, such as a 3D animated or illustrated character."""

message = client.messages.create(
    model="claude-opus-5-5",
    max_tokens=16000,
    system=DIRECTOR,
    messages=[{
        "role": "user",
        "content": "A lighthouse keeper finds a lost robot on the rocks during a storm and teaches it to wave at passing ships.",
    }],
)
text = "".join(block.text for block in message.content if block.type == "text")
plan = json.loads(text)

Quelques détails comptent :

  • max_tokens inclut la réflexion. Opus 5.5 utilise toujours la réflexion adaptative, et la référence API d’Opus 5.5 compte les tokens de réflexion dans max_tokens. Laissez-lui de la marge, sinon le JSON peut être coupé.
  • N’envoyez pas temperature, top_p ni top_k, et ne pré-remplissez pas de tour assistant. Opus 5.5 renvoie une erreur 400 pour des valeurs d’échantillonnage autres que celles par défaut et pour une réponse pré-remplie. Pour régler l’intensité de sa réflexion, utilisez plutôt output_config.effort.
  • « Qui tient la caméra » est l’astuce du post d’origine. Son auteur explique qu’en indiquant à Opus « mon ami filme depuis la banquette arrière », il a écrit de lui-même de micro-tremblements, un recadrage en léger retard et un autofocus qui cherche, et que « ce seul détail de contexte supprime le “look IA” ».
  • Les références de style sont facultatives. Opus lit les images : vous pouvez ajouter des captures d’écran du rendu voulu sous forme de blocs image avec une source URL dans le tour utilisateur.

Si json.loads échoue, affichez text et redemandez à Opus. Relire le plan avant de générer quoi que ce soit est aussi le moment le moins cher pour corriger l’histoire : une modification ici coûte une requête texte, une modification après le rendu coûte de la vidéo.

Étape 2 : comment créer la fiche personnage et les images de départ avec GPT Image 2.5 ?

Envoyez d’abord plan["sheet_prompt"] à GPT Image 2.5. Envoyez ensuite le frame_prompt de chaque plan avec la fiche comme image de référence, pour que chaque image de départ montre le même personnage. Les tâches d’image sont envoyées à /v1/images/generations et lues sur /v1/tasks/{id} :

import time

def image(prompt, size, refs=()):
    body = {"model": "gpt-image-2.5-flare", "prompt": prompt, "size": size, "quality": "high"}
    if refs:
        body["images"] = [{"image_url": url} for url in refs]
    task_id = requests.post(
        "https://api.seedrouter.ai/v1/images/generations",
        headers=HEADERS, json=body, timeout=60,
    ).json()["id"]
    while True:
        task = requests.get(
            f"https://api.seedrouter.ai/v1/tasks/{task_id}", headers=HEADERS, timeout=30,
        ).json()
        if task["status"] == "completed":
            return task["output"]["data"][0]["url"]
        if task["status"] == "failed":
            raise RuntimeError(task["error"]["message"])
        time.sleep(3)

sheet = image(plan["sheet_prompt"], "1536x1024")
frames = [image(shot["frame_prompt"], "1792x1008", [sheet]) for shot in plan["shots"]]

Pourquoi ces réglages :

  • 1792x1008 correspond au 16:9. GPT Image 2.5 attend size au format WIDTHxHEIGHT, avec deux côtés multiples de 16 : une image 16:9 doit donc être écrite en pixels, et 16:9 n’est pas une valeur size valide. Alignez-la sur le ratio que vous demanderez à Seedance.
  • Flare suffit pour la plupart des fiches. Sunburst offre un contrôle plus fin d’une modification à l’autre, mais il est plus lent ; GPT Image 2.5 Flare vs Sunburst explique quand il en vaut la peine.
  • Faites vos brouillons avec une quality plus basse. Tant que vous modifiez encore le personnage, low ou medium génèrent plus vite. Passez à high pour les images avec lesquelles vous tournerez.

Pour rester courtes, les fonctions ci-dessus interrogent la tâche sans limite de temps. Dans votre propre code, ajoutez un délai maximal et conservez l’ID de la tâche, afin qu’une exécution interrompue puisse vérifier la même tâche au lieu d’en payer une nouvelle.

Étape 3 : comment générer chaque plan avec Seedance 2.5 ?

Envoyez chaque video_prompt à Seedance 2.5 avec deux images de référence : la fiche personnage en Image 1 et l’image de départ du plan en Image 2, dans cet ordre, car Seedance numérote les fichiers de référence dans l’ordre où vous les joignez. Les tâches vidéo ont leur propre endpoint, /v1/contents/generations/tasks, et se terminent avec status: "succeeded" :

def shot(prompt, refs, duration):
    content = [{"type": "text", "text": prompt}]
    for url in refs:
        content.append({"type": "image_url", "image_url": {"url": url}, "role": "reference_image"})
    task_id = requests.post(
        "https://api.seedrouter.ai/v1/contents/generations/tasks",
        headers=HEADERS,
        json={
            "model": "dreamina-seedance-2-5",
            "content": content,
            "resolution": "480p",
            "ratio": "16:9",
            "duration": duration,
            "generate_audio": True,
        },
        timeout=60,
    ).json()["id"]
    while True:
        task = requests.get(
            f"https://api.seedrouter.ai/v1/contents/generations/tasks/{task_id}",
            headers=HEADERS, timeout=30,
        ).json()
        if task["status"] == "succeeded":
            return task["content"]["video_url"]
        if task["status"] in ("failed", "expired"):
            raise RuntimeError(task["error"]["message"])
        time.sleep(15)

videos = [shot(s["video_prompt"], [sheet, frame], s["duration"]) for s, frame in zip(plan["shots"], frames)]

Les choix de la requête :

  • Des images de référence, pas une première image. Seedance 2.5 peut aussi caler un plan sur une première image exacte (role: "first_frame"), mais la référence API de Seedance 2.5 indique que les modes première image « ne peuvent pas être combinés avec des éléments de référence » : vous perdriez la fiche personnage. Avec les deux images en reference_image, c’est le prompt qui indique à Seedance que l’Image 2 est l’image de départ. Le début du plan la suit de près, mais pas au pixel près.
  • 480p pour les brouillons. Générez d’abord chaque plan en 480p, corrigez les prompts qui n’ont pas marché, puis générez les plans retenus en 720p ou 1080p avec le même prompt.
  • generate_audio: true produit dialogues, ambiance et bruitages à partir du prompt, générés en même temps que l’image.
  • Un ratio fixe. Si tous les plans ont le même format et la même résolution, ffmpeg peut les assembler sans réencodage.

Un plan dure de 4 à 30 secondes, et une seule tâche peut contenir plusieurs coupes si le prompt donne une plage horaire à chacune. La deuxième scène du créateur, par exemple, enchaînait six plans coupés sur les coups de batterie en 10 secondes.

Comment garder le même personnage dans chaque plan ?

La cohérence vient de la répétition, dans le prompt comme dans les références :

  • Répétez la même description. Le paragraphe character de l’étape 1 va mot pour mot dans chaque prompt d’image et de vidéo. Deux descriptions différentes d’une même personne sont l’une des raisons pour lesquelles le modèle déforme ou dédouble un personnage.
  • Envoyez la même fiche à chaque plan. La fiche est toujours l’Image 1. Seedance 2.5 accepte les fiches multi-vues ; l’ancien Seedance 2.0 peut lire une fiche multi-angles comme plusieurs personnes, et le guide des prompts conseille plutôt un gros plan du visage et une image en pied par personnage.
  • Désignez le personnage de la même façon à chaque fois, par exemple « le gardien de phare de l’Image 1 », et ne vous fiez pas à un nom écrit dans l’image.
  • Gardez une seule voix sur tous les plans. Seedance 2.5 accepte jusqu’à 10 références audio (WAV ou MP3, de 2 à 30 secondes). Joignez le même extrait de voix à chaque plan et liez-le dans le texte, comme dans l’exemple de ByteDance : « L’Image 1 représente le protagoniste John et utilise le timbre de voix de l’Audio 1. »

Pour deux plans qui doivent s’enchaîner sans saut visible, il existe une seconde option : réglez "return_last_frame": true sur le premier plan et envoyez le content.last_frame_url renvoyé comme first_frame du plan suivant. La jonction est alors verrouillée, mais ce plan suivant ne peut pas utiliser la fiche personnage : réservez-la donc à une action continue au sein d’une même scène plutôt qu’à chaque coupe.

Peut-on utiliser la photo d’une personne réelle comme personnage ?

Non. Seedance 2.5 n’accepte pas d’images ou de vidéos de référence contenant de vrais visages humains, et une tâche qui en contient échoue sans être facturée. L’erreur « real person » de Seedance explique la règle de ByteDance et les options qu’il propose sur sa propre plateforme.

Cela concerne aussi les personnages IA réalistes. Le post d’origine filmait une femme photoréaliste, mais la documentation de ByteDance ne dit pas comment son contrôle des visages traite des visages réalistes dessinés par un autre modèle. Un personnage stylisé, comme le rendu 3D animé ou illustré que demande le prompt système ci-dessus, évite cette question. Si vous voulez un rendu photoréaliste, testez d’abord un plan court en 480p avant de construire tout un film autour.

Comment assembler les plans en un seul film ?

Téléchargez les vidéos dans l’ordre, listez-les dans un fichier texte et assemblez-les avec ffmpeg :

names = []
for index, url in enumerate(videos):
    name = f"shot-{index + 1}.mp4"
    with open(name, "wb") as file:
        file.write(requests.get(url, timeout=300).content)
    names.append(name)
with open("shots.txt", "w") as file:
    file.writelines(f"file '{name}'\n" for name in names)
ffmpeg -f concat -safe 0 -i shots.txt -c copy film.mp4

-c copy assemble les fichiers sans réencodage, ce qui fonctionne parce que chaque plan a la même résolution, le même format d’image et le même format de fichier. Si vous avez mélangé les réglages, retirez -c copy et laissez ffmpeg réencoder. Les URL des vidéos sont hébergées sur le stockage de SeedRouter : téléchargez les fichiers que vous voulez conserver.

Combien coûte un court métrage avec Seedance 2.5 ?

Chaque modèle facture dans sa propre unité, et les tarifs actuels figurent sur la page de chaque modèle :

  • Claude Opus 5.5 facture les tokens d’entrée et de sortie, réflexion comprise. Planifier un film demande une ou quelques requêtes. Tarifs.
  • GPT Image 2.5 Flare et Sunburst facturent un prix fixe par image livrée. Une fiche plus une image de départ par plan, cela fait quatre à six images pour un court métrage. Tarifs.
  • Seedance 2.5 facture des tokens vidéo : secondes produites × largeur × hauteur × 24 ÷ 1024. Une seconde de vidéo 16:9 représente 9 607,5 tokens en 480p, 21 600 en 720p et 48 600 en 1080p, et le 1080p a son propre tarif. Tarifs.

L’essentiel du coût vient de la vidéo. Un brouillon en 480p utilise moins de la moitié des tokens du 720p : corriger les prompts en 480p et ne générer que la version finale en plus haute résolution est la plus grosse économie. Les tarifs de l’API Seedance détaillent d’autres exemples.

Questions fréquentes

Claude Opus 5.5 peut-il créer la vidéo tout seul ?

Non. Opus 5.5 est un modèle de texte : il lit les images, mais il ne génère ni images ni vidéo. Dans ce workflow, il écrit les prompts, et GPT Image 2.5 et Seedance 2.5 produisent les images et les séquences.

Peut-on utiliser Claude Fable 5.1 à la place d’Opus 5.5 ?

Oui. Fable 5.1 accepte la même requête Messages : remplacez simplement model par claude-fable-5-1. Claude Fable 5.1 vs Fable 5 vs Opus 5.5 compare les trois.

Quelle durée peut avoir un court métrage Seedance 2.5 ?

Une tâche Seedance 2.5 génère de 4 à 30 secondes, ou laisse le modèle choisir la durée avec duration: -1. Un film plus long est composé de plusieurs plans assemblés, sa durée n’a donc pas de limite fixe.

Pourquoi le personnage change-t-il d’un plan à l’autre ?

Généralement parce que les prompts le décrivent différemment, que la fiche manque dans certains plans, ou que les fichiers de référence sont joints dans un autre ordre que celui des numéros du prompt. Vérifiez que chaque prompt vidéo contient le même paragraphe sur le personnage et que la fiche est toujours la première image.

Peut-on utiliser Seedance 2.0 pour ce workflow ?

Oui, avec la même structure de requête et son propre ID de modèle. Pour le personnage, donnez à Seedance 2.0 des images séparées du visage et du corps entier plutôt qu’une fiche multi-vues. Seedance 2.5 vs 2.0 liste les autres différences.

Réalisez votre premier court métrage

Commencez par une histoire en trois plans en 480p, vérifiez les plans, puis générez la version finale en plus haute résolution. La page Seedance 2.5 affiche les tarifs actuels et un Playground pour tester un plan, et la référence complète des requêtes se trouve dans la documentation API de Seedance 2.5, la documentation API de GPT Image 2.5 et la documentation API de Claude Opus 5.5.

Guides associés