Увеличивает разрешение загруженного видео до 2K, 4K и вплоть до 8K, стараясь сохранить качество, звук и пропорции кадра. Цена - 20 ₽ за 1 секунду видео.
Общая документация Public API · API-ключ можно создать в настройках аккаунта
Bria Video Upscaler поднимает разрешение ролика до класса 2K или 4K, увеличивая кадр в целое число раз, и сохраняет звук и пропорции. Из 540p получается Full HD, из вертикального 720×1280 - 1440×2560, из Full HD - 4K. Результат можно сразу получить в нужном контейнере и кодеке: MP4, WebM, MOV с ProRes для монтажа, MKV или GIF.
Когда пригодится:
Цена одна для обоих разрешений и всех форматов: 20 ₽ за секунду видео. Вызов создаёт асинхронную операцию: сразу приходит id, готовый файл забирается проверкой статуса. Пятисекундный ролик 960×540 увеличивается в 2 раза меньше чем за минуту.
POST /api/v1/operationsAuthorization: Bearer brth_...id операции и стартовый статус queued.Режим у нейросети один. Вы передаёте ссылку на видео, выбираете класс разрешения target_resolution и формат итогового файла output_container_and_codec. Ниже три типовых сценария: обычный MP4, файл для монтажа в MOV ProRes и GIF.
{
"tool": "bria-video-upscaler",
"input": {
"video": "https://cdn.example.com/source-video-1.mp4",
"target_resolution": "2k",
"output_container_and_codec": "mp4_h264"
}
}
tool - slug нейросети, всегда "bria-video-upscaler".input - параметры запуска. Поля передаются прямо внутри этого объекта, без дополнительной вложенности.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
video | string (url) | Да | Ссылка на исходное видео. Один файл, внешний http/https URL с расширением .mp4, .mov или .webm. Ссылка должна открываться без авторизации, файл до 128 МБ. Длительность от 1 до 60 секунд, надёжнее всего - до 30 секунд (см. заметки ниже). |
target_resolution | enum | Да | До какого класса разрешения довести ролик: 2k или 4k. Модель увеличивает ширину и высоту в одинаковое целое число раз, поэтому итоговый размер зависит от исходника: 960×540 при 2k становится 1920×1080, 1080×1920 при 4k - 2160×3840. На цену не влияет. Если поле не передать, будет 4k. |
output_container_and_codec | enum | Да | Контейнер и кодек итогового файла. Варианты: mp4_h264 - MP4 H.264, открывается везде; mp4_h265 - MP4 H.265, файл меньше при том же качестве; webm_vp9 - WebM VP9 для сайтов; mov_h265 - MOV H.265; mov_proresks - MOV ProRes для монтажа, файл очень большой; mkv_h264, mkv_h265, mkv_vp9 - MKV с соответствующим кодеком; gif - анимация GIF без звука. На цену не влияет. Если поле не передать, будет mp4_h264. |
Длительность вы не передаёте: сервер сам определяет её по файлу и по ней считает цену.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "bria-video-upscaler",
"input": {
"video": "https://cdn.example.com/source-video-1.mp4",
"target_resolution": "2k",
"output_container_and_codec": "mp4_h264"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'bria-video-upscaler',
input: {
video: 'https://cdn.example.com/source-video-1.mp4',
target_resolution: '2k',
output_container_and_codec: 'mp4_h264',
},
}),
})
const operation = await response.json()
console.log(operation.id, operation.cost)
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'bria-video-upscaler',
'input': {
'video': 'https://cdn.example.com/source-video-1.mp4',
'target_resolution': '2k',
'output_container_and_codec': 'mp4_h264',
},
},
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": "bria-video-upscaler",
"input": {
"video": "https://cdn.example.com/interview-1080p-1.mov",
"target_resolution": "4k",
"output_container_and_codec": "mov_proresks"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'bria-video-upscaler',
input: {
video: 'https://cdn.example.com/interview-1080p-1.mov',
target_resolution: '4k',
output_container_and_codec: 'mov_proresks',
},
}),
})
const operation = await response.json()
console.log(operation.id, operation.cost)
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'bria-video-upscaler',
'input': {
'video': 'https://cdn.example.com/interview-1080p-1.mov',
'target_resolution': '4k',
'output_container_and_codec': 'mov_proresks',
},
},
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": "bria-video-upscaler",
"input": {
"video": "https://cdn.example.com/short-loop-1.webm",
"target_resolution": "2k",
"output_container_and_codec": "gif"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'bria-video-upscaler',
input: {
video: 'https://cdn.example.com/short-loop-1.webm',
target_resolution: '2k',
output_container_and_codec: 'gif',
},
}),
})
const operation = await response.json()
console.log(operation.id, operation.cost)
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'bria-video-upscaler',
'input': {
'video': 'https://cdn.example.com/short-loop-1.webm',
'target_resolution': '2k',
'output_container_and_codec': 'gif',
},
},
timeout=60,
)
print(response.status_code)
print(response.json())
Для ролика длиной 5 секунд:
{
"id": "op_uuid-123",
"status": "queued",
"tool": "bria-video-upscaler",
"cost": 100,
"balance_after": 400,
"created_at": "2026-09-30T19:49:41.5919+00:00"
}
{
"id": "op_uuid-123",
"status": "completed",
"tool": "bria-video-upscaler",
"cost": 100,
"created_at": "2026-09-30T19:49:41.5919+00:00",
"completed_at": "2026-09-30T19:50:33.142216+00:00",
"result": {
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/bria-video-upscaler/video-1.mp4"
]
},
"error_message": null
}
Пока видео обрабатывается, status будет queued или processing, а result - null. При ошибке придёт status: "failed", result: null и текст причины в error_message.
Сохраните id из ответа на создание и запрашивайте операцию по нему:
GET /api/v1/operations/{id}
curl -H "Authorization: Bearer brth_ваш_ключ" \
https://bratuha.ru/api/v1/operations/op_uuid-123
Пример ожидания результата на JavaScript / TypeScript:
async function waitForResult(id: string) {
while (true) {
const res = await fetch(`https://bratuha.ru/api/v1/operations/${id}`, {
headers: { Authorization: 'Bearer brth_ваш_ключ' },
})
const op = await res.json()
if (op.status === 'completed') return op.result.urls[0]
if (op.status === 'failed') throw new Error(op.error_message)
await new Promise((r) => setTimeout(r, 10000))
}
}
Одну операцию можно опрашивать не чаще раза в секунду, иначе придёт 429. Для видео хватит запроса раз в 10-15 секунд.
{
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/bria-video-upscaler/video-1.mp4"
]
}
type - "video" для видеоформатов и "image" для gif.urls - массив из одной ссылки на готовый файл. Расширение ссылки соответствует выбранному формату, например .mp4 или .gif.Результат для gif:
{
"type": "image",
"urls": [
"https://storage.bratuha.ru/results/bria-video-upscaler/animation-1.gif"
]
}
Пропорции кадра, длительность, частота кадров и звуковая дорожка сохраняются (в GIF звука нет). Ширина и высота всегда вырастают в одинаковое целое число раз. Что получалось на реальных роликах:
| Исходник | target_resolution | Результат |
|---|---|---|
| 960×540 | 2k | 1920×1080 |
| 720×1280 | 2k | 1440×2560 |
| 1080×1920 | 4k | 2160×3840 |
| 1494×2664 | 4k | 2988×5328 |
Учитывайте размер файлов: пять секунд в 1920×1080 H.264 весят около 10 МБ, а в 4K файл тяжелее в несколько раз. ProRes и GIF в 4K получаются особенно большими.
Цена - 20 ₽ за каждую секунду видео. Разрешение и формат результата на неё не влияют. Длительность берётся из самого файла, неполная секунда округляется вверх. Сумма списывается при создании операции и приходит в поле cost.
| Длительность ролика | Цена |
|---|---|
| 1 секунда | 20 ₽ |
| 5 секунд | 100 ₽ |
| 10 секунд | 200 ₽ |
| 30 секунд | 600 ₽ |
| 60 секунд (максимум) | 1 200 ₽ |
POST /api/v1/operations не идемпотентен: повторный запрос создаёт новую операцию и списывает деньги ещё раз. Если ответ на POST потерялся, не повторяйте его вслепую.queued, результат забирайте через GET /api/v1/operations/{id}.video принимаются только внешние http/https ссылки на .mp4, .mov или .webm, доступные без авторизации. Ссылки на localhost и внутренние адреса отклоняются.validation_error, операция не создастся и деньги не спишутся.failed. Длинное видео режьте на части.2k и 4k, поэтому выбирайте разрешение по задаче, а не по бюджету. Для публикации в соцсетях обычно хватает 2k, для монтажа и больших экранов - 4k.