Видео · готовый запрос · обновлено 20 октября 2026 г. · 11 минут
MMAudio API: точный запрос, готовое видео и диагностика ошибок
Для проверки MMAudio не обязательно сначала снимать своё видео. Возьмём официальный пятисекундный демофайл провайдера, подготовим JSON и разберём весь цикл: схема, один платный POST, чтение статуса и проверка результата.

Выберите модель и операцию video-to-video
В едином API Gate этот сценарий задаётся каноническим model=mmaudio/mmaudio-v2 и input.operation=video-to-video. Нужны video_url и prompt. Режим создания звука без видео решает другую задачу и не заменяет этот вызов. Клиентский JSON всегда отправляется в /v1/media, без выбора отдельного пути поставщика.
В GET /v1/media/models найдите карточку по data[].id и проверьте native_generation нужной операции. Готовность зависит от подтверждённых схемы, лицензии, цены и очереди. Если указано pricing_verification_required, тариф ещё не подтверждён. Наличие модели в списке не является обещанием немедленного платного запуска.
Пример использует единый контракт Gate и ограничения модели из первоисточников. Это не отчёт о новом платном аудиотесте. Gate сам адаптирует параметры и выбирает совместимого провайдера; один найденный маршрут не означает доказанную победу в цене. Чтение схемы и оценка не создают генерацию, а POST /v1/media/generations запускает оплачиваемую обработку после проверки доступности.
- Выберите операцию: Для video-to-video нужны video_url и prompt; проверьте общую схему модели.
- Проверьте JSON: Задайте duration числом и используйте доступный демонстрационный файл.
- Прочитайте статус: Создайте одну оплачиваемую задачу и проверяйте её ID через GET.
- Проверьте результат: Откройте result.video.url, измерьте длительность и прочитайте billing.
Прочитайте схему через Gate
Используйте API-ключ Celestria Gate в CELESTRIA_API_KEY. Сначала выполните GET ниже с канонической моделью и operation=video-to-video. Проверьте, что ответ относится к ожидаемым настройкам. Затем обновите карточку каталога и её native_generation: доступность операции и причина неготовности важнее старого снимка.
Публичная страница модели помогает разобраться в параметрах, но не заменяет состояние её коммерческого запуска через Gate. Если схема получена, а тариф всё ещё не подтверждён, запуск пока недоступен. Не трактуйте отсутствующую цену как ноль и не отправляйте запросы по кругу в ожидании бесплатного результата.
curl --fail-with-body --get \
'https://api.celestriagate.com/v1/media/models/schema' \
-H "Authorization: Bearer $CELESTRIA_API_KEY" \
--data-urlencode 'model=mmaudio/mmaudio-v2' \
--data-urlencode 'operation=video-to-video'
Обязательные поля и полезные значения по умолчанию
Минимальному входу нужны video_url и prompt. Для повторяемого теста лучше также явно задать duration: иначе модель использует значение 8 секунд. В нашем демонстрационном исходнике ровно пять секунд, поэтому число 5 в запросе соответствует подготовленному фрагменту.
parameters.num_steps и parameters.cfg_strength не являются универсальными регуляторами качества для всех моделей. Здесь оставляем стандартные значения. Параметр seed, если нужен, передаётся в input числом. Меняйте одну настройку за раз и оценивайте результат на слух. Большое значение само по себе не доказывает лучший звук и не отменяет просмотр.
| Поле input | Текущий тип и ограничения |
|---|---|
| operation | Обязательная строка video-to-video |
| video_url | Строка: прямая ссылка на видео |
| prompt | Строка: описание нужного звука |
| duration | Число от 1 до 30 для этой модели |
| parameters.negative_prompt | Строка с нежелательными звуками |
| parameters.num_steps | Целое от 4 до 50; стандартное значение 25 |
| parameters.cfg_strength | Число от 0 до 20; стандартное значение 4.5 |
| seed | Необязательное целое 0–65535 для этой модели |
Готовый JSON с официальным демороликом
Сохраните следующий объект как mmaudio-demo.json. Ссылка взята из официального примера fal и доступна на момент проверки. Метаданные файла показывают длительность 5,000 секунды. Описание просит мягкое инструментальное сопровождение без речи; оно не имитирует конкретную известную музыкальную запись.
В общем API duration всегда задаётся числом: здесь 5. Настройки num_steps, cfg_strength и negative_prompt помещены в parameters, тогда как video_url и prompt остаются общими полями input. Для предварительной цены отправьте этот же JSON в /v1/media/estimate. Gate сам переводит подтверждённые настройки под совместимый маршрут; оценка не фиксирует итоговый расход.
{
"model": "mmaudio/mmaudio-v2",
"input": {
"operation": "video-to-video",
"video_url": "https://storage.googleapis.com/falserverless/model_tests/video_models/mmaudio_input.mp4",
"prompt": "Soft original instrumental accompaniment matching the mood and motion of the video, with gentle natural ambience. No speech.",
"duration": 5,
"parameters": {
"negative_prompt": "speech, distorted audio, clipping",
"num_steps": 25,
"cfg_strength": 4.5
}
}
}
Получите оценку того же JSON
Сначала сохраните mmaudio-demo.json, затем оцените этот файл. Оценка не создаёт оплачиваемый результат; сохранённое при генерации решение Gate может отличаться, если изменились условия. Не меняйте параметры между оценкой и отправкой незаметно.
curl --fail-with-body -X POST \ 'https://api.celestriagate.com/v1/media/estimate' \ -H "Authorization: Bearer $CELESTRIA_API_KEY" \ -H 'Content-Type: application/json' \ --data-binary @mmaudio-demo.json
Создайте задание и сохраните ответ в файл
Выполните команду из папки с mmaudio-demo.json. В ней -o mmaudio-job.json сохраняет ответ, чтобы id не потерялся. Не храните ключ в этом JSON. Используйте отдельный Idempotency-Key для новой попытки и сохраняйте тот же при повторе неизменного запроса после сетевого сбоя.
Успешный ответ 202 содержит созданное задание. Ошибка HTTP не является поводом немедленно менять ключ и запускать второй экземпляр: сначала прочитайте тело ответа. Особенно внимательно относитесь к обрыву после POST, когда вы не знаете, принял ли сервер отправку.
curl --fail-with-body -X POST \
'https://api.celestriagate.com/v1/media/generations' \
-H "Authorization: Bearer $CELESTRIA_API_KEY" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: mmaudio-media-demo-001' \
--data-binary @mmaudio-demo.json \
-o mmaudio-job.json
Проверьте ID, статус и возвращаемый файл
После успешного создания прочитайте id из mmaudio-job.json и используйте его в GET. Код ниже извлекает строку локально при помощи Python 3, затем один раз читает состояние. Повторяйте GET с паузой 5–10 секунд, пока статус не станет терминальным. Он не создаёт новый звук.
При completed найдите видео в files; исходный result также может содержать video.url. Не требуйте обязательно audio.url: выбранная операция возвращает видео со звуком. При awaiting_billing дождитесь подтверждения суммы. При failed сохраните error.code, error.message и ID, чтобы диагностика относилась к одной попытке.
GENERATION_ID=$(python3 -c 'import json; print(json.load(open("mmaudio-job.json"))["id"])')
curl --fail-with-body \
"https://api.celestriagate.com/v1/media/generations/$GENERATION_ID" \
-H "Authorization: Bearer $CELESTRIA_API_KEY"
Если длина или звук не совпали с ожиданием
Сначала разделите три значения: длительность исходного файла, input.duration и длительность готового MP4. Их нужно читать по реальным файлам и сохранённому запросу. Частая ошибка — оставить стандартные 8 секунд для короткого клипа или отправить строку "5" вместо числа 5.
Проверьте, что video_url ведёт на сам видеофайл, а не на HTML-страницу. Если временная ссылка истекла или требует авторизации, провайдер не сможет прочитать источник. Для собственного ролика перед повтором проверьте доступность из окружения без вашей браузерной сессии.
Если результат completed, но звук не устраивает, сначала проверьте громкость проигрывателя и сам файл. Случайная речь, неуместный фон и рассинхронизация — художественные проблемы, а не доказательство неудачного HTTP-запроса. Новая генерация для их исправления может оплачиваться отдельно.
| Симптом | Проверка перед новым POST |
|---|---|
| Ошибка валидации | Типы, диапазоны, обязательные video_url и prompt |
| 401 / 403 | Ключ Gate и права доступа |
| Невозможно прочитать исходник | Прямая HTTPS-ссылка, срок действия, отсутствие входа |
| Долгое awaiting_billing | Продолжать проверять тот же ID; не дублировать |
| Нет отдельного MP3 | Искать result.video.url, это ожидаемый результат |
| Длина отличается | Сопоставить source, input.duration и готовый MP4 |
Подтвердите расход и сохраните итог проверки
Опубликованный тариф fal на 20 октября — $0,001 за секунду. Для пяти секунд предварительная оценка равна $0,005. По расчётному коэффициенту 110,63 ₽ за $1 это около 0,56 ₽ при округлении вверх до копейки. У статьи нет нового проведённого списания: точную цену своего запроса вы получите только после расчёта задания.
В billing окончательная сумма Gate находится в cost_rub, подтверждённый расход провайдера — в upstream_cost_usd. estimated_cost_rub — оценка, reserved_rub — временное удержание. Резерв может быть больше цены короткого аудиопрохода и не является лимитом расходов.
Для отчёта достаточно модели, параметров без секрета, ID, состояния completed, ссылки на файл и обеих окончательных сумм. Добавьте краткий вывод: есть ли звук, соответствует ли он видео и подходит ли для задачи. Сам факт получения файла не подтверждает точную речь, совпадение губ или право на любую стороннюю композицию.
Частые вопросы
Какой минимальный JSON нужен MMAudio V2?
В общем запросе нужны model: mmaudio/mmaudio-v2, input.operation: video-to-video, а также video_url и prompt. Для понятного теста явно задайте числовой duration; дополнительные controls находятся в input.parameters.
Почему duration должно быть числом?
В общем контракте Gate input.duration имеет числовой тип. Для выбранного режима MMAudio допустима длительность 1–30 секунд. Строка "5" не является тем же типом.
Почему ответ содержит video, а не audio?
Выбранная операция video-to-video возвращает видео со звуком. Ищите подходящий файл в files и сверяйте исходный result со схемой. Название семейства само по себе не определяет тип файла.
Нужно ли выполнять POST заново при ожидании биллинга?
Нет. awaiting_billing относится к уже полученному результату и подтверждению расхода. Проверяйте тот же ID и при необходимости передайте его поддержке.
Чем отличается этот пример от text-to-audio MMAudio?
Здесь обязательный видеовход и результат MP4. Для создания звука без видео нужна другая явно поддержанная операция со своими ограничениями. Похожее имя не делает два сценария взаимозаменяемыми.