Генерирует звуковые эффекты для видео по видеоряду и текстовой подсказке. Цена: 3 ₽/сек. за 2 версии. Минимум 12
Общая документация Public API · API-ключ можно создать в настройках аккаунта
Mirelo SFX V1.5 озвучивает короткие ролики: смотрит на видео и добавляет звуковые эффекты, которые совпадают с действием в кадре. За один запуск приходят сразу два варианта озвучки, из которых можно выбрать лучший.
Типичные задачи:
Видео должно быть не длиннее 10 секунд. Вызов создаёт асинхронную операцию: сначала приходит id, затем вы проверяете статус, пока не будут готовы файлы.
POST /api/v1/operationsAuthorization: Bearer brth_...id и стартовый статус queued.Сценария два: только видео (модель сама решает, что озвучить) и видео с подсказкой, какие звуки нужны.
{
"tool": "mirelo-sfx-v1-5",
"input": {
"video": "https://cdn.example.com/source-video-1.mp4",
"prompt": "Шум дождя по асфальту, шаги по лужам"
}
}
tool - slug нейросети, всегда "mirelo-sfx-v1-5".input - параметры запуска. Все поля передаются прямо внутри этого объекта, без дополнительной вложенности.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
video | string (url) | Да | Ссылка на видео длиной до 10 секунд. Только внешние http/https URL с расширением .mp4 или .mov. По длине этого ролика считается цена. |
prompt | string | Нет | Какие звуковые эффекты должны появиться, до 2000 символов. Можно не передавать - модель подберёт звук по видео. |
В примерах используется ролик длиной 5 секунд, стоимость каждого - 15 ₽.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "mirelo-sfx-v1-5",
"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: 'mirelo-sfx-v1-5',
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': 'mirelo-sfx-v1-5',
'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": "mirelo-sfx-v1-5",
"input": {
"video": "https://cdn.example.com/source-video-1.mov",
"prompt": "Heavy rain on asphalt, footsteps splashing through puddles"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'mirelo-sfx-v1-5',
input: {
video: 'https://cdn.example.com/source-video-1.mov',
prompt: 'Heavy rain on asphalt, footsteps splashing through puddles',
},
}),
})
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': 'mirelo-sfx-v1-5',
'input': {
'video': 'https://cdn.example.com/source-video-1.mov',
'prompt': 'Heavy rain on asphalt, footsteps splashing through puddles',
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
{
"id": "op_uuid-123",
"status": "queued",
"tool": "mirelo-sfx-v1-5",
"cost": 15,
"balance_after": 485,
"created_at": "2026-09-30T19:49:45Z"
}
cost - сколько списано за операцию, в рублях.balance_after - баланс после списания.{
"id": "op_uuid-123",
"status": "completed",
"tool": "mirelo-sfx-v1-5",
"cost": 15,
"created_at": "2026-09-30T19:49:45Z",
"completed_at": "2026-09-30T19:50:13Z",
"result": {
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/mirelo-sfx-v1-5/video-1.mp4",
"https://storage.bratuha.ru/results/mirelo-sfx-v1-5/video-2.mp4"
]
},
"error_message": null
}
{
"id": "op_uuid-123",
"status": "failed",
"tool": "mirelo-sfx-v1-5",
"cost": 15,
"created_at": "2026-09-30T19:49:45Z",
"completed_at": "2026-09-30T19:50:20Z",
"result": null,
"error_message": "Текст ошибки"
}
Сохраните id из ответа на создание и запрашивайте статус операции по нему:
GET /api/v1/operations/{id}
curl -H "Authorization: Bearer brth_ваш_ключ" \
https://bratuha.ru/api/v1/operations/op_uuid-123
async function waitForResult(id) {
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, 5000))
}
}
Статус операции:
queued - операция создана и ждёт запуска;processing - звук генерируется;completed - готово, ссылки лежат в result;failed - не получилось, причина в error_message.Обычно результат готов за 25-40 секунд. Опрашивать одну операцию можно не чаще раза в секунду, иначе придёт 429.
В result приходят два видео - исходный ролик с двумя разными вариантами звука:
{
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/mirelo-sfx-v1-5/video-1.mp4",
"https://storage.bratuha.ru/results/mirelo-sfx-v1-5/video-2.mp4"
]
}
type - всегда "video".urls - массив из двух ссылок на MP4, по одной на каждый вариант. Обрабатывайте весь массив, а не только первую ссылку.Отдельного аудиофайла нет: если нужна только дорожка, извлеките её из MP4 (например, ffmpeg -i video-1.mp4 -vn -c:a copy sound.m4a).
В тестовом запуске на 5-секундном ролике 864×496 пришли два MP4 той же длины и размера, со звуком AAC 44,1 кГц, моно.
3 ₽ за секунду видео, минимум 12 ₽. В цену входят оба варианта звука.
Длительность ролика сервер сам определяет по файлу и считает в целых секундах. Ролики до 4 секунд включительно стоят как 4 секунды.
| Длина видео | Цена |
|---|---|
| 1-4 с | 12 ₽ |
| 5 с | 15 ₽ |
| 6 с | 18 ₽ |
| 7 с | 21 ₽ |
| 8 с | 24 ₽ |
| 9 с | 27 ₽ |
| 10 с (максимум) | 30 ₽ |
Подсказка prompt на цену не влияет. Точная сумма приходит в поле cost ответа на создание операции и сразу списывается с баланса.
POST /api/v1/operations не идемпотентен: каждый запрос создаёт новую операцию и списывает деньги. Не повторяйте запрос автоматически при обрыве связи.queued, результат нужно забирать запросом статуса по id.http/https URL с расширением .mp4 или .mov. WEBM не принимается. Ссылка должна открываться без авторизации, файл - до 128 МБ.400, операция не создастся и деньги не спишутся. Длинное видео режьте на куски до 10 секунд.