Общая документация Public API · API-ключ можно создать в настройках аккаунта
Vidu Q2 Pro превращает картинку в короткий ролик: двигает людей и предметы в кадре, добавляет движение камеры, может подложить фоновую музыку. Можно задать и конечный кадр - тогда модель построит плавный переход от первой картинки ко второй. Подходит для оживления фото, товарных карточек, превью и коротких заставок.
Основные сценарии:
В обоих сценариях можно выбрать обычную модель (standard, качественнее) или быструю (fast, дешевле и быстрее).
Каждый вызов создаёт асинхронную операцию. После запуска сохраните id и проверяйте статус отдельным запросом.
POST /api/v1/operationsAuthorization: Bearer brth_...id операции и стартовый статус queued.Сценарий определяют два параметра:
model_variant - standard (обычная модель) или fast (быстрая модель);use_end_image - false для ролика из одной картинки, true для ролика между первым и конечным кадром (тогда нужен last_image).{
"tool": "vidu-q2-pro",
"input": {
"...": "..."
}
}
tool - slug нейросети, всегда "vidu-q2-pro".input - параметры запуска. Все поля передаются прямо внутри этого объекта, без дополнительной вложенности.image, остальное подставится по умолчанию.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
model_variant | enum | Да | Модель. standard - обычная, лучше качество, есть 540p, до 10 секунд. fast - быстрая и дешевле, только 720p и 1080p, до 8 секунд. Если не указать - standard. |
prompt | string | Нет | Описание сцены: что происходит, как двигается камера, какой стиль. До 5000 символов. Можно не передавать, тогда модель сама решит, как оживить картинку. |
image | string (url) | Да | Ссылка на изображение для первого кадра. Один файл: jpg, jpeg, png или webp. |
use_end_image | boolean | Нет | Включить конечный кадр. С true обязательно передайте last_image. По умолчанию false. |
last_image | string (url) | Да, при use_end_image: true | Ссылка на изображение для последнего кадра. Используется только вместе с use_end_image: true. Один файл: jpg, jpeg, png или webp. |
resolution | enum | Да | Качество видео: 540p, 720p или 1080p. 540p доступно только для standard: для fast запрос с 540p вернёт validation_error. Если не указать - 720p. |
duration | number | Да | Длительность ролика в секундах, целое число от 1 до 10. Для fast модель принимает не больше 8 секунд. Если не указать - 5. |
movement_amplitude | enum | Да | Сила движения в кадре: auto - модель решает сама, small - едва заметное движение, - умеренное, - активное. Если не указать - . |
Ссылки в image и last_image - только внешние http/https URL с расширением jpg, jpeg, png или webp.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "vidu-q2-pro",
"input": {
"model_variant": "standard",
"prompt": "Идёт снег, женщина моргает и улыбается в камеру, огни витрин мягко мерцают. Камера неподвижна",
"image": "https://cdn.example.com/source-image-1.jpg",
"resolution": "720p",
"duration": 5,
"movement_amplitude": "small",
"bgm": false
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'vidu-q2-pro',
input: {
model_variant: 'standard',
prompt:
'Идёт снег, женщина моргает и улыбается в камеру, огни витрин мягко мерцают. Камера неподвижна',
image: 'https://cdn.example.com/source-image-1.jpg',
resolution: '720p',
duration: 5,
movement_amplitude: 'small',
bgm: false,
},
}),
})
const data = await response.json()
console.log(data.id, data.status)
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'vidu-q2-pro',
'input': {
'model_variant': 'standard',
'prompt': 'Идёт снег, женщина моргает и улыбается в камеру, огни витрин мягко мерцают. Камера неподвижна',
'image': 'https://cdn.example.com/source-image-1.jpg',
'resolution': '720p',
'duration': 5,
'movement_amplitude': 'small',
'bgm': False,
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
Пример с быстрой моделью: первая картинка - девушка у окна, вторая - она же у дивана, ролик показывает, как она проходит через комнату.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "vidu-q2-pro",
"input": {
"model_variant": "fast",
"prompt": "Девушка идёт через комнату к дивану, камера плавно следует за ней",
"image": "https://cdn.example.com/first-frame-1.jpg",
"use_end_image": true,
"last_image": "https://cdn.example.com/last-frame-1.jpg",
"resolution": "720p",
"duration": 6,
"movement_amplitude": "auto",
"bgm": true
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'vidu-q2-pro',
input: {
model_variant: 'fast',
prompt: 'Девушка идёт через комнату к дивану, камера плавно следует за ней',
image: 'https://cdn.example.com/first-frame-1.jpg',
use_end_image: true,
last_image: 'https://cdn.example.com/last-frame-1.jpg',
resolution: '720p',
duration: 6,
movement_amplitude: 'auto',
bgm: true,
},
}),
})
const data = await response.json()
console.log(data.id, data.status)
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'vidu-q2-pro',
'input': {
'model_variant': 'fast',
'prompt': 'Девушка идёт через комнату к дивану, камера плавно следует за ней',
'image': 'https://cdn.example.com/first-frame-1.jpg',
'use_end_image': True,
'last_image': 'https://cdn.example.com/last-frame-1.jpg',
'resolution': '720p',
'duration': 6,
'movement_amplitude': 'auto',
'bgm': True,
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
{
"id": "op_uuid-123",
"status": "queued",
"tool": "vidu-q2-pro",
"cost": 50,
"balance_after": 450,
"created_at": "2026-09-30T12:46:04.437595+00:00"
}
{
"id": "op_uuid-123",
"status": "completed",
"tool": "vidu-q2-pro",
"cost": 50,
"created_at": "2026-09-30T12:46:04.437595+00:00",
"completed_at": "2026-09-30T12:47:51.308969+00:00",
"result": {
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/vidu-q2-pro/video-1.mp4"
]
},
"error_message": null
}
Сохраните id из ответа на создание и проверяйте операцию по нему:
GET /api/v1/operations/{id}
curl -H "Authorization: Bearer brth_ваш_ключ" \
https://bratuha.ru/api/v1/operations/op_uuid-123
async function waitForResult(id: string) {
while (true) {
const response = await fetch(`https://bratuha.ru/api/v1/operations/${id}`, {
headers: { Authorization: 'Bearer brth_ваш_ключ' },
})
const operation = await response.json()
if (operation.status === 'completed' || operation.status === 'failed') {
return operation
}
await new Promise((resolve) => setTimeout(resolve, 10000))
}
}
Быстрая модель обычно справляется за 1-2 минуты, обычная - за 2-3 минуты, иногда дольше. Одну операцию можно опрашивать не чаще раза в секунду, разумный интервал - 10 секунд.
После завершения в result приходит одно видео:
{
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/vidu-q2-pro/video-1.mp4"
]
}
type - всегда "video".urls - массив с одной ссылкой на MP4.duration. Если bgm включён, в ролике есть фоновая музыка.Цена считается за секунду: ставка зависит от модели и качества, затем умножается на duration. Конечный кадр, амплитуда движения, задание и музыка на цену не влияют.
| Модель | Качество | За секунду | 1 сек. | 5 сек. | 8 сек. | 10 сек. |
|---|---|---|---|---|---|---|
standard | 540p | 4 ₽ | 4 ₽ | 20 ₽ | 32 ₽ | 40 ₽ |
standard | 720p | 10 ₽ | 10 ₽ | 50 ₽ | 80 ₽ | 100 ₽ |
standard | 1080p | 18 ₽ | 18 ₽ | 90 ₽ | 144 ₽ | 180 ₽ |
fast | 720p | 3 ₽ | 3 ₽ | 15 ₽ | 24 ₽ | - |
fast | 1080p | 6 ₽ | 6 ₽ | 30 ₽ | 48 ₽ | - |
Самый дешёвый запуск - 1 секунда быстрой модели в 720p за 3 ₽. Запрос только с image использует значения по умолчанию (standard, 720p, 5 секунд) и стоит 50 ₽. Сумма списывается при создании операции и видна в поле cost.
POST /api/v1/operations не идемпотентен: каждый повторный запрос создаёт новую платную операцию. Если ответ на создание потерялся, не отправляйте запрос вслепую ещё раз.queued, результат забирайте через GET /api/v1/operations/{id}.image и last_image принимают только внешние http/https ссылки на jpg, jpeg, png или webp. Адреса localhost и внутренних сетей не принимаются, файл должен открываться без авторизации.fast) работает только в 720p и 1080p и делает ролики до 8 секунд. Запрос fast с duration 9 или 10 завершится ошибкой «значение поля duration должно быть не больше 8».last_image учитывается только при use_end_image: true. Для плавного перехода берите два кадра одной сцены с одинаковыми пропорциями.movement_amplitude: "small" и описывайте в задании небольшое действие.bgm: false.mediumlargeautobgm | boolean | Нет | Добавить фоновую музыку. По умолчанию true; передайте false, если нужен ролик без музыки. На цену не влияет. |