Новинка: Nano Banana 2.1Попробовать модель
API Hubs

Видео

Генерация видео из изображения

Как превратить готовый кадр в видео: выбор модели, первый и последний кадры, перенос движения и промпты, сохраняющие исходный объект.

4 мин чтенияразделов: 12

Оживите фотографию товара, лист персонажа или готовую иллюстрацию. Укажите, что должно двигаться, а что — оставаться неизменным.

Как оживить фото в браузере

Для запуска войдите в аккаунт. Отдельный API-ключ для браузера не нужен.

  1. Откройте песочницу Wan 2.7 и загрузите фото в поле «URL изображений».
  2. В поле «Промпт» опишите движение, например: «Пар поднимается над чашкой, камера неподвижна».
  3. Перед запуском проверьте стоимость запроса и баланс. Если средств не хватает, пополните баланс.

Открыть песочницу Wan 2.7

Что с его помощью создают

ЗадачаЗачем начинать с кадраС чего начать
Движущийся предметный снимокпродукт уже утверждёнveo3.1-quality, wan2.7-video
Один персонаж в серии сценлицо должно сохранитьсяseedance-* с imageWithRoles
Переход до/послеизвестны оба края сценыpixverse-v6, wan2.7-video
Анимация логотипа или титратекст уже отрисован правильнолюбая модель, кадр как стартовый
Перенос реального движенияесть референсное видеоkling-3.0-motion-control
Анимация кадра Midjourneyсохраняется выбранный стильmidjourney-video

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

Какую модель выбрать

wan2.7-video бережно двигает стартовый кадр и при необходимости ведёт его к конечному. Начинайте с неё, когда продукт должен остаться похожим на фото.

veo3.1-fast / veo3.1-quality дают аккуратное движение и единственный путь к 4K, но могут сильнее отклоняться от исходника. Передавайте urls вместе с generationType.

seedance-* принимает до девяти изображений. Через imageWithRoles можно назначить first_frame и last_frame, а звук создать в том же проходе.

pixverse-v6 строит переход между firstFrameImage и lastFrameImage. Оба поля обязательны, а длительность такого перехода — только 5 или 8 секунд.

kling-3.0-motion-control переносит движение из референсного видео на персонажа с картинки. midjourney-video анимирует загруженный кадр или результат прежней задачи Midjourney.

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

С исходным изображением не нужно заново описывать всю сцену. Это заставляет модель перерисовывать уже готовые детали.

Плохо:

text
A matte-black espresso machine on a concrete counter with steam and morning light

Хорошо:

text
Steam rises and drifts left, the light slowly warms, camera pushes in very
slightly. Everything else stays still.
  • Назовите неподвижные элементы. Фраза camera locked off, product does not move особенно полезна для предметного кадра.
  • Просите одно движение. Наезд, панорама и смена света одновременно часто меняют сам предмет.
  • Лица и руки теряют сходство первыми. Сокращайте длительность и амплитуду, а для длинной сцены фиксируйте последний кадр.

Рецепты

Оживить сюрреалистичный кадр — veo3.1-quality, urls: [source], generationType: "frame":

text
A hyperrealistic macro photo of tiny, miniature surfers riding ocean waves
inside a rustic stone bathroom sink. A vintage brass faucet is running,
creating the perpetual surf. Surreal, whimsical, bright natural lighting.
The Nano Banana source frame used for the image-to-video example below.
The Nano Banana source frame used for the image-to-video example below.

Source: Google AI for Developers, used under CC BY 4.0; format and dimensions adapted.

text
A surreal, cinematic macro video. Tiny surfers ride perpetual, rolling waves
inside a stone bathroom sink. A running vintage brass faucet generates the
endless surf. The camera slowly pans across the whimsical, sunlit scene as the
miniature figures expertly carve the turquoise water.

В движущемся промпте описаны волны, сёрферы и медленная панорама, а ключевые визуальные признаки повторены для сохранения сцены.

Veo 3.1 turns the still sink scene into a controlled macro pan while preserving the miniature surfers and faucet.

Source: Google AI for Developers, used under CC BY 4.0; format and dimensions adapted.

Переход до/после — pixverse-v6, пустая и обставленная комната:

text
Smooth continuous transition between the two framings, no cuts, natural
lighting change

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

Сохранение персонажа — seedance-2.0 с первым и последним кадром:

text
The character turns from the window toward the camera and smiles. Room tone
and distant traffic. No cuts.

Перенос движения — kling-3.0-motion-control:

text
The character performs the motion from the reference video, keeping their own
clothing and appearance

About these samples. Ready-made examples are copied to our own storage only when their source permits reuse. The exact prompt appears above each result, and the original source and license are linked below the media.

Поля исходных медиа

Endpoint тот же, что в генерации видео из текста. Исходные изображения передаются в input; название поля зависит от модели.

Единого параметра image нет:

МодельПоле изображенияПримечание
veo3.1-fast, veo3.1-qualityurlsвместе с generationType
grok-imagine-1.5-videourlsмассив строк
seedance-*imageUrls или imageWithRolesдо 9 изображений
pixverse-v6imageUrls, пара first/last или imgReferencesрежим определяется по полям
wan2.7-videoimageUrls[start] или [start, end]
kling-3.0-motion-controlimageUrls + videoUrlsобязательны оба
midjourney-videoimageUrls или parentTaskIdровно один вариант

Референс должен быть доступен публично. Провайдер скачивает URL напрямую. Короткоживущая signed-ссылка, ресурс за логином и localhost завершатся ошибкой уже после валидации и списания; при failed средства вернутся.

Первый и последний кадры

Seedance использует массив объектов { url, role }:

json
{
"model": "seedance-2.0",
"input": {
"prompt": "The camera drifts left as the sun clears the ridge",
"imageWithRoles": [
{ "url": "https://example.com/dawn.jpg", "role": "first_frame" },
{ "url": "https://example.com/noon.jpg", "role": "last_frame" }
],
"resolution": "1080p",
"duration": 8,
"generateAudio": false
}
}

Pixverse принимает два скалярных поля, и нужны оба:

json
{
"model": "pixverse-v6",
"input": {
"prompt": "Slow dissolve between the two framings",
"firstFrameImage": "https://example.com/dawn.jpg",
"lastFrameImage": "https://example.com/noon.jpg",
"duration": 5,
"resolution": "720p"
}
}

Wan передаёт кадры в порядке [start, end]. В этом режиме prompt необязателен, а size игнорируется: пропорции берутся из входных файлов.

Как Pixverse выбирает режим

Переданные поляРежим
нет медиаtext-to-video
imageUrlsimage-to-video, используется первый URL
firstFrameImage + lastFrameImageпереход между кадрами
imgReferences (1–7 URL)объединение референсов
extendFromTaskIdпродолжение видео

size работает только в text-to-video и объединении референсов; в остальных режимах геометрию задаёт медиа.

Перенос движения с Kling

Нужны ровно по одному элементу в imageUrls и videoUrls, а также обязательный characterOrientation:

json
{
"model": "kling-3.0-motion-control",
"input": {
"prompt": "Studio backdrop, soft key light",
"imageUrls": ["https://example.com/character.png"],
"videoUrls": ["https://example.com/dance-reference.mp4"],
"characterOrientation": "image",
"resolution": "1080p"
}
}

При значении image ориентацию задаёт картинка, допустимая длина видео — 3–10 секунд. При video побеждает референсное видео длиной 3–30 секунд. Изображение JPG/JPEG/PNG может занимать до 10 МБ, видео MP4/MOV — до 100 МБ.

Видео Midjourney

Нужно передать ровно одно из полей: imageUrls с единственным первым кадром или parentTaskId успешной задачи midjourney.

json
{
"model": "midjourney-video",
"input": {
"prompt": "Gentle parallax drift toward the archway",
"imageUrls": ["https://example.com/still.png"],
"videoType": "vid_1.1_i2v_720",
"motion": "high",
"batchSize": 1
}
}

При использовании parentTaskId поле index выбирает плитку сетки 2×2 и принимает 0–3. У модели изображений Midjourney индексы отличаются: 1–4. animateMode: "auto" требует parentTaskId и index. Поле endUrl переключает модель на вариант start/end.

Полный цикл

sh
curl -X POST https://api.apihubs.ru/api/v1/generation/create \
-H "Authorization: Bearer sk-your-key" \
-H "Content-Type: application/json" \
-d '{
"model": "veo3.1-fast",
"input": {
"prompt": "The gulls lift off and the boat rocks in the swell",
"urls": ["https://example.com/harbour.jpg"],
"generationType": "frame",
"aspectRatio": "16:9"
}
}'

Сохраните data.taskId и проверяйте его раз в 10 секунд через GET /api/v1/task/status/{taskId}. При finished скачайте data.files[0].fileUrl; постоянное использование этой ссылки не допускается, поскольку она действует 24 часа. Вместо опроса можно передать webhook.

Ошибки, характерные для изображений

  • Недоступный URL. Строка проходит валидацию, но задача позднее становится failed, если провайдер получил 404 или таймаут.
  • Неверное имя поля. imageUrl вместо imageUrls или urls вместо ожидаемого imageUrls вернёт 400 invalid_input.
  • Слишком много изображений. Лимиты: 9 для Seedance, 7 для Pixverse imgReferences, 2 для Wan. Лишние элементы не обрезаются.
  • Люди в кадре. Реалистичные узнаваемые люди часто отклоняются фильтрами. Такая задача окончательно получает failed и возврат средств.

Следующие шаги

Запустите это со своим ключом

Выберите модель в каталоге API Hubs, проверьте цену и попробуйте её в браузере или через API.

Читать дальше