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

# happyhorse-1.1-r2v

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

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

Mô hình tạo video từ ảnh tham chiếu và kịch bản bằng văn bản. Giúp giữ diện mạo nhân vật, các đồ vật và phong cách hình ảnh trong một cảnh mới.

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

Về mô hình

Mô tả này trình bày khả năng của mô hình. Đầu vào, đầu ra và tùy chọn có trên Ailoot được liệt kê bên dưới cho phương thức đã chọn.

HappyHorse-1.1-R2V tạo cảnh video mới từ ảnh tham chiếu và yêu cầu bằng văn bản. Alibaba định hướng mô hình giữ được đặc điểm nhận diện của nhân vật, đối tượng và phong cách hình ảnh khi tạo chuyển động. Các ảnh tham chiếu xác định nội dung và diện mạo của cảnh, còn văn bản mô tả cách những yếu tố này tương tác.

#### Vai trò của các mẫu hình ảnh

Có thể sử dụng từ một đến chín ảnh. Chúng có thể xác định nhân vật, đồ vật, môi trường hoặc cách thể hiện nghệ thuật. Trong mô tả, có thể nêu số thứ tự ảnh tham chiếu và đối tượng cụ thể trong ảnh để gắn tư liệu hình ảnh với phần hành động tương ứng. Cách này đặc biệt hữu ích khi cần kết hợp các yếu tố từ nhiều ảnh trong cùng một bố cục.

Khác với chế độ dùng khung hình mở đầu, ở đây ảnh tham chiếu là cơ sở cho nội dung của cảnh mới. Yêu cầu bằng văn bản là bắt buộc: nó liên kết diện mạo đối tượng với hành động, chuyển động máy quay và cách dàn dựng tổng thể. Nhà sản xuất nhấn mạnh tính nhất quán hình ảnh và chuyển động đậm chất điện ảnh; kết quả vẫn là nội dung được tạo mới, không phải bản dựng ghép từ các ảnh nguồn.

Các định dạng được chấp nhận là JPEG, JPG, PNG và WEBP, mỗi tệp tối đa 20 MB. Cạnh ngắn của ảnh phải có ít nhất 400 pixel; tư liệu ở mức 720P trở lên được khuyến nghị. Đầu vào của chế độ này chỉ gồm ảnh và văn bản.

#### Thời lượng, khung hình và âm thanh

Kết quả được lưu dưới dạng MP4 với tốc độ 24 khung hình mỗi giây. Thời lượng được đặt bằng số nguyên từ 3 đến 15 giây. Có thể chọn độ phân giải 480P, 720P hoặc 1080P; mô hình hỗ trợ tạo âm thanh đi kèm.

Các tỷ lệ khung hình ngang, dọc và vuông gồm: 16:9, 9:16, 1:1, 4:3, 3:4, 4:5, 5:4, 9:21 và 21:9. Việc chọn định dạng giúp xác định trước không gian bố cục của cảnh mới.

Văn bản có thể dùng bất kỳ ngôn ngữ nào. Giới hạn là 5000 ký tự không phải tiếng Trung hoặc 2500 ký tự tiếng Trung; phần vượt giới hạn bị cắt bỏ. Những vai trò quan trọng nhất của ảnh tham chiếu, hành động và chuyển động phải nằm trong phạm vi này. Hạt giống ngẫu nhiên có thể giúp các biến thể có nét tương đồng, nhưng không bảo đảm tái tạo chính xác cùng một video.

**Ailoot · Tạo video** `POST /v1/videos/generations` `happyhorse-1.1-r2v`

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

Alibaba /`happyhorse-1.1-r2v`

ID mô hình

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

### Bắt đầu

Mô hình tạo video từ ảnh tham chiếu và kịch bản bằng văn bản. Giúp giữ diện mạo nhân vật, các đồ vật và phong cách hình ảnh trong một cảnh mới.

Đầu vào được chấp nhận

Văn bản · Ảnh

Kết quả

Video

### Có trên Ailoot · đầu vào & phương thức

**Ailoot · Tạo video** `POST /v1/videos/generations`

Đầu vào

`text`, `image`

Đầu ra

`video`

Định dạng đầu ra

mp4

| Trường | Loại | Yêu cầu | Giá trị & giới hạn | Mặc định |
| --- | --- | --- | --- | --- |
| Trường`model` | Loại`string` | Yêu cầuBắt buộc | Giá trị & giới hạn happyhorse-1.1-r2v | Mặc định— |
| Trường`prompt` | Loại`string` | Yêu cầuBắt buộc | Giá trị & giới hạn Độ dài tối thiểu: 1 | Mặc định— |
| Trường`duration` | Loại`integer` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tối thiểu: 3 Tối đa: 15 Đơn vị: giây | Mặc định5 |
| Trường`resolution` | Loại`string` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn 480P, 720P, 1080P | Mặc định720P |
| Trường`ratio` | Loại`string` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn 16:9, 9:16, 1:1, 4:3, 3:4, 4:5, 5:4, 9:21, 21:9 | Mặc định16:9 |
| Trường`image_urls` | Loại`https_url\|data_image_url[]` | Yêu cầuBắt buộc | Giá trị & giới hạn Số mục tối thiểu: 1 Số mục tối đa: 9 Số byte tối đa sau giải mã: 20.971.520 Loại MIME: image/jpeg, image/png, image/webp | Mặc định— |

Tổ hợp tư liệu đầu vào

**reference\_images\_to\_video** · Bắt buộc: prompt, image\_urls

Tham số phương thức và vòng đời

| Tham số | Hợp đồng |
| --- | --- |
| Tham số`content_type` | Hợp đồngapplication/json |
| Tham số`required` | Hợp đồngmodel, prompt, image\_urls |
| Tham số`material_types` | Hợp đồngtext, image |
| Tham số`optional` | Hợp đồngduration, resolution, ratio |
| Tham số`duration_integer_range` | Hợp đồng3, 15 |
| Tham số`default_duration` | Hợp đồng5 |
| Tham số`resolution` | Hợp đồng480P, 720P, 1080P |
| Tham số`default_resolution` | Hợp đồng720P |
| Tham số`ratio` | Hợp đồng16:9, 9:16, 1:1, 4:3, 3:4, 4:5, 5:4, 9:21, 21:9 |
| Tham số`ratio_must_omit` | Hợp đồngfalse |
| Tham số`image_urls` | Hợp đồng{"min\_count":1,"max\_count":9,"schemes":\["https","dữ liệu ảnh raster base64"\],"max\_data\_image\_bytes":20971520} |

Vòng đời: `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`

Cấu trúc phương thức và ID là chính xác; khả năng của nhà cung cấp tách biệt với việc cho phép tiếp nhận yêu cầu.

### Bảng giá

#### Mức phí phương thức Ailoot

Đầu ra

0,18 US$ *mỗi giây ở 1080p*

Đầu ra

0,07 US$ *mỗi giây ở 480p*

Đầu ra

0,14 US$ *mỗi giây ở 720p*

Ailoot tạm giữ một khoản ước tính trước yêu cầu. Sau khi có kết quả, phí cuối cùng được quyết toán theo mức sử dụng đo được. Việc quyết toán khi truyền luồng dùng bản ghi mức sử dụng cuối cùng. [Cách hoạt động của cơ chế tạm giữ và quyết toán →](https://ailoot.ai/docs/vi/billing/reserve/)

### Ví dụ yêu cầu

#### Ailoot · Tạo video

Tham chiếu ảnh

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

### Nhận và lưu kết quả

#### Ailoot · Tạo 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`

##### Kiểm tra trạng thái tác vụ

GET trạng thái

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

##### Lưu tất cả tài nguyên đã hoàn tất

GET tất cả tài nguyên đã hoàn tất

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

Lượt đọc nội dung khác

GET nội dung

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

##### Lưu tất cả kết quả đã hoàn tất

Lưu mọi video đã hoàn tất hoặc tệp trả về; truy xuất từng URL tài nguyên thực tế được trả về.

Giữ lại mọi mục dữ liệu/chỉ số đầu ra được trả về. content\_url chỉ là mục đầu tiên; truy xuất mọi đường dẫn nội dung/tài sản thực tế. GET nội dung không có index không trả về tất cả đầu ra.

##### Nếu cần kiểm tra phản hồi gốc

Đọc tác vụ gốc hiện có; tuyệt đối không gửi lại lần gửi chưa rõ kết quả.

Trường phản hồi

| Trường | Loại |
| --- | --- |
| Trường`id` | Loạistring |
| Trường`object` | Loạistring |
| Trường`model` | Loạistring |
| Trường`status` | Loạistring |
| Trường`content_url` | Loạisigned URL |
| Trường`data[]` | Loạisigned URL |
| Trường`usage` | Loạiobject |
| Trường`result_pending_check` | Loạiboolean |

Lỗi và bước tiếp theo

| Phản hồi | Điều kiện | Bước tiếp theo |
| --- | --- | --- |
| Phản hồi400 · `invalid_request_error` | Điều kiệnTrường bắt buộc, cách biểu diễn tài liệu hoặc giá trị tham số không hợp lệ | Bước tiếp theoSửa các trường được chỉ ra trước khi gửi yêu cầu tạo mới. |
| Phản hồi409 · `video_not_ready` | Điều kiệnNội dung kết quả ban đầu chưa có sẵn | Bước tiếp theoThăm dò ID ban đầu được trả về và tuân thủ Retry-After. |
| Phản hồi`server_error` | Điều kiệnPhản hồi trả về cho biết thao tác hoặc kết quả cần được kiểm tra | Bước tiếp theoGiữ lại ID thao tác/tác vụ gốc đã trả về, các header của yêu cầu và toàn bộ phản hồi; tiếp tục truy xuất thao tác gốc đó bằng các phương thức được hỗ trợ. Không gửi lại yêu cầu tạo. |

### Bí danh

#### Bí danh mô hình

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

#### Bí danh đường dẫn phương thức

Dùng các đường dẫn phương thức hiển thị ở trên.

#### ID gọi liên quan

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

**Ailoot · Tạo video** `POST /v1/videos/generations` `happyhorse-r2v`

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

Alibaba /`happyhorse-r2v`

ID mô hình

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

### Bắt đầu

Mô hình tạo video từ ảnh tham chiếu và kịch bản bằng văn bản. Giúp giữ diện mạo nhân vật, các đồ vật và phong cách hình ảnh trong một cảnh mới.

Đầu vào được chấp nhận

Văn bản · Ảnh

Kết quả

Video

### Có trên Ailoot · đầu vào & phương thức

**Ailoot · Tạo video** `POST /v1/videos/generations`

Đầu vào

`text`, `image`

Đầu ra

`video`

Định dạng đầu ra

mp4

| Trường | Loại | Yêu cầu | Giá trị & giới hạn | Mặc định |
| --- | --- | --- | --- | --- |
| Trường`model` | Loại`string` | Yêu cầuBắt buộc | Giá trị & giới hạn happyhorse-r2v | Mặc định— |
| Trường`prompt` | Loại`string` | Yêu cầuBắt buộc | Giá trị & giới hạn Độ dài tối thiểu: 1 | Mặc định— |
| Trường`duration` | Loại`integer` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tối thiểu: 3 Tối đa: 15 Đơn vị: giây | Mặc định5 |
| Trường`resolution` | Loại`string` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn 480P, 720P, 1080P | Mặc định720P |
| Trường`ratio` | Loại`string` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn 16:9, 9:16, 1:1, 4:3, 3:4, 4:5, 5:4, 9:21, 21:9 | Mặc định16:9 |
| Trường`image_urls` | Loại`https_url\|data_image_url[]` | Yêu cầuBắt buộc | Giá trị & giới hạn Số mục tối thiểu: 1 Số mục tối đa: 9 Số byte tối đa sau giải mã: 20.971.520 Loại MIME: image/jpeg, image/png, image/webp | Mặc định— |

Tổ hợp tư liệu đầu vào

**reference\_images\_to\_video** · Bắt buộc: prompt, image\_urls

Tham số phương thức và vòng đời

| Tham số | Hợp đồng |
| --- | --- |
| Tham số`material_types` | Hợp đồngtext, image |
| Tham số`required` | Hợp đồngnull |
| Tham số`optional_controls` | Hợp đồngnull |

Vòng đời: `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`

Cấu trúc phương thức và ID là chính xác; khả năng của nhà cung cấp tách biệt với việc cho phép tiếp nhận yêu cầu.

### Bảng giá

#### Mức phí phương thức Ailoot

Đầu ra

0,18 US$ *mỗi giây ở 1080p*

Đầu ra

0,07 US$ *mỗi giây ở 480p*

Đầu ra

0,14 US$ *mỗi giây ở 720p*

Ailoot tạm giữ một khoản ước tính trước yêu cầu. Sau khi có kết quả, phí cuối cùng được quyết toán theo mức sử dụng đo được. Việc quyết toán khi truyền luồng dùng bản ghi mức sử dụng cuối cùng. [Cách hoạt động của cơ chế tạm giữ và quyết toán →](https://ailoot.ai/docs/vi/billing/reserve/)

### Ví dụ yêu cầu

#### Ailoot · Tạo video

Tham chiếu ảnh

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

### Nhận và lưu kết quả

#### Ailoot · Tạo 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`

##### Kiểm tra trạng thái tác vụ

GET trạng thái

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

##### Lưu tất cả tài nguyên đã hoàn tất

GET tất cả tài nguyên đã hoàn tất

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

Lượt đọc nội dung khác

GET nội dung

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

##### Lưu tất cả kết quả đã hoàn tất

Lưu mọi video đã hoàn tất hoặc tệp trả về; truy xuất từng URL tài nguyên thực tế được trả về.

Giữ lại mọi mục dữ liệu/chỉ số đầu ra được trả về. content\_url chỉ là mục đầu tiên; truy xuất mọi đường dẫn nội dung/tài sản thực tế. GET nội dung không có index không trả về tất cả đầu ra.

##### Nếu cần kiểm tra phản hồi gốc

Đọc tác vụ gốc hiện có; tuyệt đối không gửi lại lần gửi chưa rõ kết quả.

Trường phản hồi

| Trường | Loại |
| --- | --- |
| Trường`id` | Loạistring |
| Trường`object` | Loạistring |
| Trường`model` | Loạistring |
| Trường`status` | Loạistring |
| Trường`content_url` | Loạisigned URL |
| Trường`data[]` | Loạisigned URL |
| Trường`usage` | Loạiobject |
| Trường`result_pending_check` | Loạiboolean |

Lỗi và bước tiếp theo

| Phản hồi | Điều kiện | Bước tiếp theo |
| --- | --- | --- |
| Phản hồi400 · `invalid_request_error` | Điều kiệnTrường bắt buộc, cách biểu diễn tài liệu hoặc giá trị tham số không hợp lệ | Bước tiếp theoSửa các trường được chỉ ra trước khi gửi yêu cầu tạo mới. |
| Phản hồi409 · `video_not_ready` | Điều kiệnNội dung kết quả ban đầu chưa có sẵn | Bước tiếp theoThăm dò ID ban đầu được trả về và tuân thủ Retry-After. |
| Phản hồi`server_error` | Điều kiệnPhản hồi trả về cho biết thao tác hoặc kết quả cần được kiểm tra | Bước tiếp theoGiữ lại ID thao tác/tác vụ gốc đã trả về, các header của yêu cầu và toàn bộ phản hồi; tiếp tục truy xuất thao tác gốc đó bằng các phương thức được hỗ trợ. Không gửi lại yêu cầu tạo. |

### Bí danh

#### Bí danh mô hình

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

#### Bí danh đường dẫn phương thức

Dùng các đường dẫn phương thức hiển thị ở trên.

#### ID gọi liên quan

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

**Ailoot · Tạo video** `POST /v1/videos/generations` `happyhorse-r2v-latest`

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

Alibaba /`happyhorse-r2v-latest`

ID mô hình

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

### Bắt đầu

Mô hình tạo video từ ảnh tham chiếu và kịch bản bằng văn bản. Giúp giữ diện mạo nhân vật, các đồ vật và phong cách hình ảnh trong một cảnh mới.

Đầu vào được chấp nhận

Văn bản · Ảnh

Kết quả

Video

### Có trên Ailoot · đầu vào & phương thức

**Ailoot · Tạo video** `POST /v1/videos/generations`

Đầu vào

`text`, `image`

Đầu ra

`video`

Định dạng đầu ra

mp4

| Trường | Loại | Yêu cầu | Giá trị & giới hạn | Mặc định |
| --- | --- | --- | --- | --- |
| Trường`model` | Loại`string` | Yêu cầuBắt buộc | Giá trị & giới hạn happyhorse-r2v-latest | Mặc định— |
| Trường`prompt` | Loại`string` | Yêu cầuBắt buộc | Giá trị & giới hạn Độ dài tối thiểu: 1 | Mặc định— |
| Trường`duration` | Loại`integer` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tối thiểu: 3 Tối đa: 15 Đơn vị: giây | Mặc định5 |
| Trường`resolution` | Loại`string` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn 480P, 720P, 1080P | Mặc định720P |
| Trường`ratio` | Loại`string` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn 16:9, 9:16, 1:1, 4:3, 3:4, 4:5, 5:4, 9:21, 21:9 | Mặc định16:9 |
| Trường`image_urls` | Loại`https_url\|data_image_url[]` | Yêu cầuBắt buộc | Giá trị & giới hạn Số mục tối thiểu: 1 Số mục tối đa: 9 Số byte tối đa sau giải mã: 20.971.520 Loại MIME: image/jpeg, image/png, image/webp | Mặc định— |

Tổ hợp tư liệu đầu vào

**reference\_images\_to\_video** · Bắt buộc: prompt, image\_urls

Tham số phương thức và vòng đời

| Tham số | Hợp đồng |
| --- | --- |
| Tham số`material_types` | Hợp đồngtext, image |
| Tham số`required` | Hợp đồngnull |
| Tham số`optional_controls` | Hợp đồngnull |

Vòng đời: `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`

Cấu trúc phương thức và ID là chính xác; khả năng của nhà cung cấp tách biệt với việc cho phép tiếp nhận yêu cầu.

### Bảng giá

#### Mức phí phương thức Ailoot

Đầu ra

0,18 US$ *mỗi giây ở 1080p*

Đầu ra

0,07 US$ *mỗi giây ở 480p*

Đầu ra

0,14 US$ *mỗi giây ở 720p*

Ailoot tạm giữ một khoản ước tính trước yêu cầu. Sau khi có kết quả, phí cuối cùng được quyết toán theo mức sử dụng đo được. Việc quyết toán khi truyền luồng dùng bản ghi mức sử dụng cuối cùng. [Cách hoạt động của cơ chế tạm giữ và quyết toán →](https://ailoot.ai/docs/vi/billing/reserve/)

### Ví dụ yêu cầu

#### Ailoot · Tạo video

Tham chiếu ảnh

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

### Nhận và lưu kết quả

#### Ailoot · Tạo 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`

##### Kiểm tra trạng thái tác vụ

GET trạng thái

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

##### Lưu tất cả tài nguyên đã hoàn tất

GET tất cả tài nguyên đã hoàn tất

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

Lượt đọc nội dung khác

GET nội dung

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

##### Lưu tất cả kết quả đã hoàn tất

Lưu mọi video đã hoàn tất hoặc tệp trả về; truy xuất từng URL tài nguyên thực tế được trả về.

Giữ lại mọi mục dữ liệu/chỉ số đầu ra được trả về. content\_url chỉ là mục đầu tiên; truy xuất mọi đường dẫn nội dung/tài sản thực tế. GET nội dung không có index không trả về tất cả đầu ra.

##### Nếu cần kiểm tra phản hồi gốc

Đọc tác vụ gốc hiện có; tuyệt đối không gửi lại lần gửi chưa rõ kết quả.

Trường phản hồi

| Trường | Loại |
| --- | --- |
| Trường`id` | Loạistring |
| Trường`object` | Loạistring |
| Trường`model` | Loạistring |
| Trường`status` | Loạistring |
| Trường`content_url` | Loạisigned URL |
| Trường`data[]` | Loạisigned URL |
| Trường`usage` | Loạiobject |
| Trường`result_pending_check` | Loạiboolean |

Lỗi và bước tiếp theo

| Phản hồi | Điều kiện | Bước tiếp theo |
| --- | --- | --- |
| Phản hồi400 · `invalid_request_error` | Điều kiệnTrường bắt buộc, cách biểu diễn tài liệu hoặc giá trị tham số không hợp lệ | Bước tiếp theoSửa các trường được chỉ ra trước khi gửi yêu cầu tạo mới. |
| Phản hồi409 · `video_not_ready` | Điều kiệnNội dung kết quả ban đầu chưa có sẵn | Bước tiếp theoThăm dò ID ban đầu được trả về và tuân thủ Retry-After. |
| Phản hồi`server_error` | Điều kiệnPhản hồi trả về cho biết thao tác hoặc kết quả cần được kiểm tra | Bước tiếp theoGiữ lại ID thao tác/tác vụ gốc đã trả về, các header của yêu cầu và toàn bộ phản hồi; tiếp tục truy xuất thao tác gốc đó bằng các phương thức được hỗ trợ. Không gửi lại yêu cầu tạo. |

### Bí danh

#### Bí danh mô hình

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

#### Bí danh đường dẫn phương thức

Dùng các đường dẫn phương thức hiển thị ở trên.

#### ID gọi liên quan

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

FAQ · happyhorse-1.1-r2v

Có những đầu vào và kết quả nào?

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

Yêu cầu sử dụng những trường nào?

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

Áp dụng những giới hạn nào?

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

Kết nối Ailoot với Claude Code, OpenCode, Hermes hoặc ứng dụng của bạn.

## Công ty và danh mục dự án của công ty

Công ty và danh mục dự án của công ty: hàng triệu khách hàng; doanh số hàng tỷ mỗi tháng.

## Mua token với giá ưu đãi.

Ưu đãi thuê bao cho nhu cầu thường xuyên. Mã khuyến mãi giảm đến 50% khi mua token.

Thuê bao

Chọn gói ưu đãi cho các yêu cầu thường xuyên của bạn.

Mã giảm đến 50%

Nhập mã khi mua. Giá được tính lại theo chương trình đang áp dụng.

Chi phí trong lịch sử

Mô hình, token và số tiền được lưu cho mỗi yêu cầu.

[Chọn gói thuê bao](https://ailoot.ai/docs/vi/billing/subscriptions/) · [Xem giá mô hình](https://ailoot.ai/models/vi/)

## Kết nối API vào sản phẩm bạn đang bán.

SaaS, ứng dụng và bot — theo đề nghị giao kết chính thức và thỏa thuận cấp phép Ailoot. Muốn bán lại, hãy yêu cầu giấy phép bán lại.

Ứng dụng thương mại

Tích hợp tạo văn bản, ảnh, video và âm thanh vào các tính năng trả phí của dịch vụ.

Giấy phép bán lại

Gửi mô tả dự án và cách cung cấp quyền truy cập. Yêu cầu điều khoản sử dụng và bán lại bằng văn bản.

Tài liệu trên website

Đề nghị giao kết, thỏa thuận cấp phép và chính sách xử lý dữ liệu có sẵn trước khi kết nối.

[Yêu cầu giấy phép bán lại](mailto:support@ailoot.ai) · [Đề nghị giao kết và thỏa thuận cấp phép](https://ailoot.ai/legal/offer?lang=vi)

## Ailoot · Công ty và danh mục dự án của công ty





Ailoot dựa trên kinh nghiệm vận hành tích lũy, cơ sở khách hàng lớn, dịch vụ ổn định và việc kiểm soát KPI liên tục.





Công ty và danh mục dự án của công ty: hàng triệu khách hàng; doanh số hàng tỷ mỗi tháng.





Ailoot áp dụng kinh nghiệm vận hành này để cung cấp quyền truy cập API vào các tính năng AI trong sản phẩm của khách hàng, tác tử, ứng dụng và quy trình tự động hóa.
