Руководство по использованию
Из статичных изображений товаров в короткие видео: grok-imagine/image-to-video на API hiapi
Снабжение контента для коротких видео — это проблема. Короткий ролик, готовый к публикации, раньше означал съёмку: время в студии, дизайн анимации, монтажёр. Но если вы уже ведёте каталог товаров для электронной коммерции, у вас есть готовое сырьё — тысячи и тысячи статичных изображений продуктов.grok-imagine/image-to-video (эндпоинт xAI Grok Imagine для генерации видео из изображений) превращает эти статичные изображения в кинематографичные ролики длительностью 6–30 секунд за один асинхронный вызов API, а обусловливание по референсным изображениям позволяет вашему товару оставаться похожим на ваш товар.
Это руководство — сквозной рабочий процесс на API hiapi: оживление одного каталожного статичного изображения, фиксация согласованности субъекта с помощью нескольких референсных изображений, выбор длительности и разрешения для экономики ленты, а также пакетная обработка всего каталога в очередь вертикальных коротких роликов. Каждый встроенный ниже ролик — это реальный, немонтированный первый вывод из работающего API — сгенерированный для этой статьи из статичных изображений нашей библиотеки материалов, с точными промптами и настройками рядом.
Модель, ограничения и цены
grok-imagine/image-to-video работает через асинхронный интерфейс задач hiapi (POST /v1/tasks). Схема входных данных, которую мы проверили на практике для этой статьи:
image_urls(массив, обязательный) — один или несколько публично доступных URL референсных изображений. Приватные или недоступные URL терпят неудачу на этапе нормализации, а не с ошибкой схемы, поэтому сначала разместите референсные изображения в публичном месте.prompt(строка, необязательный) — указания по движению, камере и атмосфере. Без промпта модель импровизирует; для продуктового контента вы всегда должны его предоставлять.duration(целое число, 6–30 секунд)resolution(480pили720p)aspect_ratio(1:1,2:3,3:2,16:9,9:16)
Нет полей motion_mode, seed или негативного промпта — неизвестные поля отклоняются с кодом 400. Всё управление движением осуществляется формулировкой промпта.
Одно поведение, которое мы встретили при генерации роликов для этой статьи: когда aspect_ratio не совпадает с собственным соотношением сторон референсного изображения, референсное изображение часто побеждает. Во всех трёх запусках ниже мы запрашивали 9:16; два квадратных исходных статичных изображения вернули квадратные ролики (960×960 и 544×544), а запуск, где первое референсное изображение было горизонтальным, выдал настоящий вертикальный 720×1280. Если вашей ленте гарантированно нужно 9:16, обрежьте референсное статичное изображение до 9:16 до отправки, а не полагайтесь на этот параметр.
Цены тарифицируются по выходным секундам, согласно странице тарифов hiapi на момент написания:
| Тариф | Цена за секунду | 6-секундный ролик | 15-секундный ролик | 30-секундный ролик |
|---|---|---|---|---|
| 480p | $0.0114 | $0.068 | $0.171 | $0.342 |
| 720p | $0.0214 | $0.128 | $0.321 | $0.642 |
Эта цена формирует весь рабочий процесс: один 6-секундный ролик-герой в 720p стоит около 13 центов, а черновик в 480p — примерно вдвое дешевле. Вы вполне можете позволить себе повторять итерации.
Отправка → опрос → скачивание
Жизненный цикл задачи — это отправка, опрос, скачивание. Отправка через curl:
curl -s -X POST https://api.hiapi.ai/v1/tasks \
-H "Authorization: Bearer $HIAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-imagine/image-to-video",
"input": {
"prompt": "Slow cinematic orbit around the bag, studio lighting glinting off the brass zippers, background stays clean, product unchanged.",
"image_urls": ["https://your-cdn.example.com/products/weekender.jpg"],
"duration": 6,
"resolution": "720p",
"aspect_ratio": "9:16"
}
}'
Вы сразу получите ID задачи:
{"code": 200, "data": {"taskId": "tk-hiapi-01KX2H8WMWQG99A2F97BREDPS6"}, "message": "success"}
Затем опрашивайте GET /v1/tasks/{taskId}, пока status не станет success, после чего скачайте output[0].url. Ниже — полный вспомогательный скрипт на Python — именно тот шаблон, которым были сгенерированы все ролики в этой статье:
import json, subprocess, time, os
API = "https://api.hiapi.ai/v1/tasks"
TOKEN = os.environ["HIAPI_API_KEY"]
def submit(input_fields: dict) -> str:
payload = {"model": "grok-imagine/image-to-video", "input": input_fields}
out = subprocess.run(
["curl", "-s", "-X", "POST", API,
"-H", f"Authorization: Bearer {TOKEN}",
"-H", "Content-Type: application/json",
"-d", json.dumps(payload)],
capture_output=True, text=True, timeout=70).stdout
data = json.loads(out)
if not (data.get("data") or {}).get("taskId"):
raise RuntimeError(f"submit failed: {out[:300]}")
return data["data"]["taskId"]
def wait(task_id: str, timeout_s: int = 1200) -> dict:
deadline = time.time() + timeout_s
while time.time() < deadline:
out = subprocess.run(
["curl", "-s", f"{API}/{task_id}",
"-H", f"Authorization: Bearer {TOKEN}"],
capture_output=True, text=True, timeout=40).stdout
task = json.loads(out)["data"]
if task["status"] == "success":
return task
if task["status"] == "fail":
raise RuntimeError(f"task failed: {task.get('error')}")
time.sleep(10)
raise TimeoutError(task_id)
task_id = submit({
"prompt": "...",
"image_urls": ["https://your-cdn.example.com/products/weekender.jpg"],
"duration": 6,
"resolution": "720p",
"aspect_ratio": "9:16",
})
task = wait(task_id)
video_url = task["output"][0]["url"]
subprocess.run(["curl", "-s", "-o", "clip.mp4", video_url], timeout=180)
Два эксплуатационных нюанса, которые нужно учитывать в продакшене:
output[0].url— это подписанная ссылка с ограниченным сроком действия (с временем истечения). Скачайте байты и перенесите их в собственное хранилище сразу после успешного завершения задачи — никогда не сохраняйте исходный URL задачи надолго.- Тарификация происходит в момент принятия задачи, поэтому перед массовой отправкой сначала выполните валидацию. Полезный приём: отправьте значение вне диапазона, например
"duration": 99— вы получите полную ошибку валидации схемы, а тарифицируемая задача не будет создана.
Одно статичное изображение → один ролик-герой
Самая частая операция: взять каталожное изображение продукта и придать ему непрерывное движение камеры. Продуктовая фотография по своей природе статична, поэтому задача промпта — добавить только одно правдоподобное движение и явно зафиксировать всё остальное:
Slow cinematic orbit around the burnt-orange canvas weekender bag, camera
circling smoothly from front to three-quarter view, studio lighting glinting
off the brass zippers, seamless white background stays clean and shadowless,
product perfectly sharp and unchanged, subtle premium e-commerce energy.
Реальный вывод — grok-imagine/image-to-video, 6 секунд @ 720p, одно референсное изображение. Первая генерация, без монтажа. Фактически выдано 960×960: квадратное исходное статичное изображение перекрыло наш запрос 9:16 (см. пояснение о соотношении сторон выше). Исходное статичное изображение ниже.

Шаблон промпта, который сохраняет продуктовые ролики правдоподобными:
- Один глагол движения камеры («облёт», «наезд», «перемещение»). Два движения в одном промпте дадут вам кадр с эффектом укачивания.
- Явно указывайте «продукт неизменен / идеально резкий». Модели генерации видео из изображений дрейфуют; указание модели, что субъект нельзя менять, значительно снижает деформацию логотипов, швов и фурнитуры.
- Указывайте момент материала («блики на латунных молниях») — световой блик, движущийся по металлу и коже, — именно то, что заставляет статичное изображение ощущаться как съёмка, а не как искажение.
- Фиксируйте фон («остаётся чистым и без теней»). Иначе модель изобретёт собственные декорации.
Несколько референсных изображений: фиксация субъекта
image_urls принимает более одного референсного изображения, и именно это отличает grok-imagine в продуктовой работе от одно-кадровых аниматоров. Передайте ему лайфстайл-изображение, которое вы хотите видеть в качестве сцены, плюс чистое изображение продукта в качестве страховки идентичности, и модель согласует их — сцена берётся из первого изображения, а точная отделка, ремни и молнии продукта привязываются ко второму:
The same burnt-orange weekender bag rests on a weathered wooden bench in a
sunlit loft; a gentle push-in as dust motes drift through warm window light,
soft shadows slide slowly across the bench, the bag and its dark leather trim
stay exactly consistent with the reference images, calm lifestyle-catalog mood.
Реальный вывод — grok-imagine/image-to-video, 6 секунд @ 720p, 9:16, два референсных изображения (лайфстайл-изображение на скамье + изображение продукта на белом фоне). Первая генерация, без монтажа.
Обратите внимание на фразу «согласовано с референсными изображениями» в промпте — при использовании нескольких референсных изображений явное указание этого помогает модели воспринимать дополнительные изображения как ограничения идентичности, а не как вторую сцену для смешивания. Это шаблон для ежедневных публикаций бренда: одна фотография (или генерация) продукта на каждый SKU, а затем её повторное использование в качестве якоря согласованности в каждом лайфстайл-ролике, который вы анимируете.
Длительность и экономика чернового тарифа
Длительность от 6 до 30 секунд, разрешение — вот где находится рычаг бюджета: цена за секунду в 480p примерно вдвое ниже, чем в 720p. Поскольку лента в любом случае агрессивно сжимает, разумный конвейер — делать черновики в 480p, а победителей перерендеривать в 720p. Более длинная длительность также даёт модели пространство для медленного развёртывания — ниже 12-секундный ролик чернового тарифа 480p с непрерывным атмосферным движением для статичного изображения чайной жестянки:
Moody slow dolly-in on the matte-black tea tin standing on slate, steam curls
up lazily behind it, a soft beam of morning light sweeps across the embossed
label, tiny tea leaves tumble gently onto the slate in the final seconds, dark
premium atmosphere, label text unchanged and legible.
Реальный вывод — grok-imagine/image-to-video, 12 секунд @ 480p, одно референсное изображение. Первая генерация, без монтажа (выдано квадратным, в соответствии с квадратным исходным статичным изображением). Стоимость: $0.137.
Рендеринг в 480p стоит $0.0114/секунду — весь 12-секундный ролик обошёлся всего в 13,7 центов. Достаточно дёшево, чтобы опробовать три варианта промпта для каждого продукта, заплатив по тарифу 720p только за тот, который вы действительно публикуете. Обратите внимание на «текст этикетки неизменен и читаем» в промпте: текст на упаковке — первое, что размывается в видео из изображений, и упоминание этого — ваша самая дешёвая мера защиты.
Пакетная обработка каталога
Всё вышесказанное линейно масштабируется, потому что задачи асинхронны: сначала отправьте весь пакет, затем опрашивайте. Минимальный пакетный обработчик для списка продуктов:
products = [
{"sku": "weekender-orange", "refs": ["https://cdn.example.com/weekender.jpg"],
"prompt": "Slow cinematic orbit around the bag, studio light on the brass zippers, background clean, product unchanged."},
{"sku": "tea-tin-black", "refs": ["https://cdn.example.com/tea-tin.jpg"],
"prompt": "Moody slow dolly-in, steam drifting, light sweeping the embossed label, label text unchanged."},
# ... 目录其余部分
]
jobs = []
for p in products:
tid = submit({
"prompt": p["prompt"],
"image_urls": p["refs"],
"duration": 6,
"resolution": "480p", # 草稿档
"aspect_ratio": "9:16",
})
jobs.append((p["sku"], tid))
for sku, tid in jobs:
task = wait(tid)
url = task["output"][0]["url"]
subprocess.run(["curl", "-s", "-o", f"{sku}.mp4", url], timeout=180)
print(f"{sku}: done")
Практические советы по пакетной обработке для запуска этого конвейера:
- Сначала отправляйте, потом опрашивайте. Каждый рендер занимает несколько минут и выполняется на сервере параллельно; сериализация «отправка-ожидание-отправка» тратит эту параллельность впустую.
- Держите один плоский шаблон промпта на каждый тип контента (облёт для продуктовых изображений, наезд для лайфстайл-изображений), затем подставляйте названия продуктов. Согласованность всей ленты важнее изощрённости каждого отдельного ролика.
- Проверка бюджета: каталог из 50 SKU с черновиками 6 секунд/480p обойдётся в 50 × $0.068 ≈ $3.42. Повышение лучших десяти до 720p добавит десять × $0.128 ≈ $1.28. Целый месяц ежедневных продуктовых коротких роликов стоит меньше часа студийной съёмки.
Замечания по публикации коротких видео
- Для вертикали нужны вертикальные референсные изображения. Как упомянуто выше, соотношение сторон референсного изображения часто перекрывает
aspect_ratio— если ролик идёт в ленту, обрежьте статичное изображение до 9:16 перед отправкой. Обрезка готового квадратного рендера до вертикали потеряет большую часть пикселей. - Первая секунда — это крючок — промпты, которые запускают движение немедленно («облёт камеры», «наезд»), превосходят медленные плавные появления по показателю досмотра.
- Короткие видео поставляются с атмосферной звуковой дорожкой, сгенерированной моделью. Каждый наш вывод содержит AAC-поток — некоторые ролики имеют тонкую студийную атмосферу, другие почти беззвучны. Нет полей ввода для управления этим, поэтому при публикации планируйте заменить её собственной музыкой или озвучкой, а не считать её готовым саундтреком.
- Дружественность к цикличности: облёты и световые переливы зацикливаются гораздо лучше, чем ролики, заканчивающиеся раскрытием. Для автозацикливающихся лент (Shorts, Reels) шаблон облёта выше воспроизводится бесшовно.
Часто задаваемые вопросы
Сколько времени занимает рендеринг? Ролики в этой статье длительностью 6 секунд рендерились по несколько минут каждый; 12-секундный ролик немного дольше. Относитесь к этому как к асинхронной очереди, а не интерактивному вызову — отправляйте пакетами и опрашивайте.
Могу ли я использовать сгенерированные изображения в качестве референсных? Да. Референсный URL должен быть всего лишь публично доступным. Все три исходных статичных изображения в этой статье сами по себе являются продуктовыми изображениями, сгенерированными через API (из запусков seedream-5.0-lite), взятыми из нашей библиотеки материалов — полностью синтетический конвейер от статичного изображения к видео.
А как насчёт 1080p или более 30 секунд? Этот эндпоинт ограничен 720p и 30 секундами. Для лент коротких видео это как раз оптимальный диапазон; если вам нужно более высокое разрешение, увеличьте его на постобработке или посмотрите каталог моделей для текущих вариантов.
Чем это отличается от grok-imagine-1.5/image-to-video? Эндпоинт предварительной версии 1.5 обменивает диапазон на качество движения: длительность 1–15 секунд, улучшенное движение, та же цена за секунду. Этот эндпоинт 1.0 даёт вам 6–30 секунд. Мы рассмотрели основы 1.5 в отдельном подробном руководстве.
Есть ли версия для генерации видео из текста? Да — grok-imagine/text-to-video, тот же интерфейс задач, только ввод промпта. Когда важна согласованность бренда/продукта, генерация видео из изображений — правильный выбор; когда вам нужно генерировать материалы с нуля, используйте генерацию видео из текста.
Если у вас есть статичные изображения продуктов и ключ API, вы в одном POST /v1/tasks от первого ролика для ленты: получите ключ в панели управления, начните со страницы модели grok-imagine/image-to-video, анимируйте одно изображение продукта с помощью промпта облёта выше — при цене 13 центов за черновик самый быстрый способ изучить эту модель — просто запустить её.
Похожие статьи
Все статьи →-
Руководство по использованию
Руководство по началу работы с seedream-5.0-pro/image-to-image: возможности, цены и ключевые моменты интеграции
Границы возможностей модели редактирования изображений ByteDance, принципы тарификации и практика инженерной интеграции
-
Руководство по использованию
Руководство по использованию seedream-5.0-pro text-to-image: границы возможностей, интеграция API и контроль затрат
Практический взгляд для разработчиков: от ключевых параметров до оценки стоимости $0.05 за изображение
-
Руководство по использованию
Руководство по началу работы с Hailuo 2.3 Fast для генерации видео из изображений: границы возможностей, цены и практика интеграции
Ключевые моменты выбора и интеграции модели MiniMax для генерации видео из изображений для разработчиков