happyhorse-1.1-i2v
Модель оживления изображения: исходная картинка задаёт первый кадр, а описание направляет дальнейшее движение. Создаёт короткий видеоролик с возможностью звукового сопровождения.
- Ailoot · Видео
POST /v1/videos/generationshappyhorse-1.1-i2v - Ailoot · Видео
POST /v1/videos/generationshappyhorse-i2v - Ailoot · Видео
POST /v1/videos/generationshappyhorse-i2v-latest
О модели
Описание раскрывает возможности модели. Доступные в 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-i2vhappyhorse-1.1-i2vhappyhorse-i2vhappyhorse-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
POST /v1/videos/generations- Выход
- 0,18 $ за секунду в 1080p
- Выход
- 0,07 $ за секунду в 480p
- Выход
- 0,14 $ за секунду в 720p
Ailoot резервирует расчётную сумму перед запросом. После получения результата списывает итоговую плату по измеренному расходу. Для окончательного списания за потоковый ответ используется итоговая запись расхода. Как работают резервирование и расчёт →
Примеры запросов
Ailoot · Видео
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}/contentGET /v1/videos/generations/{request_id}/content
Проверить статус задачи
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
Сохраните все готовые материалы
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
Чтение другого содержимого
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, happyhorse-i2v, happyhorse-i2v-latest
Псевдонимы путей метода
Используйте пути методов, указанные выше.
Связанные ID для вызова
Ailoot · Видео POST /v1/videos/generations happyhorse-i2v
happyhorse-i2vhappyhorse-1.1-i2vhappyhorse-i2vhappyhorse-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
POST /v1/videos/generations- Выход
- 0,18 $ за секунду в 1080p
- Выход
- 0,07 $ за секунду в 480p
- Выход
- 0,14 $ за секунду в 720p
Ailoot резервирует расчётную сумму перед запросом. После получения результата списывает итоговую плату по измеренному расходу. Для окончательного списания за потоковый ответ используется итоговая запись расхода. Как работают резервирование и расчёт →
Примеры запросов
Ailoot · Видео
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}/contentGET /v1/videos/generations/{request_id}/content
Проверить статус задачи
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
Сохраните все готовые материалы
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
Чтение другого содержимого
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, happyhorse-i2v, happyhorse-i2v-latest
Псевдонимы путей метода
Используйте пути методов, указанные выше.
Связанные ID для вызова
Ailoot · Видео POST /v1/videos/generations happyhorse-i2v-latest
happyhorse-i2v-latesthappyhorse-1.1-i2vhappyhorse-i2vhappyhorse-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
POST /v1/videos/generations- Выход
- 0,18 $ за секунду в 1080p
- Выход
- 0,07 $ за секунду в 480p
- Выход
- 0,14 $ за секунду в 720p
Ailoot резервирует расчётную сумму перед запросом. После получения результата списывает итоговую плату по измеренному расходу. Для окончательного списания за потоковый ответ используется итоговая запись расхода. Как работают резервирование и расчёт →
Примеры запросов
Ailoot · Видео
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}/contentGET /v1/videos/generations/{request_id}/content
Проверить статус задачи
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
Сохраните все готовые материалы
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
Чтение другого содержимого
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, happyhorse-i2v, happyhorse-i2v-latest
Псевдонимы путей метода
Используйте пути методов, указанные выше.
Связанные ID для вызова
FAQ · happyhorse-1.1-i2v
- Какие входные данные и результаты доступны?
POST /v1/videos/generations·happyhorse-1.1-i2v:text,image→videoPOST /v1/videos/generations·happyhorse-i2v:text,image→videoPOST /v1/videos/generations·happyhorse-i2v-latest:text,image→video- Какие поля использует запрос?
POST /v1/videos/generations·happyhorse-1.1-i2v:model,prompt,duration,resolution,image_urlsPOST /v1/videos/generations·happyhorse-i2v:model,prompt,duration,resolution,image_urlsPOST /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:15POST /v1/videos/generations·happyhorse-i2v:duration.minimum:3;duration.maximum:15POST /v1/videos/generations·happyhorse-i2v-latest:duration.minimum:3;duration.maximum:15