happyhorse-1.1-i2v
Een model om een afbeelding tot leven te brengen: de bronafbeelding bepaalt het eerste frame en de beschrijving stuurt de verdere beweging. Het maakt een korte video met de mogelijkheid om geluid toe te voegen.
- Ailoot · Videomateriaal
POST /v1/videos/generationshappyhorse-1.1-i2v - Ailoot · Videomateriaal
POST /v1/videos/generationshappyhorse-i2v - Ailoot · Videomateriaal
POST /v1/videos/generationshappyhorse-i2v-latest
Over het model
Deze beschrijving gaat over de mogelijkheden van het model. De via Ailoot beschikbare invoer, uitvoer en opties staan hieronder voor de geselecteerde methode.
HappyHorse-1.1-I2V is een model van Alibaba dat een videoscène begint met een bestaande afbeelding. Die afbeelding wordt het eerste frame; de tekst kan de verdere actie bepalen: de beweging van het personage, veranderingen in de scène en de richting van de camera. Dit is geschikt om een illustratie, productfoto of vooraf uitgewerkt visueel concept tot leven te brengen.
Een tekstbeschrijving is niet verplicht. Zonder beschrijving leidt het model zelf een mogelijke beweging af uit de inhoud van de beginafbeelding. Bij een expliciete opdracht bepaalt de bronafbeelding de compositie en het uiterlijk van de objecten, terwijl de woorden het verloop van de scène in de tijd sturen.
Van het eerste frame naar beweging
Alibaba benadrukt het behoud van het uiterlijk van personages, visuele samenhang, vloeiende beweging en de combinatie van beeld en geluid. Ook de consistentie van tekst en texturen wordt als doel genoemd. Dit zijn ontwerpdoelen van het model; ze betekenen niet dat elke pixel letterlijk behouden blijft in alle gegenereerde frames.
Deze modus gebruikt één beginafbeelding. Die bepaalt de uitgangsscène en is geen verzameling losse voorbeelden voor een nieuwe compositie. Voor deze specifieke versie is de mogelijkheid om een afzonderlijk eindframe op te geven niet aangekondigd.
JPEG, JPG, PNG en WEBP worden geaccepteerd. Elke zijde van de invoerafbeelding moet minimaal 300 pixels zijn; de toegestane beeldverhouding loopt van 1:2,5 tot 2,5:1 en de bestandsgrootte is maximaal 20 MB. De beeldverhouding van de uiteindelijke video volgt het eerste frame.
Videoparameters
De duur wordt gekozen als een geheel getal van 3 tot 15 seconden. De resoluties 480P, 720P en 1080P zijn beschikbaar; het uitvoerformaat is MP4 met 24 frames per seconde. Het genereren van geluid samen met het beeld wordt ondersteund.
De beschrijving mag in elke taal zijn en bevat maximaal 5000 niet-Chinese of 2500 Chinese tekens. Bij overschrijding wordt het overtollige deel verwijderd; belangrijke acties en bewegingskenmerken moeten dus binnen die grens worden beschreven. Dezelfde willekeurige seed kan vergelijkbare video's opleveren, maar garandeert geen overeenkomst frame voor frame.
Ailoot · Videomateriaal POST /v1/videos/generations happyhorse-1.1-i2v
happyhorse-1.1-i2vhappyhorse-1.1-i2vhappyhorse-i2vhappyhorse-i2v-latest
Aan de slag
Een model om een afbeelding tot leven te brengen: de bronafbeelding bepaalt het eerste frame en de beschrijving stuurt de verdere beweging. Het maakt een korte video met de mogelijkheid om geluid toe te voegen.
- Toegestane invoer
- Tekst · Afbeeldingen
- Resultaten
- Video
Beschikbaar in Ailoot · invoer en methoden
Ailoot · Videomateriaal POST /v1/videos/generations
- Invoertypen
text,image- Uitvoertypen
video- Uitvoerformaat
- mp4
| Veld | Type | Vereiste | Waarden en limieten | Standaard |
|---|---|---|---|---|
Veldmodel | Typestring | VereisteVereist | Waarden en limieten happyhorse-1.1-i2v | Standaard— |
Veldprompt | Typestring | VereisteOptioneel | Waarden en limieten Minimumlengte: 1 | Standaard— |
Veldduration | Typeinteger | VereisteOptioneel | Waarden en limieten Minimum: 3 Maximum: 15 Eenheid: seconden | Standaard5 |
Veldresolution | Typestring | VereisteOptioneel | Waarden en limieten 480P, 720P, 1080P | Standaard720P |
Veldratio | Typestring | VereisteNiet ondersteund | Waarden en limieten | Standaard— |
Veldimage_urls | Typehttps_url|data_image_url[] | VereisteVereist | Waarden en limieten Minimumaantal items: 1 Maximumaantal items: 1 Maximumaantal gedecodeerde bytes: 20.971.520 MIME-typen: image/jpeg, image/png, image/webp | Standaard— |
Combinaties van invoermaterialen
first_frame_to_video · Vereist: image_urls
Methodeparameters en levenscyclus
| Parameter | Contract |
|---|---|
Parametercontent_type | Contractapplication/json |
Parameterrequired | Contractmodel, image_urls |
Parametermaterial_types | Contracttext, image |
Parameteroptional | Contractduration, resolution, ratio, prompt |
Parameterduration_integer_range | Contract3, 15 |
Parameterdefault_duration | Contract5 |
Parameterresolution | Contract480P, 720P, 1080P |
Parameterdefault_resolution | Contract720P |
Parameterratio | Contract |
Parameterratio_must_omit | Contracttrue |
Parameterimage_urls | Contract{"min_count":1,"max_count":1,"schemes":["https","rastergegevens in base64"],"max_data_image_bytes":20971520} |
Levenscyclus: 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
De methodestructuren en ID’s zijn exact; de mogelijkheden van de leverancier staan los van toelating.
Tarieven
Ailoot-methodetarieven
POST /v1/videos/generations- Uitvoer
- US$ 0,18 per seconde bij 1080p
- Uitvoer
- US$ 0,07 per seconde bij 480p
- Uitvoer
- US$ 0,14 per seconde bij 720p
Ailoot reserveert vóór een verzoek een geschat bedrag. Na het resultaat worden de uiteindelijke kosten afgerekend op basis van het gemeten verbruik. Bij streaming gebeurt de afrekening op basis van de definitieve verbruiksregistratie. Zo werken reservering en afrekening →
Voorbeeldverzoeken
Ailoot · Videomateriaal
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
Resultaten ophalen en opslaan
Ailoot · Videomateriaal
mp4
GET /v1/videos/{request_id}GET /v1/videos/generations/{request_id}GET /v1/videos/{request_id}/contentGET /v1/videos/generations/{request_id}/content
Taakstatus controleren
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
Alle voltooide bestanden opslaan
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
Lezen van andere inhoud
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
Alle voltooide resultaten bewaren
Sla elke voltooide video of elk teruggegeven bestand op; haal elke daadwerkelijk teruggegeven bestands-URL op.
Behoud elk geretourneerd data-item en elke uitvoerindex. content_url verwijst alleen naar het eerste resultaat; haal elk daadwerkelijk inhoudspad en elke asset op. Een GET-verzoek voor inhoud zonder index levert niet alle uitvoer op.
Als het oorspronkelijke antwoord moet worden gecontroleerd
Lees de bestaande oorspronkelijke taak; dien een onzekere verzending nooit opnieuw in.
Antwoordvelden
| Veld | Type |
|---|---|
Veldid | Typestring |
Veldobject | Typestring |
Veldmodel | Typestring |
Veldstatus | Typestring |
Veldcontent_url | Typesigned URL |
Velddata[] | Typesigned URL |
Veldusage | Typeobject |
Veldresult_pending_check | Typeboolean |
Fouten en vervolgstappen
| Antwoord | Voorwaarde | Volgende stap |
|---|---|---|
Antwoord400 · invalid_request_error | VoorwaardeVerplichte velden, de materiaalrepresentatie of een parameterwaarde zijn ongeldig | Volgende stapCorrigeer de aangegeven velden vóór een nieuwe aanmaakaanvraag. |
Antwoord409 · video_not_ready | VoorwaardeOorspronkelijke resultaatinhoud nog niet beschikbaar | Volgende stapVraag de oorspronkelijke geretourneerde ID periodiek op en respecteer Retry-After. |
Antwoordserver_error | VoorwaardeHet geretourneerde antwoord geeft aan dat de bewerking of het resultaat moet worden gecontroleerd | Volgende stapBewaar de oorspronkelijk geretourneerde bewerkings-/taak-ID, de aanvraagheaders en het antwoord; blijf de ondersteunde leesacties voor die oorspronkelijke bewerking uitvoeren. Dien de aanmaakaanvraag niet opnieuw in. |
Aliasnamen
Modelaliasnamen
Ailoot happyhorse-1.1-i2v, happyhorse-i2v, happyhorse-i2v-latest
Aliasnamen voor methodepaden
Gebruik de hierboven getoonde methodepaden.
Gerelateerde aanroeper-ID’s
Ailoot · Videomateriaal POST /v1/videos/generations happyhorse-i2v
happyhorse-i2vhappyhorse-1.1-i2vhappyhorse-i2vhappyhorse-i2v-latest
Aan de slag
Een model om een afbeelding tot leven te brengen: de bronafbeelding bepaalt het eerste frame en de beschrijving stuurt de verdere beweging. Het maakt een korte video met de mogelijkheid om geluid toe te voegen.
- Toegestane invoer
- Tekst · Afbeeldingen
- Resultaten
- Video
Beschikbaar in Ailoot · invoer en methoden
Ailoot · Videomateriaal POST /v1/videos/generations
- Invoertypen
text,image- Uitvoertypen
video- Uitvoerformaat
- mp4
| Veld | Type | Vereiste | Waarden en limieten | Standaard |
|---|---|---|---|---|
Veldmodel | Typestring | VereisteVereist | Waarden en limieten happyhorse-i2v | Standaard— |
Veldprompt | Typestring | VereisteOptioneel | Waarden en limieten Minimumlengte: 1 | Standaard— |
Veldduration | Typeinteger | VereisteOptioneel | Waarden en limieten Minimum: 3 Maximum: 15 Eenheid: seconden | Standaard5 |
Veldresolution | Typestring | VereisteOptioneel | Waarden en limieten 480P, 720P, 1080P | Standaard720P |
Veldratio | Typestring | VereisteNiet ondersteund | Waarden en limieten | Standaard— |
Veldimage_urls | Typehttps_url|data_image_url[] | VereisteVereist | Waarden en limieten Minimumaantal items: 1 Maximumaantal items: 1 Maximumaantal gedecodeerde bytes: 20.971.520 MIME-typen: image/jpeg, image/png, image/webp | Standaard— |
Combinaties van invoermaterialen
first_frame_to_video · Vereist: image_urls
Methodeparameters en levenscyclus
| Parameter | Contract |
|---|---|
Parametermaterial_types | Contracttext, image |
Parameterrequired | Contractnull |
Parameteroptional_controls | Contractnull |
Levenscyclus: 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
De methodestructuren en ID’s zijn exact; de mogelijkheden van de leverancier staan los van toelating.
Tarieven
Ailoot-methodetarieven
POST /v1/videos/generations- Uitvoer
- US$ 0,18 per seconde bij 1080p
- Uitvoer
- US$ 0,07 per seconde bij 480p
- Uitvoer
- US$ 0,14 per seconde bij 720p
Ailoot reserveert vóór een verzoek een geschat bedrag. Na het resultaat worden de uiteindelijke kosten afgerekend op basis van het gemeten verbruik. Bij streaming gebeurt de afrekening op basis van de definitieve verbruiksregistratie. Zo werken reservering en afrekening →
Voorbeeldverzoeken
Ailoot · Videomateriaal
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
Resultaten ophalen en opslaan
Ailoot · Videomateriaal
mp4
GET /v1/videos/{request_id}GET /v1/videos/generations/{request_id}GET /v1/videos/{request_id}/contentGET /v1/videos/generations/{request_id}/content
Taakstatus controleren
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
Alle voltooide bestanden opslaan
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
Lezen van andere inhoud
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
Alle voltooide resultaten bewaren
Sla elke voltooide video of elk teruggegeven bestand op; haal elke daadwerkelijk teruggegeven bestands-URL op.
Behoud elk geretourneerd data-item en elke uitvoerindex. content_url verwijst alleen naar het eerste resultaat; haal elk daadwerkelijk inhoudspad en elke asset op. Een GET-verzoek voor inhoud zonder index levert niet alle uitvoer op.
Als het oorspronkelijke antwoord moet worden gecontroleerd
Lees de bestaande oorspronkelijke taak; dien een onzekere verzending nooit opnieuw in.
Antwoordvelden
| Veld | Type |
|---|---|
Veldid | Typestring |
Veldobject | Typestring |
Veldmodel | Typestring |
Veldstatus | Typestring |
Veldcontent_url | Typesigned URL |
Velddata[] | Typesigned URL |
Veldusage | Typeobject |
Veldresult_pending_check | Typeboolean |
Fouten en vervolgstappen
| Antwoord | Voorwaarde | Volgende stap |
|---|---|---|
Antwoord400 · invalid_request_error | VoorwaardeVerplichte velden, de materiaalrepresentatie of een parameterwaarde zijn ongeldig | Volgende stapCorrigeer de aangegeven velden vóór een nieuwe aanmaakaanvraag. |
Antwoord409 · video_not_ready | VoorwaardeOorspronkelijke resultaatinhoud nog niet beschikbaar | Volgende stapVraag de oorspronkelijke geretourneerde ID periodiek op en respecteer Retry-After. |
Antwoordserver_error | VoorwaardeHet geretourneerde antwoord geeft aan dat de bewerking of het resultaat moet worden gecontroleerd | Volgende stapBewaar de oorspronkelijk geretourneerde bewerkings-/taak-ID, de aanvraagheaders en het antwoord; blijf de ondersteunde leesacties voor die oorspronkelijke bewerking uitvoeren. Dien de aanmaakaanvraag niet opnieuw in. |
Aliasnamen
Modelaliasnamen
Ailoot happyhorse-1.1-i2v, happyhorse-i2v, happyhorse-i2v-latest
Aliasnamen voor methodepaden
Gebruik de hierboven getoonde methodepaden.
Gerelateerde aanroeper-ID’s
Ailoot · Videomateriaal POST /v1/videos/generations happyhorse-i2v-latest
happyhorse-i2v-latesthappyhorse-1.1-i2vhappyhorse-i2vhappyhorse-i2v-latest
Aan de slag
Een model om een afbeelding tot leven te brengen: de bronafbeelding bepaalt het eerste frame en de beschrijving stuurt de verdere beweging. Het maakt een korte video met de mogelijkheid om geluid toe te voegen.
- Toegestane invoer
- Tekst · Afbeeldingen
- Resultaten
- Video
Beschikbaar in Ailoot · invoer en methoden
Ailoot · Videomateriaal POST /v1/videos/generations
- Invoertypen
text,image- Uitvoertypen
video- Uitvoerformaat
- mp4
| Veld | Type | Vereiste | Waarden en limieten | Standaard |
|---|---|---|---|---|
Veldmodel | Typestring | VereisteVereist | Waarden en limieten happyhorse-i2v-latest | Standaard— |
Veldprompt | Typestring | VereisteOptioneel | Waarden en limieten Minimumlengte: 1 | Standaard— |
Veldduration | Typeinteger | VereisteOptioneel | Waarden en limieten Minimum: 3 Maximum: 15 Eenheid: seconden | Standaard5 |
Veldresolution | Typestring | VereisteOptioneel | Waarden en limieten 480P, 720P, 1080P | Standaard720P |
Veldratio | Typestring | VereisteNiet ondersteund | Waarden en limieten | Standaard— |
Veldimage_urls | Typehttps_url|data_image_url[] | VereisteVereist | Waarden en limieten Minimumaantal items: 1 Maximumaantal items: 1 Maximumaantal gedecodeerde bytes: 20.971.520 MIME-typen: image/jpeg, image/png, image/webp | Standaard— |
Combinaties van invoermaterialen
first_frame_to_video · Vereist: image_urls
Methodeparameters en levenscyclus
| Parameter | Contract |
|---|---|
Parametermaterial_types | Contracttext, image |
Parameterrequired | Contractnull |
Parameteroptional_controls | Contractnull |
Levenscyclus: 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
De methodestructuren en ID’s zijn exact; de mogelijkheden van de leverancier staan los van toelating.
Tarieven
Ailoot-methodetarieven
POST /v1/videos/generations- Uitvoer
- US$ 0,18 per seconde bij 1080p
- Uitvoer
- US$ 0,07 per seconde bij 480p
- Uitvoer
- US$ 0,14 per seconde bij 720p
Ailoot reserveert vóór een verzoek een geschat bedrag. Na het resultaat worden de uiteindelijke kosten afgerekend op basis van het gemeten verbruik. Bij streaming gebeurt de afrekening op basis van de definitieve verbruiksregistratie. Zo werken reservering en afrekening →
Voorbeeldverzoeken
Ailoot · Videomateriaal
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
Resultaten ophalen en opslaan
Ailoot · Videomateriaal
mp4
GET /v1/videos/{request_id}GET /v1/videos/generations/{request_id}GET /v1/videos/{request_id}/contentGET /v1/videos/generations/{request_id}/content
Taakstatus controleren
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
Alle voltooide bestanden opslaan
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
Lezen van andere inhoud
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
Alle voltooide resultaten bewaren
Sla elke voltooide video of elk teruggegeven bestand op; haal elke daadwerkelijk teruggegeven bestands-URL op.
Behoud elk geretourneerd data-item en elke uitvoerindex. content_url verwijst alleen naar het eerste resultaat; haal elk daadwerkelijk inhoudspad en elke asset op. Een GET-verzoek voor inhoud zonder index levert niet alle uitvoer op.
Als het oorspronkelijke antwoord moet worden gecontroleerd
Lees de bestaande oorspronkelijke taak; dien een onzekere verzending nooit opnieuw in.
Antwoordvelden
| Veld | Type |
|---|---|
Veldid | Typestring |
Veldobject | Typestring |
Veldmodel | Typestring |
Veldstatus | Typestring |
Veldcontent_url | Typesigned URL |
Velddata[] | Typesigned URL |
Veldusage | Typeobject |
Veldresult_pending_check | Typeboolean |
Fouten en vervolgstappen
| Antwoord | Voorwaarde | Volgende stap |
|---|---|---|
Antwoord400 · invalid_request_error | VoorwaardeVerplichte velden, de materiaalrepresentatie of een parameterwaarde zijn ongeldig | Volgende stapCorrigeer de aangegeven velden vóór een nieuwe aanmaakaanvraag. |
Antwoord409 · video_not_ready | VoorwaardeOorspronkelijke resultaatinhoud nog niet beschikbaar | Volgende stapVraag de oorspronkelijke geretourneerde ID periodiek op en respecteer Retry-After. |
Antwoordserver_error | VoorwaardeHet geretourneerde antwoord geeft aan dat de bewerking of het resultaat moet worden gecontroleerd | Volgende stapBewaar de oorspronkelijk geretourneerde bewerkings-/taak-ID, de aanvraagheaders en het antwoord; blijf de ondersteunde leesacties voor die oorspronkelijke bewerking uitvoeren. Dien de aanmaakaanvraag niet opnieuw in. |
Aliasnamen
Modelaliasnamen
Ailoot happyhorse-1.1-i2v, happyhorse-i2v, happyhorse-i2v-latest
Aliasnamen voor methodepaden
Gebruik de hierboven getoonde methodepaden.
Gerelateerde aanroeper-ID’s
FAQ · happyhorse-1.1-i2v
- Welke invoer en resultaten zijn beschikbaar?
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- Welke velden gebruikt het verzoek?
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- Welke limieten gelden?
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