Генерирует подходящие звуковые эффекты и фоновую музыку по вашему видео, чтобы ролик не был «немым». Цена - 7 ₽ за 1 видео.
Общая документация Public API · API-ключ можно создать в настройках аккаунта
Kling Video-to-Audio озвучивает немое видео: смотрит, что происходит в кадре, и дописывает к ролику звуковые эффекты и фоновую музыку. Удобно для роликов из видеонейросетей, которые приходят без звука, для коротких клипов в соцсети и превью, где тишина выглядит странно.
Что можно настроить:
sound_effect_prompt (дождь, шаги, мотор, толпа);bgm_prompt (жанр, настроение, инструменты);asmr_mode, чтобы мелкие детальные звуки звучали крупнее и объёмнее.На выходе вы получаете две ссылки: то же видео с новым звуком и отдельно звуковую дорожку. Цена фиксированная - 7 ₽ за ролик до 20 секунд.
Каждый вызов создаёт асинхронную операцию: запрос сразу возвращает id, а результат нужно забрать проверкой статуса.
POST /api/v1/operationsAuthorization: Bearer brth_...id и стартовый статус queued.Сценарии использования:
Это один и тот же вызов, сценарии отличаются только набором полей.
{
"tool": "kling-video-to-audio",
"input": {
"video": "https://cdn.example.com/source-video-1.mp4"
}
}
tool - slug нейросети, всегда "kling-video-to-audio".input - параметры запуска. Поля передаются прямо внутри этого объекта, без дополнительной вложенности.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
video | string (url) | Да | Ссылка на видео http/https с расширением .mp4, .mov или .webm. Длительность от 1 до 20 секунд, размер файла до 128 МБ. Ссылка должна открываться без авторизации. |
sound_effect_prompt | string | Нет | Какие звуковые эффекты нужны: «шум дождя по асфальту, редкие шаги», «рёв мотора, визг шин». До 200 символов. Можно не передавать - тогда эффекты нейросеть подберёт по картинке. |
bgm_prompt | string | Нет | Какая нужна фоновая музыка: жанр, настроение, инструменты. До 200 символов. Можно не передавать. |
asmr_mode | boolean | Нет | true - режим ASMR: нейросеть делает упор на мелкие детальные звуки (шорох, стук, касания). false - обычная озвучка. Если не передать, будет false. |
Только видео, без описаний. Нейросеть сама решит, какие звуки и музыка подходят сцене.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "kling-video-to-audio",
"input": {
"video": "https://cdn.example.com/source-video-1.mp4"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'kling-video-to-audio',
input: {
video: 'https://cdn.example.com/source-video-1.mp4',
},
}),
})
const data = await response.json()
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'kling-video-to-audio',
'input': {
'video': 'https://cdn.example.com/source-video-1.mp4',
},
},
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": "kling-video-to-audio",
"input": {
"video": "https://cdn.example.com/source-video-1.mp4",
"sound_effect_prompt": "Шум дождя по асфальту и лужам, редкие шаги прохожих",
"bgm_prompt": "Спокойное лоу-фай пианино, меланхоличное настроение",
"asmr_mode": 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: 'kling-video-to-audio',
input: {
video: 'https://cdn.example.com/source-video-1.mp4',
sound_effect_prompt: 'Шум дождя по асфальту и лужам, редкие шаги прохожих',
bgm_prompt: 'Спокойное лоу-фай пианино, меланхоличное настроение',
asmr_mode: false,
},
}),
})
const data = await response.json()
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'kling-video-to-audio',
'input': {
'video': 'https://cdn.example.com/source-video-1.mp4',
'sound_effect_prompt': 'Шум дождя по асфальту и лужам, редкие шаги прохожих',
'bgm_prompt': 'Спокойное лоу-фай пианино, меланхоличное настроение',
'asmr_mode': 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": "kling-video-to-audio",
"input": {
"video": "https://cdn.example.com/source-video-2.mov",
"sound_effect_prompt": "Хруст свежего хлеба под ножом, стук ножа о деревянную доску",
"asmr_mode": 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: 'kling-video-to-audio',
input: {
video: 'https://cdn.example.com/source-video-2.mov',
sound_effect_prompt: 'Хруст свежего хлеба под ножом, стук ножа о деревянную доску',
asmr_mode: true,
},
}),
})
const data = await response.json()
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'kling-video-to-audio',
'input': {
'video': 'https://cdn.example.com/source-video-2.mov',
'sound_effect_prompt': 'Хруст свежего хлеба под ножом, стук ножа о деревянную доску',
'asmr_mode': True,
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
{
"id": "op_uuid-123",
"status": "queued",
"tool": "kling-video-to-audio",
"cost": 7,
"balance_after": 493,
"created_at": "2026-09-30T21:31:01.053638+00:00"
}
cost - сколько списано за операцию, в рублях.balance_after - баланс после списания.{
"id": "op_uuid-123",
"status": "completed",
"tool": "kling-video-to-audio",
"cost": 7,
"created_at": "2026-09-30T21:31:01.053638+00:00",
"completed_at": "2026-09-30T21:31:45.858885+00:00",
"result": {
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/kling-video-to-audio/video-with-sound-1.mp4",
"https://storage.bratuha.ru/results/kling-video-to-audio/soundtrack-1.mp4"
]
},
"error_message": null
}
{
"id": "op_uuid-123",
"status": "failed",
"tool": "kling-video-to-audio",
"cost": 7,
"created_at": "2026-09-27T15:48:46.273+00:00",
"completed_at": "2026-09-27T15:49:02.380+00:00",
"result": null,
"error_message": "Ваш запрос не прошел модерацию."
}
При failed списанные 7 ₽ возвращаются на баланс.
Сохраните id из ответа на создание и запрашивайте операцию по нему:
GET /api/v1/operations/{id}
curl -H "Authorization: Bearer brth_ваш_ключ" \
https://bratuha.ru/api/v1/operations/op_uuid-123
Пример ожидания результата на JavaScript / TypeScript:
async function waitForSound(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') {
const [videoWithSound, soundtrack] = op.result.urls
return { videoWithSound, soundtrack }
}
if (op.status === 'failed') throw new Error(op.error_message)
await new Promise((r) => setTimeout(r, 5000))
}
}
Статусы операции:
queued - операция создана и ждёт запуска;processing - звук генерируется;completed - готово, ссылки лежат в result.urls;failed - не получилось, причина в error_message.Обычно результат готов за 40-90 секунд, для 20-секундных роликов ближе к полутора минутам. Одну операцию можно опрашивать не чаще раза в секунду, иначе придёт 429. Проверки раз в 5 секунд хватает.
{
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/kling-video-to-audio/video-with-sound-1.mp4",
"https://storage.bratuha.ru/results/kling-video-to-audio/soundtrack-1.mp4"
]
}
type - всегда "video".urls - массив ровно из двух ссылок, порядок постоянный:
urls[0] - ваше видео с новой звуковой дорожкой: MP4 (H.264 + AAC, стерео 44,1 кГц). Разрешение и частота кадров те же, что у исходника, длина совпадает с исходником;urls[1] - только звуковая дорожка той же длины. Внутри файла MP3 (стерео, 44,1 кГц, 128 кбит/с), хотя ссылка заканчивается на .mp4. Если сохраняете дорожку отдельно, давайте файлу расширение .mp3.Для ролика длиной 5 секунд проба вернула видео 5,06 с и дорожку 5,07 с.
Цена фиксированная - 7 ₽ за один ролик.
| Что меняется | Влияет на цену |
|---|---|
| Длительность видео (от 1 до 20 секунд) | Нет |
sound_effect_prompt, bgm_prompt | Нет |
asmr_mode | Нет |
Сумма приходит в поле cost ответа на создание операции и сразу списывается с баланса. Если операция завершилась с failed, деньги возвращаются.
POST /api/v1/operations не идемпотентен: каждый запрос создаёт новую операцию и списывает 7 ₽. Не повторяйте запрос автоматически при обрыве связи.queued, результат забирайте через GET /api/v1/operations/{id}.video принимаются только внешние http/https ссылки на .mp4, .mov или .webm, доступные без авторизации. Файл до 128 МБ.400 validation_error, операция не создастся и деньги не спишутся. Длинные ролики режьте на части до 20 секунд.Ваш запрос не прошел модерацию., иногда отказ приходит и на обычные ролики. Около 17% запусков завершаются таким отказом, деньги за них возвращаются.