Source: https://ailoot.ai/models/ms/happyhorse-1-1-i2v/
Canonical: https://ailoot.ai/models/ms/happyhorse-1-1-i2v/
Language: ms

# happyhorse-1.1-i2v

[Markdown](https://ailoot.ai/models/ms/happyhorse-1-1-i2v/index.md) · [JSON](https://ailoot.ai/models/ms/happyhorse-1-1-i2v/facts.json)

## [happyhorse-1.1-i2v](https://ailoot.ai/models/ms/happyhorse-1-1-i2v/)

Model yang menghidupkan imej: imej asal menentukan bingkai pertama, manakala penerangan mengarahkan pergerakan seterusnya. Menghasilkan klip video pendek dengan pilihan iringan audio.

- [**Ailoot · Penjanaan video** `POST /v1/videos/generations` `happyhorse-1.1-i2v`](https://ailoot.ai/models/ms/happyhorse-1-1-i2v/#method-0)
- [**Ailoot · Penjanaan video** `POST /v1/videos/generations` `happyhorse-i2v`](https://ailoot.ai/models/ms/happyhorse-1-1-i2v/#method-1)
- [**Ailoot · Penjanaan video** `POST /v1/videos/generations` `happyhorse-i2v-latest`](https://ailoot.ai/models/ms/happyhorse-1-1-i2v/#method-2)

Tentang model

Huraian ini merangkumi keupayaan model. Input, output dan pilihan yang tersedia di Ailoot disenaraikan di bawah untuk kaedah yang dipilih.

HappyHorse-1.1-I2V ialah model Alibaba yang memulakan adegan video daripada imej sedia ada. Imej itu menjadi bingkai pertama, manakala teks boleh menentukan tindakan seterusnya: pergerakan watak, perubahan dalam adegan dan arah kamera. Ini sesuai untuk menghidupkan ilustrasi, foto produk atau konsep visual yang telah disediakan terlebih dahulu.

Penerangan teks tidak wajib. Jika tiada penerangan, model menentukan sendiri pergerakan yang mungkin berdasarkan kandungan imej awal. Apabila dinyatakan secara jelas, imej asal menentukan komposisi dan rupa objek, manakala kata-kata mengarahkan perkembangan adegan sepanjang masa.

#### Daripada bingkai pertama kepada pergerakan

Alibaba menekankan pengekalan rupa watak, keselarasan visual, kelancaran pergerakan serta gabungan imej dengan audio. Antara aspek yang dinyatakan juga ialah kestabilan tulisan dan tekstur. Ciri-ciri ini merujuk kepada reka bentuk model dan tidak bermakna setiap piksel dikekalkan secara harfiah dalam semua bingkai yang dijana.

Mod ini menggunakan satu imej awal. Imej itu menentukan adegan permulaan, bukannya satu set contoh bebas untuk komposisi baharu. Keupayaan menetapkan bingkai akhir yang berasingan tidak dinyatakan bagi versi khusus ini.

JPEG, JPG, PNG dan WEBP diterima. Setiap sisi imej input mesti sekurang-kurangnya 300 piksel; nisbah aspek yang dibenarkan ialah dari 1:2,5 hingga 2,5:1, dengan saiz fail sehingga 20 MB. Nisbah aspek video yang dihasilkan mengikut bingkai pertama.

#### Parameter klip

Tempoh dipilih sebagai nombor bulat dari 3 hingga 15 saat. Tahap resolusi 480P, 720P dan 1080P tersedia; format output ialah MP4, dengan kadar 24 bingkai sesaat. Penjanaan iringan audio bersama video disokong.

Penerangan boleh menggunakan apa-apa bahasa dan mengandungi sehingga 5000 aksara bukan Cina atau 2500 aksara Cina. Jika had dilampaui, bahagian berlebihan dipotong, jadi tindakan penting dan ciri pergerakan perlu dirumuskan dalam had tugasan. Nilai benih rawak awal yang sama boleh menghasilkan klip yang serupa, tetapi tidak menjamin padanan setiap bingkai.

**Ailoot · Penjanaan video** `POST /v1/videos/generations` `happyhorse-1.1-i2v`

[`happyhorse-1.1-i2v`](https://ailoot.ai/models/ms/#m=happyhorse-1.1-i2v&route=Core&caller=happyhorse-1.1-i2v&fmt=videos)

Alibaba /`happyhorse-1.1-i2v`

ID model

- `happyhorse-1.1-i2v`
- `happyhorse-i2v`
- `happyhorse-i2v-latest`

### Pengenalan

Model yang menghidupkan imej: imej asal menentukan bingkai pertama, manakala penerangan mengarahkan pergerakan seterusnya. Menghasilkan klip video pendek dengan pilihan iringan audio.

Input yang diterima

Teks · Imej

Hasil

Video

### Tersedia di Ailoot · input & kaedah

**Ailoot · Penjanaan video** `POST /v1/videos/generations`

Input

`text`, `image`

Output

`video`

Format output

mp4

| Medan | Jenis | Keperluan | Nilai & had | Lalai |
| --- | --- | --- | --- | --- |
| Medan`model` | Jenis`string` | KeperluanDiperlukan | Nilai & had happyhorse-1.1-i2v | Lalai— |
| Medan`prompt` | Jenis`string` | KeperluanPilihan | Nilai & had Panjang minimum: 1 | Lalai— |
| Medan`duration` | Jenis`integer` | KeperluanPilihan | Nilai & had Minimum: 3 Maksimum: 15 Unit: saat | Lalai5 |
| Medan`resolution` | Jenis`string` | KeperluanPilihan | Nilai & had 480P, 720P, 1080P | Lalai720P |
| Medan`ratio` | Jenis`string` | KeperluanTidak disokong | Nilai & had | Lalai— |
| Medan`image_urls` | Jenis`https_url\|data_image_url[]` | KeperluanDiperlukan | Nilai & had Item minimum: 1 Item maksimum: 1 Bait ternyahkod maksimum: 20,971,520 Jenis MIME: image/jpeg, image/png, image/webp | Lalai— |

Gabungan bahan input

**first\_frame\_to\_video** · Diperlukan: image\_urls

Parameter kaedah dan kitar hayat

| Parameter | Kontrak |
| --- | --- |
| Parameter`content_type` | Kontrakapplication/json |
| Parameter`required` | Kontrakmodel, image\_urls |
| Parameter`material_types` | Kontraktext, image |
| Parameter`optional` | Kontrakduration, resolution, ratio, prompt |
| Parameter`duration_integer_range` | Kontrak3, 15 |
| Parameter`default_duration` | Kontrak5 |
| Parameter`resolution` | Kontrak480P, 720P, 1080P |
| Parameter`default_resolution` | Kontrak720P |
| Parameter`ratio` | Kontrak |
| Parameter`ratio_must_omit` | Kontraktrue |
| Parameter`image_urls` | Kontrak{"min\_count":1,"max\_count":1,"schemes":\["https","data raster dalam base64"\],"max\_data\_image\_bytes":20971520} |

Kitar hayat: `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`

Struktur kaedah dan ID adalah tepat; keupayaan pembekal berasingan daripada penerimaan permintaan.

### Pelan harga

#### Kadar kaedah Ailoot

Output

USD 0.18 *bagi setiap saat pada 1080p*

Output

USD 0.07 *bagi setiap saat pada 480p*

Output

USD 0.14 *bagi setiap saat pada 720p*

Ailoot merizabkan anggaran amaun sebelum permintaan. Selepas hasil diterima, caj akhir diselesaikan berdasarkan penggunaan terukur. Penyelesaian caj penstriman menggunakan rekod penggunaan akhir. [Cara rizab dan penyelesaian caj berfungsi →](https://ailoot.ai/docs/ms/billing/reserve/)

### Contoh permintaan

#### Ailoot · Penjanaan video

Rujukan imej

```bash
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
```

### Terima dan simpan hasil

#### Ailoot · Penjanaan video

mp4

- `GET /v1/videos/{request_id}`
- `GET /v1/videos/generations/{request_id}`
- `GET /v1/videos/{request_id}/content`
- `GET /v1/videos/generations/{request_id}/content`

##### Semak status tugas

GET status

```bash
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
```

##### Simpan semua aset yang selesai

GET semua aset yang selesai

```bash
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
```

Pembacaan kandungan lain

GET kandungan

```bash
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
```

##### Simpan semua hasil yang selesai

Simpan setiap video yang selesai atau fail yang dikembalikan; dapatkan setiap URL aset yang benar-benar dikembalikan.

Kekalkan setiap item data/indeks output yang dikembalikan. content\_url hanya merujuk yang pertama; dapatkan setiap laluan kandungan/aset sebenar. GET kandungan tanpa index tidak merangkumi semua output.

##### Jika respons asal perlu disemak

Baca tugas asal yang sedia ada; jangan sekali-kali hantar semula penghantaran yang tidak diketahui hasilnya.

Medan respons

| Medan | Jenis |
| --- | --- |
| Medan`id` | Jenisstring |
| Medan`object` | Jenisstring |
| Medan`model` | Jenisstring |
| Medan`status` | Jenisstring |
| Medan`content_url` | Jenissigned URL |
| Medan`data[]` | Jenissigned URL |
| Medan`usage` | Jenisobject |
| Medan`result_pending_check` | Jenisboolean |

Ralat dan langkah seterusnya

| Respons | Syarat | Langkah seterusnya |
| --- | --- | --- |
| Respons400 · `invalid_request_error` | SyaratMedan wajib, perwakilan bahan atau nilai parameter tidak sah | Langkah seterusnyaBetulkan medan yang ditunjukkan sebelum permintaan penciptaan baharu. |
| Respons409 · `video_not_ready` | SyaratKandungan hasil asal belum tersedia | Langkah seterusnyaSemak ID asal yang dikembalikan secara berkala dan patuhi Retry-After. |
| Respons`server_error` | SyaratRespons yang dikembalikan menyatakan bahawa operasi atau hasil memerlukan semakan | Langkah seterusnyaSimpan ID operasi/tugas asal yang dikembalikan, pengepala permintaan dan respons; teruskan pembacaan yang disokong bagi operasi asal tersebut. Jangan hantar semula permintaan penciptaan. |

### Alias

#### Alias model

**Ailoot** [`happyhorse-1.1-i2v`](https://ailoot.ai/models/ms/#m=happyhorse-1.1-i2v&route=Core&caller=happyhorse-1.1-i2v&fmt=videos), [`happyhorse-i2v`](https://ailoot.ai/models/ms/#m=happyhorse-1.1-i2v&route=Core&caller=happyhorse-i2v&fmt=videos), [`happyhorse-i2v-latest`](https://ailoot.ai/models/ms/#m=happyhorse-1.1-i2v&route=Core&caller=happyhorse-i2v-latest&fmt=videos)

#### Alias laluan kaedah

Gunakan laluan kaedah yang dipaparkan di atas.

#### ID pemanggil berkaitan

[`happyhorse-1.1-i2v`](https://ailoot.ai/models/ms/#m=happyhorse-1.1-i2v&route=Core&caller=happyhorse-1.1-i2v&fmt=videos), [`happyhorse-i2v`](https://ailoot.ai/models/ms/#m=happyhorse-1.1-i2v&route=Core&caller=happyhorse-i2v&fmt=videos), [`happyhorse-i2v-latest`](https://ailoot.ai/models/ms/#m=happyhorse-1.1-i2v&route=Core&caller=happyhorse-i2v-latest&fmt=videos)

**Ailoot · Penjanaan video** `POST /v1/videos/generations` `happyhorse-i2v`

[`happyhorse-i2v`](https://ailoot.ai/models/ms/#m=happyhorse-1.1-i2v&route=Core&caller=happyhorse-i2v&fmt=videos)

Alibaba /`happyhorse-i2v`

ID model

- `happyhorse-1.1-i2v`
- `happyhorse-i2v`
- `happyhorse-i2v-latest`

### Pengenalan

Model yang menghidupkan imej: imej asal menentukan bingkai pertama, manakala penerangan mengarahkan pergerakan seterusnya. Menghasilkan klip video pendek dengan pilihan iringan audio.

Input yang diterima

Teks · Imej

Hasil

Video

### Tersedia di Ailoot · input & kaedah

**Ailoot · Penjanaan video** `POST /v1/videos/generations`

Input

`text`, `image`

Output

`video`

Format output

mp4

| Medan | Jenis | Keperluan | Nilai & had | Lalai |
| --- | --- | --- | --- | --- |
| Medan`model` | Jenis`string` | KeperluanDiperlukan | Nilai & had happyhorse-i2v | Lalai— |
| Medan`prompt` | Jenis`string` | KeperluanPilihan | Nilai & had Panjang minimum: 1 | Lalai— |
| Medan`duration` | Jenis`integer` | KeperluanPilihan | Nilai & had Minimum: 3 Maksimum: 15 Unit: saat | Lalai5 |
| Medan`resolution` | Jenis`string` | KeperluanPilihan | Nilai & had 480P, 720P, 1080P | Lalai720P |
| Medan`ratio` | Jenis`string` | KeperluanTidak disokong | Nilai & had | Lalai— |
| Medan`image_urls` | Jenis`https_url\|data_image_url[]` | KeperluanDiperlukan | Nilai & had Item minimum: 1 Item maksimum: 1 Bait ternyahkod maksimum: 20,971,520 Jenis MIME: image/jpeg, image/png, image/webp | Lalai— |

Gabungan bahan input

**first\_frame\_to\_video** · Diperlukan: image\_urls

Parameter kaedah dan kitar hayat

| Parameter | Kontrak |
| --- | --- |
| Parameter`material_types` | Kontraktext, image |
| Parameter`required` | Kontraknull |
| Parameter`optional_controls` | Kontraknull |

Kitar hayat: `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`

Struktur kaedah dan ID adalah tepat; keupayaan pembekal berasingan daripada penerimaan permintaan.

### Pelan harga

#### Kadar kaedah Ailoot

Output

USD 0.18 *bagi setiap saat pada 1080p*

Output

USD 0.07 *bagi setiap saat pada 480p*

Output

USD 0.14 *bagi setiap saat pada 720p*

Ailoot merizabkan anggaran amaun sebelum permintaan. Selepas hasil diterima, caj akhir diselesaikan berdasarkan penggunaan terukur. Penyelesaian caj penstriman menggunakan rekod penggunaan akhir. [Cara rizab dan penyelesaian caj berfungsi →](https://ailoot.ai/docs/ms/billing/reserve/)

### Contoh permintaan

#### Ailoot · Penjanaan video

Rujukan imej

```bash
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
```

### Terima dan simpan hasil

#### Ailoot · Penjanaan video

mp4

- `GET /v1/videos/{request_id}`
- `GET /v1/videos/generations/{request_id}`
- `GET /v1/videos/{request_id}/content`
- `GET /v1/videos/generations/{request_id}/content`

##### Semak status tugas

GET status

```bash
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
```

##### Simpan semua aset yang selesai

GET semua aset yang selesai

```bash
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
```

Pembacaan kandungan lain

GET kandungan

```bash
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
```

##### Simpan semua hasil yang selesai

Simpan setiap video yang selesai atau fail yang dikembalikan; dapatkan setiap URL aset yang benar-benar dikembalikan.

Kekalkan setiap item data/indeks output yang dikembalikan. content\_url hanya merujuk yang pertama; dapatkan setiap laluan kandungan/aset sebenar. GET kandungan tanpa index tidak merangkumi semua output.

##### Jika respons asal perlu disemak

Baca tugas asal yang sedia ada; jangan sekali-kali hantar semula penghantaran yang tidak diketahui hasilnya.

Medan respons

| Medan | Jenis |
| --- | --- |
| Medan`id` | Jenisstring |
| Medan`object` | Jenisstring |
| Medan`model` | Jenisstring |
| Medan`status` | Jenisstring |
| Medan`content_url` | Jenissigned URL |
| Medan`data[]` | Jenissigned URL |
| Medan`usage` | Jenisobject |
| Medan`result_pending_check` | Jenisboolean |

Ralat dan langkah seterusnya

| Respons | Syarat | Langkah seterusnya |
| --- | --- | --- |
| Respons400 · `invalid_request_error` | SyaratMedan wajib, perwakilan bahan atau nilai parameter tidak sah | Langkah seterusnyaBetulkan medan yang ditunjukkan sebelum permintaan penciptaan baharu. |
| Respons409 · `video_not_ready` | SyaratKandungan hasil asal belum tersedia | Langkah seterusnyaSemak ID asal yang dikembalikan secara berkala dan patuhi Retry-After. |
| Respons`server_error` | SyaratRespons yang dikembalikan menyatakan bahawa operasi atau hasil memerlukan semakan | Langkah seterusnyaSimpan ID operasi/tugas asal yang dikembalikan, pengepala permintaan dan respons; teruskan pembacaan yang disokong bagi operasi asal tersebut. Jangan hantar semula permintaan penciptaan. |

### Alias

#### Alias model

**Ailoot** [`happyhorse-1.1-i2v`](https://ailoot.ai/models/ms/#m=happyhorse-1.1-i2v&route=Core&caller=happyhorse-1.1-i2v&fmt=videos), [`happyhorse-i2v`](https://ailoot.ai/models/ms/#m=happyhorse-1.1-i2v&route=Core&caller=happyhorse-i2v&fmt=videos), [`happyhorse-i2v-latest`](https://ailoot.ai/models/ms/#m=happyhorse-1.1-i2v&route=Core&caller=happyhorse-i2v-latest&fmt=videos)

#### Alias laluan kaedah

Gunakan laluan kaedah yang dipaparkan di atas.

#### ID pemanggil berkaitan

[`happyhorse-1.1-i2v`](https://ailoot.ai/models/ms/#m=happyhorse-1.1-i2v&route=Core&caller=happyhorse-1.1-i2v&fmt=videos), [`happyhorse-i2v`](https://ailoot.ai/models/ms/#m=happyhorse-1.1-i2v&route=Core&caller=happyhorse-i2v&fmt=videos), [`happyhorse-i2v-latest`](https://ailoot.ai/models/ms/#m=happyhorse-1.1-i2v&route=Core&caller=happyhorse-i2v-latest&fmt=videos)

**Ailoot · Penjanaan video** `POST /v1/videos/generations` `happyhorse-i2v-latest`

[`happyhorse-i2v-latest`](https://ailoot.ai/models/ms/#m=happyhorse-1.1-i2v&route=Core&caller=happyhorse-i2v-latest&fmt=videos)

Alibaba /`happyhorse-i2v-latest`

ID model

- `happyhorse-1.1-i2v`
- `happyhorse-i2v`
- `happyhorse-i2v-latest`

### Pengenalan

Model yang menghidupkan imej: imej asal menentukan bingkai pertama, manakala penerangan mengarahkan pergerakan seterusnya. Menghasilkan klip video pendek dengan pilihan iringan audio.

Input yang diterima

Teks · Imej

Hasil

Video

### Tersedia di Ailoot · input & kaedah

**Ailoot · Penjanaan video** `POST /v1/videos/generations`

Input

`text`, `image`

Output

`video`

Format output

mp4

| Medan | Jenis | Keperluan | Nilai & had | Lalai |
| --- | --- | --- | --- | --- |
| Medan`model` | Jenis`string` | KeperluanDiperlukan | Nilai & had happyhorse-i2v-latest | Lalai— |
| Medan`prompt` | Jenis`string` | KeperluanPilihan | Nilai & had Panjang minimum: 1 | Lalai— |
| Medan`duration` | Jenis`integer` | KeperluanPilihan | Nilai & had Minimum: 3 Maksimum: 15 Unit: saat | Lalai5 |
| Medan`resolution` | Jenis`string` | KeperluanPilihan | Nilai & had 480P, 720P, 1080P | Lalai720P |
| Medan`ratio` | Jenis`string` | KeperluanTidak disokong | Nilai & had | Lalai— |
| Medan`image_urls` | Jenis`https_url\|data_image_url[]` | KeperluanDiperlukan | Nilai & had Item minimum: 1 Item maksimum: 1 Bait ternyahkod maksimum: 20,971,520 Jenis MIME: image/jpeg, image/png, image/webp | Lalai— |

Gabungan bahan input

**first\_frame\_to\_video** · Diperlukan: image\_urls

Parameter kaedah dan kitar hayat

| Parameter | Kontrak |
| --- | --- |
| Parameter`material_types` | Kontraktext, image |
| Parameter`required` | Kontraknull |
| Parameter`optional_controls` | Kontraknull |

Kitar hayat: `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`

Struktur kaedah dan ID adalah tepat; keupayaan pembekal berasingan daripada penerimaan permintaan.

### Pelan harga

#### Kadar kaedah Ailoot

Output

USD 0.18 *bagi setiap saat pada 1080p*

Output

USD 0.07 *bagi setiap saat pada 480p*

Output

USD 0.14 *bagi setiap saat pada 720p*

Ailoot merizabkan anggaran amaun sebelum permintaan. Selepas hasil diterima, caj akhir diselesaikan berdasarkan penggunaan terukur. Penyelesaian caj penstriman menggunakan rekod penggunaan akhir. [Cara rizab dan penyelesaian caj berfungsi →](https://ailoot.ai/docs/ms/billing/reserve/)

### Contoh permintaan

#### Ailoot · Penjanaan video

Rujukan imej

```bash
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
```

### Terima dan simpan hasil

#### Ailoot · Penjanaan video

mp4

- `GET /v1/videos/{request_id}`
- `GET /v1/videos/generations/{request_id}`
- `GET /v1/videos/{request_id}/content`
- `GET /v1/videos/generations/{request_id}/content`

##### Semak status tugas

GET status

```bash
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
```

##### Simpan semua aset yang selesai

GET semua aset yang selesai

```bash
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
```

Pembacaan kandungan lain

GET kandungan

```bash
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
```

##### Simpan semua hasil yang selesai

Simpan setiap video yang selesai atau fail yang dikembalikan; dapatkan setiap URL aset yang benar-benar dikembalikan.

Kekalkan setiap item data/indeks output yang dikembalikan. content\_url hanya merujuk yang pertama; dapatkan setiap laluan kandungan/aset sebenar. GET kandungan tanpa index tidak merangkumi semua output.

##### Jika respons asal perlu disemak

Baca tugas asal yang sedia ada; jangan sekali-kali hantar semula penghantaran yang tidak diketahui hasilnya.

Medan respons

| Medan | Jenis |
| --- | --- |
| Medan`id` | Jenisstring |
| Medan`object` | Jenisstring |
| Medan`model` | Jenisstring |
| Medan`status` | Jenisstring |
| Medan`content_url` | Jenissigned URL |
| Medan`data[]` | Jenissigned URL |
| Medan`usage` | Jenisobject |
| Medan`result_pending_check` | Jenisboolean |

Ralat dan langkah seterusnya

| Respons | Syarat | Langkah seterusnya |
| --- | --- | --- |
| Respons400 · `invalid_request_error` | SyaratMedan wajib, perwakilan bahan atau nilai parameter tidak sah | Langkah seterusnyaBetulkan medan yang ditunjukkan sebelum permintaan penciptaan baharu. |
| Respons409 · `video_not_ready` | SyaratKandungan hasil asal belum tersedia | Langkah seterusnyaSemak ID asal yang dikembalikan secara berkala dan patuhi Retry-After. |
| Respons`server_error` | SyaratRespons yang dikembalikan menyatakan bahawa operasi atau hasil memerlukan semakan | Langkah seterusnyaSimpan ID operasi/tugas asal yang dikembalikan, pengepala permintaan dan respons; teruskan pembacaan yang disokong bagi operasi asal tersebut. Jangan hantar semula permintaan penciptaan. |

### Alias

#### Alias model

**Ailoot** [`happyhorse-1.1-i2v`](https://ailoot.ai/models/ms/#m=happyhorse-1.1-i2v&route=Core&caller=happyhorse-1.1-i2v&fmt=videos), [`happyhorse-i2v`](https://ailoot.ai/models/ms/#m=happyhorse-1.1-i2v&route=Core&caller=happyhorse-i2v&fmt=videos), [`happyhorse-i2v-latest`](https://ailoot.ai/models/ms/#m=happyhorse-1.1-i2v&route=Core&caller=happyhorse-i2v-latest&fmt=videos)

#### Alias laluan kaedah

Gunakan laluan kaedah yang dipaparkan di atas.

#### ID pemanggil berkaitan

[`happyhorse-1.1-i2v`](https://ailoot.ai/models/ms/#m=happyhorse-1.1-i2v&route=Core&caller=happyhorse-1.1-i2v&fmt=videos), [`happyhorse-i2v`](https://ailoot.ai/models/ms/#m=happyhorse-1.1-i2v&route=Core&caller=happyhorse-i2v&fmt=videos), [`happyhorse-i2v-latest`](https://ailoot.ai/models/ms/#m=happyhorse-1.1-i2v&route=Core&caller=happyhorse-i2v-latest&fmt=videos)

FAQ · happyhorse-1.1-i2v

Apakah input dan hasil yang tersedia?

`POST /v1/videos/generations` · `happyhorse-1.1-i2v`: `text`, `image` → `video` `POST /v1/videos/generations` · `happyhorse-i2v`: `text`, `image` → `video` `POST /v1/videos/generations` · `happyhorse-i2v-latest`: `text`, `image` → `video`

Apakah medan yang digunakan oleh permintaan?

`POST /v1/videos/generations` · `happyhorse-1.1-i2v`: `model`, `prompt`, `duration`, `resolution`, `image_urls` `POST /v1/videos/generations` · `happyhorse-i2v`: `model`, `prompt`, `duration`, `resolution`, `image_urls` `POST /v1/videos/generations` · `happyhorse-i2v-latest`: `model`, `prompt`, `duration`, `resolution`, `image_urls`

Apakah had yang terpakai?

`POST /v1/videos/generations` · `happyhorse-1.1-i2v`: `duration.minimum`: `3`; `duration.maximum`: `15` `POST /v1/videos/generations` · `happyhorse-i2v`: `duration.minimum`: `3`; `duration.maximum`: `15` `POST /v1/videos/generations` · `happyhorse-i2v-latest`: `duration.minimum`: `3`; `duration.maximum`: `15`

Sambungkan Ailoot kepada Claude Code, OpenCode, Hermes atau aplikasi anda.

## Syarikat dan portfolio projeknya

Syarikat dan portfolio projeknya: jutaan pelanggan; jualan bernilai berbilion setiap bulan.

## Beli token dengan diskaun.

Diskaun langganan untuk penggunaan berkala. Kod promosi — sehingga 50% bagi pembelian token.

Langganan

Pilih pelan berdiskaun untuk permintaan berkala anda.

Kod promosi sehingga 50%

Masukkan kod semasa pembelian. Harga dikira semula mengikut promosi semasa.

Perbelanjaan dalam sejarah

Model, token dan jumlah disimpan bagi setiap permintaan.

[Pilih langganan](https://ailoot.ai/docs/ms/billing/subscriptions/) · [Lihat harga model](https://ailoot.ai/models/ms/)

## Sambungkan API kepada produk yang anda jual.

SaaS, aplikasi dan bot — di bawah tawaran rasmi serta perjanjian lesen Ailoot. Untuk jualan semula, mohon lesen penjual semula.

Aplikasi komersial

Tambahkan penjanaan teks, imej, video dan audio pada ciri berbayar perkhidmatan anda.

Lesen penjual semula

Hantar keterangan projek dan susunan akses. Minta terma penggunaan serta jualan semula secara bertulis.

Dokumen pada laman

Tawaran, perjanjian lesen dan dasar pemprosesan data tersedia sebelum sambungan.

[Mohon lesen penjual semula](mailto:support@ailoot.ai) · [Tawaran dan perjanjian lesen](https://ailoot.ai/legal/offer?lang=ms)

## Ailoot · Syarikat dan portfolio projeknya





Ailoot berteraskan pengalaman operasi yang mantap, pangkalan pelanggan yang besar, perkhidmatan yang stabil dan pemantauan KPI berterusan.





Syarikat dan portfolio projeknya: jutaan pelanggan; jualan bernilai berbilion setiap bulan.





Ailoot menggunakan pengalaman operasi ini untuk akses API kepada ciri AI dalam produk pelanggan, ejen, aplikasi dan automasi.
