happyhorse-1.1-r2v
Model do generowania wideo na podstawie obrazów referencyjnych i scenariusza tekstowego. Pomaga zachować wygląd postaci i przedmiotów oraz styl wizualny w nowej scenie.
- Ailoot · Wideo
POST /v1/videos/generationshappyhorse-1.1-r2v - Ailoot · Wideo
POST /v1/videos/generationshappyhorse-r2v - Ailoot · Wideo
POST /v1/videos/generationshappyhorse-r2v-latest
O modelu
Ten opis przedstawia możliwości modelu. Dane wejściowe, wyniki i opcje dostępne w Ailoot podano poniżej dla wybranej metody.
HappyHorse-1.1-R2V tworzy nową scenę filmową na podstawie obrazów referencyjnych i polecenia tekstowego. Alibaba ukierunkowuje model na zachowanie rozpoznawalnych postaci, obiektów i stylu wizualnego podczas generowania ruchu. Obrazy referencyjne określają treść i wygląd sceny, a tekst opisuje, jak jej elementy mają ze sobą współdziałać.
Role wzorców wizualnych
Można użyć od jednego do dziewięciu obrazów. Mogą one określać postać, przedmiot, otoczenie lub sposób artystycznego przedstawienia. W opisie można wskazać numer obrazu referencyjnego i konkretny obiekt na nim, aby powiązać materiał wizualny z odpowiednią częścią akcji. Jest to szczególnie przydatne, gdy elementy kilku obrazów trzeba połączyć w jednej kompozycji.
W odróżnieniu od trybu z klatką początkową obrazy referencyjne stanowią tutaj podstawę treści nowej sceny. Polecenie tekstowe jest obowiązkowe: łączy wygląd obiektów z akcją, ruchem kamery i ogólną inscenizacją. Producent podkreśla spójność wizualną i filmowy charakter ruchu; wynik pozostaje generacją, a nie montażem obrazów źródłowych.
Obsługiwane są JPEG, JPG, PNG i WEBP o rozmiarze do 20 MB każdy. Krótszy bok obrazu musi mieć co najmniej 400 pikseli; zalecane są materiały w rozdzielczości 720P lub wyższej. W tym trybie danymi wejściowymi są właśnie obrazy i tekst.
Czas trwania, kadr i dźwięk
Wynik jest zapisywany w MP4 z częstotliwością 24 klatek na sekundę. Czas trwania określa się jako liczbę całkowitą od 3 do 15 sekund. Można wybrać rozdzielczość 480P, 720P lub 1080P; obsługiwane jest generowanie towarzyszącego dźwięku.
Dostępne są kadry poziome, pionowe i kwadratowe: 16:9, 9:16, 1:1, 4:3, 3:4, 4:5, 5:4, 9:21 i 21:9. Wybór proporcji pomaga z góry określić przestrzeń kompozycyjną nowej sceny.
Tekst może być w dowolnym języku. Limit wynosi 5000 znaków innych niż chińskie albo 2500 znaków chińskich, a nadmiarowa część jest odrzucana. Najważniejsze role obrazów referencyjnych, akcja i ruch muszą zmieścić się w tym limicie. Początkowa wartość ziarna losowości może wpływać na podobieństwo wariantów, ale nie gwarantuje dokładnego odtworzenia tego samego filmu.
Ailoot · Wideo POST /v1/videos/generations happyhorse-1.1-r2v
happyhorse-1.1-r2vhappyhorse-1.1-r2vhappyhorse-r2vhappyhorse-r2v-latest
Start
Model do generowania wideo na podstawie obrazów referencyjnych i scenariusza tekstowego. Pomaga zachować wygląd postaci i przedmiotów oraz styl wizualny w nowej scenie.
- Akceptowane dane wejściowe
- Tekst · Obrazy
- Wyniki
- Wideo
Dostępne w Ailoot · dane wejściowe i metody
Ailoot · Wideo POST /v1/videos/generations
- Wejście
text,image- Wyjście
video- Format wyjściowy
- mp4
| Pole | Typ | Wymaganie | Wartości i limity | Domyślnie |
|---|---|---|---|---|
Polemodel | Typstring | WymaganieWymagane | Wartości i limity happyhorse-1.1-r2v | Domyślnie— |
Poleprompt | Typstring | WymaganieWymagane | Wartości i limity Minimalna długość: 1 | Domyślnie— |
Poleduration | Typinteger | WymaganieOpcjonalne | Wartości i limity Minimum: 3 Maksimum: 15 Jednostka: sekundy | Domyślnie5 |
Poleresolution | Typstring | WymaganieOpcjonalne | Wartości i limity 480P, 720P, 1080P | Domyślnie720P |
Poleratio | Typstring | WymaganieOpcjonalne | Wartości i limity 16:9, 9:16, 1:1, 4:3, 3:4, 4:5, 5:4, 9:21, 21:9 | Domyślnie16:9 |
Poleimage_urls | Typhttps_url|data_image_url[] | WymaganieWymagane | Wartości i limity Minimalna liczba elementów: 1 Maksymalna liczba elementów: 9 Maksymalna liczba zdekodowanych bajtów: 20 971 520 Typy MIME: image/jpeg, image/png, image/webp | Domyślnie— |
Kombinacje materiałów wejściowych
reference_images_to_video · Wymagane: prompt, image_urls
Parametry i cykl życia metody
| Parametr | Kontrakt |
|---|---|
Parametrcontent_type | Kontraktapplication/json |
Parametrrequired | Kontraktmodel, prompt, image_urls |
Parametrmaterial_types | Kontrakttext, image |
Parametroptional | Kontraktduration, resolution, ratio |
Parametrduration_integer_range | Kontrakt3, 15 |
Parametrdefault_duration | Kontrakt5 |
Parametrresolution | Kontrakt480P, 720P, 1080P |
Parametrdefault_resolution | Kontrakt720P |
Parametrratio | Kontrakt16:9, 9:16, 1:1, 4:3, 3:4, 4:5, 5:4, 9:21, 21:9 |
Parametrratio_must_omit | Kontraktfalse |
Parametrimage_urls | Kontrakt{"min_count":1,"max_count":9,"schemes":["https","dane rastrowe w base64"],"max_data_image_bytes":20971520} |
Cykl życia: 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
Struktury metod i ID są dokładne; możliwości dostawcy są odrębne od dopuszczenia żądania.
Cennik
Stawki metod Ailoot
POST /v1/videos/generations- Wyjście
- 0,18 USD za sekundę w 1080p
- Wyjście
- 0,07 USD za sekundę w 480p
- Wyjście
- 0,14 USD za sekundę w 720p
Ailoot rezerwuje szacowaną kwotę przed żądaniem. Po otrzymaniu wyniku rozlicza ostateczną opłatę według zmierzonego użycia. Rozliczenie strumieniowania korzysta z końcowego rekordu użycia. Jak działają rezerwacja i rozliczenie →
Przykładowe żądania
Ailoot · Wideo
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_URLS_FILE:?Set a JSON file containing your actual reference-image URLs}"
export AILOOT_IMAGE_URLS_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "happyhorse-1.1-r2v", "prompt": "The subject walks slowly toward the camera.", "duration": 5, "resolution": "720P"}')
from urllib.parse import urlsplit
f=Path(os.environ["AILOOT_IMAGE_URLS_FILE"])
if not f.is_file():raise SystemExit("Choose the actual reference URL JSON file")
urls=json.loads(f.read_text())
if not isinstance(urls,list) or not 1<=len(urls)<=9:raise SystemExit("Provide one to nine reference-image URLs")
for u in urls:
z=urlsplit(u) if isinstance(u,str) else None
if not z or z.scheme!="https" or not z.netloc or z.username or z.password:raise SystemExit("Each reference must be an actual HTTPS image URL")
p["image_urls"]=urls
p["ratio"]="16:9"
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
Odbieranie i zapisywanie wyników
Ailoot · Wideo
mp4
GET /v1/videos/{request_id}GET /v1/videos/generations/{request_id}GET /v1/videos/{request_id}/contentGET /v1/videos/generations/{request_id}/content
Sprawdź status zadania
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
Zapisz wszystkie ukończone zasoby
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
Inne odczyty treści
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
Zachowaj wszystkie ukończone wyniki
Zapisz każde ukończone wideo lub zwrócony plik; pobierz każdy faktycznie zwrócony URL zasobu.
Zachowaj każdy zwrócony element data i indeks wyniku. content_url wskazuje tylko pierwszy; pobierz każdą rzeczywistą ścieżkę treści i zasób. GET treści bez index nie obejmuje wszystkich wyników.
Jeśli trzeba sprawdzić pierwotną odpowiedź
Odczytuj istniejące pierwotne zadanie; nigdy nie ponawiaj wysłania o nieznanym wyniku.
Pola odpowiedzi
| Pole | Typ |
|---|---|
Poleid | Typstring |
Poleobject | Typstring |
Polemodel | Typstring |
Polestatus | Typstring |
Polecontent_url | Typsigned URL |
Poledata[] | Typsigned URL |
Poleusage | Typobject |
Poleresult_pending_check | Typboolean |
Błędy i dalsze kroki
| Odpowiedź | Warunek | Następny krok |
|---|---|---|
Odpowiedź400 · invalid_request_error | WarunekNieprawidłowe wymagane pola, sposób reprezentacji materiału lub wartość parametru | Następny krokPopraw wskazane pola przed nowym żądaniem utworzenia. |
Odpowiedź409 · video_not_ready | WarunekTreść pierwotnego wyniku nie jest jeszcze dostępna | Następny krokOdpytuj pierwotny zwrócony identyfikator i przestrzegaj Retry-After. |
Odpowiedźserver_error | WarunekZwrócona odpowiedź wskazuje, że operacja lub wynik wymaga sprawdzenia | Następny krokZachowaj pierwotnie zwrócony identyfikator operacji lub zadania, nagłówki żądania i odpowiedź; kontynuuj obsługiwane odczyty tej pierwotnej operacji. Nie wysyłaj ponownie żądania utworzenia. |
Aliasy
Aliasy modelu
Ailoot happyhorse-1.1-r2v, happyhorse-r2v, happyhorse-r2v-latest
Aliasy ścieżek metod
Użyj ścieżek metod podanych powyżej.
Powiązane ID modeli
Ailoot · Wideo POST /v1/videos/generations happyhorse-r2v
happyhorse-r2vhappyhorse-1.1-r2vhappyhorse-r2vhappyhorse-r2v-latest
Start
Model do generowania wideo na podstawie obrazów referencyjnych i scenariusza tekstowego. Pomaga zachować wygląd postaci i przedmiotów oraz styl wizualny w nowej scenie.
- Akceptowane dane wejściowe
- Tekst · Obrazy
- Wyniki
- Wideo
Dostępne w Ailoot · dane wejściowe i metody
Ailoot · Wideo POST /v1/videos/generations
- Wejście
text,image- Wyjście
video- Format wyjściowy
- mp4
| Pole | Typ | Wymaganie | Wartości i limity | Domyślnie |
|---|---|---|---|---|
Polemodel | Typstring | WymaganieWymagane | Wartości i limity happyhorse-r2v | Domyślnie— |
Poleprompt | Typstring | WymaganieWymagane | Wartości i limity Minimalna długość: 1 | Domyślnie— |
Poleduration | Typinteger | WymaganieOpcjonalne | Wartości i limity Minimum: 3 Maksimum: 15 Jednostka: sekundy | Domyślnie5 |
Poleresolution | Typstring | WymaganieOpcjonalne | Wartości i limity 480P, 720P, 1080P | Domyślnie720P |
Poleratio | Typstring | WymaganieOpcjonalne | Wartości i limity 16:9, 9:16, 1:1, 4:3, 3:4, 4:5, 5:4, 9:21, 21:9 | Domyślnie16:9 |
Poleimage_urls | Typhttps_url|data_image_url[] | WymaganieWymagane | Wartości i limity Minimalna liczba elementów: 1 Maksymalna liczba elementów: 9 Maksymalna liczba zdekodowanych bajtów: 20 971 520 Typy MIME: image/jpeg, image/png, image/webp | Domyślnie— |
Kombinacje materiałów wejściowych
reference_images_to_video · Wymagane: prompt, image_urls
Parametry i cykl życia metody
| Parametr | Kontrakt |
|---|---|
Parametrmaterial_types | Kontrakttext, image |
Parametrrequired | Kontraktnull |
Parametroptional_controls | Kontraktnull |
Cykl życia: 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
Struktury metod i ID są dokładne; możliwości dostawcy są odrębne od dopuszczenia żądania.
Cennik
Stawki metod Ailoot
POST /v1/videos/generations- Wyjście
- 0,18 USD za sekundę w 1080p
- Wyjście
- 0,07 USD za sekundę w 480p
- Wyjście
- 0,14 USD za sekundę w 720p
Ailoot rezerwuje szacowaną kwotę przed żądaniem. Po otrzymaniu wyniku rozlicza ostateczną opłatę według zmierzonego użycia. Rozliczenie strumieniowania korzysta z końcowego rekordu użycia. Jak działają rezerwacja i rozliczenie →
Przykładowe żądania
Ailoot · Wideo
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_URLS_FILE:?Set a JSON file containing your actual reference-image URLs}"
export AILOOT_IMAGE_URLS_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "happyhorse-r2v", "prompt": "The subject walks slowly toward the camera.", "duration": 5, "resolution": "720P"}')
from urllib.parse import urlsplit
f=Path(os.environ["AILOOT_IMAGE_URLS_FILE"])
if not f.is_file():raise SystemExit("Choose the actual reference URL JSON file")
urls=json.loads(f.read_text())
if not isinstance(urls,list) or not 1<=len(urls)<=9:raise SystemExit("Provide one to nine reference-image URLs")
for u in urls:
z=urlsplit(u) if isinstance(u,str) else None
if not z or z.scheme!="https" or not z.netloc or z.username or z.password:raise SystemExit("Each reference must be an actual HTTPS image URL")
p["image_urls"]=urls
p["ratio"]="16:9"
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
Odbieranie i zapisywanie wyników
Ailoot · Wideo
mp4
GET /v1/videos/{request_id}GET /v1/videos/generations/{request_id}GET /v1/videos/{request_id}/contentGET /v1/videos/generations/{request_id}/content
Sprawdź status zadania
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
Zapisz wszystkie ukończone zasoby
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
Inne odczyty treści
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
Zachowaj wszystkie ukończone wyniki
Zapisz każde ukończone wideo lub zwrócony plik; pobierz każdy faktycznie zwrócony URL zasobu.
Zachowaj każdy zwrócony element data i indeks wyniku. content_url wskazuje tylko pierwszy; pobierz każdą rzeczywistą ścieżkę treści i zasób. GET treści bez index nie obejmuje wszystkich wyników.
Jeśli trzeba sprawdzić pierwotną odpowiedź
Odczytuj istniejące pierwotne zadanie; nigdy nie ponawiaj wysłania o nieznanym wyniku.
Pola odpowiedzi
| Pole | Typ |
|---|---|
Poleid | Typstring |
Poleobject | Typstring |
Polemodel | Typstring |
Polestatus | Typstring |
Polecontent_url | Typsigned URL |
Poledata[] | Typsigned URL |
Poleusage | Typobject |
Poleresult_pending_check | Typboolean |
Błędy i dalsze kroki
| Odpowiedź | Warunek | Następny krok |
|---|---|---|
Odpowiedź400 · invalid_request_error | WarunekNieprawidłowe wymagane pola, sposób reprezentacji materiału lub wartość parametru | Następny krokPopraw wskazane pola przed nowym żądaniem utworzenia. |
Odpowiedź409 · video_not_ready | WarunekTreść pierwotnego wyniku nie jest jeszcze dostępna | Następny krokOdpytuj pierwotny zwrócony identyfikator i przestrzegaj Retry-After. |
Odpowiedźserver_error | WarunekZwrócona odpowiedź wskazuje, że operacja lub wynik wymaga sprawdzenia | Następny krokZachowaj pierwotnie zwrócony identyfikator operacji lub zadania, nagłówki żądania i odpowiedź; kontynuuj obsługiwane odczyty tej pierwotnej operacji. Nie wysyłaj ponownie żądania utworzenia. |
Aliasy
Aliasy modelu
Ailoot happyhorse-1.1-r2v, happyhorse-r2v, happyhorse-r2v-latest
Aliasy ścieżek metod
Użyj ścieżek metod podanych powyżej.
Powiązane ID modeli
Ailoot · Wideo POST /v1/videos/generations happyhorse-r2v-latest
happyhorse-r2v-latesthappyhorse-1.1-r2vhappyhorse-r2vhappyhorse-r2v-latest
Start
Model do generowania wideo na podstawie obrazów referencyjnych i scenariusza tekstowego. Pomaga zachować wygląd postaci i przedmiotów oraz styl wizualny w nowej scenie.
- Akceptowane dane wejściowe
- Tekst · Obrazy
- Wyniki
- Wideo
Dostępne w Ailoot · dane wejściowe i metody
Ailoot · Wideo POST /v1/videos/generations
- Wejście
text,image- Wyjście
video- Format wyjściowy
- mp4
| Pole | Typ | Wymaganie | Wartości i limity | Domyślnie |
|---|---|---|---|---|
Polemodel | Typstring | WymaganieWymagane | Wartości i limity happyhorse-r2v-latest | Domyślnie— |
Poleprompt | Typstring | WymaganieWymagane | Wartości i limity Minimalna długość: 1 | Domyślnie— |
Poleduration | Typinteger | WymaganieOpcjonalne | Wartości i limity Minimum: 3 Maksimum: 15 Jednostka: sekundy | Domyślnie5 |
Poleresolution | Typstring | WymaganieOpcjonalne | Wartości i limity 480P, 720P, 1080P | Domyślnie720P |
Poleratio | Typstring | WymaganieOpcjonalne | Wartości i limity 16:9, 9:16, 1:1, 4:3, 3:4, 4:5, 5:4, 9:21, 21:9 | Domyślnie16:9 |
Poleimage_urls | Typhttps_url|data_image_url[] | WymaganieWymagane | Wartości i limity Minimalna liczba elementów: 1 Maksymalna liczba elementów: 9 Maksymalna liczba zdekodowanych bajtów: 20 971 520 Typy MIME: image/jpeg, image/png, image/webp | Domyślnie— |
Kombinacje materiałów wejściowych
reference_images_to_video · Wymagane: prompt, image_urls
Parametry i cykl życia metody
| Parametr | Kontrakt |
|---|---|
Parametrmaterial_types | Kontrakttext, image |
Parametrrequired | Kontraktnull |
Parametroptional_controls | Kontraktnull |
Cykl życia: 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
Struktury metod i ID są dokładne; możliwości dostawcy są odrębne od dopuszczenia żądania.
Cennik
Stawki metod Ailoot
POST /v1/videos/generations- Wyjście
- 0,18 USD za sekundę w 1080p
- Wyjście
- 0,07 USD za sekundę w 480p
- Wyjście
- 0,14 USD za sekundę w 720p
Ailoot rezerwuje szacowaną kwotę przed żądaniem. Po otrzymaniu wyniku rozlicza ostateczną opłatę według zmierzonego użycia. Rozliczenie strumieniowania korzysta z końcowego rekordu użycia. Jak działają rezerwacja i rozliczenie →
Przykładowe żądania
Ailoot · Wideo
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_URLS_FILE:?Set a JSON file containing your actual reference-image URLs}"
export AILOOT_IMAGE_URLS_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "happyhorse-r2v-latest", "prompt": "The subject walks slowly toward the camera.", "duration": 5, "resolution": "720P"}')
from urllib.parse import urlsplit
f=Path(os.environ["AILOOT_IMAGE_URLS_FILE"])
if not f.is_file():raise SystemExit("Choose the actual reference URL JSON file")
urls=json.loads(f.read_text())
if not isinstance(urls,list) or not 1<=len(urls)<=9:raise SystemExit("Provide one to nine reference-image URLs")
for u in urls:
z=urlsplit(u) if isinstance(u,str) else None
if not z or z.scheme!="https" or not z.netloc or z.username or z.password:raise SystemExit("Each reference must be an actual HTTPS image URL")
p["image_urls"]=urls
p["ratio"]="16:9"
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
Odbieranie i zapisywanie wyników
Ailoot · Wideo
mp4
GET /v1/videos/{request_id}GET /v1/videos/generations/{request_id}GET /v1/videos/{request_id}/contentGET /v1/videos/generations/{request_id}/content
Sprawdź status zadania
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
Zapisz wszystkie ukończone zasoby
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
Inne odczyty treści
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
Zachowaj wszystkie ukończone wyniki
Zapisz każde ukończone wideo lub zwrócony plik; pobierz każdy faktycznie zwrócony URL zasobu.
Zachowaj każdy zwrócony element data i indeks wyniku. content_url wskazuje tylko pierwszy; pobierz każdą rzeczywistą ścieżkę treści i zasób. GET treści bez index nie obejmuje wszystkich wyników.
Jeśli trzeba sprawdzić pierwotną odpowiedź
Odczytuj istniejące pierwotne zadanie; nigdy nie ponawiaj wysłania o nieznanym wyniku.
Pola odpowiedzi
| Pole | Typ |
|---|---|
Poleid | Typstring |
Poleobject | Typstring |
Polemodel | Typstring |
Polestatus | Typstring |
Polecontent_url | Typsigned URL |
Poledata[] | Typsigned URL |
Poleusage | Typobject |
Poleresult_pending_check | Typboolean |
Błędy i dalsze kroki
| Odpowiedź | Warunek | Następny krok |
|---|---|---|
Odpowiedź400 · invalid_request_error | WarunekNieprawidłowe wymagane pola, sposób reprezentacji materiału lub wartość parametru | Następny krokPopraw wskazane pola przed nowym żądaniem utworzenia. |
Odpowiedź409 · video_not_ready | WarunekTreść pierwotnego wyniku nie jest jeszcze dostępna | Następny krokOdpytuj pierwotny zwrócony identyfikator i przestrzegaj Retry-After. |
Odpowiedźserver_error | WarunekZwrócona odpowiedź wskazuje, że operacja lub wynik wymaga sprawdzenia | Następny krokZachowaj pierwotnie zwrócony identyfikator operacji lub zadania, nagłówki żądania i odpowiedź; kontynuuj obsługiwane odczyty tej pierwotnej operacji. Nie wysyłaj ponownie żądania utworzenia. |
Aliasy
Aliasy modelu
Ailoot happyhorse-1.1-r2v, happyhorse-r2v, happyhorse-r2v-latest
Aliasy ścieżek metod
Użyj ścieżek metod podanych powyżej.
Powiązane ID modeli
FAQ · happyhorse-1.1-r2v
- Jakie dane wejściowe i wyniki są dostępne?
POST /v1/videos/generations·happyhorse-1.1-r2v:text,image→videoPOST /v1/videos/generations·happyhorse-r2v:text,image→videoPOST /v1/videos/generations·happyhorse-r2v-latest:text,image→video- Jakich pól używa żądanie?
POST /v1/videos/generations·happyhorse-1.1-r2v:model,prompt,duration,resolution,ratio,image_urlsPOST /v1/videos/generations·happyhorse-r2v:model,prompt,duration,resolution,ratio,image_urlsPOST /v1/videos/generations·happyhorse-r2v-latest:model,prompt,duration,resolution,ratio,image_urls- Jakie limity obowiązują?
POST /v1/videos/generations·happyhorse-1.1-r2v:duration.minimum:3;duration.maximum:15POST /v1/videos/generations·happyhorse-r2v:duration.minimum:3;duration.maximum:15POST /v1/videos/generations·happyhorse-r2v-latest:duration.minimum:3;duration.maximum:15