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

# happyhorse-1.1-i2v

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

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

Модель оживления изображения: исходная картинка задаёт первый кадр, а описание направляет дальнейшее движение. Создаёт короткий видеоролик с возможностью звукового сопровождения.

- [**Ailoot · Видео** `POST /v1/videos/generations` `happyhorse-1.1-i2v`](https://ailoot.ai/models/ru/happyhorse-1-1-i2v/#method-0)
- [**Ailoot · Видео** `POST /v1/videos/generations` `happyhorse-i2v`](https://ailoot.ai/models/ru/happyhorse-1-1-i2v/#method-1)
- [**Ailoot · Видео** `POST /v1/videos/generations` `happyhorse-i2v-latest`](https://ailoot.ai/models/ru/happyhorse-1-1-i2v/#method-2)

О модели

Описание раскрывает возможности модели. Доступные в Ailoot входные данные, результаты и параметры выбранного метода перечислены ниже.

HappyHorse-1.1-I2V — модель Alibaba, которая начинает видеосцену с готового изображения. Картинка становится первым кадром, а текст может определить последующее действие: движение героя, изменения в сцене и направление камеры. Это подходит для оживления иллюстрации, предметной фотографии или заранее подготовленного визуального концепта.

Текстовое описание необязательно. Если его нет, модель сама выводит возможное движение из содержимого начальной картинки. При явном задании исходное изображение определяет композицию и внешность объектов, а слова направляют развитие сцены во времени.

#### От первого кадра к движению

Alibaba выделяет сохранение внешности персонажа, визуальную согласованность, плавность движения и сочетание изображения со звуком. В числе заявленных направлений также устойчивость надписей и фактур. Эти свойства относятся к замыслу модели и не означают буквального сохранения каждого пикселя во всех сгенерированных кадрах.

Для этого режима используется одно начальное изображение. Оно задаёт исходную сцену, а не набор независимых образцов для новой композиции. Возможность назначить отдельный завершающий кадр для этой конкретной версии не заявлена.

Принимаются JPEG, JPG, PNG и WEBP. Каждая сторона входного изображения должна быть не меньше 300 пикселей; допустимое соотношение сторон — от 1:2,5 до 2,5:1, размер файла — до 20 МБ. Соотношение сторон готового видео следует первому кадру.

#### Параметры ролика

Длительность выбирается целым числом от 3 до 15 секунд. Доступны уровни разрешения 480P, 720P и 1080P; выходной формат — MP4, частота — 24 кадра в секунду. Поддерживается создание звукового сопровождения вместе с видеорядом.

Описание допускает любой язык и содержит до 5000 некитайских либо 2500 китайских символов. Если предел превышен, лишняя часть отбрасывается, поэтому важные действия и особенности движения стоит формулировать в пределах задания. Одинаковое начальное зерно случайности может дать похожие ролики, но не гарантирует их покадровое совпадение.

**Ailoot · Видео** `POST /v1/videos/generations` `happyhorse-1.1-i2v`

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

Alibaba /`happyhorse-1.1-i2v`

ID модели

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

### Начало

Модель оживления изображения: исходная картинка задаёт первый кадр, а описание направляет дальнейшее движение. Создаёт короткий видеоролик с возможностью звукового сопровождения.

Допустимые входные данные

Текст · Картинки

Результаты

Видео

### Доступно в Ailoot · входные данные и методы

**Ailoot · Видео** `POST /v1/videos/generations`

Входные данные

`text`, `image`

Результат

`video`

Выходной формат

mp4

| Поле | Тип | Требование | Значения и ограничения | По умолчанию |
| --- | --- | --- | --- | --- |
| Поле`model` | Тип`string` | ТребованиеОбязательно | Значения и ограничения happyhorse-1.1-i2v | По умолчанию— |
| Поле`prompt` | Тип`string` | ТребованиеНеобязательно | Значения и ограничения Минимальная длина: 1 | По умолчанию— |
| Поле`duration` | Тип`integer` | ТребованиеНеобязательно | Значения и ограничения Минимум: 3 Максимум: 15 Единица: секунды | По умолчанию5 |
| Поле`resolution` | Тип`string` | ТребованиеНеобязательно | Значения и ограничения 480P, 720P, 1080P | По умолчанию720P |
| Поле`ratio` | Тип`string` | ТребованиеНе поддерживается | Значения и ограничения | По умолчанию— |
| Поле`image_urls` | Тип`https_url\|data_image_url[]` | ТребованиеОбязательно | Значения и ограничения Минимум элементов: 1 Максимум элементов: 1 Максимум декодированных байтов: 20 971 520 Типы MIME: image/jpeg, image/png, image/webp | По умолчанию— |

Сочетания входных материалов

**first\_frame\_to\_video** · Обязательно: image\_urls

Параметры и жизненный цикл метода

| Параметр | Контракт |
| --- | --- |
| Параметр`content_type` | Контрактapplication/json |
| Параметр`required` | Контрактmodel, image\_urls |
| Параметр`material_types` | Контрактtext, image |
| Параметр`optional` | Контрактduration, resolution, ratio, prompt |
| Параметр`duration_integer_range` | Контракт3, 15 |
| Параметр`default_duration` | Контракт5 |
| Параметр`resolution` | Контракт480P, 720P, 1080P |
| Параметр`default_resolution` | Контракт720P |
| Параметр`ratio` | Контракт |
| Параметр`ratio_must_omit` | Контрактtrue |
| Параметр`image_urls` | Контракт{"min\_count":1,"max\_count":1,"schemes":\["https","растровые данные в base64"\],"max\_data\_image\_bytes":20971520} |

Жизненный цикл: `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`

Структуры методов и ID указаны точно; возможности поставщика рассматриваются отдельно от допуска.

### Тарифы

#### Ставки методов Ailoot

Выход

0,18 $ *за секунду в 1080p*

Выход

0,07 $ *за секунду в 480p*

Выход

0,14 $ *за секунду в 720p*

Ailoot резервирует расчётную сумму перед запросом. После получения результата списывает итоговую плату по измеренному расходу. Для окончательного списания за потоковый ответ используется итоговая запись расхода. [Как работают резервирование и расчёт →](https://ailoot.ai/docs/ru/billing/reserve/)

### Примеры запросов

#### Ailoot · Видео

Изображение-референс

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

### Получить и сохранить результаты

#### Ailoot · Видео

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`

##### Проверить статус задачи

GET статус

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

##### Сохраните все готовые материалы

GET все готовые материалы

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

Чтение другого содержимого

GET содержимое

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

##### Сохраняйте все готовые результаты

Сохраните каждое готовое видео или полученный файл; загрузите содержимое по каждому фактически полученному URL материала.

Сохраните каждый возвращённый элемент data и индекс результата. content\_url относится только к первому результату; получите данные по каждому фактическому пути содержимого или ресурсу. GET содержимого без index не возвращает все результаты.

##### Если нужно проверить исходный ответ

Проверяйте существующую исходную задачу; никогда не повторяйте отправку с неизвестным исходом.

Поля ответа

| Поле | Тип |
| --- | --- |
| Поле`id` | Типstring |
| Поле`object` | Типstring |
| Поле`model` | Типstring |
| Поле`status` | Типstring |
| Поле`content_url` | Типsigned URL |
| Поле`data[]` | Типsigned URL |
| Поле`usage` | Типobject |
| Поле`result_pending_check` | Типboolean |

Ошибки и дальнейшие шаги

| Ответ | Условие | Следующий шаг |
| --- | --- | --- |
| Ответ400 · `invalid_request_error` | УсловиеНеверные обязательные поля, представление материалов или значение параметра | Следующий шагИсправьте указанные поля перед новым запросом на создание. |
| Ответ409 · `video_not_ready` | УсловиеСодержимое исходного результата пока недоступно | Следующий шагПроверяйте исходный возвращённый ID и соблюдайте Retry-After. |
| Ответ`server_error` | УсловиеВозвращённый ответ указывает, что операция или результат требуют проверки | Следующий шагСохраните исходный возвращённый ID операции или задачи, заголовки запроса и ответ; продолжайте поддерживаемые операции чтения исходной операции. Не отправляйте запрос создания повторно. |

### Псевдонимы

#### Псевдонимы моделей

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

#### Псевдонимы путей метода

Используйте пути методов, указанные выше.

#### Связанные ID для вызова

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

**Ailoot · Видео** `POST /v1/videos/generations` `happyhorse-i2v`

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

Alibaba /`happyhorse-i2v`

ID модели

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

### Начало

Модель оживления изображения: исходная картинка задаёт первый кадр, а описание направляет дальнейшее движение. Создаёт короткий видеоролик с возможностью звукового сопровождения.

Допустимые входные данные

Текст · Картинки

Результаты

Видео

### Доступно в Ailoot · входные данные и методы

**Ailoot · Видео** `POST /v1/videos/generations`

Входные данные

`text`, `image`

Результат

`video`

Выходной формат

mp4

| Поле | Тип | Требование | Значения и ограничения | По умолчанию |
| --- | --- | --- | --- | --- |
| Поле`model` | Тип`string` | ТребованиеОбязательно | Значения и ограничения happyhorse-i2v | По умолчанию— |
| Поле`prompt` | Тип`string` | ТребованиеНеобязательно | Значения и ограничения Минимальная длина: 1 | По умолчанию— |
| Поле`duration` | Тип`integer` | ТребованиеНеобязательно | Значения и ограничения Минимум: 3 Максимум: 15 Единица: секунды | По умолчанию5 |
| Поле`resolution` | Тип`string` | ТребованиеНеобязательно | Значения и ограничения 480P, 720P, 1080P | По умолчанию720P |
| Поле`ratio` | Тип`string` | ТребованиеНе поддерживается | Значения и ограничения | По умолчанию— |
| Поле`image_urls` | Тип`https_url\|data_image_url[]` | ТребованиеОбязательно | Значения и ограничения Минимум элементов: 1 Максимум элементов: 1 Максимум декодированных байтов: 20 971 520 Типы MIME: image/jpeg, image/png, image/webp | По умолчанию— |

Сочетания входных материалов

**first\_frame\_to\_video** · Обязательно: image\_urls

Параметры и жизненный цикл метода

| Параметр | Контракт |
| --- | --- |
| Параметр`material_types` | Контрактtext, image |
| Параметр`required` | Контрактnull |
| Параметр`optional_controls` | Контрактnull |

Жизненный цикл: `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`

Структуры методов и ID указаны точно; возможности поставщика рассматриваются отдельно от допуска.

### Тарифы

#### Ставки методов Ailoot

Выход

0,18 $ *за секунду в 1080p*

Выход

0,07 $ *за секунду в 480p*

Выход

0,14 $ *за секунду в 720p*

Ailoot резервирует расчётную сумму перед запросом. После получения результата списывает итоговую плату по измеренному расходу. Для окончательного списания за потоковый ответ используется итоговая запись расхода. [Как работают резервирование и расчёт →](https://ailoot.ai/docs/ru/billing/reserve/)

### Примеры запросов

#### Ailoot · Видео

Изображение-референс

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

### Получить и сохранить результаты

#### Ailoot · Видео

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`

##### Проверить статус задачи

GET статус

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

##### Сохраните все готовые материалы

GET все готовые материалы

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

Чтение другого содержимого

GET содержимое

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

##### Сохраняйте все готовые результаты

Сохраните каждое готовое видео или полученный файл; загрузите содержимое по каждому фактически полученному URL материала.

Сохраните каждый возвращённый элемент data и индекс результата. content\_url относится только к первому результату; получите данные по каждому фактическому пути содержимого или ресурсу. GET содержимого без index не возвращает все результаты.

##### Если нужно проверить исходный ответ

Проверяйте существующую исходную задачу; никогда не повторяйте отправку с неизвестным исходом.

Поля ответа

| Поле | Тип |
| --- | --- |
| Поле`id` | Типstring |
| Поле`object` | Типstring |
| Поле`model` | Типstring |
| Поле`status` | Типstring |
| Поле`content_url` | Типsigned URL |
| Поле`data[]` | Типsigned URL |
| Поле`usage` | Типobject |
| Поле`result_pending_check` | Типboolean |

Ошибки и дальнейшие шаги

| Ответ | Условие | Следующий шаг |
| --- | --- | --- |
| Ответ400 · `invalid_request_error` | УсловиеНеверные обязательные поля, представление материалов или значение параметра | Следующий шагИсправьте указанные поля перед новым запросом на создание. |
| Ответ409 · `video_not_ready` | УсловиеСодержимое исходного результата пока недоступно | Следующий шагПроверяйте исходный возвращённый ID и соблюдайте Retry-After. |
| Ответ`server_error` | УсловиеВозвращённый ответ указывает, что операция или результат требуют проверки | Следующий шагСохраните исходный возвращённый ID операции или задачи, заголовки запроса и ответ; продолжайте поддерживаемые операции чтения исходной операции. Не отправляйте запрос создания повторно. |

### Псевдонимы

#### Псевдонимы моделей

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

#### Псевдонимы путей метода

Используйте пути методов, указанные выше.

#### Связанные ID для вызова

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

**Ailoot · Видео** `POST /v1/videos/generations` `happyhorse-i2v-latest`

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

Alibaba /`happyhorse-i2v-latest`

ID модели

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

### Начало

Модель оживления изображения: исходная картинка задаёт первый кадр, а описание направляет дальнейшее движение. Создаёт короткий видеоролик с возможностью звукового сопровождения.

Допустимые входные данные

Текст · Картинки

Результаты

Видео

### Доступно в Ailoot · входные данные и методы

**Ailoot · Видео** `POST /v1/videos/generations`

Входные данные

`text`, `image`

Результат

`video`

Выходной формат

mp4

| Поле | Тип | Требование | Значения и ограничения | По умолчанию |
| --- | --- | --- | --- | --- |
| Поле`model` | Тип`string` | ТребованиеОбязательно | Значения и ограничения happyhorse-i2v-latest | По умолчанию— |
| Поле`prompt` | Тип`string` | ТребованиеНеобязательно | Значения и ограничения Минимальная длина: 1 | По умолчанию— |
| Поле`duration` | Тип`integer` | ТребованиеНеобязательно | Значения и ограничения Минимум: 3 Максимум: 15 Единица: секунды | По умолчанию5 |
| Поле`resolution` | Тип`string` | ТребованиеНеобязательно | Значения и ограничения 480P, 720P, 1080P | По умолчанию720P |
| Поле`ratio` | Тип`string` | ТребованиеНе поддерживается | Значения и ограничения | По умолчанию— |
| Поле`image_urls` | Тип`https_url\|data_image_url[]` | ТребованиеОбязательно | Значения и ограничения Минимум элементов: 1 Максимум элементов: 1 Максимум декодированных байтов: 20 971 520 Типы MIME: image/jpeg, image/png, image/webp | По умолчанию— |

Сочетания входных материалов

**first\_frame\_to\_video** · Обязательно: image\_urls

Параметры и жизненный цикл метода

| Параметр | Контракт |
| --- | --- |
| Параметр`material_types` | Контрактtext, image |
| Параметр`required` | Контрактnull |
| Параметр`optional_controls` | Контрактnull |

Жизненный цикл: `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`

Структуры методов и ID указаны точно; возможности поставщика рассматриваются отдельно от допуска.

### Тарифы

#### Ставки методов Ailoot

Выход

0,18 $ *за секунду в 1080p*

Выход

0,07 $ *за секунду в 480p*

Выход

0,14 $ *за секунду в 720p*

Ailoot резервирует расчётную сумму перед запросом. После получения результата списывает итоговую плату по измеренному расходу. Для окончательного списания за потоковый ответ используется итоговая запись расхода. [Как работают резервирование и расчёт →](https://ailoot.ai/docs/ru/billing/reserve/)

### Примеры запросов

#### Ailoot · Видео

Изображение-референс

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

### Получить и сохранить результаты

#### Ailoot · Видео

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`

##### Проверить статус задачи

GET статус

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

##### Сохраните все готовые материалы

GET все готовые материалы

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

Чтение другого содержимого

GET содержимое

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

##### Сохраняйте все готовые результаты

Сохраните каждое готовое видео или полученный файл; загрузите содержимое по каждому фактически полученному URL материала.

Сохраните каждый возвращённый элемент data и индекс результата. content\_url относится только к первому результату; получите данные по каждому фактическому пути содержимого или ресурсу. GET содержимого без index не возвращает все результаты.

##### Если нужно проверить исходный ответ

Проверяйте существующую исходную задачу; никогда не повторяйте отправку с неизвестным исходом.

Поля ответа

| Поле | Тип |
| --- | --- |
| Поле`id` | Типstring |
| Поле`object` | Типstring |
| Поле`model` | Типstring |
| Поле`status` | Типstring |
| Поле`content_url` | Типsigned URL |
| Поле`data[]` | Типsigned URL |
| Поле`usage` | Типobject |
| Поле`result_pending_check` | Типboolean |

Ошибки и дальнейшие шаги

| Ответ | Условие | Следующий шаг |
| --- | --- | --- |
| Ответ400 · `invalid_request_error` | УсловиеНеверные обязательные поля, представление материалов или значение параметра | Следующий шагИсправьте указанные поля перед новым запросом на создание. |
| Ответ409 · `video_not_ready` | УсловиеСодержимое исходного результата пока недоступно | Следующий шагПроверяйте исходный возвращённый ID и соблюдайте Retry-After. |
| Ответ`server_error` | УсловиеВозвращённый ответ указывает, что операция или результат требуют проверки | Следующий шагСохраните исходный возвращённый ID операции или задачи, заголовки запроса и ответ; продолжайте поддерживаемые операции чтения исходной операции. Не отправляйте запрос создания повторно. |

### Псевдонимы

#### Псевдонимы моделей

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

#### Псевдонимы путей метода

Используйте пути методов, указанные выше.

#### Связанные ID для вызова

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

FAQ · happyhorse-1.1-i2v

Какие входные данные и результаты доступны?

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

Какие поля использует запрос?

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

Какие ограничения действуют?

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

Подключите Ailoot к Claude Code, OpenCode, Hermes или своему приложению.

## Компания и портфель её проектов

Компания и портфель её проектов: миллионы клиентов; продажи на миллиарды ежемесячно.

## Покупайте токены со скидкой.

Скидка по подписке для регулярной работы. Промокоды — до 50% на покупку токенов.

Подписка

Выберите тариф со скидкой для своих регулярных запросов.

Промокод до 50%

Введите код при покупке. Цена пересчитается с учётом действующей акции.

Расходы в истории

Модель, токены и сумма сохраняются для каждого запроса.

[Выбрать подписку](https://ailoot.ai/docs/ru/billing/subscriptions/) · [Посмотреть цены моделей](https://ailoot.ai/models/ru/)

## Подключайте API к продукту, который вы продаёте.

SaaS, приложения и боты — по оферте и лицензионному договору Ailoot. Для перепродажи запросите реселлерскую лицензию.

Коммерческое приложение

Встраивайте генерацию текста, картинок, видео и звука в платные функции своего сервиса.

Лицензия для реселлера

Пришлите описание проекта и схему доступа. Запросите письменные условия использования и перепродажи.

Документы на сайте

Оферта, лицензионный договор и политика обработки данных доступны до подключения.

[Запросить реселлерскую лицензию](mailto:support@ailoot.ai) · [Оферта и лицензионный договор](https://ailoot.ai/legal/offer?lang=ru)

## Ailoot · Компания и портфель её проектов





Ailoot опирается на накопленный опыт работы, большую клиентскую базу, стабильный сервис и постоянный контроль KPI.





Компания и портфель её проектов: миллионы клиентов; продажи на миллиарды ежемесячно.





Этот опыт Ailoot использует для API-доступа к нейросетям в продуктах клиентов, агентах, приложениях и автоматизациях.
