Pembuatan media (video, gambar, musik)
NordRouter dapat membuat gambar, video, dan musik — dengan kunci sk-nr-… dan saldo yang sama seperti model teks. Pembayaran berdasarkan penggunaan aktual, tanpa token atau paket.
Permintaan hanya dari backend, bukan dari browser
Mengakses /media/* langsung dari browser tidak diperbolehkan — permintaan tidak akan lolos pemeriksaan CORS dan akan terhenti dengan Failed to fetch.
Ini disengaja. Endpoint ini memerlukan kunci Anda di header Authorization, sementara semua yang masuk ke browser dapat dilihat oleh siapa pun yang membuka alat pengembang: kunci akan bocor dan orang lain akan mulai menggunakan saldo Anda. Header apa pun di fetch tidak dapat mencegah hal ini.
Alur yang benar:
browser → server Anda (kunci disimpan di sini) → nordrouter.comFile yang sudah selesai tersedia melalui tautan biasa — tautan ini dapat langsung dipasang di <img src> atau <video src> pada halaman, tanpa konfigurasi tambahan.
Cara kerjanya
Pembuatan berlangsung secara asinkron (video dan musik memerlukan beberapa detik hingga beberapa menit):
- Buat tugas —
POST /media/generatedengan model dan parameter. - Tunggu hasilnya — lakukan polling ke
GET /media/job/:idhinggastatusmenjadidone. - Ambil file — melalui
result_url(tautan kenordrouter.com).
1. Buat tugas
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": "pondok nyaman di hutan musim dingin, cat air", "resolution": "2k" }
}'Respons:
{ "id": "beefb531-…", "model": "image/nano-banana-2", "status": "processing",
"poll": "https://nordrouter.com/media/job/beefb531-…" }Error selalu memiliki format yang sama: { "error": "понятный текст", "code": "missing_param" }. Gunakan code untuk percabangan dalam kode (invalid_input, missing_param, unknown_model, insufficient_balance, rate_limited, no_auth…), sedangkan error ditujukan untuk manusia.
2. Tunggu hasilnya
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 (atau failed). File yang sudah selesai tersedia melalui result_url.
🎵 Suno membuat dua trek per tugas: trek pertama di
result_url, trek kedua diresult_url_2(format tautan yang sama). Harga berlaku untuk seluruh tugas, sudah termasuk kedua trek.
Webhook (sebagai pengganti polling)
Jika tidak ingin melakukan polling, sertakan field callback_url dalam POST /media/generate, dan kami akan mengirimkan hasilnya secara otomatis melalui permintaan POST saat tugas selesai:
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": "rahasia-anda"
}'Saat tugas beralih ke done/failed, callback_url akan menerima POST dengan body yang sama seperti respons GET /media/job/:id, ditambah field 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 atau media.failed.
Verifikasi tanda tangan. Jika Anda menetapkan callback_secret, header X-NR-Signature akan berisi sha256=<hmac> — HMAC-SHA256 dari body permintaan menggunakan rahasia Anda. Cocokkan untuk memastikan permintaan berasal dari kami:
import hmac, hashlib
expected = "sha256=" + hmac.new(secret.encode(), raw_body, hashlib.sha256).hexdigest()
assert hmac.compare_digest(expected, request.headers["X-NR-Signature"])Persyaratan dan keandalan:
callback_url— hanyahttps://dan hanya alamat publik (IP internal/privat ditolak dengan error 400).- Hingga 4 percobaan pengiriman dengan jeda yang semakin panjang; berikan respons
2xx, jika tidak, kami akan mencoba lagi. - Webhook tidak menonaktifkan polling — keduanya dapat digunakan bersamaan, atau gunakan
GET /media/job/:idsebagai cadangan.
Selengkapnya
Siklus hidup tugas, verifikasi tanda tangan beserta contoh, dan keandalan pengiriman — tersedia di halaman Tugas dan webhook.
3. Daftar model dan harga
GET /media/models mengembalikan model yang tersedia, parameternya, dan perkiraan biaya:
{ "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 }Referensi lengkap
Semua model beserta parameter input dan harganya — tersedia di halaman Media: semua model dan penagihan.
Model
Tersedia 95 model — daftar lengkap dan terbaru beserta parameter dan harganya selalu tersedia di GET /media/models. Keluarga utama:
| Jenis | Keluarga | Mode | ≈ Harga |
|---|---|---|---|
| 🖼 Gambar | Nano Banana / 2 / Pro (image/nano-banana*) | teks→gambar, pengeditan, hingga 4K | mulai $0.025 |
| 🖼 | Imagen 4 Fast / Ultra (image/imagen4*) | teks→gambar | mulai $0.025 |
| 🖼 | GPT Image 1.5 / 2 (image/gpt-image-*) | teks→gambar, pengeditan, hingga 4K | mulai $0.025 |
| 🖼 | Flux 2 Pro / Flex (image/flux2-*) | teks→gambar, pengeditan | mulai $0.03 |
| 🖼 | Seedream v4 / 4.5 / 5 Lite (image/seedream-*) | teks→gambar, pengeditan | mulai $0.04 |
| 🖼 | Ideogram v3 / Character (image/ideogram-*) | teks, remix, karakter | mulai $0.02 |
| 🖼 | Qwen / Wan Image / Grok / Z-Image | teks→gambar, pengeditan | mulai $0.01 |
| 🛠 Utilitas | Topaz / Recraft (image/*upscale*, image/recraft-remove-bg) | upscale hingga 8K, penghapusan latar belakang | mulai $0.01 |
| 🎬 Video | Veo 3.1 Lite / Fast / Quality (video/veo-3.1-*) | teks/foto→video | mulai $0.19 |
| 🎬 | Kling 2.1 → 3.0 (video/kling-*) | teks/foto→video, motion, avatar, hingga 4K dan 15 dtk | mulai $0.16 |
| 🎬 | Wan 2.2 → 2.7 (video/wan-*) | teks/foto/video→video, speech-to-video | mulai $0.25 |
| 🎬 | Seedance 1.5 / 2 / Fast / Mini (video/seedance-*) | teks/foto→video, hingga 4K, audio | mulai $0.06 |
| 🎬 | Hailuo 02 / 2.3 (video/hailuo-*) | teks/foto→video | mulai $0.08 |
| 🎬 | HappyHorse 1.0 / 1.1 (video/happyhorse-*) | teks/foto/referensi→video, pengeditan video | mulai $0.70 |
| 🎬 | Grok Video / 1.5 (video/grok-*) | teks/foto→video, hingga 30 dtk | mulai $0.06 |
| 🎬 | Gemini Omni (video/gemini-omni) | video dengan audio, hingga 4K | mulai $0.39 |
| 🗣 Avatar | Kling Avatar, OmniHuman, InfiniteTalk, Lip Sync | foto+audio→video berbicara | mulai $0.19 |
| 🎵 Musik | Suno V6 / V6 Wild / V6 Mini (music/suno-*) | teks/gaya→2 lagu, cover, kelanjutan, vokal, stem, suara | ~$0.08 |
| 🎙 Sulih suara | ElevenLabs Turbo / Multilingual (audio/elevenlabs-*) | teks→ucapan, isolasi suara | mulai $0.04 / 1000 karakter |
Parameter
Parameter bergantung pada model — daftar tepatnya tersedia di /media/models (field fields: nama, tipe, opsi, default). Nama menggunakan format yang sama (snake_case), nilai menggunakan huruf kecil. Parameter umum:
prompt— deskripsi (untuk semua model generatif).resolution—1k/2k/4k(gambar) atau480p/720p/768p/1080p/4k(video). Harga bergantung pada resolusi.aspect_ratio—1:1,16:9,9:16, dan lainnya; model yang menyediakan pilihan ukuran juga memiliki1:1-hd.duration— durasi video dalam detik (sebagian besar mendukung5/10, Kling 3.0 dan Wan 2.7 hingga15, Grok hingga30). Video ditagih per detik.audio— trek audio dalam video (true/false). Video dengan audio lebih mahal — estimasi di/media/estimatememperhitungkannya.mode/quality/render_mode— tingkat kualitas (Kling 3.0standard/pro/4k, GPT Imagemedium/high, Ideogramfast/balanced/quality).safety_filter— filter 18+ (aktif secara default).enhance_prompt— model melengkapi prompt dengan detail tambahan secara otomatis (Qwen, Flux 3).file_format— format file (png/jpeguntuk gambar,glb/obj/fbx/stl/usdzuntuk 3D).image— gambar input (pengeditan, foto→video; berikan tautan langsung atau unggah melalui/media/upload).video_url/audio_url— video/audio input (video-edit, lip-sync, avatar).
Musik: title, style, instrumental, version (v6, v6-wild, v6-mini), advanced (pengaturan presisi: judul, gaya, dan durasi duration kustom), exclude_styles, vocal (female/male), continue_from (detik untuk melanjutkan); untuk suara: loop, bpm, tonality; pemisahan trek: mode (vocals, stems, track) dan track (trek yang akan diekstrak). Pengaturan gaya lanjutan: style_weight, weirdness, audio_weight (0…1).
Sulih suara: text, voice (nama singkat suara dari options, misalnya james, bella, Zephyr), speed; untuk model Gemini: style, pace, accent, voice_description, scene, temperature. Dialog dua suara:
{ "model": "audio/gemini-3.1-flash-tts",
"input": {
"voices": [ { "voice": "Kore", "style": "newscaster" }, { "voice": "Puck", "pace": "fast" } ],
"dialogue": [ { "speaker": 1, "text": "Привет! Сегодня у нас в гостях…" }, { "speaker": 2, "text": "Спасибо, что позвали." } ]
} }Harga pasti untuk konfigurasi tertentu sebelum dijalankan dapat dilihat dengan POST /media/estimate, menggunakan model + input yang sama.
Nama parameter sebelumnya tetap berfungsi
Pada 19 Oktober 2026, parameter diseragamkan nama dan nilainya (snake_case, nilai huruf kecil). Jika integrasi Anda mengirim nama dan nilai dari versi dokumentasi sebelumnya, tidak perlu mengubah apa pun: server tetap menerimanya, dan hasil serta harganya sama. /media/models dan dokumentasi ini hanya menampilkan yang baru.
🧊 Model 3D
Pembuatan 3D dari teks atau foto. Hasilnya berupa GLB (serta OBJ, FBX, STL, USDZ, USD, 3MF pada berbagai model) beserta gambar pratinjau: satu tugas menghasilkan beberapa file, masing-masing dengan ekstensinya sendiri.
Pemanggilannya sama seperti media lainnya: POST /media/generate dan polling 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":"cangkir keramik, glasir matte"}}'| id | sumber | ≈ harga | fitur |
|---|---|---|---|
3d/tripo-text, 3d/tripo-image | teks, foto | mulai $0.31 | paling murah, mesh quad, PBR |
3d/hunyuan-rapid-text, -image | teks, foto | mulai $0.43 | cepat, 5 format file |
3d/seed3d-image | foto | mulai $0.50 | GLB, OBJ, USD, USDZ |
3d/hunyuan-pro-text, -image | teks, foto | mulai $0.71 | hingga 1,5 juta poligon |
3d/meshy-text, -image, -multi-image | teks, foto, hingga 4 sudut pandang | mulai $0.94 | tekstur hingga 8K, pose karakter |
Foto sebagai tekstur. Model 3d/meshy-* menerima gambar terpisah (texture_photo) atau deskripsi material dalam teks (texture_text) — tekstur ditentukan secara independen dari geometri. 3d/meshy-multi-image menerima hingga empat sudut pandang dari objek yang sama: ini menghasilkan geometri yang lebih akurat.
Harga baru diketahui setelah pembuatan selesai
Biaya 3D dihitung berdasarkan sumber daya yang benar-benar digunakan, sehingga jumlah pastinya baru diketahui setelah model selesai diproses. Kami menahan biaya maksimum yang mungkin dikenakan, lalu setelah perhitungan selesai — memotong biaya sebenarnya dan mengembalikan selisihnya. Jumlah akhir selalu terlihat di field cost_usd.
Di studio, model tersebut ditandai dengan label, dan pembuatan hanya dimulai setelah Anda memberikan persetujuan.
Prosesnya lama. Pemrosesan 3D memerlukan waktu dari setengah menit hingga beberapa menit — lebih lama daripada gambar atau video pendek. Anda tidak perlu membiarkan tugas tetap terbuka: status tersimpan dan webhook tersedia.
Biaya dan penyimpanan
- Saldo USD Anda dipotong sesuai biaya pembuatan sebenarnya — jumlah pastinya terlihat di
cost_usdsetelah selesai. - Pembuatan yang gagal tidak dikenakan biaya — dana yang ditahan dikembalikan secara otomatis.
- File disimpan di server kami untuk waktu terbatas (lihat
retention_daysdi/media/models) — unduh untuk menyimpannya.