Pourquoi utiliser deux modèles plutôt qu’un seul
Seedance 2.0 peut générer une vidéo directement à partir d’un texte, alors pourquoi créer d’abord une image ? Parce que les performances d’une publicité dépendent de la précision du produit, et qu’un prompt textuel ne peut pas reproduire de manière fiable votre véritable flacon, son étiquette et son emballage. La solution consiste à intégrer d’abord le vrai produit dans un visuel fixe, puis à animer exactement ce visuel.
Seedream 5.0 Pro constitue la partie image. C’est un modèle de génération et de retouche d’images qui planifie la mise en page avant le rendu, écrit du texte intégré à l’image dans 14 langues avec des formes de lettres correctes et accepte jusqu’à 10 images de référence, afin de considérer votre véritable emballage comme la référence absolue. Seedance 2.0 constitue la partie vidéo — le modèle ByteDance de conversion texte/image/référence en vidéo, qui génère un audio synchronisé lors du même passage au lieu d’ajouter une voix off ensuite (l’architecture et l’affirmation concernant l’audio natif sont présentées dans l’article arXiv). Seul le mode conversion de référence en vidéo de Seedance 2.0 vous permet de lui fournir le visuel Seedream et de lui dire : « conservez ce produit et construisez une scène autour de lui ».
Une photo en entrée, dix vidéos en sortie, avec un produit cohérent dans chacune. C’est toute l’idée.

La chaîne à deux modèles : Seedream 5.0 Pro crée le visuel fixe, Seedance 2.0 l’anime.
Le calcul des coûts qui permet de décider si l’opération en vaut la peine
J’ai d’abord mis les chiffres côte à côte, car c’est ce qui justifie réellement la création du pipeline.
| Dix publicités verticales terminées de 15 s |
Ce workflow (API) |
Dix vidéos de créateurs humains |
| Visuel héros |
$0.081 (un visuel Seedream 2K, réutilisé) |
inclus par tournage |
| 10 vidéos |
~$24.95 (10 × 720p, 15 s avec Seedance) |
— |
| Total pour 10 publicités |
≈ $25 |
$1,500–3,000 |
| Droits d’utilisation publicitaire |
inclus |
+25–30% |
| Délai de production |
une après-midi |
~une semaine |
Cela revient à environ $2.58 par publicité terminée de 15 secondes. Les prix proviennent des pages GPT Proto consacrées à Seedream 5.0 Pro et à Seedance 2.0 (10 % sous les tarifs publics de ByteDance) ; la fourchette appliquée aux créateurs humains vient des enquêtes sur les tarifs UGC de 2026. Mon analyse — et il s’agit d’un jugement, pas d’une affirmation mesurée — est que l’argent n’est même pas le principal avantage. Le vrai gain, c’est que la variation devient gratuite : faites passer une photo de produit dans dix prompts et obtenez dix angles à tester en A/B au lieu d’un seul.
Ce dont vous avez besoin
Un compte GPT Proto avec une clé API (inscription par e-mail, sans vérification téléphonique ou professionnelle), Python 3 avec requests, une photo de produit hébergée à une URL publique et environ 30 $ de solde pour exécuter plusieurs fois le lot complet de dix publicités. Récupérez la clé dans votre tableau de bord — elle ressemble à sk-... — puis collez-la telle quelle comme valeur de l’en-tête Authorization, exactement comme indiqué dans la documentation, sans préfixe Bearer.
Étape 1 — Transformer la photo du produit en visuel héros
Les deux modèles sont asynchrones : vous envoyez une tâche en POST, récupérez un id de prédiction, puis interrogez GET /api/v3/predictions/{id}/result jusqu’à ce que le status soit succeeded. Voici un petit outil d’interrogation que nous réutiliserons pour les deux étapes.
import requests, json, time
API_KEY = "sk-xxxxx" # paste your key directly, no "Bearer"
HEADERS = {"Authorization": API_KEY, "Content-Type": "application/json"}
BASE = "https://gptproto.com/api/v3"
def submit(path, payload):
r = requests.post(f"{BASE}/{path}", headers=HEADERS, data=json.dumps(payload))
r.raise_for_status()
return r.json()["data"]["id"]
def wait(pred_id, every=5, timeout=600):
deadline = time.time() + timeout
while time.time() < deadline:
r = requests.get(f"{BASE}/predictions/{pred_id}/result", headers=HEADERS)
data = r.json()["data"]
if data["status"] == "succeeded":
return data["outputs"][0]
if data["status"] in ("failed", "expired"):
raise RuntimeError(f"job {data['status']}: {data.get('error')}")
time.sleep(every)
raise TimeoutError("polling timed out")
Prenez maintenant l’unique photo du produit et placez-la dans une scène avec la tâche image-edit. Rédigez-la comme un brief de conception, pas comme une légende : placez d’abord les règles de composition et les adjectifs de style à la fin, et nommez directement la lumière, car c’est de là que vient le réalisme de Seedream. Limitez-vous à environ 30 à 80 mots et utilisez une taille portrait 2K afin que le visuel corresponde à une image vidéo au format 9:16.
product_photo = "https://your-cdn.com/serum-bottle.png" # the one photo you start with
edit_prompt = (
"Place this matte-black serum bottle on a wet bathroom counter, "
"soft window light from the left, water droplets on the glass, "
"shallow depth of field, photoreal product photography, keep the label exactly as shown"
)
img_id = submit(
"bytedance/dola-seedream-5-0-pro-260628/image-edit",
{"prompt": edit_prompt, "images": [product_photo], "size": "1600*2848"},
)
hero_image_url = wait(img_id)["url"] # feed this into Seedance next
print(hero_image_url)
Le même appel en cURL, si vous commencez par tester depuis le terminal :
curl --location 'https://gptproto.com/api/v3/bytedance/dola-seedream-5-0-pro-260628/image-edit' \
--header 'Authorization: sk-xxxxx' \
--header 'Content-Type: application/json' \
--data '{"prompt":"Place this matte-black serum bottle...","images":["https://your-cdn.com/serum-bottle.png"],"size":"1600*2848"}'
Notez que le format size utilise un astérisque (1600*2848), et non un x. Une image 2K coûte 0,081 $ ; la même image en 1K (832*1248) revient à 0,0405 $ si vous réalisez des tests de concepts jetables. La première image de référence est gratuite ; les références supplémentaires coûtent 0,0027 $ chacune, dans la limite de 10.
Étape 1 : le même flacon, déplacé d’une photo de studio simple vers une scène prête pour l’UGC.
Étape 2 — Rédiger le prompt UGC (c’est ici que la plupart des publicités échouent)
Un prompt publicitaire Seedance est un brief de tournage, pas une description, car le modèle crée l’image et le son en un seul passage. Structurez-le en quatre couches : le sujet et la scène (décrivez le créateur ou le produit avec au moins trois détails visuels concrets), l’accroche dans les 0 à 3 premières secondes, le moment consacré au produit entre 4 et 10 secondes, puis une image de clôture nette. Placez les répliques prononcées entre guillemets doubles et gardez-les courtes — les longs monologues nuisent à la synchronisation labiale.
Le piège que presque tout le monde rencontre est le sur-polissage. On est tenté de demander un éclairage cinématographique et un mouvement de caméra spectaculaire ; dans un fil UGC, cela paraît artificiel. Un clip crédible doit ressembler à quelque chose qu’une vraie personne aurait pu filmer dans sa salle de bains avec un téléphone — caméra légèrement tremblante, lumière naturelle d’une fenêtre, aucun aspect studio. N’entassez pas non plus deux idées dans un même prompt : un format par génération.

Les quatre couches indispensables à tout prompt UGC Seedance 2.0.
Étape 3 — Animer le visuel héros avec Seedance 2.0
C’est l’étape que les guides des espaces de test passent sous silence. Utilisez reference-to-video et transmettez l’URL Seedream dans images — c’est ce qui maintient votre produit exact à l’écran. Faites correspondre duration au minutage indiqué dans le prompt, définissez 9:16 pour TikTok et Reels, et laissez generate_audio activé afin que le dialogue soit rendu nativement.
video_prompt = (
"UGC-style phone video, vertical, a woman in her late twenties in a bright bathroom "
"holding the serum bottle to camera with easy creator energy, slightly handheld, "
"natural window light. She says: \"Okay this one actually cleared my skin in a week.\" "
"Cut to a macro close-up of the dropper. Ends on the bottle held up, label facing camera."
)
vid_id = submit(
"bytedance/dreamina-seedance-2-0-260128/reference-to-video",
{
"prompt": video_prompt,
"images": [hero_image_url], # product consistency comes from here
"aspect_ratio": "9:16",
"duration": 15,
"resolution": "720p",
"generate_audio": True,
"seed": -1,
},
)
print(wait(vid_id, every=10)["url"]) # video takes longer -- poll less often
curl --location 'https://gptproto.com/api/v3/bytedance/dreamina-seedance-2-0-260128/reference-to-video' \
--header 'Authorization: sk-xxxxx' \
--header 'Content-Type: application/json' \
--data '{"prompt":"UGC-style phone video...","images":["HERO_IMAGE_URL"],"aspect_ratio":"9:16","duration":15,"resolution":"720p","generate_audio":true}'
Si vous préférez animer une seule image de départ sans le système complet de références, image-to-video utilise un seul champ image au lieu du tableau images et fonctionne de la même manière pour le reste.
Étape 4 — Générer les dix variantes en lot
Voici l’avantage de procéder par code : dix angles demandent le même effort qu’un seul. Répétez l’appel vidéo avec dix prompts différents en utilisant le même visuel héros, envoyez-les tous, puis récupérez les URL.
angles = [
"...opens on a splash of water, energetic hook, 'wait for it'...",
"...opens mid-sentence, skeptical creator tone, 'I did not expect this'...",
"...opens on the product already in hand, calm morning-routine demo...",
"...street-style, walking and talking, quick to-camera line...",
"...close friend recommendation, sitting on the bathroom floor...",
# ...ten total, one format each
]
jobs = [
submit("bytedance/dreamina-seedance-2-0-260128/reference-to-video",
{"prompt": p, "images": [hero_image_url], "aspect_ratio": "9:16",
"duration": 15, "resolution": "720p", "generate_audio": True})
for p in angles
]
clips = [wait(j, every=10)["url"] for j in jobs]
for i, url in enumerate(clips, 1):
print(f"ad {i}: {url}")

Un visuel héros, dix angles publicitaires — le lot de l’étape 4.
Spécifications de sortie et tarifs de Seedance 2.0
| Résolution |
Format |
Durée |
Prix / exécution |
| 480p |
16:9 |
4s |
$0.3094 |
| 720p |
16:9 |
15s |
$2.4948 |
| 1080p |
16:9 |
15s |
$6.1746 |
| 4K |
16:9 |
15s |
$12.83 |
Les résolutions disponibles sont 480p/720p/1080p/4K, pour des durées de 4 à 15 secondes et six formats d’image (9:16, 1:1, 16:9, 4:3, 3:4, 21:9). En 720p, le format 16:9 produit une image de 1280×720, tandis que le 1080p produit 1920×1088. Pour les réseaux sociaux payants, je resterais en 720p 9:16 : c’est le meilleur compromis en matière de coût, et la compression des fils d’actualité efface de toute façon la majeure partie de la différence avec le 1080p. Les tableaux complets figurent sur la page du modèle Seedance 2.0 et la page du modèle.
Les erreurs qui posent réellement problème
Le décalage de durée est discret : si votre prompt est conçu pour 15 secondes mais que vous laissez duration sur sa valeur par défaut de 5, le modèle accélère ou tronque la scène. Faites-les correspondre. Une erreur 503 de l’API signifie un rejet lié à la politique de contenu (elle est renvoyée comme une erreur 400) — reformulez et renvoyez la requête au lieu de réessayer aveuglément. Une erreur 403 indique généralement un solde insuffisant, et non une mauvaise clé. Et si un clip ressemble à une publicité de luxe, ce n’est pas une réussite pour un placement UGC : rendez le prompt plus naturel, comme s’il était « filmé au téléphone ».
Avant la mise en ligne
Considérez chaque résultat comme une ébauche publicitaire, et non comme une création terminée. Vérifiez les affirmations concernant le produit, les droits d’image de la photo importée, la politique publicitaire de la plateforme et les règles de divulgation de l’utilisation de l’IA applicables dans votre marché avant d’investir dans un clip. L’IA supprime les coûts de production, pas la responsabilité concernant le contenu de la publicité.
Toutes les images de cet article — la couverture et les quatre illustrations — ont été générées avec Seedream 5.0 Pro pour environ 0,24 $ au total. Même workflow, même clé.