Source: https://ailoot.ai/models/id/happyhorse-1-1-r2v/
Canonical: https://ailoot.ai/models/id/happyhorse-1-1-r2v/
Language: id

# happyhorse-1.1-r2v

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

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

Model untuk menghasilkan video dari gambar referensi dan skenario teks. Membantu mempertahankan penampilan karakter, objek, dan gaya visual dalam adegan baru.

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

Tentang model

Deskripsi ini mencakup kemampuan model. Masukan, keluaran, dan opsi yang tersedia di Ailoot tercantum di bawah untuk metode yang dipilih.

HappyHorse-1.1-R2V membuat adegan video baru dari gambar referensi dan instruksi teks. Alibaba merancang model ini untuk mempertahankan karakter, objek, dan gaya visual yang mudah dikenali saat menghasilkan gerakan. Referensi menentukan isi dan tampilan adegan, sedangkan teks menjelaskan bagaimana unsur-unsur tersebut harus berinteraksi.

#### Peran referensi visual

Anda dapat menggunakan satu hingga sembilan gambar. Gambar tersebut dapat menentukan karakter, objek, lingkungan, atau pendekatan artistik. Dalam deskripsi, Anda dapat menyebutkan nomor referensi dan objek tertentu di dalamnya untuk menghubungkan materi visual dengan bagian tindakan yang sesuai. Ini sangat berguna ketika unsur dari beberapa gambar perlu digabungkan dalam satu komposisi.

Berbeda dengan mode yang menggunakan bingkai awal, referensi di sini menjadi acuan untuk isi adegan baru. Instruksi teks wajib diberikan: teks menghubungkan tampilan objek dengan tindakan, gerakan kamera, dan penataan adegan secara keseluruhan. Produsen menekankan konsistensi visual dan gerakan sinematik; hasilnya tetap merupakan video yang dihasilkan, bukan penyuntingan gambar sumber.

Format yang diterima adalah JPEG, JPG, PNG, dan WEBP dengan ukuran hingga 20 MB per gambar. Sisi pendek gambar harus berukuran setidaknya 400 piksel; materi dengan kualitas 720P atau lebih tinggi disarankan. Masukan mode ini secara khusus terdiri atas gambar dan teks.

#### Durasi, bingkai, dan suara

Hasil disimpan dalam MP4 dengan laju 24 bingkai per detik. Durasi ditentukan sebagai bilangan bulat dari 3 hingga 15 detik. Resolusi dapat dipilih antara 480P, 720P, dan 1080P; pembuatan suara pengiring didukung.

Tersedia bingkai horizontal, vertikal, dan persegi: 16:9, 9:16, 1:1, 4:3, 3:4, 4:5, 5:4, 9:21, dan 21:9. Pemilihan format membantu menentukan ruang komposisi adegan baru sejak awal.

Teks dapat menggunakan bahasa apa pun. Batasnya adalah 5000 karakter non-Tionghoa atau 2500 karakter Tionghoa; bagian yang melebihi batas dibuang. Peran referensi, tindakan, dan gerakan yang paling penting harus termuat dalam batas ini. Nilai awal keacakan dapat membantu menghasilkan variasi yang mirip, tetapi tidak menjamin pengulangan video yang persis sama.

**Ailoot · Pemrosesan video** `POST /v1/videos/generations` `happyhorse-1.1-r2v`

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

Alibaba /`happyhorse-1.1-r2v`

ID model

- `happyhorse-1.1-r2v`
- `happyhorse-r2v`
- `happyhorse-r2v-latest`

### Mulai

Model untuk menghasilkan video dari gambar referensi dan skenario teks. Membantu mempertahankan penampilan karakter, objek, dan gaya visual dalam adegan baru.

Masukan yang diterima

Teks · Gambar

Hasil

Video

### Tersedia di Ailoot · masukan & metode

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

Masukan

`text`, `image`

Keluaran

`video`

Format keluaran

mp4

| Kolom | Jenis | Persyaratan | Nilai & batasan | Bawaan |
| --- | --- | --- | --- | --- |
| Kolom`model` | Jenis`string` | PersyaratanWajib | Nilai & batasan happyhorse-1.1-r2v | Bawaan— |
| Kolom`prompt` | Jenis`string` | PersyaratanWajib | Nilai & batasan Panjang minimum: 1 | Bawaan— |
| Kolom`duration` | Jenis`integer` | PersyaratanOpsional | Nilai & batasan Minimum: 3 Maksimum: 15 Satuan: detik | Bawaan5 |
| Kolom`resolution` | Jenis`string` | PersyaratanOpsional | Nilai & batasan 480P, 720P, 1080P | Bawaan720P |
| Kolom`ratio` | Jenis`string` | PersyaratanOpsional | Nilai & batasan 16:9, 9:16, 1:1, 4:3, 3:4, 4:5, 5:4, 9:21, 21:9 | Bawaan16:9 |
| Kolom`image_urls` | Jenis`https_url\|data_image_url[]` | PersyaratanWajib | Nilai & batasan Item minimum: 1 Item maksimum: 9 Byte terdekode maksimum: 20.971.520 Jenis MIME: image/jpeg, image/png, image/webp | Bawaan— |

Kombinasi bahan masukan

**reference\_images\_to\_video** · Wajib: prompt, image\_urls

Parameter metode dan siklus hidup

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

Siklus hidup: `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 metode dan ID bersifat eksak; kemampuan pemasok terpisah dari penerimaan permintaan.

### Paket

#### Tarif metode Ailoot

Keluaran

US$0,18 *per detik pada 1080p*

Keluaran

US$0,07 *per detik pada 480p*

Keluaran

US$0,14 *per detik pada 720p*

Ailoot mencadangkan perkiraan dana sebelum permintaan. Setelah hasil diterima, tagihan akhir diselesaikan berdasarkan penggunaan yang terukur. Penyelesaian tagihan streaming menggunakan catatan penggunaan akhir. [Cara kerja cadangan dan penyelesaian tagihan →](https://ailoot.ai/docs/id/billing/reserve/)

### Contoh permintaan

#### Ailoot · Pemrosesan video

Referensi gambar

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

### Terima dan simpan hasil

#### Ailoot · Pemrosesan 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`

##### Periksa 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 konten lain

GET konten

```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 berkas yang dikembalikan; ambil setiap URL aset yang benar-benar dikembalikan.

Pertahankan setiap item data/indeks keluaran yang dikembalikan. content\_url hanya menunjuk yang pertama; ambil setiap jalur konten/aset aktual. GET content tanpa index tidak mencakup semua keluaran.

##### Jika respons asli perlu diperiksa

Baca tugas awal yang sudah ada; jangan pernah kirim ulang pengiriman yang statusnya tidak diketahui.

Kolom respons

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

Kesalahan dan langkah berikutnya

| Respons | Kondisi | Langkah berikutnya |
| --- | --- | --- |
| Respons400 · `invalid_request_error` | KondisiBidang wajib, representasi materi, atau nilai parameter tidak valid | Langkah berikutnyaPerbaiki bidang yang ditunjukkan sebelum permintaan pembuatan baru. |
| Respons409 · `video_not_ready` | KondisiKonten hasil awal belum tersedia | Langkah berikutnyaPeriksa ID awal yang dikembalikan secara berkala dan patuhi Retry-After. |
| Respons`server_error` | KondisiRespons yang dikembalikan menyatakan bahwa operasi atau hasil perlu diperiksa | Langkah berikutnyaSimpan ID operasi/tugas asli yang dikembalikan, header permintaan, dan respons; lanjutkan pembacaan yang didukung untuk operasi asli tersebut. Jangan kirim ulang permintaan pembuatan. |

### Alias

#### Alias model

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

#### Alias jalur metode

Gunakan jalur metode yang ditampilkan di atas.

#### ID pemanggil terkait

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

**Ailoot · Pemrosesan video** `POST /v1/videos/generations` `happyhorse-r2v`

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

Alibaba /`happyhorse-r2v`

ID model

- `happyhorse-1.1-r2v`
- `happyhorse-r2v`
- `happyhorse-r2v-latest`

### Mulai

Model untuk menghasilkan video dari gambar referensi dan skenario teks. Membantu mempertahankan penampilan karakter, objek, dan gaya visual dalam adegan baru.

Masukan yang diterima

Teks · Gambar

Hasil

Video

### Tersedia di Ailoot · masukan & metode

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

Masukan

`text`, `image`

Keluaran

`video`

Format keluaran

mp4

| Kolom | Jenis | Persyaratan | Nilai & batasan | Bawaan |
| --- | --- | --- | --- | --- |
| Kolom`model` | Jenis`string` | PersyaratanWajib | Nilai & batasan happyhorse-r2v | Bawaan— |
| Kolom`prompt` | Jenis`string` | PersyaratanWajib | Nilai & batasan Panjang minimum: 1 | Bawaan— |
| Kolom`duration` | Jenis`integer` | PersyaratanOpsional | Nilai & batasan Minimum: 3 Maksimum: 15 Satuan: detik | Bawaan5 |
| Kolom`resolution` | Jenis`string` | PersyaratanOpsional | Nilai & batasan 480P, 720P, 1080P | Bawaan720P |
| Kolom`ratio` | Jenis`string` | PersyaratanOpsional | Nilai & batasan 16:9, 9:16, 1:1, 4:3, 3:4, 4:5, 5:4, 9:21, 21:9 | Bawaan16:9 |
| Kolom`image_urls` | Jenis`https_url\|data_image_url[]` | PersyaratanWajib | Nilai & batasan Item minimum: 1 Item maksimum: 9 Byte terdekode maksimum: 20.971.520 Jenis MIME: image/jpeg, image/png, image/webp | Bawaan— |

Kombinasi bahan masukan

**reference\_images\_to\_video** · Wajib: prompt, image\_urls

Parameter metode dan siklus hidup

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

Siklus hidup: `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 metode dan ID bersifat eksak; kemampuan pemasok terpisah dari penerimaan permintaan.

### Paket

#### Tarif metode Ailoot

Keluaran

US$0,18 *per detik pada 1080p*

Keluaran

US$0,07 *per detik pada 480p*

Keluaran

US$0,14 *per detik pada 720p*

Ailoot mencadangkan perkiraan dana sebelum permintaan. Setelah hasil diterima, tagihan akhir diselesaikan berdasarkan penggunaan yang terukur. Penyelesaian tagihan streaming menggunakan catatan penggunaan akhir. [Cara kerja cadangan dan penyelesaian tagihan →](https://ailoot.ai/docs/id/billing/reserve/)

### Contoh permintaan

#### Ailoot · Pemrosesan video

Referensi gambar

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

### Terima dan simpan hasil

#### Ailoot · Pemrosesan 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`

##### Periksa 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 konten lain

GET konten

```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 berkas yang dikembalikan; ambil setiap URL aset yang benar-benar dikembalikan.

Pertahankan setiap item data/indeks keluaran yang dikembalikan. content\_url hanya menunjuk yang pertama; ambil setiap jalur konten/aset aktual. GET content tanpa index tidak mencakup semua keluaran.

##### Jika respons asli perlu diperiksa

Baca tugas awal yang sudah ada; jangan pernah kirim ulang pengiriman yang statusnya tidak diketahui.

Kolom respons

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

Kesalahan dan langkah berikutnya

| Respons | Kondisi | Langkah berikutnya |
| --- | --- | --- |
| Respons400 · `invalid_request_error` | KondisiBidang wajib, representasi materi, atau nilai parameter tidak valid | Langkah berikutnyaPerbaiki bidang yang ditunjukkan sebelum permintaan pembuatan baru. |
| Respons409 · `video_not_ready` | KondisiKonten hasil awal belum tersedia | Langkah berikutnyaPeriksa ID awal yang dikembalikan secara berkala dan patuhi Retry-After. |
| Respons`server_error` | KondisiRespons yang dikembalikan menyatakan bahwa operasi atau hasil perlu diperiksa | Langkah berikutnyaSimpan ID operasi/tugas asli yang dikembalikan, header permintaan, dan respons; lanjutkan pembacaan yang didukung untuk operasi asli tersebut. Jangan kirim ulang permintaan pembuatan. |

### Alias

#### Alias model

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

#### Alias jalur metode

Gunakan jalur metode yang ditampilkan di atas.

#### ID pemanggil terkait

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

**Ailoot · Pemrosesan video** `POST /v1/videos/generations` `happyhorse-r2v-latest`

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

Alibaba /`happyhorse-r2v-latest`

ID model

- `happyhorse-1.1-r2v`
- `happyhorse-r2v`
- `happyhorse-r2v-latest`

### Mulai

Model untuk menghasilkan video dari gambar referensi dan skenario teks. Membantu mempertahankan penampilan karakter, objek, dan gaya visual dalam adegan baru.

Masukan yang diterima

Teks · Gambar

Hasil

Video

### Tersedia di Ailoot · masukan & metode

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

Masukan

`text`, `image`

Keluaran

`video`

Format keluaran

mp4

| Kolom | Jenis | Persyaratan | Nilai & batasan | Bawaan |
| --- | --- | --- | --- | --- |
| Kolom`model` | Jenis`string` | PersyaratanWajib | Nilai & batasan happyhorse-r2v-latest | Bawaan— |
| Kolom`prompt` | Jenis`string` | PersyaratanWajib | Nilai & batasan Panjang minimum: 1 | Bawaan— |
| Kolom`duration` | Jenis`integer` | PersyaratanOpsional | Nilai & batasan Minimum: 3 Maksimum: 15 Satuan: detik | Bawaan5 |
| Kolom`resolution` | Jenis`string` | PersyaratanOpsional | Nilai & batasan 480P, 720P, 1080P | Bawaan720P |
| Kolom`ratio` | Jenis`string` | PersyaratanOpsional | Nilai & batasan 16:9, 9:16, 1:1, 4:3, 3:4, 4:5, 5:4, 9:21, 21:9 | Bawaan16:9 |
| Kolom`image_urls` | Jenis`https_url\|data_image_url[]` | PersyaratanWajib | Nilai & batasan Item minimum: 1 Item maksimum: 9 Byte terdekode maksimum: 20.971.520 Jenis MIME: image/jpeg, image/png, image/webp | Bawaan— |

Kombinasi bahan masukan

**reference\_images\_to\_video** · Wajib: prompt, image\_urls

Parameter metode dan siklus hidup

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

Siklus hidup: `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 metode dan ID bersifat eksak; kemampuan pemasok terpisah dari penerimaan permintaan.

### Paket

#### Tarif metode Ailoot

Keluaran

US$0,18 *per detik pada 1080p*

Keluaran

US$0,07 *per detik pada 480p*

Keluaran

US$0,14 *per detik pada 720p*

Ailoot mencadangkan perkiraan dana sebelum permintaan. Setelah hasil diterima, tagihan akhir diselesaikan berdasarkan penggunaan yang terukur. Penyelesaian tagihan streaming menggunakan catatan penggunaan akhir. [Cara kerja cadangan dan penyelesaian tagihan →](https://ailoot.ai/docs/id/billing/reserve/)

### Contoh permintaan

#### Ailoot · Pemrosesan video

Referensi gambar

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

### Terima dan simpan hasil

#### Ailoot · Pemrosesan 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`

##### Periksa 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 konten lain

GET konten

```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 berkas yang dikembalikan; ambil setiap URL aset yang benar-benar dikembalikan.

Pertahankan setiap item data/indeks keluaran yang dikembalikan. content\_url hanya menunjuk yang pertama; ambil setiap jalur konten/aset aktual. GET content tanpa index tidak mencakup semua keluaran.

##### Jika respons asli perlu diperiksa

Baca tugas awal yang sudah ada; jangan pernah kirim ulang pengiriman yang statusnya tidak diketahui.

Kolom respons

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

Kesalahan dan langkah berikutnya

| Respons | Kondisi | Langkah berikutnya |
| --- | --- | --- |
| Respons400 · `invalid_request_error` | KondisiBidang wajib, representasi materi, atau nilai parameter tidak valid | Langkah berikutnyaPerbaiki bidang yang ditunjukkan sebelum permintaan pembuatan baru. |
| Respons409 · `video_not_ready` | KondisiKonten hasil awal belum tersedia | Langkah berikutnyaPeriksa ID awal yang dikembalikan secara berkala dan patuhi Retry-After. |
| Respons`server_error` | KondisiRespons yang dikembalikan menyatakan bahwa operasi atau hasil perlu diperiksa | Langkah berikutnyaSimpan ID operasi/tugas asli yang dikembalikan, header permintaan, dan respons; lanjutkan pembacaan yang didukung untuk operasi asli tersebut. Jangan kirim ulang permintaan pembuatan. |

### Alias

#### Alias model

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

#### Alias jalur metode

Gunakan jalur metode yang ditampilkan di atas.

#### ID pemanggil terkait

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

FAQ · happyhorse-1.1-r2v

Input dan hasil apa yang tersedia?

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

Kolom apa yang digunakan permintaan?

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

Batasan apa yang berlaku?

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

Hubungkan Ailoot ke Claude Code, OpenCode, Hermes, atau aplikasi Anda.

## Perusahaan dan portofolio proyeknya

Perusahaan dan portofolio proyeknya: jutaan pelanggan; penjualan miliaran setiap bulan.

## Beli token dengan diskon.

Diskon langganan untuk pekerjaan rutin. Kode promo — hingga 50% untuk pembelian token.

Langganan

Pilih paket dengan diskon untuk permintaan rutin Anda.

Kode promo hingga 50%

Masukkan kode saat membeli. Harga dihitung ulang sesuai promosi aktif.

Biaya dalam riwayat

Model, token, dan jumlah tagihan disimpan untuk setiap permintaan.

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

## Hubungkan API ke produk yang Anda jual.

SaaS, aplikasi, dan bot — sesuai penawaran dan perjanjian lisensi Ailoot. Untuk penjualan kembali, mintalah lisensi reseller.

Aplikasi komersial

Integrasikan pembuatan teks, gambar, video, dan suara dalam fitur berbayar layanan Anda.

Lisensi reseller

Kirim deskripsi proyek dan skema akses. Mintalah ketentuan penggunaan dan penjualan kembali secara tertulis.

Dokumen di situs

Penawaran, perjanjian lisensi, dan kebijakan pemrosesan data tersedia sebelum koneksi.

[Minta lisensi reseller](mailto:support@ailoot.ai) · [Penawaran dan perjanjian lisensi](https://ailoot.ai/legal/offer?lang=id)

## Ailoot · Perusahaan dan portofolio proyeknya





Ailoot bertumpu pada pengalaman operasional yang teruji, basis pelanggan yang besar, layanan yang stabil, dan pemantauan KPI berkelanjutan.





Perusahaan dan portofolio proyeknya: jutaan pelanggan; penjualan miliaran setiap bulan.





Ailoot memanfaatkan pengalaman operasional ini untuk akses API ke fitur AI dalam produk pelanggan, agen, aplikasi, dan otomatisasi.
