API

music-mastering

Поднимает микс до громкости и потолка true peak выбранной площадки (Spotify/YouTube −14 LUFS, Apple −16, клуб −9 …) и добавляет тональный характер. Целиком работает в браузере вызывающего — наши серверы этой работы не делают, поэтому цена — как у браузерной полосы, а не за мегабайт. Сообщает измеренные LUFS, true peak и LRA и исходника, и результата, чтобы агент мог проверить итог, а не верить на слово.

v1 beta browser · 5 ток.

Цена (browser): 5 ток. за вызов. Точная сумма для вашего файла: POST /v1/tools/music-mastering/estimate.

Вызов

POST https://timbrica.com/v1/tools/music-mastering/runs
Authorization: Bearer $TIMBRICA_KEY
Idempotency-Key: <ваш ключ для безопасного повтора>
Content-Type: application/json

Вход

ПолеТипОбязательноеПояснение
target string нет Громкость площадки, куда пойдёт трек. streaming = −14 LUFS / −1 dBTP (Spotify, YouTube), apple = −16 / −1, amazon = −14 / −2, club = −9 / −1, podcast = −16 / −1,5, cd = −9 / −0,3, broadcast = −23 / −1 (EBU R128). Не передавайте — будет streaming.
одно из: streaming, apple, amazon, club, podcast, cd, broadcast
по умолчанию: streaming
style string нет Тональный характер поверх подгонки громкости. `transparent` ничего не добавляет и точнее всего попадает в цель; `auto` — тул выбирает сам по материалу.
одно из: auto, transparent, warm, punchy, clear, open, loud, aimusic
по умолчанию: transparent
format string нет Формат выдачи. WAV — надёжный вариант для дистрибьюторов; MP3 — 320 кбит/с.
одно из: wav, flac, mp3
по умолчанию: wav

Входной файл

Файл ставит ваш браузер на шаге рецепта `upload`. Через /v1/uploads его загружать не нужно.
принимает: .mp3, .wav, .flac, .ogg, .m4a, .aac, .opus, .aiff, .wma

Рецепт для браузера

Этот тул работает в вашем собственном браузере. Заказ-наряд, который вы получите, несёт этот рецепт с подставленными значениями; селекторы ниже — версионированный контракт, а не деталь реализации: без новой версии они не меняются.

{
    "engine": "dom",
    "steps": [
        {
            "action": "upload",
            "selector": "[data-tmb-api=\"input-file\"]",
            "accept": [
                ".mp3",
                ".wav",
                ".flac",
                ".ogg",
                ".m4a",
                ".aac",
                ".opus",
                ".aiff",
                ".wma"
            ]
        },
        {
            "action": "click",
            "selector": "[data-tmb-api=\"target\"][data-target=\"{{target}}\"]",
            "optional": true
        },
        {
            "action": "click",
            "selector": "[data-tmb-api=\"style\"][data-style=\"{{style}}\"]",
            "optional": true
        },
        {
            "action": "click",
            "selector": "[data-tmb-api=\"run\"]"
        },
        {
            "action": "wait",
            "selector": "[data-tmb-api=\"download\"][data-tmb-format=\"{{format}}\"]",
            "timeout_s": 900,
            "appears": "after_run"
        },
        {
            "action": "click",
            "selector": "[data-tmb-api=\"download\"][data-tmb-format=\"{{format}}\"]",
            "appears": "after_run"
        }
    ],
    "result": {
        "kind": "download",
        "settles": "automatically"
    }
}

Что обязывает сделать каждое действие — других рецепты не используют:

uploadПоложите входной файл в поле выбора файла, найденное по `selector` (оно может быть скрыто — задайте файл напрямую, например setInputFiles в Playwright). Файл должен подходить под `accept`.
clickНажмите элемент, когда он виден И доступен. Если элемент так и остаётся недоступным, предыдущий шаг не сработал.
fillЗамените значение текстового поля на `value`, вызвав события input/change, как при наборе.
selectВыберите в <select> вариант со значением `value`.
waitДождитесь, пока элемент станет видимым, не дольше `timeout_s` секунд (по умолчанию 30).

На каждом шаге проверяйте селектор abort_when из заказ-наряда (html[data-tmb-run="failed"]). Если он сработал, тул отказался от задачи — например, видео не стало бы меньше. Остановитесь и запросите запуск через GET: error.detail скажет почему. Токены не списываются.

Какие ошибки может вернуть

validation_failed  insufficient_tokens 

История

  • v1 — 2026-08-06 — Initial release (browser lane).

Контракт не может измениться без новой версии и строки выше: тест сверяет опубликованную схему, цены и лимиты с закоммиченным lock-файлом и иначе роняет сборку. Подпишитесь на /v1/changelog, чтобы узнавать об изменениях.