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

Видео

Генерация видео из текста

Как выбрать text-to-video модель под задуманный кадр, написать рабочий промпт и пройти весь путь API от создания задачи до готового файла.

6 мин чтенияразделов: 11

Создайте тизер товара, рекламу или фоновую петлю по текстовому описанию. Выберите модель по длительности, разрешению, звуку и цене, затем проверьте короткий кадр. Ниже — выбор под задачу, промпты и пример API-запроса.


Что с их помощью создают

ЗадачаЧто важнее всегоС чего начать
Тизер продукта, hero-loopразрешение, чистое движение камерыveo3.1-quality
Вертикальная рекламацена варианта, скоростьveo3.1-fast, pixverse-v6
Сцена с репликой или атмосферойзвук в том же рендереseedance-2.0
B-roll и общий пландлительность, правдоподобная камераwan2.7-video
Фоновая петля под заголовкомдлительность важнее резкостиgrok-imagine-1.5-video
Тест множества рекламных заходовцена клипаveo3.1-fast, seedance-2.0-fast

Полезная привычка важнее выбора модели: отладьте промпт на быстрой модели, а финальную версию один раз запустите на дорогой. Промпт переносится между моделями, а деньги за дюжину ненужных 4K-черновиков — нет.


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

Veo 3.1 — сравните тарифы на своём кадре. Veo 3.1 Lite подходит для текстового задания, Fast также принимает исходное изображение. Quality тоже работает с изображениями, но название тарифа не доказывает, что нужное движение получится лучше. Сравните результаты на одном задании, прежде чем выбирать более дорогой вариант.

Все три тарифа Veo также принимают resolution: "4k". Для 4K действует отдельный тариф: перед расчётом бюджета выберите разрешение на странице модели и проверьте стоимость запроса. Примеры ниже используют 720p.

seedance-2.0 — видео со звуком. generateAudio по умолчанию равен true: модель может сразу добавить шум помещения, шаги и короткую реплику. Fast ускоряет черновики, а seedance-1-5-pro остаётся дешёвым вариантом предыдущего поколения.

pixverse-v6 — модель с большим числом настроек. Она поддерживает negativePrompt, seed, motionMode и audio. При сравнении вариантов записывайте seed, модель, все настройки и полный промпт. Одинаковый seed не гарантирует сохранения персонажа или композиции после изменения текста: каждый результат нужно проверить.

grok-imagine-1.5-video — длительный фон. До 30 секунд при максимуме 720p. Для приглушённой петли под текстом это часто разумный обмен качества на время.

wan2.7-video — буквальное прочтение. Создаёт 5, 10 или 15 секунд в 720p или 1080p и подходит, если другие модели чрезмерно стилизуют сцену.


Как написать промпт для видео

Рабочий промпт похож на описание кадра:

предмет → действие → движение камеры → свет и время суток → визуальный язык.

«Маяк» оставляет почти всё на усмотрение модели. «Маяк на базальтовом утёсе на рассвете, медленный наезд, туман над водой, снято на 35 мм» уже задаёт кадр.

  • Явно описывайте движение. Медленный наезд, облёт влево, статичная камера, ручное сопровождение надёжнее надежды на удачную импровизацию.
  • Negative prompt работает только там, где есть поле. У этих моделей оно есть у pixverse-v6. В остальных случаях лучше описывать желаемый результат.
  • Одна идея на клип. Два действия за десять секунд часто приводят к превращению предметов. Создайте два клипа и смонтируйте их.

Рецепты

Один кадр из пяти частей — veo3.1-quality, aspectRatio: "16:9", resolution: "720p":

text
Close up shot (composition) of melting icicles (subject) on a frozen rock wall
(context) with cool blue tones (ambiance), zoomed in (camera motion) maintaining
close-up detail of water drips (action).

Промпт задаёт композицию, предмет, окружение, атмосферу, камеру и действие без лишних слов. Все инструкции относятся к одному цельному макрокадру.

Veo 3.1 follows a compact shot list: close framing, cool-blue ambience, a zoom and one clear action.

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

Вертикальная реклама с репликой — seedance-2.0, size: "9:16", resolution: "1080p", duration: 8, generateAudio: true:

text
A barista slides a paper cup across the counter and says "your usual, right?",
warm indoor light, handheld, slight rack focus onto the cup, cafe ambience

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

Детали дают контроль — veo3.1-quality, aspectRatio: "16:9":

text
A close-up cinematic shot follows a desperate man in a weathered green trench
coat as he dials a rotary phone mounted on a gritty brick wall, bathed in the
eerie glow of a green neon sign. The camera dollies in, revealing the tension
in his jaw and the desperation etched on his face as he struggles to make the
call. The shallow depth of field focuses on his furrowed brow and the black
rotary phone, blurring the background into a sea of neon colors and indistinct
shadows, creating a sense of urgency and isolation.

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

Veo 3.1 with the detailed version of the prompt: camera, texture, light and emotion all reinforce the same shot.

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

Только предмет и окружение — veo3.1-quality:

text
A satellite floating through outer space with the moon and some stars in the
background.

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

Veo 3.1 from a subject-and-context prompt only; the result is coherent, but the model chooses the camera and motion for you.

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

Настройка вместо случайного перезапуска — pixverse-v6, seed: 42:

text
A cyclist crests a hill at dusk, silhouette against an orange sky, camera
tracking alongside, dust in the air

Сохраните seed и настройки, измените dusk на midday и сравните клипы. Проверьте персонажа, композицию и движение вместе со светом: это способ сравнить варианты, а не гарантия одного и того же кадра.

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.


Сравнение моделей

МодельДлительность, сРазрешениеПоле форматаЗвук
veo3.1-fastпо умолчанию720p 1080paspectRatio—
veo3.1-qualityпо умолчанию720p 1080paspectRatio—
seedance-2.04–15480p 720p 1080psizegenerateAudio
seedance-2.0-fast4–15480p 720p 1080psizegenerateAudio
seedance-1-5-pro4–15480p 720p 1080psizegenerateAudio
pixverse-v61–15360p 540p 720p 1080psizeaudio
grok-imagine-1.5-video6 10 15 20 25 30480p 720psize—
wan2.7-video5 10 15720p 1080psize—

Полные таблицы находятся в разделе Модели видео.


Соотношение сторон, разрешение и длительность

aspectRatio используют модели Veo; допустимы 16:9 и 9:16. Остальные семейства используют size с более широким набором форматов. Seedance принимает 16:9, 9:16, 1:1, 4:3, 3:4, 21:9; Pixverse добавляет 2:3 и 3:2.

aspectRatio и size не взаимозаменяемы. Поле size у veo3.1-fast или aspectRatio у pixverse-v6 не входит в DTO, поэтому API вернёт 400 invalid_input без неявной подстановки.

Veo использует 720p, 1080p и 4k со строчной k. У остальных моделей — уровни с p. duration всегда задаётся целым числом секунд, обычно из enum.


Отправка запроса

Тело всегда содержит model, input и необязательный webhook:

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-quality",
"input": {
"prompt": "A lighthouse on a basalt cliff at dawn, slow push-in, fog rolling over the water",
"aspectRatio": "16:9",
"resolution": "720p"
}
}'

Ответ приходит до начала работы провайдера:

json
{
"code": 200,
"data": {
"taskId": "019ca881-9503-7270-a560-f00fc2b15785",
"status": "not_started",
"createdAt": "2026-02-28T11:22:33.000Z"
}
}

Баланс списывается в этот момент. При нехватке средств API возвращает 402 insufficient_balance и не создаёт задачу. Если задача завершится как failed, списание возвращается автоматически.


Получение результата

GET /api/v1/task/status/{taskId} возвращает одну форму на всех стадиях: not_started → processing → finished или failed.

sh
curl https://api.apihubs.ru/api/v1/task/status/019ca881-9503-7270-a560-f00fc2b15785 \
-H "Authorization: Bearer sk-your-key"

В состоянии finished файл находится в data.files. URL действует 24 часа, поэтому скачайте его в своё хранилище и не используйте как постоянную ссылку. Подробнее — Файлы и хранение.


Полный цикл

ts
const BASE = "https://api.apihubs.ru/api/v1";
const KEY = process.env.API_STOCK_KEY!;
async function createVideo(prompt: string): Promise<string> {
const res = await fetch(`${BASE}/generation/create`, {
method: "POST",
headers: {
Authorization: `Bearer ${KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "veo3.1-quality",
input: { prompt, aspectRatio: "16:9", resolution: "720p" },
}),
});
const body = await res.json();
if (!res.ok) throw new Error(`${body.error.code}: ${body.error.message}`);
return body.data.taskId;
}
async function waitForTask(taskId: string) {
const deadline = Date.now() + 20 * 60_000;
while (Date.now() < deadline) {
const res = await fetch(`${BASE}/task/status/${taskId}`, {
headers: { Authorization: `Bearer ${KEY}` },
});
const body = await res.json();
if (!res.ok) throw new Error(body.error.message);
if (body.data.status === "finished") return body.data;
if (body.data.status === "failed") throw new Error(body.data.errorMessage);
await new Promise((resolve) => setTimeout(resolve, 10_000));
}
throw new Error(`timed out waiting for ${taskId}`);
}

Для видео разумен интервал 10 секунд. Частый опрос только расходует лимит 120 запросов за 60 секунд. Подробнее — Лимиты запросов.


Получение результата через вебхук

Опрос необязателен. Передайте webhook, и завершённая задача придёт POST-запросом в том же формате, что и ответ проверки статуса.

json
{
"model": "veo3.1-fast",
"input": {
"prompt": "Neon-lit rain on an empty parking garage, handheld",
"aspectRatio": "9:16",
"resolution": "1080p"
},
"webhook": "https://example.com/hooks/api-stock/8f2c1e9a-secret"
}

Заголовка подписи нет, поэтому секрет должен быть частью URL. Доставка повторяется 13 раз с экспоненциальной задержкой — около 22 часов. Подробнее — Вебхуки.


Если генерация не удалась

Ошибки при создании приходят как HTTP-ошибка. Сопоставляйте error.code, а не изменяемый текст error.message. invalid_input означает, что неизменённое тело повторять бессмысленно.

Ошибки во время рендера возвращаются с HTTP 200 и status: "failed". К этому моменту платформа уже исчерпала допустимые попытки основного и резервных провайдеров и вернула списание. Отклонение политикой контента окончательно; нужно изменить промпт.


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

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

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

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