Guide d'utilisation
Créer des vidéos courtes avec seedance-2.0-mini : un workflow API hiapi de bout en bout
TL;DR
- De quoi s'agit-il : un workflow de bout en bout pour produire des vidéos verticales de style TikTok/Reels avec seedance-2.0-mini via l'API hiapi — du premier appel curl au script qui rend en lot toute une semaine de contenu. Les extraits de démonstration de cette page ont été générés avec exactement les requêtes présentées ci-dessous.
- Pourquoi ce modèle pour les vidéos courtes : support natif du
9:16, audio synchronisé intégré (aucun traitement audio séparé), durée réglable de 4 à 15 secondes, et un brouillon 480p pour seulement 0,0272 $/seconde — soit environ 0,11 $ pour un brouillon vertical de 4 secondes (tarifs). - Faits API vérifiés :
prompt,duration(entier de 4 à 15) etresolution(480p|720p) sont obligatoires ;aspect_ratioaccepte1:1,4:3,3:4,16:9,9:16,21:9,adaptive. Pour l'image-vers-vidéo, utilisezfirst_frame_url/last_frame_url. Le schéma est strict — un champ inconnu commeseedest rejeté par un 400. - Workflow : générez en 480p pour itérer sur les prompts, re-rendez en 720p les extraits retenus, et soumettez les tâches en lot et en parallèle — la file asynchrone
/v1/tasksse charge de la distribution.
Pourquoi seedance-2.0-mini convient à la boucle des vidéos courtes
La production de vidéos courtes est un travail quantitatif : vous ébauchez beaucoup d'extraits, vous en gardez quelques-uns, vous publiez chaque jour. Ce workflow exige trois choses d'une API vidéo — itérer à bas coût, produire du vertical et avoir du son — et seedance-2.0-mini coche exactement ces trois cases :
- Un brouillon coûte assez peu pour itérer sans compter. En 480p, le modèle est facturé 0,0272 $ par seconde de sortie, soit environ 0,11 $ pour un brouillon de 4 secondes, et seulement environ 0,41 $ pour un extrait complet de 15 secondes. La formule 720p est à 0,0586 $/seconde. (Tarifs vérifiés sur la page de tarifs en temps réel ; la vidéo est facturée à la seconde, donc
durationest votre levier de coût.) - 9:16 natif. Un rendu vertical direct, au lieu de recadrer un extrait horizontal en perdant la composition.
- Audio synchronisé natif. Le MP4 produit embarque une piste AAC générée avec la scène — sons d'ambiance, bruitages, fond sonore de la pièce. Pour du contenu de fil d'actualité qui se lit automatiquement avec le son, cela supprime une étape de montage entière.
Si vous voulez le modèle supérieur de la même famille pour du contenu hero, le même workflow s'applique à seedance-2-0 — seule la grille tarifaire diffère.
Configuration
Vous n'avez besoin que d'une clé API hiapi, rien d'autre — pas de SDK. Conservez la clé dans une variable d'environnement :
export HIAPI_API_KEY="sk-..."
Tous les modèles vidéo de hiapi passent par le même endpoint de tâches asynchrones : POST https://api.hiapi.ai/v1/tasks renvoie immédiatement un taskId, puis vous interrogez GET /v1/tasks/{taskId} jusqu'à l'achèvement. Voir la documentation pour les détails.
Votre premier extrait vertical (T2V)
La requête valide minimale nécessite prompt, duration et resolution. Ajoutez aspect_ratio: "9:16" pour le format court :
curl -X POST https://api.hiapi.ai/v1/tasks \
-H "Authorization: Bearer $HIAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.0-mini",
"input": {
"prompt": "竖屏短视频。阳光洒落的咖啡馆吧台上,一杯新鲜抹茶拿铁被缓缓倒入透明玻璃杯中,绿色旋涡在牛奶间绽放,柔和的窗光,浅景深。原生音频:轻柔的咖啡馆环境声、液体倾倒声。清脆、诱人、照片级真实。",
"duration": 4,
"resolution": "480p",
"aspect_ratio": "9:16"
}
}'
La réponse revient instantanément :
{"code": 200, "data": {"taskId": "tk-hiapi-01KWTTFDPHSDWZ0FP1QAS5J79Q"}, "message": "success"}
Interrogez la tâche jusqu'à ce que status passe à success, puis téléchargez immédiatement output[0].url — les URL de sortie sont temporaires et expirent. Voici l'extrait réel produit par cette requête (4 secondes, 480p, 9:16, avec le versement et l'ambiance audio natifs — activez le son pour l'écouter) :
Deux remarques pratiques sur ce rendu : la sortie verticale « 480p » mesure en pratique 496×864 pixels, et l'audio arrive dans le MP4 sous forme de piste AAC standard — aucune composition avec un fichier séparé n'est nécessaire.
Schéma d'entrée, vérifié sur l'API en direct
Le schéma est strict. Voici de vraies réponses de validation, reproduites mot pour mot, pour que vous puissiez les reconnaître dans vos journaux :
| Champ | Type | Obligatoire | Valeurs |
|---|---|---|---|
prompt |
string | ✅ (longueur minimale 3) | votre description de plan |
duration |
integer | ✅ | 4–15 (secondes) |
resolution |
string | ✅ | 480p, 720p |
aspect_ratio |
string | facultatif | 1:1, 4:3, 3:4, 16:9, 9:16, 21:9, adaptive |
first_frame_url |
string | facultatif | URL d'image pour la première image en I2V |
last_frame_url |
string | facultatif | URL d'image pour contrôler l'image de fin |
image_input |
array | facultatif | référence d'image multimodale |
reference_video_urls |
array | facultatif | vidéos de référence de style/mouvement (tarif par seconde plus bas) |
Omettez un champ obligatoire et la tâche est rejetée avant création (aucun frais) :
{"code": 400, "error_code": "INVALID_REQUEST", "message": "invalid input: resolution: missing required field \"resolution\"; duration: missing required field \"duration\""}
Les valeurs hors limites indiquent la limite exacte — duration: maximum: got 16, want 15 — et les champs inconnus sont rejetés plutôt qu'ignorés :
{"code": 400, "error_code": "INVALID_REQUEST", "message": "invalid input: <root>: additional properties 'seed' not allowed"}
Ce dernier comportement mérite d'être intégré : si vous réutilisez la structure de requête d'un autre modèle (un seed, un size, un indicateur audio), seedance-2.0-mini renvoie un 400 au lieu d'ignorer silencieusement le champ.
Une fonction Python réutilisable
Tout ce dont la production a besoin tient en une quarantaine de lignes — soumettre, interroger, télécharger :
import os, time, requests
API = "https://api.hiapi.ai/v1/tasks"
HEADERS = {"Authorization": f"Bearer {os.environ['HIAPI_API_KEY']}"}
def submit(prompt: str, duration: int = 4, resolution: str = "480p",
aspect_ratio: str = "9:16", **extra) -> str:
r = requests.post(API, headers=HEADERS, json={
"model": "seedance-2.0-mini",
"input": {"prompt": prompt, "duration": duration,
"resolution": resolution, "aspect_ratio": aspect_ratio, **extra},
}, timeout=60)
data = r.json()
task_id = (data.get("data") or {}).get("taskId")
if not task_id:
raise RuntimeError(f"submit failed: {data}")
return task_id
def wait(task_id: str, timeout_s: int = 900) -> dict:
deadline = time.time() + timeout_s
while time.time() < deadline:
task = requests.get(f"{API}/{task_id}", headers=HEADERS, timeout=30).json()["data"]
if task["status"] == "success":
return task
if task["status"] == "fail":
raise RuntimeError(f"task failed: {task.get('error')}")
time.sleep(8)
raise TimeoutError(task_id)
def make_clip(prompt: str, out_path: str, **kw):
task = wait(submit(prompt, **kw))
url = task["output"][0]["url"] # URL temporaire — téléchargez immédiatement
with open(out_path, "wb") as f:
f.write(requests.get(url, timeout=120).content)
Un extrait de 4 secondes en 480p se termine généralement en quelques minutes ; aux heures de pointe, prévoyez jusqu'à environ 10 minutes avant de déclarer un délai dépassé.
Image-vers-vidéo : verrouiller la première image
Pour les courtes vidéos centrées sur un produit, la dérive du prompt est l'ennemi — vous voulez votre produit à l'écran, pas l'imagination du modèle à son sujet. La solution est l'I2V avec first_frame_url : générez (ou photographiez) une image fixe, puis animez-la. Une image fixe de référence verticale comme celle-ci, produite avec gpt-image-2 via le même endpoint /v1/tasks, convient parfaitement comme image de départ :

La requête n'ajoute qu'un seul champ :
task_id = submit(
"热水从上方缓缓绕圈注入,手冲滤杯开始升起蒸汽,"
"水滴落入下方的玻璃分享壶,阳光映照蒸汽。缓慢轻柔地推进。"
"原生音频:轻柔的水流声,安静的清晨房间底噪。",
duration=4, resolution="480p", aspect_ratio="9:16",
first_frame_url="https://your-cdn.example/pourover-ref.jpg",
)
Voici le résultat réel de l'animation de la première image — une image fixe de notre bibliothèque de recettes seedance-2.0-mini et l'extrait qu'elle génère, avec le même modèle et la même structure de requête (16:9 dans cet exemple) :

La composition, les couleurs et le sujet restent verrouillés sur votre image fixe ; le prompt ne décrit plus que le mouvement. Si l'extrait doit se terminer sur une image précise, il y a aussi last_frame_url — utile pour une boucle qui revient sur une fiche produit.
Produire une semaine de contenu en lot
Comme /v1/tasks est asynchrone, la production en lot se résume à : soumettre toutes les tâches, puis interroger. Pas besoin de file côté client.
briefs = [
("mon-hook", "竖屏片段。浓缩咖啡缓慢萃取,……"),
("tue-loop", "竖屏无缝循环片段。热气从杯中卷起,……"),
("wed-recipe","竖屏片段。俯拍手冲冲泡序列,……"),
# ……每个发布日一条
]
tasks = {name: submit(p, duration=6) for name, p in briefs} # 扇出
for name, tid in tasks.items(): # 收集
make = wait(tid)
url = make["output"][0]["url"]
open(f"{name}.mp4", "wb").write(requests.get(url, timeout=120).content)
Le calcul des coûts reste prévisible, car la facturation se fait à la seconde de sortie :
| Scénario | Spécifications | Coût |
|---|---|---|
| 1 itération de brouillon | 4 s · 480p | environ 0,11 $ |
| 1 extrait prêt à publier | 6 s · 480p | environ 0,16 $ |
| 7 extraits (une semaine, un par jour) | 7 × 6 s · 480p | environ 1,14 $ |
| Re-rendu hero | 6 s · 720p | environ 0,35 $ |
Un workflow éprouvé : ébauchez chaque idée en 480p, gardez les gagnants, et ne re-rendez en 720p que ceux-là. Pour plus de leviers (paliers de résolution, découpe de durée, ordonnancement par lots), consultez notre guide contrôler les coûts des API d'image et de vidéo IA.
Astuces de prompt pour le fil d'actualité
Ce qui a fonctionné dans nos rendus de test, optimisé pour la vidéo courte :
- Dites « vertical » et composez pour cela. Commencez par « 竖屏短视频。 » et ajoutez
aspect_ratio: "9:16", pour que le sujet soit centré dans un cadre haut, plutôt que de cadrer une scène horizontale qui sera rognée. - Placez l'accroche dans la première seconde. Le fil d'actualité décide dès la première seconde — faites de l'action initiale la récompense elle-même (le versement déjà en cours, la vapeur déjà montante), plutôt qu'un plan d'établissement lent.
- Scriptez l'audio. Une phrase « 原生音频:…… » listant 2 à 3 sons concrets (versement de liquide, ambiance de café) façonne efficacement la piste. Sans prompt, vous n'obtiendrez qu'un fond sonore générique de pièce.
- Pour les extraits bouclables, minimisez la variation entre début et fin. Particules qui dérivent, halo qui pulse, vapeur qui s'enroule — décrivez un mouvement en régime stable et les images de début et de fin seront assez proches pour boucler.
En résumé
Produire des vidéos courtes avec seedance-2.0-mini se résume à un endpoint asynchrone, trois champs obligatoires, et une facturation à la seconde qui rend l'itération bon marché : ébauchez des extraits verticaux en 480p pour environ vingt-cinq cents pièce, verrouillez vos plans produit avec first_frame_url, soumettez en lot votre calendrier de publication, et re-rendez en 720p ceux que vous gardez. Obtenez une clé API, puis commencez par la requête curl de 4 secondes ci-dessus — la page du modèle seedance-2.0-mini contient la référence des paramètres et les tarifs en temps réel pour continuer à partir de là.
Articles similaires
Voir tous les articles →-
Guide d'utilisation
Guide de démarrage pour seedream-5.0-pro/image-to-image : capacités, tarification et points d'intégration
Limites de capacité, mode de facturation et pratiques d'intégration technique du modèle d'édition d'image de ByteDance
-
Guide d'utilisation
Guide de prise en main de la génération d'images par texte avec seedream-5.0-pro : limites de capacités, intégration API et maîtrise des coûts
Point de vue pratique pour les développeurs : des points clés des paramètres à l'estimation du coût de 0,05 $ par image
-
Guide d'utilisation
Guide de prise en main de Hailuo 2.3 Fast image-to-video : limites de capacités, tarification et intégration pratique
Points clés pour les développeurs : choisir et intégrer le modèle image-to-video de MiniMax