媒体生成(视频、图片、音乐)
NordRouter 支持生成图像、视频和音乐,与文本模型使用同一个 sk-nr-… 密钥和同一账户余额。按实际生成计费,无需 token 或套餐。
仅限从后端发起请求,请勿从浏览器请求
不能直接从浏览器请求 /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-YOUR-KEY" \
-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(链接格式相同)。价格按整个任务计算,已包含两首曲目。
Webhook(替代轮询)
如果不想轮询,可在 POST /media/generate 中传入 callback_url 字段,任务完成后我们会通过 POST 请求主动发送结果:
curl https://nordrouter.com/media/generate \
-H "Authorization: Bearer sk-nr-YOUR-KEY" -H "Content-Type: application/json" \
-d '{
"model": "image/nano-banana-2",
"input": { "prompt": "…" },
"callback_url": "https://your-server.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,否则我们会重试。 - 使用 Webhook 后仍可轮询,两者可以结合使用,也可将
GET /media/job/:id作为备用方式。
了解更多
任务生命周期、签名验证示例及投递可靠性,详见**任务与 Webhook** 页面。
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-*) | 文本/照片→视频、运动控制、数字人,最高 4K、最长 15 秒 | $0.16 起 |
| 🎬 | Wan 2.2 → 2.7 (video/wan-*) | 文本/照片/视频→视频、语音生成视频 | $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.0:standard/pro/4k,GPT Image:medium/high,Ideogram:fast/balanced/quality)。safety_filter— 18+ 内容过滤器(默认启用)。enhance_prompt— 模型自动补充提示词细节(Qwen、Flux 3)。file_format— 文件格式(图像为png/jpeg,3D 为glb/obj/fbx/stl/usdz)。image— 输入图像(编辑、照片→视频;传入直链或通过/media/upload上传)。video_url/audio_url— 输入视频/音频(视频编辑、口型同步、数字人)。
音乐: 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,查看该配置的准确价格。
旧参数名称仍然有效
2026 年 10 月 19 日,参数名称和值进行了统一(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 起 | 价格最低,四边形网格,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 起 | 最高 150 万个多边形 |
3d/meshy-text, -image, -multi-image | 文本、照片、最多 4 个视角 | $0.94 起 | 最高 8K 纹理,角色姿势 |
用照片作为纹理。 3d/meshy-* 模型支持单独提供图片 (texture_photo)或用文字描述材质(texture_text)——纹理 可独立于几何形状设置。3d/meshy-multi-image 支持同一物体最多四个 视角的图片,从而生成更准确的几何形状。
生成完成后才能确定价格
3D 按实际消耗的资源计费,因此只有在模型计算完成后 才能确定准确金额。我们会预留 可能产生的最高费用,计算完成后扣除 实际费用,并退还差额。最终金额始终可在 cost_usd 字段中查看。
在工作室中,这类模型会带有标识,且只有在 您同意后才会开始生成。
耗时较长。 3D 生成需要半分钟到几分钟,比 图片或短视频更久。无需一直保持任务页面打开:状态 会保存,并支持 Webhook。
费用与存储
- 从您的 USD 余额中按实际生成费用扣款——完成后可在
cost_usd中查看准确金额。 - 生成失败不收费——预留金额会自动退还。
- 文件在我们的服务器上仅限时保存(参见
/media/models中的retention_days)——请下载以便长期保存。