GPT-6 Sol и Claude Opus 5.5 уже доступныGPT-6 Sol вдвое дешевле 5.6 Sol

HappyHorse 1.1 из изображения в видео: API и 5 реальных клипов

Один скрипт отправляет снимок, опрашивает задачу и сохраняет MP4. Поля, сюрпризы водяного знака и звуковой дорожки и 5 клипов, сделанных 2 ноября 2026 года.

Kiki, OmniaKey COO11 мин чтения
На этой странице

Чтобы оживить снимок с помощью HappyHorse 1.1 из изображения в видео, отправьте его как first_frame на https://api.omniakey.com/v1/media/tasks с ID модели happyhorse-1.1-i2v, опросите задачу и скачайте MP4. Наши пять клипов по 5 секунд в 720P заняли от 92 до 158 секунд 2 ноября 2026 года. В каждом звучала музыка, которую мы не заказывали, а настройка по умолчанию добавляет водяной знак "Happy Horse".

Короткий ответ

  • Запрос: модель happyhorse-1.1-i2v, операция image_to_video и ровно один first_frame в input.media.
  • Соотношение сторон: клип повторяет снимок, потому что поля ratio нет.
  • Длительность и размер: от 3 до 15 секунд в 480P, 720P или 1080P; передавайте resolution каждый раз, потому что у Alibaba по умолчанию 1080P.
  • Водяной знак: включён по умолчанию, отключается через watermark: false.
  • Звук: во всех пяти клипах была музыка, API Alibaba не перечисляет переключателя звука, а ffmpeg убирает дорожку.

Что нужно перед первым вызовом HappyHorse 1.1 из изображения в видео?

Три вещи: ключ, Python 3 и снимок, который проходит правила Alibaba.

  • Ключ в OMNIAKEY_API_KEY. Скрипт отправляет его как Bearer-токен, поэтому в коде его нет.
  • Python 3 без установки чего-либо. Скрипт использует только стандартную библиотеку.
  • Снимок, который соответствует справочнику API изображения в видео от Alibaba: JPEG, JPG, PNG или WEBP; ширина и высота не меньше 300 пикселей; до 20 MB; соотношение сторон от 1:2.5 до 2.5:1. Alibaba не указывает максимум пикселей.

Сложность в размере: встроенный снимок идёт внутри тела запроса, а оно должно укладываться в 1 MiB вместе с Base64 (обзор медиа-API OmniaKey, проверено 2 ноября 2026 года). Скрипт останавливается выше 700 KB; если снимок больше, уменьшите его или передайте публичный HTTPS-адрес. Наш снимок 2K весил 2 254 819 байт, и эта команда macOS сжала его до 92 212 байт:

bash
sips -s format jpeg -s formatOptions 85 -Z 1280 still.jpg --out still-small.jpg

Какие поля принимает запрос?

Девять полей определяют задачу: три на верхнем уровне, два внутри input и четыре внутри parameters.

ПолеЗначениеПримечания
modelhappyhorse-1.1-i2vID модели 1.1 для изображения в видео
typevideoтип файла, который создаёт задача
operationimage_to_videoимя без префикса
input.promptтекстOmniaKey требует его, API Alibaba считает необязательным; до 5,000 некитайских или 2,500 китайских символов, более длинный текст обрезается
input.mediaровно один {"type": "first_frame", "url": ...}публичный HTTPS-адрес или data URI
parameters.resolution480P, 720P или 1080Pпередавайте всегда: у Alibaba по умолчанию 1080P
parameters.durationцелые секунды, от 3 до 15в OmniaKey обязательное
parameters.watermarktrue (по умолчанию) или falsefalse убирает текст "Happy Horse"
parameters.seedот 0 до 2147483647одинаковый seed тоже не гарантирует тот же клип

Четыре детали легко пропустить.

  • Поля ratio нет: клип сохраняет соотношение сторон снимка (справочник API изображения в видео от Alibaba, проверено 2 ноября 2026 года).
  • На страницах Alibaba нет поля негативного промпта.
  • Каждый вызов создания требует заголовок Idempotency-Key. Повтор с тем же телом возвращает исходную задачу и никогда не списывает дважды; с другим телом приходит 409 idempotency_key_reused (документация видео-API OmniaKey, проверено 2 ноября 2026 года).
  • Размер вывода меняется: в документации OmniaKey снимок 1200×630 в 720P возвращается как 1324×696.

Скрипт на Python

Это тот самый файл, который мы запускали, только со стандартной библиотекой.

python
"""Animate one still with HappyHorse 1.1 image-to-video through the OmniaKey media API.

Usage:
    export OMNIAKEY_API_KEY="your-omniakey-api-key"
    python3 hh_i2v.py still.jpg "The camera slowly orbits the headphones." clip.mp4

The still can be a local JPEG or PNG (sent inline as a data URL) or a public https:// URL.
"""
import base64
import json
import mimetypes
import os
import sys
import time
import urllib.error
import urllib.request
import uuid

API = "https://api.omniakey.com/v1/media/tasks"
HEADERS = {
    "Authorization": "Bearer " + os.environ["OMNIAKEY_API_KEY"],
    "Content-Type": "application/json",
    "User-Agent": "happyhorse-i2v-example/1.0",
}
POLL_SECONDS = 10
GIVE_UP_AFTER = 15 * 60  # most clips finish in 1-5 minutes


def call(method, url, body=None, extra_headers=None):
    data = json.dumps(body).encode() if body is not None else None
    req = urllib.request.Request(url, data=data, method=method, headers={**HEADERS, **(extra_headers or {})})
    for attempt in range(3):
        try:
            with urllib.request.urlopen(req, timeout=60) as resp:
                return json.load(resp)
        except urllib.error.HTTPError as err:
            sys.exit(f"HTTP {err.code}: {err.read().decode(errors='replace')}")
        except (urllib.error.URLError, TimeoutError, ConnectionError) as err:
            if attempt == 2:
                raise
            print("network error, retrying:", err)  # a retried POST keeps its Idempotency-Key
            time.sleep(5)


def first_frame_url(image):
    if image.startswith("https://"):
        return image
    raw = open(image, "rb").read()
    if len(raw) > 700_000:  # Base64 adds a third, and the whole request must stay under 1 MiB
        sys.exit("The still is over 700 KB. Resize it or pass a public https:// URL instead.")
    mime = mimetypes.guess_type(image)[0] or "image/jpeg"
    return f"data:{mime};base64,{base64.b64encode(raw).decode()}"


def main(image, prompt, out_path):
    task = call("POST", API, {
        "model": "happyhorse-1.1-i2v",
        "type": "video",
        "operation": "image_to_video",
        "input": {"prompt": prompt, "media": [{"type": "first_frame", "url": first_frame_url(image)}]},
        "parameters": {"resolution": "720P", "duration": 5, "watermark": False},  # watermark is on by default
    }, {"Idempotency-Key": str(uuid.uuid4())})
    print("task", task["id"], task["status"])

    start = time.time()
    while task["status"] in ("queued", "processing"):
        if time.time() - start > GIVE_UP_AFTER:
            sys.exit(f"Still {task['status']} after 15 minutes. Do not submit it again; "
                     f"check it later with GET {API}/{task['id']}")
        time.sleep(POLL_SECONDS)
        task = call("GET", f"{API}/{task['id']}")
    print(task["status"], "after", round(time.time() - start), "s")
    if task["status"] != "succeeded":
        sys.exit(json.dumps(task.get("error") or task))

    # The signed download URL is short-lived, so save the file right away.
    req = urllib.request.Request(task["assets"][0]["url"], headers={"User-Agent": HEADERS["User-Agent"]})
    with urllib.request.urlopen(req, timeout=300) as resp, open(out_path, "wb") as f:
        f.write(resp.read())
    print("saved", out_path)


if __name__ == "__main__":
    main(*sys.argv[1:4])

Сохраните его как hh_i2v.py и запустите:

bash
export OMNIAKEY_API_KEY="your-omniakey-api-key"
python3 hh_i2v.py still.jpg "The camera slowly orbits the headphones." clip.mp4

Наш запуск с watermark: false вывел это:

text
task task_QqK3ZdAd72vmK1DSOuOxXSytBSaJ244v queued
succeeded after 91 s
saved data/clips/c5-orbit-nowm.mp4

В скрипте важны пять вещей.

  • Он опрашивает задачу каждые 10 секунд.
  • Он сдаётся через 15 минут с сообщением не отправлять задачу снова.
  • При сетевой ошибке он повторяет попытку, и повтор создания сохраняет Idempotency-Key, поэтому вы получаете исходную задачу, а не второе списание.
  • Он сохраняет файл сразу после успеха, потому что подписанная ссылка на скачивание живёт недолго.
  • Он отправляет User-Agent в каждом запросе: стандартный User-Agent Python получил HTTP 403 с error code: 1010 от Cloudflare в нашем тесте Kling 3.0 API 29 октября 2026 года.

Пять клипов, которые мы сделали

Мы сгенерировали четыре снимка в Nano Banana 2.1 и прогнали изображение с наушниками дважды, чтобы проверить водяной знак. Так получилось пять клипов, все по 5 секунд и в 720P, 2 ноября 2026 года. Клипы с портретом, озером и лисой сделаны с настройками по умолчанию, поэтому водяной знак виден в этих кадрах.

Облёт наушников

prompt
The camera slowly orbits about 90 degrees to the right around the headphones while a soft band of light sweeps across the ear cups. The headphones stay perfectly still on the pedestal. Smooth, steady product-commercial camera move.
Восемь кадров с чёрными наушниками на каменном постаменте. Камера идёт от одной стороны к другой, а в средних кадрах позади появляется изогнутый край фона.
Восемь кадров клипа с облётом по порядку, от 0.0 до 4.85 секунды, водяной знак в false. HappyHorse 1.1 через API OmniaKey, изображение в видео, 5 секунд, 720P, сделано 2 ноября 2026 года.

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

Тот же промпт на том же снимке мы прогнали дважды, один раз с настройками по умолчанию и один раз с watermark: false, и в углу видна разница.

Правый нижний угол двух клипов. Сверху виден белый текст Happy Horse, снизу, с водяным знаком в false, угол чистый.
Правый нижний угол последнего кадра каждого клипа с облётом, увеличен. Сверху: настройки по умолчанию. Снизу: водяной знак в false. HappyHorse 1.1 через API OmniaKey, изображение в видео, 5 секунд, 720P, сделано 2 ноября 2026 года.

Портрет под дождём

prompt
She slowly turns her head toward the camera and gives a small smile while light rain keeps falling. The neon signs behind her flicker softly and the camera pushes in a little.
Четыре кадра с женщиной в жёлтом дождевике на мокрой неоновой улице. Она поворачивается от взгляда влево к камере и улыбается, а план переходит от пояса к крупному лицу.
Четыре кадра клипа с портретом под дождём по порядку, от 0.0 до 4.85 секунды, с водяным знаком по умолчанию. HappyHorse 1.1 через API OmniaKey, изображение в видео, 5 секунд, 720P, сделано 2 ноября 2026 года.

Она поворачивается от взгляда влево к камере и улыбается, в том порядке, который задал промпт, и водяной знак есть в каждом кадре. Промпт просил лёгкий наезд, и план идёт от пояса до крупного плана лица.

Наезд на озере

prompt
Slow aerial push-in over the water toward the rowboat. Mist drifts across the lake, the boat rocks gently and small ripples spread from its hull, and the golden light grows a little brighter.
Восемь кадров деревянной лодки на туманном озере на рассвете. Камера приближается, пока лодка не занимает почти весь кадр, а от корпуса расходятся круги по воде.
Восемь кадров клипа с озером по порядку, от 0.0 до 4.85 секунды, с водяным знаком по умолчанию. HappyHorse 1.1 через API OmniaKey, изображение в видео, 5 секунд, 720P, сделано 2 ноября 2026 года.

Камера приближается к лодке, как и просили. К концу лодка занимает почти весь кадр, а от корпуса расходятся круги по воде.

Иллюстрация с лисой

prompt
The fox turns a page of the book with its paw and its ears twitch. A few orange leaves drift down from the tree and the branches sway gently. Keep the flat illustration style.
Четыре кадра плоской иллюстрации: лиса читает под осенним деревом. Оранжевые листья падают, а вид приближается от всего дерева к лисе.
Четыре кадра клипа с лисой по порядку, от 0.0 до 4.85 секунды, с водяным знаком по умолчанию. HappyHorse 1.1 через API OmniaKey, изображение в видео, 5 секунд, 720P, сделано 2 ноября 2026 года.

Плоский стиль иллюстрации держится от первого кадра до последнего, пока падают оранжевые листья. Камера приближается от всего дерева к крупному виду лисы, чего промпт не просил; страницы книги приподнимаются, но кадры не подтверждают, что лапа переворачивает одну.

Слева: отправленный снимок лисы, видно всё дерево. Справа: последний кадр клипа, гораздо ближе к лисе и раскрытой книге, в том же плоском стиле, с водяным знаком Happy Horse.
Слева: снимок, отправленный первым кадром. Справа: последний кадр клипа с лисой. HappyHorse 1.1 через API OmniaKey, изображение в видео, 5 секунд, 720P, сделано 2 ноября 2026 года.

В 2 из наших 4 промптов камера двигалась сильнее, чем мы просили, поэтому проверяйте кадрирование коротким тестом. Клип на 3 секунды в 480P — самый короткий и низкий уровень в документации (справочник API изображения в видео от Alibaba, проверено 2 ноября 2026 года).

Что показали измерения файлов

КлипФорматПикселиКадрыВремяБайты
Облёт, по умолчанию16:91286×716123128 с1 486 548
Облёт, watermark: false16:91286×71612198 с1 320 527
Портрет под дождём9:16716×1286123158 с2 108 577
Озеро16:91286×716123131 с2 691 558
Лиса1:1960×96012392 с2 405 557

Каждый файл сообщает 5.16 секунды, хотя мы просили 5: это звуковая дорожка, а видеодорожка идёт 5.13 секунды при 123 кадрах и 5.04 секунды при 121. Все пять — H.264 с 24 fps и двухканальная дорожка AAC, и скрипт поиска склеек не нашёл ни одной.

Наши клипы заняли от 92 до 158 секунд от отправки до скачивания, против 1–5 минут, которые документация Alibaba даёт задачам изображения в видео (справочник API изображения в видео от Alibaba, проверено 2 ноября 2026 года). Мы не проверяли 480P, 1080P, другие длительности, seed, публичный адрес изображения, HappyHorse 1.0 и собственный эндпоинт Alibaba. Чтобы выбрать между моделями, посмотрите HappyHorse 1.1 против Seedance 2.0 и HappyHorse 1.1 против Kling 3.0. Чтобы повторить клип без кода, HappyHorse 1.1 есть в ИИ-генераторе видео.

Почему в клипах есть звук?

HappyHorse 1.1 добавил музыку во все пять клипов, хотя ни один наш промпт её не просил. Никто их не слушал: мы попросили Gemini 3.8 Flash через API OmniaKey описать каждую дорожку.

КлипЧто описал модельСредняя громкость
Облёт, по умолчанию"Ритмичный хип-хоп-бит с синкопированной перкуссией, хлопками и мягкими аккордами синтезатора."−19.5 dB
Облёт, watermark: false"Спокойная ритмичная электронная музыка с ровным битом и мелодичными тонами синтезатора"−20.5 dB
Портрет под дождём"Медленная, меланхоличная и нежная фортепианная мелодия с мягкой атмосферной подложкой"−22.6 dB
Озеро"Медленная, нежная и сентиментальная фортепианная мелодия"−20.2 dB
Лиса"Спокойная, мягкая эмбиент-мелодия на нежных колокольчиковых тонах", плюс "хруст шагов по гравию"−27.4 dB

Он не сообщил о голосе ни в одном клипе. Тот же промпт и тот же снимок, прогнанные дважды, дали две разные дорожки.

В справочнике Alibaba по изображению в видео нет поля звука и варианта без звука, хотя примечание к версии 1.1 упоминает синхронизацию звука и изображения (страница новых моделей Alibaba, проверено 2 ноября 2026 года). Чтобы получить файл без звука, уберите дорожку после скачивания:

bash
ffmpeg -i clip.mp4 -an -c:v copy silent.mp4

Мы прогнали это на клипе с watermark: false, и в результате есть видеодорожка и нет звуковой. Картинка остаётся точно такой же, потому что -c:v copy копирует поток вместо повторного кодирования.

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

В OmniaKey подписанная ссылка на MP4 живёт около 1 часа, а запись задачи хранится 24 часа; опросите задачу снова, чтобы получить свежий адрес (обзор медиа-API OmniaKey, проверено 2 ноября 2026 года). В собственном API Alibaba адрес видео и ID задачи живут по 24 часа, после чего запрос возвращает UNKNOWN, а файла уже нет. Скачивайте сразу после успеха задачи.

Какие ошибки вас ждут?

Ни один из наших пяти запусков не завершился ошибкой, поэтому список взят из документации видео-API OmniaKey, проверенной 2 ноября 2026 года.

СтатусЧто означаетЧто делать
400 invalid_requestтело запроса повреждено или в задаче нет input.promptпроверьте форму запроса выше
400 model_price_errorдлительность вне диапазона модели или разрешение без ценыиспользуйте поддерживаемые длительность и разрешение
403 model_not_allowedв ключе или группе нет этой моделипроверьте доступ ключа к модели
409 idempotency_key_reusedтот же ключ уже отправляли с другим теломповторяйте ключ только при одинаковых повторах
503 no_available_channelсейчас нет канала для модели или операциипопробуйте позже или посмотрите в панели

Задача, закончившаяся с failed, возвращается автоматически, поэтому отклонённый рендер стоит только вашего времени (обзор медиа-API OmniaKey, проверено 2 ноября 2026 года).

Ошибка, которой стоит избегать, — читать тайм-аут на своей стороне как провал задачи. Опрашивайте тот же ID задачи; повторная отправка запускает вторую задачу и второе списание. Если всё же отправляете снова, сохраните тот же Idempotency-Key и то же тело, и вы получите исходную задачу.

Сколько стоит клип HappyHorse 1.1?

Клип на 5 секунд в 720P стоит $0.70 по прайс-листу Alibaba в Сингапуре. Вот цены Alibaba за секунду со её страницы цен, проверенной 2 ноября 2026 года:

РазрешениеСингапурПекин и Global
480P$0.07$0.0618845
720P$0.14$0.123769
1080P$0.18$0.165026

Счёт — это цена за секунду, умноженная на секунды вывода. Неудачные запросы не оплачиваются. В Сингапуре есть ещё бесплатная квота 10 секунд, действующая 90 дней. На странице цен цены Global действуют для Франкфурта, Виргинии и Токио.

OmniaKey считает по секундам отрендеренного вывода и списывает заранее при создании задачи, а неудачные и отменённые задачи возвращаются автоматически; актуальные тарифы смотрите на странице HappyHorse 1.1.

Можно ли обращаться к Alibaba Cloud напрямую?

Да. HappyHorse работает на Alibaba Cloud Model Studio, с региональными эндпоинтами для Сингапура, США (Виргиния), Пекина, Франкфурта и Токио (справочник API изображения в видео от Alibaba, проверено 2 ноября 2026 года). Наши запуски шли через API OmniaKey, поэтому дальше — из документации Alibaba.

  • Создавайте через POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/video-generation/video-synthesis для Сингапура.
  • Отправляйте заголовок X-DashScope-Async: enable, иначе запрос упадёт с "current user api does not support synchronous calls".
  • Опрашивайте GET .../api/v1/tasks/{task_id} примерно каждые 15 секунд; статус проходит через PENDING, RUNNING, SUCCEEDED, FAILED, CANCELED, UNKNOWN.
  • Держите модель, эндпоинт и ключ в одном регионе, потому что вызовы между регионами падают.
  • Один ключ получает 5 запросов в секунду и 5 одновременных задач (страница лимитов Alibaba, проверено 2 ноября 2026 года).

Страница цен упоминает Токио, а страница лимитов не перечисляет там изображение в видео 1.1, поэтому Токио остаётся неподтверждённым.

Частые вопросы

Нужен ли промпт для HappyHorse изображение в видео?

В OmniaKey да: задача без input.prompt получает 400 invalid_request (документация видео-API OmniaKey, проверено 2 ноября 2026 года). Собственный API Alibaba считает промпт необязательным и берёт только первый кадр. В обоих случаях называйте движение и ход камеры, как в наших промптах выше.

Как убрать водяной знак Happy Horse?

Отправьте parameters.watermark: false. Значение по умолчанию true рисует маленький белый текст "Happy Horse" в правом нижнем углу; наш второй клип с облётом, отправленный с false, вернулся чистым.

Как задать соотношение сторон?

Обрежьте снимок. У изображения в видео нет поля ratio, и клип следует форме первого кадра, поэтому снимок 16:9 дал клип 16:9, а портрет дал клип 9:16. Держите обрезку в пределах от 1:2.5 до 2.5:1.

Существует ли HappyHorse 1.5?

Ничего после 1.1 нет в списке моделей, таблицах цен и на странице жизненного цикла Alibaba на 2 ноября 2026 года, а самая новая версия на этих страницах — happyhorse-1.1-i2v, выпущенная 16 июня 2026 года. Некоторые сайты используют название "Happy Horse 1.5".

HappyHorse 1.1 лучше 1.0 для изображения в видео?

Alibaba говорит, что 1.1 улучшает качество картинки, передачу движения и согласованность между клипами, а на странице цен уровень 480P есть только у 1.1. Версия 1.1 вышла 16 июня 2026 года, а 1.0 — 22 апреля 2026 года. По тарифу Alibaba в Сингапуре 1080P стоит $0.18 за секунду у 1.1 против $0.24 у 1.0.

Проверенные источники

Собственная документация OmniaKey, проверено 2 ноября 2026 года: видео-API и обзор медиа-API.

Модели в этой статье

HappyHorse 1.1изображение в видеоИИ-видеовидео APIPython

Похожие статьи

Недавние статьи

Популярные руководства