happyhorse-1.1-i2v
Modèle d’animation d’image : l’image source définit la première image de la vidéo, et la description guide les mouvements suivants. Il crée une courte vidéo avec possibilité d’accompagnement sonore.
- Ailoot · Vidéo
POST /v1/videos/generationshappyhorse-1.1-i2v - Ailoot · Vidéo
POST /v1/videos/generationshappyhorse-i2v - Ailoot · Vidéo
POST /v1/videos/generationshappyhorse-i2v-latest
À propos du modèle
Cette description présente les capacités du modèle. Les entrées, sorties et options disponibles dans Ailoot pour la méthode sélectionnée figurent ci-dessous.
HappyHorse-1.1-I2V est un modèle d’Alibaba qui commence une scène vidéo à partir d’une image existante. Celle-ci devient la première image de la vidéo, et le texte peut définir l’action qui suit : mouvement du personnage, changements dans la scène et déplacement de la caméra. Ce mode convient pour animer une illustration, une photographie d’objet ou un concept visuel préparé à l’avance.
La description textuelle est facultative. En son absence, le modèle déduit lui-même un mouvement possible à partir du contenu de l’image initiale. Lorsqu’une description est fournie, l’image source détermine la composition et l’apparence des objets, tandis que les mots guident l’évolution de la scène dans le temps.
De la première image au mouvement
Alibaba met en avant la préservation de l’apparence du personnage, la cohérence visuelle, la fluidité des mouvements et l’association de l’image et du son. La stabilité des inscriptions et des textures figure également parmi les caractéristiques annoncées. Ces propriétés décrivent la conception du modèle et ne signifient pas que chaque pixel est conservé à l’identique dans toutes les images générées.
Ce mode utilise une seule image initiale. Elle définit la scène de départ, et non un ensemble de références indépendantes pour une nouvelle composition. La possibilité de définir séparément une image finale n’est pas annoncée pour cette version précise.
Les formats JPEG, JPG, PNG et WEBP sont acceptés. Chaque côté de l’image d’entrée doit mesurer au moins 300 pixels ; le rapport largeur/hauteur admis va de 1:2,5 à 2,5:1, et le fichier peut peser jusqu’à 20 Mo. La vidéo produite reprend le rapport largeur/hauteur de la première image.
Paramètres de la vidéo
La durée se choisit sous forme d’un nombre entier de 3 à 15 secondes. Les résolutions 480P, 720P et 1080P sont disponibles ; la sortie est un fichier MP4 à 24 images par seconde. La création d’un accompagnement sonore avec la vidéo est prise en charge.
La description peut être rédigée dans n’importe quelle langue et contenir jusqu’à 5000 caractères non chinois ou 2500 caractères chinois. La partie qui dépasse cette limite est ignorée : les actions importantes et les particularités du mouvement doivent donc tenir dans les instructions. Une même graine aléatoire initiale peut produire des vidéos similaires, mais ne garantit pas qu’elles soient identiques image par image.
Ailoot · Vidéo POST /v1/videos/generations happyhorse-1.1-i2v
happyhorse-1.1-i2vhappyhorse-1.1-i2vhappyhorse-i2vhappyhorse-i2v-latest
Premiers pas
Modèle d’animation d’image : l’image source définit la première image de la vidéo, et la description guide les mouvements suivants. Il crée une courte vidéo avec possibilité d’accompagnement sonore.
- Entrées acceptées
- Texte · Images
- Résultats
- Vidéo
Disponible dans Ailoot · entrées et méthodes
Ailoot · Vidéo POST /v1/videos/generations
- Entrée
text,image- Sortie
video- Format de sortie
- mp4
| Champ | Type | Exigence | Valeurs et limites | Par défaut |
|---|---|---|---|---|
Champmodel | Typestring | ExigenceObligatoire | Valeurs et limites happyhorse-1.1-i2v | Par défaut— |
Champprompt | Typestring | ExigenceFacultatif | Valeurs et limites Longueur minimale: 1 | Par défaut— |
Champduration | Typeinteger | ExigenceFacultatif | Valeurs et limites Minimum: 3 Maximum: 15 Unité: secondes | Par défaut5 |
Champresolution | Typestring | ExigenceFacultatif | Valeurs et limites 480P, 720P, 1080P | Par défaut720P |
Champratio | Typestring | ExigenceNon pris en charge | Valeurs et limites | Par défaut— |
Champimage_urls | Typehttps_url|data_image_url[] | ExigenceObligatoire | Valeurs et limites Nombre minimal d’éléments: 1 Nombre maximal d’éléments: 1 Nombre maximal d’octets décodés: 20 971 520 Types MIME: image/jpeg, image/png, image/webp | Par défaut— |
Combinaisons d’éléments d’entrée
first_frame_to_video · Obligatoire : image_urls
Paramètres et cycle de vie de la méthode
| Paramètre | Contrat |
|---|---|
Paramètrecontent_type | Contratapplication/json |
Paramètrerequired | Contratmodel, image_urls |
Paramètrematerial_types | Contrattext, image |
Paramètreoptional | Contratduration, resolution, ratio, prompt |
Paramètreduration_integer_range | Contrat3, 15 |
Paramètredefault_duration | Contrat5 |
Paramètreresolution | Contrat480P, 720P, 1080P |
Paramètredefault_resolution | Contrat720P |
Paramètreratio | Contrat |
Paramètreratio_must_omit | Contrattrue |
Paramètreimage_urls | Contrat{"min_count":1,"max_count":1,"schemes":["https","données matricielles en base64"],"max_data_image_bytes":20971520} |
Cycle de vie : submit_once_poll_original
GET /v1/videos/{request_id}
GET /v1/videos/generations/{request_id}
GET /v1/videos/{request_id}/content
GET /v1/videos/generations/{request_id}/content
Les structures des méthodes et les identifiants sont exacts ; la capacité du fournisseur est distincte de l’admission.
Tarifs
Tarifs des méthodes Ailoot
POST /v1/videos/generations- Sortie
- 0,18 USD par seconde en 1080p
- Sortie
- 0,07 USD par seconde en 480p
- Sortie
- 0,14 USD par seconde en 720p
Ailoot réserve un montant estimé avant une requête. Après le résultat, le montant final est débité selon l’utilisation mesurée. Pour le streaming, le montant final à débiter est calculé à partir du relevé final d’utilisation. Fonctionnement de la réservation et du débit →
Exemples de requêtes
Ailoot · Vidéo
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_URL:?Set the HTTPS URL of your actual first-frame image}"
export AILOOT_IMAGE_URL
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "happyhorse-1.1-i2v", "prompt": "The subject walks slowly toward the camera.", "duration": 5, "resolution": "720P"}')
from urllib.parse import urlsplit
u=os.environ["AILOOT_IMAGE_URL"]
z=urlsplit(u)
if z.scheme!="https" or not z.netloc or z.username or z.password:raise SystemExit("Set the actual HTTPS image URL")
p["image_urls"]=[u]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos/generations \
-H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
r=json.loads(Path("result.json").read_text())
print(json.dumps(r))
PY_RESULT
Recevoir et enregistrer les résultats
Ailoot · Vidéo
mp4
GET /v1/videos/{request_id}GET /v1/videos/generations/{request_id}GET /v1/videos/{request_id}/contentGET /v1/videos/generations/{request_id}/content
Vérifier l’état de la tâche
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_OPERATION_ID:?Set the actual Ailoot operation ID returned by creation}"
export AILOOT_OPERATION_ID
operation_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ["AILOOT_OPERATION_ID"],safe=""))')
curl --fail-with-body --silent --show-error "https://api.ailoot.ai/v1/videos/generations/$operation_id" \
-H "Authorization: Bearer $AILOOT_API_KEY" -o status.json
python3 - <<'PY_STATUS'
import json
from pathlib import Path
r=json.loads(Path("status.json").read_text())
print(json.dumps(r))
if r.get("status")=="completed":
for x in r.get("data",[]):print(x)
PY_STATUS
Enregistrer toutes les ressources terminées
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_STATUS_FILE:?Set the actual completed status JSON file}"
export AILOOT_STATUS_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
from urllib.parse import urlsplit,urljoin
f=Path(os.environ["AILOOT_STATUS_FILE"])
if not f.is_file():raise SystemExit("Choose the actual completed status file")
r=json.loads(f.read_text())
if r.get("status")!="completed" or not isinstance(r.get("data"),list) or not r["data"]:raise SystemExit("Wait for a completed status with asset paths")
urls=[]
for x in r["data"]:
if not isinstance(x,str) or "\n" in x or "\r" in x:raise SystemExit("Invalid asset path")
u=urljoin("https://api.ailoot.ai",x)
z=urlsplit(u)
if z.scheme!="https" or z.netloc!="api.ailoot.ai" or z.username or z.password:raise SystemExit("Use the actual Ailoot asset paths from status")
urls.append(u)
Path("asset-urls.txt").write_text("\n".join(urls)+"\n")
PY_REQUEST
index=0
while IFS= read -r asset_url; do
curl --fail-with-body --silent --show-error "$asset_url" \
-H "Authorization: Bearer $AILOOT_API_KEY" -o "video-${index}.mp4"
index=$((index + 1))
done < asset-urls.txt
Autres lectures de contenu
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_OPERATION_ID:?Set the actual Ailoot operation ID returned by creation}"
export AILOOT_OPERATION_ID
operation_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ["AILOOT_OPERATION_ID"],safe=""))')
curl --fail-with-body --silent --show-error "https://api.ailoot.ai/v1/videos/generations/$operation_id/content" \
-H "Authorization: Bearer $AILOOT_API_KEY" -o video.mp4
Conserver tous les résultats terminés
Enregistrez chaque vidéo terminée ou fichier renvoyé ; récupérez chaque URL de ressource effectivement renvoyée.
Conservez chaque élément de données et chaque index de sortie renvoyé. content_url concerne uniquement le premier ; récupérez chaque chemin de contenu ou ressource réel. Un GET de contenu sans index ne renvoie pas tous les résultats.
Si la réponse d’origine doit être vérifiée
Consultez la tâche d’origine existante ; ne soumettez jamais de nouveau un envoi dont l’issue est inconnue.
Champs de la réponse
| Champ | Type |
|---|---|
Champid | Typestring |
Champobject | Typestring |
Champmodel | Typestring |
Champstatus | Typestring |
Champcontent_url | Typesigned URL |
Champdata[] | Typesigned URL |
Champusage | Typeobject |
Champresult_pending_check | Typeboolean |
Erreurs et étapes suivantes
| Réponse | Condition | Étape suivante |
|---|---|---|
Réponse400 · invalid_request_error | ConditionChamps obligatoires, représentation des contenus ou valeur de paramètre non valides | Étape suivanteCorrigez les champs indiqués avant une nouvelle requête de création. |
Réponse409 · video_not_ready | ConditionLe contenu du résultat d’origine n’est pas encore disponible | Étape suivanteInterrogez périodiquement l’ID d’origine renvoyé et respectez Retry-After. |
Réponseserver_error | ConditionLa réponse renvoyée indique que l’opération ou le résultat nécessite une vérification | Étape suivanteConservez l’identifiant d’opération/de tâche initialement renvoyé, les en-têtes de la requête et la réponse ; poursuivez les lectures prises en charge de cette opération d’origine. Ne soumettez pas à nouveau la requête de création. |
Alias
Alias du modèle
Ailoot happyhorse-1.1-i2v, happyhorse-i2v, happyhorse-i2v-latest
Alias des chemins de méthode
Utilisez les chemins de méthode indiqués ci-dessus.
ID d’appel associés
Ailoot · Vidéo POST /v1/videos/generations happyhorse-i2v
happyhorse-i2vhappyhorse-1.1-i2vhappyhorse-i2vhappyhorse-i2v-latest
Premiers pas
Modèle d’animation d’image : l’image source définit la première image de la vidéo, et la description guide les mouvements suivants. Il crée une courte vidéo avec possibilité d’accompagnement sonore.
- Entrées acceptées
- Texte · Images
- Résultats
- Vidéo
Disponible dans Ailoot · entrées et méthodes
Ailoot · Vidéo POST /v1/videos/generations
- Entrée
text,image- Sortie
video- Format de sortie
- mp4
| Champ | Type | Exigence | Valeurs et limites | Par défaut |
|---|---|---|---|---|
Champmodel | Typestring | ExigenceObligatoire | Valeurs et limites happyhorse-i2v | Par défaut— |
Champprompt | Typestring | ExigenceFacultatif | Valeurs et limites Longueur minimale: 1 | Par défaut— |
Champduration | Typeinteger | ExigenceFacultatif | Valeurs et limites Minimum: 3 Maximum: 15 Unité: secondes | Par défaut5 |
Champresolution | Typestring | ExigenceFacultatif | Valeurs et limites 480P, 720P, 1080P | Par défaut720P |
Champratio | Typestring | ExigenceNon pris en charge | Valeurs et limites | Par défaut— |
Champimage_urls | Typehttps_url|data_image_url[] | ExigenceObligatoire | Valeurs et limites Nombre minimal d’éléments: 1 Nombre maximal d’éléments: 1 Nombre maximal d’octets décodés: 20 971 520 Types MIME: image/jpeg, image/png, image/webp | Par défaut— |
Combinaisons d’éléments d’entrée
first_frame_to_video · Obligatoire : image_urls
Paramètres et cycle de vie de la méthode
| Paramètre | Contrat |
|---|---|
Paramètrematerial_types | Contrattext, image |
Paramètrerequired | Contratnull |
Paramètreoptional_controls | Contratnull |
Cycle de vie : submit_once_poll_original
GET /v1/videos/{request_id}
GET /v1/videos/generations/{request_id}
GET /v1/videos/{request_id}/content
GET /v1/videos/generations/{request_id}/content
Les structures des méthodes et les identifiants sont exacts ; la capacité du fournisseur est distincte de l’admission.
Tarifs
Tarifs des méthodes Ailoot
POST /v1/videos/generations- Sortie
- 0,18 USD par seconde en 1080p
- Sortie
- 0,07 USD par seconde en 480p
- Sortie
- 0,14 USD par seconde en 720p
Ailoot réserve un montant estimé avant une requête. Après le résultat, le montant final est débité selon l’utilisation mesurée. Pour le streaming, le montant final à débiter est calculé à partir du relevé final d’utilisation. Fonctionnement de la réservation et du débit →
Exemples de requêtes
Ailoot · Vidéo
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_URL:?Set the HTTPS URL of your actual first-frame image}"
export AILOOT_IMAGE_URL
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "happyhorse-i2v", "prompt": "The subject walks slowly toward the camera.", "duration": 5, "resolution": "720P"}')
from urllib.parse import urlsplit
u=os.environ["AILOOT_IMAGE_URL"]
z=urlsplit(u)
if z.scheme!="https" or not z.netloc or z.username or z.password:raise SystemExit("Set the actual HTTPS image URL")
p["image_urls"]=[u]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos/generations \
-H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
r=json.loads(Path("result.json").read_text())
print(json.dumps(r))
PY_RESULT
Recevoir et enregistrer les résultats
Ailoot · Vidéo
mp4
GET /v1/videos/{request_id}GET /v1/videos/generations/{request_id}GET /v1/videos/{request_id}/contentGET /v1/videos/generations/{request_id}/content
Vérifier l’état de la tâche
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_OPERATION_ID:?Set the actual Ailoot operation ID returned by creation}"
export AILOOT_OPERATION_ID
operation_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ["AILOOT_OPERATION_ID"],safe=""))')
curl --fail-with-body --silent --show-error "https://api.ailoot.ai/v1/videos/generations/$operation_id" \
-H "Authorization: Bearer $AILOOT_API_KEY" -o status.json
python3 - <<'PY_STATUS'
import json
from pathlib import Path
r=json.loads(Path("status.json").read_text())
print(json.dumps(r))
if r.get("status")=="completed":
for x in r.get("data",[]):print(x)
PY_STATUS
Enregistrer toutes les ressources terminées
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_STATUS_FILE:?Set the actual completed status JSON file}"
export AILOOT_STATUS_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
from urllib.parse import urlsplit,urljoin
f=Path(os.environ["AILOOT_STATUS_FILE"])
if not f.is_file():raise SystemExit("Choose the actual completed status file")
r=json.loads(f.read_text())
if r.get("status")!="completed" or not isinstance(r.get("data"),list) or not r["data"]:raise SystemExit("Wait for a completed status with asset paths")
urls=[]
for x in r["data"]:
if not isinstance(x,str) or "\n" in x or "\r" in x:raise SystemExit("Invalid asset path")
u=urljoin("https://api.ailoot.ai",x)
z=urlsplit(u)
if z.scheme!="https" or z.netloc!="api.ailoot.ai" or z.username or z.password:raise SystemExit("Use the actual Ailoot asset paths from status")
urls.append(u)
Path("asset-urls.txt").write_text("\n".join(urls)+"\n")
PY_REQUEST
index=0
while IFS= read -r asset_url; do
curl --fail-with-body --silent --show-error "$asset_url" \
-H "Authorization: Bearer $AILOOT_API_KEY" -o "video-${index}.mp4"
index=$((index + 1))
done < asset-urls.txt
Autres lectures de contenu
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_OPERATION_ID:?Set the actual Ailoot operation ID returned by creation}"
export AILOOT_OPERATION_ID
operation_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ["AILOOT_OPERATION_ID"],safe=""))')
curl --fail-with-body --silent --show-error "https://api.ailoot.ai/v1/videos/generations/$operation_id/content" \
-H "Authorization: Bearer $AILOOT_API_KEY" -o video.mp4
Conserver tous les résultats terminés
Enregistrez chaque vidéo terminée ou fichier renvoyé ; récupérez chaque URL de ressource effectivement renvoyée.
Conservez chaque élément de données et chaque index de sortie renvoyé. content_url concerne uniquement le premier ; récupérez chaque chemin de contenu ou ressource réel. Un GET de contenu sans index ne renvoie pas tous les résultats.
Si la réponse d’origine doit être vérifiée
Consultez la tâche d’origine existante ; ne soumettez jamais de nouveau un envoi dont l’issue est inconnue.
Champs de la réponse
| Champ | Type |
|---|---|
Champid | Typestring |
Champobject | Typestring |
Champmodel | Typestring |
Champstatus | Typestring |
Champcontent_url | Typesigned URL |
Champdata[] | Typesigned URL |
Champusage | Typeobject |
Champresult_pending_check | Typeboolean |
Erreurs et étapes suivantes
| Réponse | Condition | Étape suivante |
|---|---|---|
Réponse400 · invalid_request_error | ConditionChamps obligatoires, représentation des contenus ou valeur de paramètre non valides | Étape suivanteCorrigez les champs indiqués avant une nouvelle requête de création. |
Réponse409 · video_not_ready | ConditionLe contenu du résultat d’origine n’est pas encore disponible | Étape suivanteInterrogez périodiquement l’ID d’origine renvoyé et respectez Retry-After. |
Réponseserver_error | ConditionLa réponse renvoyée indique que l’opération ou le résultat nécessite une vérification | Étape suivanteConservez l’identifiant d’opération/de tâche initialement renvoyé, les en-têtes de la requête et la réponse ; poursuivez les lectures prises en charge de cette opération d’origine. Ne soumettez pas à nouveau la requête de création. |
Alias
Alias du modèle
Ailoot happyhorse-1.1-i2v, happyhorse-i2v, happyhorse-i2v-latest
Alias des chemins de méthode
Utilisez les chemins de méthode indiqués ci-dessus.
ID d’appel associés
Ailoot · Vidéo POST /v1/videos/generations happyhorse-i2v-latest
happyhorse-i2v-latesthappyhorse-1.1-i2vhappyhorse-i2vhappyhorse-i2v-latest
Premiers pas
Modèle d’animation d’image : l’image source définit la première image de la vidéo, et la description guide les mouvements suivants. Il crée une courte vidéo avec possibilité d’accompagnement sonore.
- Entrées acceptées
- Texte · Images
- Résultats
- Vidéo
Disponible dans Ailoot · entrées et méthodes
Ailoot · Vidéo POST /v1/videos/generations
- Entrée
text,image- Sortie
video- Format de sortie
- mp4
| Champ | Type | Exigence | Valeurs et limites | Par défaut |
|---|---|---|---|---|
Champmodel | Typestring | ExigenceObligatoire | Valeurs et limites happyhorse-i2v-latest | Par défaut— |
Champprompt | Typestring | ExigenceFacultatif | Valeurs et limites Longueur minimale: 1 | Par défaut— |
Champduration | Typeinteger | ExigenceFacultatif | Valeurs et limites Minimum: 3 Maximum: 15 Unité: secondes | Par défaut5 |
Champresolution | Typestring | ExigenceFacultatif | Valeurs et limites 480P, 720P, 1080P | Par défaut720P |
Champratio | Typestring | ExigenceNon pris en charge | Valeurs et limites | Par défaut— |
Champimage_urls | Typehttps_url|data_image_url[] | ExigenceObligatoire | Valeurs et limites Nombre minimal d’éléments: 1 Nombre maximal d’éléments: 1 Nombre maximal d’octets décodés: 20 971 520 Types MIME: image/jpeg, image/png, image/webp | Par défaut— |
Combinaisons d’éléments d’entrée
first_frame_to_video · Obligatoire : image_urls
Paramètres et cycle de vie de la méthode
| Paramètre | Contrat |
|---|---|
Paramètrematerial_types | Contrattext, image |
Paramètrerequired | Contratnull |
Paramètreoptional_controls | Contratnull |
Cycle de vie : submit_once_poll_original
GET /v1/videos/{request_id}
GET /v1/videos/generations/{request_id}
GET /v1/videos/{request_id}/content
GET /v1/videos/generations/{request_id}/content
Les structures des méthodes et les identifiants sont exacts ; la capacité du fournisseur est distincte de l’admission.
Tarifs
Tarifs des méthodes Ailoot
POST /v1/videos/generations- Sortie
- 0,18 USD par seconde en 1080p
- Sortie
- 0,07 USD par seconde en 480p
- Sortie
- 0,14 USD par seconde en 720p
Ailoot réserve un montant estimé avant une requête. Après le résultat, le montant final est débité selon l’utilisation mesurée. Pour le streaming, le montant final à débiter est calculé à partir du relevé final d’utilisation. Fonctionnement de la réservation et du débit →
Exemples de requêtes
Ailoot · Vidéo
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_URL:?Set the HTTPS URL of your actual first-frame image}"
export AILOOT_IMAGE_URL
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "happyhorse-i2v-latest", "prompt": "The subject walks slowly toward the camera.", "duration": 5, "resolution": "720P"}')
from urllib.parse import urlsplit
u=os.environ["AILOOT_IMAGE_URL"]
z=urlsplit(u)
if z.scheme!="https" or not z.netloc or z.username or z.password:raise SystemExit("Set the actual HTTPS image URL")
p["image_urls"]=[u]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos/generations \
-H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
r=json.loads(Path("result.json").read_text())
print(json.dumps(r))
PY_RESULT
Recevoir et enregistrer les résultats
Ailoot · Vidéo
mp4
GET /v1/videos/{request_id}GET /v1/videos/generations/{request_id}GET /v1/videos/{request_id}/contentGET /v1/videos/generations/{request_id}/content
Vérifier l’état de la tâche
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_OPERATION_ID:?Set the actual Ailoot operation ID returned by creation}"
export AILOOT_OPERATION_ID
operation_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ["AILOOT_OPERATION_ID"],safe=""))')
curl --fail-with-body --silent --show-error "https://api.ailoot.ai/v1/videos/generations/$operation_id" \
-H "Authorization: Bearer $AILOOT_API_KEY" -o status.json
python3 - <<'PY_STATUS'
import json
from pathlib import Path
r=json.loads(Path("status.json").read_text())
print(json.dumps(r))
if r.get("status")=="completed":
for x in r.get("data",[]):print(x)
PY_STATUS
Enregistrer toutes les ressources terminées
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_STATUS_FILE:?Set the actual completed status JSON file}"
export AILOOT_STATUS_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
from urllib.parse import urlsplit,urljoin
f=Path(os.environ["AILOOT_STATUS_FILE"])
if not f.is_file():raise SystemExit("Choose the actual completed status file")
r=json.loads(f.read_text())
if r.get("status")!="completed" or not isinstance(r.get("data"),list) or not r["data"]:raise SystemExit("Wait for a completed status with asset paths")
urls=[]
for x in r["data"]:
if not isinstance(x,str) or "\n" in x or "\r" in x:raise SystemExit("Invalid asset path")
u=urljoin("https://api.ailoot.ai",x)
z=urlsplit(u)
if z.scheme!="https" or z.netloc!="api.ailoot.ai" or z.username or z.password:raise SystemExit("Use the actual Ailoot asset paths from status")
urls.append(u)
Path("asset-urls.txt").write_text("\n".join(urls)+"\n")
PY_REQUEST
index=0
while IFS= read -r asset_url; do
curl --fail-with-body --silent --show-error "$asset_url" \
-H "Authorization: Bearer $AILOOT_API_KEY" -o "video-${index}.mp4"
index=$((index + 1))
done < asset-urls.txt
Autres lectures de contenu
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_OPERATION_ID:?Set the actual Ailoot operation ID returned by creation}"
export AILOOT_OPERATION_ID
operation_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ["AILOOT_OPERATION_ID"],safe=""))')
curl --fail-with-body --silent --show-error "https://api.ailoot.ai/v1/videos/generations/$operation_id/content" \
-H "Authorization: Bearer $AILOOT_API_KEY" -o video.mp4
Conserver tous les résultats terminés
Enregistrez chaque vidéo terminée ou fichier renvoyé ; récupérez chaque URL de ressource effectivement renvoyée.
Conservez chaque élément de données et chaque index de sortie renvoyé. content_url concerne uniquement le premier ; récupérez chaque chemin de contenu ou ressource réel. Un GET de contenu sans index ne renvoie pas tous les résultats.
Si la réponse d’origine doit être vérifiée
Consultez la tâche d’origine existante ; ne soumettez jamais de nouveau un envoi dont l’issue est inconnue.
Champs de la réponse
| Champ | Type |
|---|---|
Champid | Typestring |
Champobject | Typestring |
Champmodel | Typestring |
Champstatus | Typestring |
Champcontent_url | Typesigned URL |
Champdata[] | Typesigned URL |
Champusage | Typeobject |
Champresult_pending_check | Typeboolean |
Erreurs et étapes suivantes
| Réponse | Condition | Étape suivante |
|---|---|---|
Réponse400 · invalid_request_error | ConditionChamps obligatoires, représentation des contenus ou valeur de paramètre non valides | Étape suivanteCorrigez les champs indiqués avant une nouvelle requête de création. |
Réponse409 · video_not_ready | ConditionLe contenu du résultat d’origine n’est pas encore disponible | Étape suivanteInterrogez périodiquement l’ID d’origine renvoyé et respectez Retry-After. |
Réponseserver_error | ConditionLa réponse renvoyée indique que l’opération ou le résultat nécessite une vérification | Étape suivanteConservez l’identifiant d’opération/de tâche initialement renvoyé, les en-têtes de la requête et la réponse ; poursuivez les lectures prises en charge de cette opération d’origine. Ne soumettez pas à nouveau la requête de création. |
Alias
Alias du modèle
Ailoot happyhorse-1.1-i2v, happyhorse-i2v, happyhorse-i2v-latest
Alias des chemins de méthode
Utilisez les chemins de méthode indiqués ci-dessus.
ID d’appel associés
FAQ · happyhorse-1.1-i2v
- Quelles entrées et quels résultats sont disponibles ?
POST /v1/videos/generations·happyhorse-1.1-i2v:text,image→videoPOST /v1/videos/generations·happyhorse-i2v:text,image→videoPOST /v1/videos/generations·happyhorse-i2v-latest:text,image→video- Quels champs la requête utilise-t-elle ?
POST /v1/videos/generations·happyhorse-1.1-i2v:model,prompt,duration,resolution,image_urlsPOST /v1/videos/generations·happyhorse-i2v:model,prompt,duration,resolution,image_urlsPOST /v1/videos/generations·happyhorse-i2v-latest:model,prompt,duration,resolution,image_urls- Quelles limites s’appliquent ?
POST /v1/videos/generations·happyhorse-1.1-i2v:duration.minimum:3;duration.maximum:15POST /v1/videos/generations·happyhorse-i2v:duration.minimum:3;duration.maximum:15POST /v1/videos/generations·happyhorse-i2v-latest:duration.minimum:3;duration.maximum:15