Продлевает ваше видео до нужной длительности, стараясь сохранить движение в кадре и одинаковый свет без резких склеек. Цена зависит от разрешения: 480p - 10 ₽/сек., 720p - 20 ₽/сек., 1080p - 25 ₽/сек.
Общая документация Public API · API-ключ можно создать в настройках аккаунта
Wan 2.5 Video-Extend дописывает продолжение к вашему видео. Модель смотрит на исходный ролик и досоздаёт от 3 до 10 секунд так, чтобы движение, свет и сцена продолжались без резкой склейки. Что должно произойти дальше, вы описываете текстом. Так удлиняют короткие сгенерированные ролики, доводят сцену до логичного конца или добавляют действие в финал клипа.
Можно дополнительно передать аудио, если продолжению нужен определённый звук.
Каждый вызов создаёт асинхронную операцию. После запуска сохраните id и проверяйте статус отдельным запросом.
POST /api/v1/operationsAuthorization: Bearer brth_...id операции и стартовый статус queued.Сценарии:
audio;{
"tool": "wan-2-5-video-extend",
"input": {
"...": "..."
}
}
tool - slug нейросети, всегда "wan-2-5-video-extend".input - параметры запуска. Все поля передаются прямо внутри этого объекта, без дополнительной вложенности.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
video | string (url) | Да | Ссылка на видео, которое нужно продлить. Один файл: mp4, mov или webm. |
audio | string (url) | Нет | Ссылка на звук для продолжения. Один файл: mp3 или wav, длительностью от 3 до 30 секунд и размером до 15 МБ. |
prompt | string | Да | Что происходит в продолжении: действие, движение камеры, настроение. От 3 до 4000 символов. |
use_negative_prompt | boolean | Нет | Включает негативный промпт. Без true поле negative_prompt не учитывается. Если не указать - false. |
negative_prompt | string | Нет | Чего не должно быть в продолжении, например «размытие, лишние люди, текст». Работает только вместе с "use_negative_prompt": true. До 500 символов. |
resolution | enum | Да | Разрешение результата: 480p, 720p или 1080p. Если не указать - 720p. |
duration | integer | Да | Сколько секунд добавить к видео: целое число от 3 до 10. Если не указать - 5. От этого поля зависит цена. |
enable_prompt_expansion | boolean | Нет | Автоматически расширяет и уточняет задание перед генерацией. Полезно для коротких заданий, но может добавить детали, которых вы не просили. Если не указать - false. |
Ссылки в video и audio - только внешние http/https URL с указанными расширениями. Файл должен открываться без авторизации.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "wan-2-5-video-extend",
"input": {
"video": "https://cdn.example.com/source-video-1.mp4",
"prompt": "Рыжий кот идёт дальше по забору и спрыгивает в траву, тёплый закатный свет",
"resolution": "480p",
"duration": 3,
"enable_prompt_expansion": 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: 'wan-2-5-video-extend',
input: {
video: 'https://cdn.example.com/source-video-1.mp4',
prompt:
'Рыжий кот идёт дальше по забору и спрыгивает в траву, тёплый закатный свет',
resolution: '480p',
duration: 3,
enable_prompt_expansion: false,
},
}),
})
const data = await response.json()
console.log(data.id, data.status, data.cost)
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'wan-2-5-video-extend',
'input': {
'video': 'https://cdn.example.com/source-video-1.mp4',
'prompt': 'Рыжий кот идёт дальше по забору и спрыгивает в траву, тёплый закатный свет',
'resolution': '480p',
'duration': 3,
'enable_prompt_expansion': False,
},
},
timeout=60,
)
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": "wan-2-5-video-extend",
"input": {
"video": "https://cdn.example.com/street-video-1.mov",
"audio": "https://cdn.example.com/street-sound-1.mp3",
"prompt": "Камера медленно отъезжает, девушка уходит по мокрой улице, неоновые вывески отражаются в лужах",
"resolution": "720p",
"duration": 5
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'wan-2-5-video-extend',
input: {
video: 'https://cdn.example.com/street-video-1.mov',
audio: 'https://cdn.example.com/street-sound-1.mp3',
prompt:
'Камера медленно отъезжает, девушка уходит по мокрой улице, неоновые вывески отражаются в лужах',
resolution: '720p',
duration: 5,
},
}),
})
const data = await response.json()
console.log(data.id, data.status, data.cost)
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'wan-2-5-video-extend',
'input': {
'video': 'https://cdn.example.com/street-video-1.mov',
'audio': 'https://cdn.example.com/street-sound-1.mp3',
'prompt': 'Камера медленно отъезжает, девушка уходит по мокрой улице, неоновые вывески отражаются в лужах',
'resolution': '720p',
'duration': 5,
},
},
timeout=60,
)
print(response.status_code)
print(response.json())
negative_prompt учитывается, только если рядом передан "use_negative_prompt": true.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "wan-2-5-video-extend",
"input": {
"video": "https://cdn.example.com/product-video-1.webm",
"prompt": "Чашка кофе медленно вращается на столе, пар поднимается вверх, мягкий утренний свет",
"use_negative_prompt": true,
"negative_prompt": "размытие, текст, лишние предметы, руки в кадре",
"resolution": "1080p",
"duration": 10,
"enable_prompt_expansion": 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: 'wan-2-5-video-extend',
input: {
video: 'https://cdn.example.com/product-video-1.webm',
prompt:
'Чашка кофе медленно вращается на столе, пар поднимается вверх, мягкий утренний свет',
use_negative_prompt: true,
negative_prompt: 'размытие, текст, лишние предметы, руки в кадре',
resolution: '1080p',
duration: 10,
enable_prompt_expansion: true,
},
}),
})
const data = await response.json()
console.log(data.id, data.status, data.cost)
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'wan-2-5-video-extend',
'input': {
'video': 'https://cdn.example.com/product-video-1.webm',
'prompt': 'Чашка кофе медленно вращается на столе, пар поднимается вверх, мягкий утренний свет',
'use_negative_prompt': True,
'negative_prompt': 'размытие, текст, лишние предметы, руки в кадре',
'resolution': '1080p',
'duration': 10,
'enable_prompt_expansion': True,
},
},
timeout=60,
)
print(response.status_code)
print(response.json())
Для продления на 3 секунды в 480p:
{
"id": "op_uuid-123",
"status": "queued",
"tool": "wan-2-5-video-extend",
"cost": 30,
"balance_after": 470,
"created_at": "2026-09-30T19:50:10.831248+00:00"
}
{
"id": "op_uuid-123",
"status": "completed",
"tool": "wan-2-5-video-extend",
"cost": 30,
"created_at": "2026-09-30T19:50:10.831248+00:00",
"completed_at": "2026-09-30T19:51:28.35124+00:00",
"result": {
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/wan-2-5-video-extend/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, 15000))
}
}
Продление на 3 секунды в 480p занимает около полутора минут, длинные продления и 1080p - дольше. Одну операцию можно опрашивать не чаще раза в секунду, разумный интервал - 15 секунд.
После завершения в result приходит одно видео:
{
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/wan-2-5-video-extend/video-1.mp4"
]
}
type - всегда "video".urls - массив с одной ссылкой на MP4."duration": 3 пришёл роликом примерно на 7,8 секунды.480p пришло размером 830x480.Цена считается за каждую секунду продолжения из поля duration и зависит от разрешения. Длина исходного видео и аудио на цену не влияет:
| Разрешение | За секунду | 3 сек. | 5 сек. | 10 сек. |
|---|---|---|---|---|
480p | 10 ₽ | 30 ₽ | 50 ₽ | 100 ₽ |
720p | 20 ₽ | 60 ₽ | 100 ₽ | 200 ₽ |
1080p | 25 ₽ | 75 ₽ | 125 ₽ | 250 ₽ |
resolution и duration, запуск пройдёт в 720p на 5 секунд и будет стоить 100 ₽.enable_prompt_expansion на цену не влияют.cost.POST /api/v1/operations не идемпотентен: каждый повторный запрос создаёт новую платную операцию. Если ответ на создание потерялся, не отправляйте запрос вслепую ещё раз.queued, результат забирайте через GET /api/v1/operations/{id}.video и audio принимают только внешние http/https ссылки. Адреса localhost и внутренних сетей не принимаются, файл должен открываться без авторизации и весить не больше 128 МБ.duration - только целое число от 3 до 10. Дробное значение или число вне диапазона вернёт 400 validation_error.failed.prompt именно продолжение: что происходит после последнего кадра исходника. Пересказывать содержимое исходного видео не нужно.