Генерирует звуковые эффекты по тексту и видео, умеет продлевать готовый звук, чинить отдельные фрагменты и делать зацикленную атмосферу. Цена - 1,5 ₽ за секунду результата или обрабатываемого участка.
Общая документация Public API · API-ключ можно создать в настройках аккаунта
Mirelo AI SFX 1.6 работает со звуковыми эффектами в четырёх режимах: озвучивает видео под действие в кадре, создаёт звук по текстовому описанию, продлевает готовую запись и перерисовывает отдельный участок в ней. Для фоновых шумов есть режим бесшовной петли, которую можно крутить по кругу.
Типичные задачи:
Цена - за секунды результата или обрабатываемого участка. Вызов создаёт асинхронную операцию: сначала приходит id, затем вы проверяете статус, пока не будет готов файл.
POST /api/v1/operationsAuthorization: Bearer brth_...id и стартовый статус queued.Режим выбирается параметром generation_type:
generation_type | Что на входе | Что на выходе |
|---|---|---|
video_to_video | Видео до 60 секунд и, по желанию, описание | То же видео с новым звуком |
text_to_audio | Описание звука и длительность | Аудиофайл |
extend_audio | Аудио от 3 до 59 секунд, на сколько продлить, по желанию описание | Аудио: исходная запись плюс продолжение |
inpaint_audio | Аудио до 10 секунд, границы участка, по желанию описание | Та же запись с заменённым участком |
Если generation_type не передать, будет video_to_video. У каждого режима свой набор полей, смотрите колонку «Описание» в таблице параметров. Поля другого режима передавать не нужно, они не учитываются.
{
"tool": "mirelo-ai-sfx-1-6",
"input": {
"generation_type": "text_to_audio",
"...": "..."
}
}
tool - slug нейросети, всегда "mirelo-ai-sfx-1-6".input - параметры запуска. Все поля передаются прямо внутри этого объекта. Единственное вложенное поле - segment в режиме inpaint_audio.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
generation_type | enum | Да | Режим: video_to_video - звук для видео, text_to_audio - звук по описанию, extend_audio - продление записи, inpaint_audio - замена участка. По умолчанию video_to_video. |
video_url | string (url) | Да, в режиме video_to_video | Ссылка на видео длиной до 60 секунд. Только внешние http/https URL с расширением .mp4, .mov или .webm. По длине ролика считается цена. Только для video_to_video. |
audio_url | string (url) | Да, в режимах extend_audio и inpaint_audio | Ссылка на исходную запись. Только внешние http/https URL с расширением .mp3, .wav, .m4a, .aac, .flac, .ogg или .opus. Для extend_audio длина записи от 3 до 59 секунд, для inpaint_audio - до 10 секунд. |
text_prompt_required | string | Да, в режиме text_to_audio | Описание звука: что звучит, где, как. От 1 до 2000 символов. Только для text_to_audio. |
text_prompt_optional | string | Нет | Уточнение, какой звук нужен, до 2000 символов. Используется в режимах video_to_video, extend_audio и inpaint_audio. Можно не передавать - модель ориентируется на видео или исходную запись. |
audio_duration | number | Да, в режиме text_to_audio | Длительность звука в секундах, целое число от 1 до 60. По нему считается цена. Если не передать, будет 10 секунд. Только для text_to_audio. |
ambience | boolean | Нет | true - сделать бесшовную петлю: конец плавно переходит в начало, звук можно повторять по кругу. Подходит для фоновых шумов и атмосфер. По умолчанию false. Для text_to_audio и extend_audio. |
double_output | boolean | Нет | true - склеить два одинаковых цикла подряд, чтобы результат сразу был в 2 раза длиннее. Работает только вместе с ambience: true, на цену не влияет. По умолчанию false. Для text_to_audio и extend_audio. |
append_duration | number | Да, в режиме extend_audio | На сколько секунд продлить запись, целое число от 1 до 57. Вместе с исходной записью должно выйти не больше 60 секунд: к записи на 20 секунд можно добавить максимум 40. По нему считается цена. Если не передать, будет 10 секунд. Только для extend_audio. |
segment | object | Да, в режиме inpaint_audio | Участок записи, который нужно заменить: объект с полями start_s и end_s. Только для inpaint_audio. |
segment.start_s | number | Да, в режиме inpaint_audio | Начало участка в секундах, целое число от 1 до 9. Должно быть меньше end_s. Если не передать, будет 1. |
segment.end_s | number | Да, в режиме inpaint_audio | Конец участка в секундах, целое число от 2 до 10, не позже конца записи. Участок - не длиннее 8 секунд. По длине участка считается цена. Если не передать, будет 2. |
upload_audio_format | enum | Да, в аудиорежимах | Желаемый формат аудиофайла: wav, mp3, aac или flac. По умолчанию wav. Используется в режимах text_to_audio, extend_audio и inpaint_audio. Сейчас на результат не влияет: в проверенных запусках файл всегда приходил в MP3 (подробнее в «Формате результата»). |
video_to_video)Модель смотрит ролик и возвращает его уже со звуком. Для 5-секундного видео стоимость - 7,5 ₽.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "mirelo-ai-sfx-1-6",
"input": {
"generation_type": "video_to_video",
"video_url": "https://cdn.example.com/source-video-1.mp4",
"text_prompt_optional": "Шум дождя по асфальту, шаги по лужам"
}
}'
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-ai-sfx-1-6',
input: {
generation_type: 'video_to_video',
video_url: 'https://cdn.example.com/source-video-1.mp4',
text_prompt_optional: 'Шум дождя по асфальту, шаги по лужам',
},
}),
})
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-ai-sfx-1-6',
'input': {
'generation_type': 'video_to_video',
'video_url': 'https://cdn.example.com/source-video-1.mp4',
'text_prompt_optional': 'Шум дождя по асфальту, шаги по лужам',
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
text_to_audio)Скрип и хлопок двери, 4 секунды. Стоимость - 6 ₽.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "mirelo-ai-sfx-1-6",
"input": {
"generation_type": "text_to_audio",
"text_prompt_required": "Тяжёлая деревянная дверь медленно открывается со скрипом и захлопывается",
"audio_duration": 4,
"upload_audio_format": "mp3"
}
}'
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-ai-sfx-1-6',
input: {
generation_type: 'text_to_audio',
text_prompt_required: 'Тяжёлая деревянная дверь медленно открывается со скрипом и захлопывается',
audio_duration: 4,
upload_audio_format: 'mp3',
},
}),
})
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-ai-sfx-1-6',
'input': {
'generation_type': 'text_to_audio',
'text_prompt_required': 'Тяжёлая деревянная дверь медленно открывается со скрипом и захлопывается',
'audio_duration': 4,
'upload_audio_format': 'mp3',
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
text_to_audio с ambience)10 секунд бесшовного дождя, склеенные в 20-секундный файл. Стоимость - 15 ₽: платите за audio_duration, удвоение бесплатно.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "mirelo-ai-sfx-1-6",
"input": {
"generation_type": "text_to_audio",
"text_prompt_required": "Steady rain on a cafe window, muffled city traffic outside, no music, no voices",
"audio_duration": 10,
"ambience": true,
"double_output": true,
"upload_audio_format": "mp3"
}
}'
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-ai-sfx-1-6',
input: {
generation_type: 'text_to_audio',
text_prompt_required: 'Steady rain on a cafe window, muffled city traffic outside, no music, no voices',
audio_duration: 10,
ambience: true,
double_output: true,
upload_audio_format: 'mp3',
},
}),
})
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-ai-sfx-1-6',
'input': {
'generation_type': 'text_to_audio',
'text_prompt_required': 'Steady rain on a cafe window, muffled city traffic outside, no music, no voices',
'audio_duration': 10,
'ambience': True,
'double_output': True,
'upload_audio_format': 'mp3',
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
extend_audio)Запись продлевается на 10 секунд. Стоимость - 15 ₽ при любой длине исходника. Если исходник 8 секунд, результат будет около 18 секунд.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "mirelo-ai-sfx-1-6",
"input": {
"generation_type": "extend_audio",
"audio_url": "https://cdn.example.com/source-audio-1.mp3",
"text_prompt_optional": "Тот же дождь, в конце далёкий раскат грома",
"append_duration": 10,
"ambience": false,
"upload_audio_format": "mp3"
}
}'
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-ai-sfx-1-6',
input: {
generation_type: 'extend_audio',
audio_url: 'https://cdn.example.com/source-audio-1.mp3',
text_prompt_optional: 'Тот же дождь, в конце далёкий раскат грома',
append_duration: 10,
ambience: false,
upload_audio_format: 'mp3',
},
}),
})
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-ai-sfx-1-6',
'input': {
'generation_type': 'extend_audio',
'audio_url': 'https://cdn.example.com/source-audio-1.mp3',
'text_prompt_optional': 'Тот же дождь, в конце далёкий раскат грома',
'append_duration': 10,
'ambience': False,
'upload_audio_format': 'mp3',
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
inpaint_audio)Со 2-й по 4-ю секунду вместо того, что было, появится хлопок двери. Остальная запись не меняется. Участок 2 секунды - стоимость 3 ₽.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "mirelo-ai-sfx-1-6",
"input": {
"generation_type": "inpaint_audio",
"audio_url": "https://cdn.example.com/source-audio-1.wav",
"text_prompt_optional": "Громкий хлопок двери",
"segment": {
"start_s": 2,
"end_s": 4
},
"upload_audio_format": "mp3"
}
}'
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-ai-sfx-1-6',
input: {
generation_type: 'inpaint_audio',
audio_url: 'https://cdn.example.com/source-audio-1.wav',
text_prompt_optional: 'Громкий хлопок двери',
segment: {
start_s: 2,
end_s: 4,
},
upload_audio_format: 'mp3',
},
}),
})
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-ai-sfx-1-6',
'input': {
'generation_type': 'inpaint_audio',
'audio_url': 'https://cdn.example.com/source-audio-1.wav',
'text_prompt_optional': 'Громкий хлопок двери',
'segment': {
'start_s': 2,
'end_s': 4,
},
'upload_audio_format': 'mp3',
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
{
"id": "op_uuid-123",
"status": "queued",
"tool": "mirelo-ai-sfx-1-6",
"cost": 7.5,
"balance_after": 492.5,
"created_at": "2026-09-30T19:49:45Z"
}
cost - сколько списано за операцию, в рублях.balance_after - баланс после списания.video_to_video{
"id": "op_uuid-123",
"status": "completed",
"tool": "mirelo-ai-sfx-1-6",
"cost": 7.5,
"created_at": "2026-09-30T19:49:45Z",
"completed_at": "2026-09-30T19:50:19Z",
"result": {
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/mirelo-ai-sfx-1-6/video-1.mp4"
]
},
"error_message": null
}
Так выглядит ответ для text_to_audio, extend_audio и inpaint_audio:
{
"id": "op_uuid-123",
"status": "completed",
"tool": "mirelo-ai-sfx-1-6",
"cost": 15,
"created_at": "2026-09-30T19:49:45Z",
"completed_at": "2026-09-30T19:49:57Z",
"result": {
"type": "audio",
"urls": [
"https://storage.bratuha.ru/results/mirelo-ai-sfx-1-6/sound-1.mp3"
],
"files": [
{
"url": "https://storage.bratuha.ru/results/mirelo-ai-sfx-1-6/sound-1.mp3",
"name": "result"
}
]
},
"error_message": null
}
{
"id": "op_uuid-123",
"status": "failed",
"tool": "mirelo-ai-sfx-1-6",
"cost": 7.5,
"created_at": "2026-09-30T19:49:45Z",
"completed_at": "2026-09-30T19:50:30Z",
"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.Аудиорежимы обычно готовы за 10-20 секунд, звук для видео - за 30 секунд - 1 минуту, длинные ролики обрабатываются до нескольких минут. Опрашивать одну операцию можно не чаще раза в секунду, иначе придёт 429.
Тип результата зависит от режима:
generation_type | result.type | Файл |
|---|---|---|
video_to_video | video | MP4 со звуковой дорожкой AAC |
text_to_audio | audio | MP3 |
extend_audio | audio | MP3 |
inpaint_audio | audio | Аудиофайл |
Для видео:
{
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/mirelo-ai-sfx-1-6/video-1.mp4"
]
}
Для аудио:
{
"type": "audio",
"urls": [
"https://storage.bratuha.ru/results/mirelo-ai-sfx-1-6/sound-1.mp3"
],
"files": [
{
"url": "https://storage.bratuha.ru/results/mirelo-ai-sfx-1-6/sound-1.mp3",
"name": "result"
}
]
}
type - "video" или "audio", смотрите таблицу выше.urls - массив из одной ссылки на готовый файл. Это поле есть всегда, берите ссылку отсюда.files - для аудио дополнительно приходит та же ссылка в виде объекта с url и name.В тестовом запуске video_to_video на 5-секундном ролике 864×496 пришёл MP4 той же длины и размера, со звуком AAC 44,1 кГц, моно. В проверенных запусках text_to_audio и extend_audio приходил MP3 моно 44,1 кГц, 64 кбит/с, в том числе когда в upload_audio_format был указан wav. Длина аудио: в text_to_audio - audio_duration (вдвое больше с double_output), в extend_audio - исходная запись плюс append_duration.
Все режимы стоят одинаково - 1,5 ₽ за секунду. Что считается секундами, зависит от режима:
generation_type | За что платите | Пример |
|---|---|---|
video_to_video | Длина видео | 5 с - 7,5 ₽, 60 с - 90 ₽ |
text_to_audio | audio_duration | 4 с - 6 ₽, 10 с - 15 ₽, 60 с - 90 ₽ |
extend_audio | Только добавленные секунды append_duration | +10 с - 15 ₽, +57 с - 85,5 ₽ |
inpaint_audio | Длина участка end_s - start_s | 2 с - 3 ₽, 8 с - 12 ₽ |
Минимум - 1 секунда, 1,5 ₽. Длительность видео сервер сам определяет по файлу и считает в целых секундах.
Описание, ambience, double_output и upload_audio_format на цену не влияют. Точная сумма приходит в поле cost ответа на создание операции и сразу списывается с баланса.
POST /api/v1/operations не идемпотентен: каждый запрос создаёт новую операцию и списывает деньги. Не повторяйте запрос автоматически при обрыве связи.queued, результат нужно забирать запросом статуса по id.http/https URL с допустимым расширением. Ссылка должна открываться без авторизации, файл - до 128 МБ.400, операция не создастся и деньги не спишутся.extend_audio сумма исходной записи и append_duration не может быть больше 60 секунд, иначе API вернёт 400.inpaint_audio участок начинается не раньше 1-й секунды и длится от 1 до 8 секунд. Первую секунду записи этим режимом заменить нельзя.audio_duration, append_duration, segment.start_s, segment.end_s) принимают только целые числа.ambience: true: получится петля без заметного шва, которую удобно крутить под видео любой длины.