メディア生成(動画、画像、音楽)
NordRouter では、テキストモデルと同じ sk-nr-… キー、同じ残高を使って画像、動画、音楽を生成できます。利用した分だけの従量課金で、トークンやパッケージはありません。
バックエンドからのみリクエスト可能。ブラウザーからはリクエストできません
ブラウザーから /media/* に直接リクエストすることはできません。CORS チェックで拒否され、Failed to fetch になります。
これは意図的な仕様です。このエンドポイントでは Authorization ヘッダーにキーが必要ですが、ブラウザーに渡した情報は開発者ツールを開けば誰でも確認できるため、キーが漏えいし、第三者に残高を使われるおそれがあります。fetch にヘッダーを設定しても防げません。
正しい構成:
ブラウザー → あなたのサーバー(キーはここで管理)→ nordrouter.com生成されたファイルは通常のリンクで返されるため、ページ内の <img src> や <video src> にそのまま指定できます。追加の設定は不要です。
仕組み
生成は非同期で行われます(動画や音楽の生成には数秒から数分かかります)。
- タスクを作成 — モデルとパラメーターを指定して
POST /media/generateを送信します。 - 結果を待つ —
statusがdoneになるまでGET /media/job/:idをポーリングします。 - ファイルを取得 —
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 は1タスクにつき2曲を生成します。1曲目は
result_url、2曲目はresult_url_2(同じ形式のリンク)にあります。料金はタスク全体に対するもので、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 になると、GET /media/job/:id の応答と同じ内容に event フィールドを追加した POST が callback_url に届きます。
{ "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 やプライベート 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-*) | テキスト/写真/動画→動画、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-*) | テキスト→音声、音声分離 | 1000文字あたり$0.04~ |
パラメータ
パラメータはモデルによって異なります。正確な一覧は /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 も指定できます。2人の音声による対話:
{ "model": "audio/gemini-3.1-flash-tts",
"input": {
"voices": [ { "voice": "Kore", "style": "newscaster" }, { "voice": "Puck", "pace": "fast" } ],
"dialogue": [ { "speaker": 1, "text": "こんにちは!今日はゲストをお迎えしています…" }, { "speaker": 2, "text": "お招きいただきありがとうございます。" } ]
} }実行前に、同じ model と input を指定した POST /media/estimate で、構成ごとの正確な料金を確認できます。
以前のパラメータ名も引き続き使用できます
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 は同じ物体を最大4方向から撮影した画像を受け取れるため、より正確なジオメトリを生成できます。
料金は生成後に確定します
3D生成は実際に使用したリソースに基づいて課金されるため、正確な金額はモデルの計算が完了した後に確定します。最大料金を一時的に確保し、計算完了後に実際の料金を請求して、差額を返金します。最終的な金額は常に cost_usd フィールドで確認できます。
スタジオでは、このようなモデルにラベルが表示され、同意後にのみ生成が開始されます。
時間がかかります。 3D生成には30秒から数分かかり、画像や短い動画より時間がかかります。ジョブ画面を開いたままにする必要はありません。状態は保存され、Webhookも利用できます。
料金と保存期間
- USD残高から実際の生成料金が差し引かれます。正確な金額は完了後に
cost_usdで確認できます。 - 生成に失敗した場合、課金されません。確保した金額は自動的に返金されます。
- ファイルは当社サーバーに一定期間保存されます(
/media/modelsのretention_daysを参照)。保存するにはダウンロードしてください。