Видео
Генерация видео из изображения
Как превратить готовый кадр в видео: выбор модели, первый и последний кадры, перенос движения и промпты, сохраняющие исходный объект.
Text-to-video придумывает всё, а image-to-video сохраняет уже созданное. Поэтому в продакшене часто используют именно второй подход: у вас есть утверждённая фотография продукта, лист персонажа или главный кадр съёмки, и нужен не новый вариант, а движение в существующем изображении.
Endpoint тот же, что в генерации видео из текста. Отличается
только input, в котором передаются исходные изображения. Название поля
зависит от модели; ошибка в нём — самая частая причина ответа 400.
Что с его помощью создают
| Задача | Зачем начинать с кадра | С чего начать |
|---|---|---|
| Движущийся предметный снимок | продукт уже утверждён | veo3.1-quality, wan2.7-video |
| Один персонаж в серии сцен | лицо должно сохраниться | doubao-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.
doubao-seedance-* принимает до девяти изображений. Через
imageWithRoles можно назначить first_frame и last_frame, а звук создать
в том же проходе.
pixverse-v6 строит переход между firstFrameImage и lastFrameImage.
Оба поля обязательны, а длительность такого перехода — только 5 или 8 секунд.
sora2 / sora2-pro продолжают мир за пределами кадра на 10–25 секунд.
Это подходит для «что случится дальше», но хуже работает при запрете любых
изменений.
kling-3.0-motion-control переносит движение из референсного видео на
персонажа с картинки. midjourney-video анимирует загруженный кадр или
результат прежней задачи Midjourney.
Промпт описывает изменение
С исходным изображением не нужно заново описывать всю сцену. Это заставляет модель перерисовывать уже готовые детали.
Плохо:
A matte-black espresso machine on a concrete counter with steam and morning light
Хорошо:
Steam rises and drifts left, the light slowly warms, camera pushes in veryslightly. Everything else stays still.
- Назовите неподвижные элементы. Фраза camera locked off, product does not move особенно полезна для предметного кадра.
- Просите одно движение. Наезд, панорама и смена света одновременно часто меняют сам предмет.
- Лица и руки теряют сходство первыми. Сокращайте длительность и амплитуду, а для длинной сцены фиксируйте последний кадр.
Рецепты
Оживить сюрреалистичный кадр — veo3.1-quality, urls: [source],
generationType: "REFERENCE_2_VIDEO":
A hyperrealistic macro photo of tiny, miniature surfers riding ocean wavesinside a rustic stone bathroom sink. A vintage brass faucet is running,creating the perpetual surf. Surreal, whimsical, bright natural lighting.

Source: Google AI for Developers, used under CC BY 4.0; format and dimensions adapted.
A surreal, cinematic macro video. Tiny surfers ride perpetual, rolling wavesinside a stone bathroom sink. A running vintage brass faucet generates theendless surf. The camera slowly pans across the whimsical, sunlit scene as theminiature figures expertly carve the turquoise water.
В движущемся промпте описаны волны, сёрферы и медленная панорама, а ключевые визуальные признаки повторены для сохранения сцены.
Source: Google AI for Developers, used under CC BY 4.0; format and dimensions adapted.
Переход до/после — pixverse-v6, пустая и обставленная комната:
Smooth continuous transition between the two framings, no cuts, naturallighting change
Оба кадра должны быть сняты из одной точки, иначе интерполяция будет выглядеть неестественно.
Сохранение персонажа — doubao-seedance-2.0 с первым и последним кадром:
The character turns from the window toward the camera and smiles. Room toneand distant traffic. No cuts.
Перенос движения — kling-3.0-motion-control:
The character performs the motion from the reference video, keeping their ownclothing 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.
Поля исходных медиа
Единого параметра image нет:
| Модель | Поле изображения | Примечание |
|---|---|---|
sora2, sora2-pro | urls | массив строк |
sora-2-official | urls | не более 1 референса |
veo3.1-fast, veo3.1-quality | urls | вместе с generationType |
grok-imagine-1.5-video | urls | массив строк |
doubao-seedance-* | imageUrls или imageWithRoles | до 9 изображений |
pixverse-v6 | imageUrls, пара first/last или imgReferences | режим определяется по полям |
wan2.7-video | imageUrls | [start] или [start, end] |
kling-3.0-motion-control | imageUrls + videoUrls | обязательны оба |
midjourney-video | imageUrls или parentTaskId | ровно один вариант |
Референс должен быть доступен публично. Провайдер скачивает URL напрямую. Короткоживущая signed-ссылка, ресурс за логином и
localhostзавершатся ошибкой уже после валидации и списания; приfailedсредства вернутся.
Первый и последний кадры
Seedance использует массив объектов { url, role }:
{"model": "doubao-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 принимает два скалярных поля, и нужны оба:
{"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 |
imageUrls | image-to-video, используется первый URL |
firstFrameImage + lastFrameImage | переход между кадрами |
imgReferences (1–7 URL) | объединение референсов |
extendFromTaskId | продолжение видео |
size работает только в text-to-video и объединении референсов; в остальных
режимах геометрию задаёт медиа.
Перенос движения с Kling
Нужны ровно по одному элементу в imageUrls и videoUrls, а также обязательный
characterOrientation:
{"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.
{"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.
Полный цикл
curl -X POST https://api.apihubs.ru/api/v1/generation/create \-H "Authorization: Bearer sk-your-key" \-H "Content-Type: application/json" \-d '{"model": "sora2","input": {"prompt": "The gulls lift off and the boat rocks in the swell","urls": ["https://example.com/harbour.jpg"],"aspectRatio": "16:9","duration": 10}}'
Сохраните data.taskId и проверяйте его раз в 10 секунд через
GET /api/v1/task/status/{taskId}. При finished скачайте
data.files[0].fileUrl; постоянное использование этой ссылки не допускается,
поскольку она действует 24 часа. Вместо опроса можно передать webhook.
Ошибки, характерные для изображений
- Недоступный URL. Строка проходит валидацию, но задача позднее становится
failed, если провайдер получил 404 или таймаут. - Неверное имя поля.
imageUrlвместоimageUrlsилиurlsвместо ожидаемогоimageUrlsвернёт 400invalid_input. - Слишком много изображений. Лимиты: 1 для Sora Official, 9 для Seedance,
7 для Pixverse
imgReferences, 2 для Wan. Лишние элементы не обрезаются. - Люди в кадре. Реалистичные узнаваемые люди часто отклоняются фильтрами.
Такая задача окончательно получает
failedи возврат средств.
Следующие шаги
- Видео из текста — процесс без исходного кадра.
- Модели видео — все поля моделей.
- Файлы, вебхуки и ошибки.
Запустите это со своим ключом
Все модели из этого руководства доступны в каталоге API Hubs — один API-ключ, один предоплаченный баланс, без отдельной регистрации у каждого провайдера.