Перейти к основному содержимому

Генерация видео

Доступные модели

Полный список моделей можно посмотреть на странице Модели или получить динамически через API эндпоинт: https://openai.bothub.chat/v1/videos/models

BotHub предоставляет выделенный API для генерации видео, работающий по асинхронному паттерну. Генерация видео — это долгая операция: запрос возвращается мгновенно со статусом pending, а результат нужно получить отдельным запросом по ID видео.


Как это работает​

  1. Отправьте запрос на генерацию — POST /v1/videos/generations возвращает сразу с status: "pending" и идентификатором id.
  2. Опрашивайте статус — Периодически вызывайте GET /v1/videos/:videoId до тех пор, пока status не станет "completed" или "failed".
  3. Скачайте видео — После завершения поле unsigned_urls содержит ссылки на готовое видео.

Эндпоинты​

POST /v1/videos/generations​

Создаёт новый запрос на генерацию видео. Возвращается мгновенно — генерация происходит асинхронно.

Базовый URL: https://openai.bothub.chat

Аутентификация: Authorization: Bearer ВАШ_API_КЛЮЧ_BOTHUB

Тело запроса​

ПолеТипОписание
modelstringID модели (например, veo-3.1, kling-v2.6)
promptstringТекстовое описание видео
imageUrlstringURL входного изображения для режима image-to-video (опционально)
notifybooleanОтправить email-уведомление по завершении (опционально)
settingsobjectПараметры генерации (см. ниже)

Объект settings​

ПолеТипОписание
duration_secondsnumberДлительность видео: 4, 5, 6, 7, 8, 9, 10 или 12
aspect_ratiostringНапример: "16:9", "9:16", "1:1"
negative_promptstringЧто избегать при генерации
generate_audiobooleanГенерировать ли звук
seednumberSeed для воспроизводимых результатов
Параметры, специфичные для модели

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


GET /v1/videos/{videoId}​

Возвращает текущий статус и результат запроса на генерацию видео.

Query-параметрОписание
include_usageПередайте "true", чтобы получить информацию о потраченных капсах

GET /v1/videos/models​

Возвращает список доступных моделей для генерации видео.


Генерация видео по тексту​

async function generateVideo() {
const BASE_URL = 'https://openai.bothub.chat/v1';
const API_KEY = 'ВАШ_API_КЛЮЧ_BOTHUB';

// Шаг 1: Создаём запрос на генерацию
const createRes = await fetch(`${BASE_URL}/videos/generations`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${API_KEY}`,
},
body: JSON.stringify({
model: 'veo-3.1',
prompt: 'Таймлапс цветущего цветка в солнечном саду',
notify: false,
settings: {
duration_seconds: 6,
aspect_ratio: '16:9',
},
}),
});

const { id } = await createRes.json();
console.log('Запрос создан, id:', id);

// Шаг 2: Опрашиваем статус до завершения
let video;
while (true) {
await new Promise((r) => setTimeout(r, 10000));
const statusRes = await fetch(`${BASE_URL}/videos/${id}?include_usage=true`, {
headers: { Authorization: `Bearer ${API_KEY}` },
});
video = await statusRes.json();
console.log('Статус:', video.status);
if (video.status === 'completed' || video.status === 'failed') break;
}

if (video.status === 'completed') {
console.log('URL видео:', video.unsignedUrls[0]);
} else {
console.error('Ошибка генерации:', video.error);
}
}

generateVideo();

Ответ — Шаг 1 (создание):​

{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"modelId": "veo-3.1",
"providerId": "replicate",
"status": "pending",
"createdAt": "2025-01-15T10:30:00Z",
"userId": "user-id",
"error": null,
"payment": false,
"notify": false,
"unsigned_urls": []
}

Ответ — Шаг 2 (завершено):​

{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"modelId": "veo-3.1",
"providerId": "replicate",
"status": "completed",
"createdAt": "2025-01-15T10:30:00Z",
"userId": "user-id",
"error": null,
"payment": true,
"notify": false,
"unsigned_urls": [
"https://storage.bothub.chat/videos/a1b2c3d4-e5f6-7890-abcd-ef1234567890.mp4"
],
"outputFileId": "file-uuid",
"usage": {
"caps": 250
}
}

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

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

async function imageToVideo() {
const BASE_URL = 'https://openai.bothub.chat/v1';
const API_KEY = 'ВАШ_API_КЛЮЧ_BOTHUB';

const createRes = await fetch(`${BASE_URL}/videos/generations`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${API_KEY}`,
},
body: JSON.stringify({
model: 'kling-v2.6',
prompt: 'Человек медленно оборачивается и улыбается в камеру',
imageUrl: 'https://example.com/portrait.jpg',
notify: false,
settings: {
duration_seconds: 5,
aspect_ratio: '9:16',
negative_prompt: 'размытость, низкое качество',
},
}),
});

const { id } = await createRes.json();

let video;
while (true) {
await new Promise((r) => setTimeout(r, 10000));
const res = await fetch(`${BASE_URL}/videos/${id}`, {
headers: { Authorization: `Bearer ${API_KEY}` },
});
video = await res.json();
if (video.status === 'completed' || video.status === 'failed') break;
}

console.log(video.status === 'completed' ? video.unsignedUrls[0] : video.error);
}

imageToVideo();

Список доступных моделей​

const res = await fetch('https://openai.bothub.chat/v1/videos/models', {
headers: { Authorization: 'Bearer ВАШ_API_КЛЮЧ_BOTHUB' },
});
const { data } = await res.json();
console.log(data.map((m) => m.id));

Пример ответа:​

{
"object": "list",
"data": [
{ "id": "veo-3.1", "object": "model", "created": 1705334400, "owned_by": "replicate" },
{ "id": "kling-v2.6", "object": "model", "created": 1705334400, "owned_by": "replicate" },
{ "id": "gen4_turbo", "object": "model", "created": 1705334400, "owned_by": "runway" }
]
}

Статусы​

СтатусОписание
pendingГенерация в процессе
completedВидео готово — смотрите unsigned_urls
failedГенерация завершилась с ошибкой — смотрите error

Рекомендации​

  • Интервал опроса: Запрашивайте статус каждые 10–15 секунд. Большинство моделей завершают генерацию за 1–3 минуты.
  • Email-уведомления: Установите notify: true, чтобы получить письмо по завершении — удобно для долгих задач.
  • Ограничения по длительности: Доступные значения зависят от модели. Если сомневаетесь, используйте 5 или 6 секунд.
  • Image-to-video: imageUrl должен быть публично доступной ссылкой. Поддерживаемые форматы: JPEG, PNG, WebP.