Увеличивает разрешение видео и подтягивает детализацию, чтобы картинка выглядела чётче. Цена зависит от разрешения: 1080p - 1,5 ₽/сек., 2K - 3 ₽/сек., 4K - 6 ₽/сек.
Общая документация Public API · API-ключ можно создать в настройках аккаунта
ByteDance Video Upscaler поднимает разрешение видео до 1080p, 2K или 4K и подтягивает детализацию: картинка становится чётче, края и текстуры - аккуратнее. Это недорогой способ довести до приличного качества ролик из генератора в 480p-720p, старую запись или видео, пережатое мессенджером.
Главное правило: исходник должен быть меньше выбранного разрешения. Ролик, который уже снят в 1080p, до 1080p не увеличивается - для него выбирайте 2k или 4k.
Пропорции кадра, длительность и звуковая дорожка сохраняются. Вызов создаёт асинхронную операцию: сразу приходит id, готовое видео забирается проверкой статуса. Обычно обработка занимает 3-4 минуты, длинные ролики - дольше.
POST /api/v1/operationsAuthorization: Bearer brth_...id операции и стартовый статус queued.Режим у нейросети один. Вы выбираете только целевое разрешение target_resolution, от него зависит цена за секунду.
{
"tool": "bytedance-video-upscaler",
"input": {
"video": "https://cdn.example.com/source-video-1.mp4",
"target_resolution": "1080p"
}
}
tool - slug нейросети, всегда "bytedance-video-upscaler".input - параметры запуска. Поля передаются прямо внутри этого объекта, без дополнительной вложенности.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
video | string (url) | Да | Ссылка на исходное видео. Один файл, внешний http/https URL с расширением .mp4, .mov или .webm. Длительность от 1 секунды до 10 минут (600 секунд), файл до 128 МБ, ссылка должна открываться без авторизации. |
target_resolution | enum | Да | Разрешение результата по короткой стороне кадра. Варианты: 1080p, 2k, 4k. Короткая сторона исходника должна быть меньше выбранного разрешения: для 1080p - меньше 1080 пикселей. Если поле не передать, будет 1080p. |
Длительность вы не передаёте: сервер сам определяет её по файлу и по ней считает цену.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "bytedance-video-upscaler",
"input": {
"video": "https://cdn.example.com/source-video-1.mp4",
"target_resolution": "1080p"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'bytedance-video-upscaler',
input: {
video: 'https://cdn.example.com/source-video-1.mp4',
target_resolution: '1080p',
},
}),
})
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': 'bytedance-video-upscaler',
'input': {
'video': 'https://cdn.example.com/source-video-1.mp4',
'target_resolution': '1080p',
},
},
timeout=60,
)
print(response.status_code)
print(response.json())
Для ролика, который уже в 1080p, подходят только 2k и 4k.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "bytedance-video-upscaler",
"input": {
"video": "https://cdn.example.com/phone-video-1080p.mov",
"target_resolution": "4k"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'bytedance-video-upscaler',
input: {
video: 'https://cdn.example.com/phone-video-1080p.mov',
target_resolution: '4k',
},
}),
})
const operation = await response.json()
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'bytedance-video-upscaler',
'input': {
'video': 'https://cdn.example.com/phone-video-1080p.mov',
'target_resolution': '4k',
},
},
timeout=60,
)
print(response.json())
Для ролика длиной 5 секунд и target_resolution: "1080p":
{
"id": "op_uuid-123",
"status": "queued",
"tool": "bytedance-video-upscaler",
"cost": 7.5,
"balance_after": 492.5,
"created_at": "2026-09-30T21:33:35.491507+00:00"
}
{
"id": "op_uuid-123",
"status": "completed",
"tool": "bytedance-video-upscaler",
"cost": 7.5,
"created_at": "2026-09-30T21:33:35.491507+00:00",
"completed_at": "2026-09-30T21:36:56.179566+00:00",
"result": {
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/bytedance-video-upscaler/video-1.mp4"
]
},
"error_message": null
}
Так выглядит запуск, в котором исходник 1920×1080 отправили с target_resolution: "1080p":
{
"id": "op_uuid-123",
"status": "failed",
"tool": "bytedance-video-upscaler",
"cost": 7.5,
"created_at": "2026-09-30T21:33:06.539387+00:00",
"completed_at": "2026-09-30T21:33:18.074581+00:00",
"result": null,
"error_message": "Проверьте правильность введённых данных и попробуйте снова."
}
Пока видео обрабатывается, status будет queued или processing, а result - null. При ошибке деньги возвращаются на баланс, а cost в ответе остаётся суммой запуска.
Сохраните id из ответа на создание и запрашивайте операцию по нему:
GET /api/v1/operations/{id}
curl -H "Authorization: Bearer brth_ваш_ключ" \
https://bratuha.ru/api/v1/operations/op_uuid-123
Пример ожидания результата на JavaScript / TypeScript:
async function waitForVideo(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, 15000))
}
}
Одну операцию можно опрашивать не чаще раза в секунду, иначе придёт 429. Для видео хватит запроса раз в 15 секунд.
{
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/bytedance-video-upscaler/video-1.mp4"
]
}
type - всегда "video".urls - массив из одной ссылки на готовый MP4 (H.264).До выбранного разрешения доводится короткая сторона, пропорции сохраняются. Например, ролик 752×416 при 1080p вернулся размером 1954×1080. Длительность и звук остаются как в исходнике, а частота кадров может измениться: в этом примере 24 кадра в секунду стали 30.
Цена считается за каждую секунду видео и зависит от target_resolution. Длительность берётся из самого файла в целых секундах с округлением вверх: ролик 4,8 секунды оплачивается как 5 секунд. Сумма списывается при создании операции и приходит в поле cost.
target_resolution | За секунду | 5 секунд | 1 минута | 10 минут (максимум) |
|---|---|---|---|---|
1080p | 1,5 ₽ | 7,5 ₽ | 90 ₽ | 900 ₽ |
2k | 3 ₽ | 15 ₽ | 180 ₽ | 1 800 ₽ |
4k | 6 ₽ | 30 ₽ | 360 ₽ | 3 600 ₽ |
Если target_resolution не передан, считается по 1080p.
POST /api/v1/operations не идемпотентен: повторный запрос создаёт новую операцию и списывает деньги ещё раз. Если ответ на POST потерялся, не повторяйте его вслепую.queued, результат забирайте через GET /api/v1/operations/{id}.video принимаются только внешние http/https ссылки на .mp4, .mov или .webm, доступные без авторизации. Ссылки на localhost и внутренние адреса отклоняются.400 validation_error, операция не создастся и деньги не спишутся.1080p такая операция завершится failed с сообщением «Проверьте правильность введённых данных», деньги вернутся. Проверьте размер кадра до отправки и выбирайте разрешение выше исходного.failed с просьбой загрузить файл заново или в другом формате. Надёжнее всего работает MP4 с кодеком H.264.failed, деньги вернутся.