Генерация медиа (видео, картинки, музыка)
NordRouter умеет генерировать изображения, видео и музыку — тем же ключом sk-nr-… и с того же баланса, что и текстовые модели. Оплата за факт, никаких токенов и пакетов.
Запросы только с бэкенда, не из браузера
Обращаться к /media/* напрямую из браузера нельзя — запрос не пройдёт проверку CORS и оборвётся с Failed to fetch.
Это сделано намеренно. Ручка требует ваш ключ в заголовке Authorization, а всё, что попадает в браузер, видно любому, кто откроет инструменты разработчика: ключ утечёт и с вашего баланса начнут тратить чужие. Никакие заголовки в fetch от этого не защищают.
Правильная схема:
браузер → ваш сервер (ключ живёт здесь) → nordrouter.comГотовый файл при этом отдаётся обычной ссылкой — её можно вставлять прямо в <img src> или <video src> на странице, для этого ничего настраивать не нужно.
Как это работает
Генерация асинхронная (видео и музыка занимают от секунд до пары минут):
- Создаёте задачу —
POST /media/generateс моделью и параметрами. - Ждёте результат — опрашиваете
GET /media/job/:id, покаstatusне станетdone. - Забираете файл — по
result_url(ссылка наnordrouter.com).
1. Создать задачу
curl https://nordrouter.com/media/generate \
-H "Authorization: Bearer sk-nr-ВАШ-КЛЮЧ" \
-H "Content-Type: application/json" \
-d '{
"model": "image/nano-banana-2",
"input": { "prompt": "уютная хижина в зимнем лесу, акварель", "resolution": "2k" }
}'Ответ:
{ "id": "beefb531-…", "model": "image/nano-banana-2", "status": "processing",
"poll": "https://nordrouter.com/media/job/beefb531-…" }Ошибка — всегда в одном виде: { "error": "понятный текст", "code": "missing_param" }. По code удобно ветвиться в коде (invalid_input, missing_param, unknown_model, insufficient_balance, rate_limited, no_auth…), error — для человека.
2. Дождаться результата
curl https://nordrouter.com/media/job/beefb531-…{ "id": "beefb531-…", "status": "done",
"result_url": "https://nordrouter.com/media/file/beefb531-…",
"cost_usd": 0.052, "error": null }status: processing → done (или failed). Готовый файл — по result_url.
🎵 Suno генерирует два трека за задачу: первый — в
result_url, второй — вresult_url_2(тот же формат ссылки). Цена — за задачу целиком, оба трека уже включены.
Вебхуки (вместо поллинга)
Не хотите опрашивать — передайте в POST /media/generate поле callback_url, и мы сами пришлём результат POST-запросом, когда задача завершится:
curl https://nordrouter.com/media/generate \
-H "Authorization: Bearer sk-nr-ВАШ-КЛЮЧ" -H "Content-Type: application/json" \
-d '{
"model": "image/nano-banana-2",
"input": { "prompt": "…" },
"callback_url": "https://ваш-сервер.com/webhooks/nordrouter",
"callback_secret": "ваш-секрет"
}'Когда задача перейдёт в done/failed, на callback_url придёт POST с тем же телом, что отдаёт GET /media/job/:id, плюс поле event:
{ "event": "media.completed", "id": "beefb531-…", "status": "done",
"result_url": "https://nordrouter.com/media/file/beefb531-…", "cost_usd": 0.052, "error": null }event: media.completed или media.failed.
Проверка подписи. Если задали callback_secret, в заголовке X-NR-Signature придёт sha256=<hmac> — HMAC-SHA256 от тела запроса на вашем секрете. Сверьте, чтобы убедиться, что запрос от нас:
import hmac, hashlib
expected = "sha256=" + hmac.new(secret.encode(), raw_body, hashlib.sha256).hexdigest()
assert hmac.compare_digest(expected, request.headers["X-NR-Signature"])Требования и надёжность:
callback_url— толькоhttps://и только публичный адрес (внутренние/приватные IP отклоняются с ошибкой 400).- До 4 попыток доставки с нарастающей паузой; отвечайте
2xx, иначе повторим. - Вебхук не отменяет поллинг — можно совмещать или использовать
GET /media/job/:idкак запасной вариант.
Подробнее
Жизненный цикл задачи, проверка подписи с примерами и надёжность доставки — на странице Задачи и вебхуки.
3. Список моделей и цен
GET /media/models возвращает доступные модели, их параметры и оценку стоимости:
{ "models": [
{ "id": "image/nano-banana-2", "type": "image",
"fields": [ {"name":"prompt","type":"textarea"}, {"name":"resolution","type":"select","options":["1k","2k","4k"]},
{"name":"safety_filter","type":"bool","default":true} ],
"est_usd": 0.052 }
], "retention_days": 14 }Полный справочник
Все модели с параметрами input и ценой — на странице Медиа: все модели и биллинг.
Модели
Доступно 95 моделей — полный актуальный список с параметрами и ценой всегда в GET /media/models. Основные семейства:
| Тип | Семейство | Режимы | ≈ цена |
|---|---|---|---|
| 🖼 Картинки | Nano Banana / 2 / Pro (image/nano-banana*) | текст→картинка, правка, до 4K | от $0.025 |
| 🖼 | Imagen 4 Fast / Ultra (image/imagen4*) | текст→картинка | от $0.025 |
| 🖼 | GPT Image 1.5 / 2 (image/gpt-image-*) | текст→картинка, правка, до 4K | от $0.025 |
| 🖼 | Flux 2 Pro / Flex (image/flux2-*) | текст→картинка, правка | от $0.03 |
| 🖼 | Seedream v4 / 4.5 / 5 Lite (image/seedream-*) | текст→картинка, правка | от $0.04 |
| 🖼 | Ideogram v3 / Character (image/ideogram-*) | текст, ремикс, персонаж | от $0.02 |
| 🖼 | Qwen / Wan Image / Grok / Z-Image | текст→картинка, правка | от $0.01 |
| 🛠 Утилиты | Topaz / Recraft (image/*upscale*, image/recraft-remove-bg) | апскейл до 8K, удаление фона | от $0.01 |
| 🎬 Видео | Veo 3.1 Lite / Fast / Quality (video/veo-3.1-*) | текст/фото→видео | от $0.19 |
| 🎬 | Kling 2.1 → 3.0 (video/kling-*) | текст/фото→видео, motion, аватары, до 4K и 15с | от $0.16 |
| 🎬 | Wan 2.2 → 2.7 (video/wan-*) | текст/фото/видео→видео, speech-to-video | от $0.25 |
| 🎬 | Seedance 1.5 / 2 / Fast / Mini (video/seedance-*) | текст/фото→видео, до 4K, звук | от $0.06 |
| 🎬 | Hailuo 02 / 2.3 (video/hailuo-*) | текст/фото→видео | от $0.08 |
| 🎬 | HappyHorse 1.0 / 1.1 (video/happyhorse-*) | текст/фото/референс→видео, правка видео | от $0.70 |
| 🎬 | Grok Video / 1.5 (video/grok-*) | текст/фото→видео, до 30с | от $0.06 |
| 🎬 | Gemini Omni (video/gemini-omni) | видео со звуком, до 4K | от $0.39 |
| 🗣 Аватары | Kling Avatar, OmniHuman, InfiniteTalk, Lip Sync | фото+аудио→говорящее видео | от $0.19 |
| 🎵 Музыка | Suno V6 / V6 Wild / V6 Mini (music/suno-*) | текст/стиль→2 трека, кавер, продолжение, вокал, дорожки, звуки | ~$0.08 |
| 🎙 Озвучка | ElevenLabs Turbo / Multilingual (audio/elevenlabs-*) | текст→речь, изоляция голоса | от $0.04 / 1000 зн. |
Параметры
Параметры зависят от модели — точный список в /media/models (поле fields: имя, тип, варианты, дефолт). Имена — в одном стиле (snake_case), значения — строчными. Общие:
prompt— описание (для всех генеративных моделей).resolution—1k/2k/4k(картинки) или480p/720p/768p/1080p/4k(видео). Цена зависит от разрешения.aspect_ratio—1:1,16:9,9:16и др.; у моделей с выбором размера есть1:1-hd.duration— длительность видео в секундах (у большинства5/10, у Kling 3.0 и Wan 2.7 до15, у Grok до30). Видео тарифицируется посекундно.audio— звуковая дорожка в видео (true/false). Со звуком дороже — оценка в/media/estimateэто учитывает.mode/quality/render_mode— уровень качества (Kling 3.0standard/pro/4k, GPT Imagemedium/high, Ideogramfast/balanced/quality).safety_filter— фильтр 18+ (по умолчанию включён).enhance_prompt— модель сама дописывает промпт подробнее (Qwen, Flux 3).file_format— формат файла (png/jpegу картинок,glb/obj/fbx/stl/usdzу 3D).image— входная картинка (правка, фото→видео; передайте прямую ссылку или загрузите через/media/upload).video_url/audio_url— входные видео/аудио (video-edit, липсинк, аватары).
Музыка: title, style, instrumental, version (v6, v6-wild, v6-mini), advanced (точная настройка: свои название, стиль и длительность duration), exclude_styles, vocal (female/male), continue_from (с какой секунды продолжить), у звуков — loop, bpm, tonality; разделение на дорожки — mode (vocals, stems, track) и track (какую дорожку извлечь). Тонкие ручки стиля: style_weight, weirdness, audio_weight (0…1).
Озвучка: text, voice (короткое имя голоса из options, например james, bella, Zephyr), speed; у моделей Gemini — style, pace, accent, voice_description, scene, temperature. Диалог двух голосов:
{ "model": "audio/gemini-3.1-flash-tts",
"input": {
"voices": [ { "voice": "Kore", "style": "newscaster" }, { "voice": "Puck", "pace": "fast" } ],
"dialogue": [ { "speaker": 1, "text": "Привет! Сегодня у нас в гостях…" }, { "speaker": 2, "text": "Спасибо, что позвали." } ]
} }Точную цену конкретной конфигурации до запуска показывает POST /media/estimate с теми же model + input.
Прежние имена параметров тоже работают
19 октября 2026 параметры получили единые имена и значения (snake_case, значения строчными). Если ваша интеграция передаёт имена и значения из прежней версии документации, ничего менять не нужно: сервер принимает и их, результат и цена те же. В /media/models и в этой документации — только новые.
🧊 3D-модели
Генерация 3D из текста или из фотографии. На выходе — GLB (а также OBJ, FBX, STL, USDZ, USD, 3MF у разных моделей) плюс превью-картинка: в задании приходит несколько файлов, каждый со своим расширением.
Вызов такой же, как у остальной медиа: POST /media/generate и опрос GET /media/job/{id}.
curl -X POST https://nordrouter.com/media/generate -H "Authorization: Bearer $NR_KEY" -H "Content-Type: application/json" -d '{"model":"3d/tripo-text","input":{"prompt":"керамическая кружка, матовая глазурь"}}'| id | из чего | ≈ цена | особенности |
|---|---|---|---|
3d/tripo-text, 3d/tripo-image | текст, фото | от $0.31 | дешевле всех, quad-сетка, PBR |
3d/hunyuan-rapid-text, -image | текст, фото | от $0.43 | быстрая, 5 форматов файла |
3d/seed3d-image | фото | от $0.50 | GLB, OBJ, USD, USDZ |
3d/hunyuan-pro-text, -image | текст, фото | от $0.71 | до 1,5 млн полигонов |
3d/meshy-text, -image, -multi-image | текст, фото, до 4 ракурсов | от $0.94 | текстуры до 8K, поза персонажа |
Фото как текстура. Модели 3d/meshy-* принимают отдельную картинку (texture_photo) или описание материала словами (texture_text) — текстура задаётся независимо от геометрии. 3d/meshy-multi-image берёт до четырёх ракурсов одного предмета: так геометрия получается точнее.
Цена известна только после генерации
3D тарифицируется по фактически затраченным ресурсам, поэтому точная сумма становится известна после того, как модель посчитана. Мы удерживаем максимально возможную стоимость, а когда расчёт будет готов — списываем настоящую и возвращаем разницу. Итоговая сумма всегда видна в поле cost_usd.
В студии такие модели помечены плашкой, и генерация начинается только после вашего согласия.
Это долго. 3D считается от полуминуты до нескольких минут — дольше, чем картинка или короткое видео. Задание можно не держать открытым: статус сохраняется, есть вебхуки.
Стоимость и хранение
- Списывается с вашего USD-баланса по фактической стоимости генерации — точную сумму видно в
cost_usdпосле завершения. - Неудачные генерации не тарифицируются — резерв возвращается автоматически.
- Файлы хранятся на наших серверах ограниченное время (см.
retention_daysв/media/models) — скачайте, чтобы сохранить.