Tạo nội dung đa phương tiện (video, hình ảnh, nhạc)
NordRouter có thể tạo hình ảnh, video và nhạc bằng cùng khóa sk-nr-… và cùng số dư như các mô hình văn bản. Tính phí theo mức sử dụng thực tế, không dùng token hay gói dịch vụ.
Chỉ gửi yêu cầu từ backend, không gửi từ trình duyệt
Không thể gọi trực tiếp /media/* từ trình duyệt: yêu cầu sẽ không vượt qua kiểm tra CORS và kết thúc với lỗi Failed to fetch.
Đây là chủ ý. Endpoint yêu cầu khóa của bạn trong tiêu đề Authorization, nhưng mọi thứ được gửi đến trình duyệt đều hiển thị với bất kỳ ai mở công cụ dành cho nhà phát triển: khóa sẽ bị lộ và người khác có thể tiêu tiền trong số dư của bạn. Không có tiêu đề nào trong fetch có thể ngăn chặn điều này.
Cách triển khai đúng:
trình duyệt → máy chủ của bạn (khóa được lưu tại đây) → nordrouter.comSau đó, tệp hoàn tất sẽ được cung cấp qua một liên kết thông thường. Bạn có thể chèn liên kết này trực tiếp vào <img src> hoặc <video src> trên trang mà không cần thiết lập gì thêm.
Cách hoạt động
Quá trình tạo diễn ra bất đồng bộ (video và nhạc có thể mất từ vài giây đến vài phút):
- Tạo tác vụ —
POST /media/generatevới mô hình và các tham số. - Chờ kết quả — gọi
GET /media/job/:idlặp lại cho đến khistatuschuyển thànhdone. - Lấy tệp — qua
result_url(liên kết trênnordrouter.com).
1. Tạo tác vụ
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" }
}'Phản hồi:
{ "id": "beefb531-…", "model": "image/nano-banana-2", "status": "processing",
"poll": "https://nordrouter.com/media/job/beefb531-…" }Lỗi luôn có cùng định dạng: { "error": "понятный текст", "code": "missing_param" }. Dùng code để xử lý theo từng trường hợp trong mã (invalid_input, missing_param, unknown_model, insufficient_balance, rate_limited, no_auth…); error dành cho người đọc.
2. Chờ kết quả
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 (hoặc failed). Tệp hoàn tất có tại result_url.
🎵 Suno tạo hai bản nhạc cho mỗi tác vụ: bản đầu tiên ở
result_url, bản thứ hai ởresult_url_2(cùng định dạng liên kết). Giá được tính cho toàn bộ tác vụ, đã bao gồm cả hai bản nhạc.
Webhook (thay cho polling)
Không muốn polling? Hãy truyền trường callback_url trong POST /media/generate, chúng tôi sẽ tự gửi kết quả bằng yêu cầu POST khi tác vụ hoàn tất:
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": "ваш-секрет"
}'Khi tác vụ chuyển sang done/failed, một yêu cầu POST sẽ được gửi đến callback_url với cùng nội dung như phản hồi của GET /media/job/:id, kèm thêm trường 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 hoặc media.failed.
Xác minh chữ ký. Nếu đã đặt callback_secret, tiêu đề X-NR-Signature sẽ chứa sha256=<hmac> — HMAC-SHA256 của nội dung yêu cầu được tạo bằng secret của bạn. Hãy đối chiếu để xác nhận yêu cầu đến từ chúng tôi:
import hmac, hashlib
expected = "sha256=" + hmac.new(secret.encode(), raw_body, hashlib.sha256).hexdigest()
assert hmac.compare_digest(expected, request.headers["X-NR-Signature"])Yêu cầu và độ tin cậy:
callback_urlchỉ được dùnghttps://và phải là địa chỉ công khai (địa chỉ IP nội bộ/riêng tư sẽ bị từ chối với lỗi 400).- Tối đa 4 lần gửi lại với khoảng nghỉ tăng dần; hãy phản hồi
2xx, nếu không chúng tôi sẽ thử lại. - Webhook không thay thế polling: bạn có thể kết hợp cả hai hoặc dùng
GET /media/job/:idlàm phương án dự phòng.
Tìm hiểu thêm
Vòng đời tác vụ, xác minh chữ ký kèm ví dụ và độ tin cậy khi gửi được trình bày trên trang Tác vụ và webhook.
3. Danh sách mô hình và giá
GET /media/models trả về các mô hình khả dụng, tham số và chi phí ước tính:
{ "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 }Tài liệu tham khảo đầy đủ
Danh sách tất cả mô hình cùng tham số input và giá có trên trang Đa phương tiện: tất cả mô hình và thanh toán.
Mô hình
Có 95 mô hình — danh sách đầy đủ, cập nhật cùng các tham số và giá luôn có tại GET /media/models. Các họ chính:
| Loại | Họ | Chế độ | ≈ Giá |
|---|---|---|---|
| 🖼 Hình ảnh | Nano Banana / 2 / Pro (image/nano-banana*) | văn bản→hình ảnh, chỉnh sửa, tối đa 4K | từ $0.025 |
| 🖼 | Imagen 4 Fast / Ultra (image/imagen4*) | văn bản→hình ảnh | từ $0.025 |
| 🖼 | GPT Image 1.5 / 2 (image/gpt-image-*) | văn bản→hình ảnh, chỉnh sửa, tối đa 4K | từ $0.025 |
| 🖼 | Flux 2 Pro / Flex (image/flux2-*) | văn bản→hình ảnh, chỉnh sửa | từ $0.03 |
| 🖼 | Seedream v4 / 4.5 / 5 Lite (image/seedream-*) | văn bản→hình ảnh, chỉnh sửa | từ $0.04 |
| 🖼 | Ideogram v3 / Character (image/ideogram-*) | văn bản, phối lại, nhân vật | từ $0.02 |
| 🖼 | Qwen / Wan Image / Grok / Z-Image | văn bản→hình ảnh, chỉnh sửa | từ $0.01 |
| 🛠 Tiện ích | Topaz / Recraft (image/*upscale*, image/recraft-remove-bg) | nâng cấp độ phân giải đến 8K, xóa nền | từ $0.01 |
| 🎬 Video | Veo 3.1 Lite / Fast / Quality (video/veo-3.1-*) | văn bản/ảnh→video | từ $0.19 |
| 🎬 | Kling 2.1 → 3.0 (video/kling-*) | văn bản/ảnh→video, chuyển động, avatar, tối đa 4K và 15 giây | từ $0.16 |
| 🎬 | Wan 2.2 → 2.7 (video/wan-*) | văn bản/ảnh/video→video, speech-to-video | từ $0.25 |
| 🎬 | Seedance 1.5 / 2 / Fast / Mini (video/seedance-*) | văn bản/ảnh→video, tối đa 4K, có âm thanh | từ $0.06 |
| 🎬 | Hailuo 02 / 2.3 (video/hailuo-*) | văn bản/ảnh→video | từ $0.08 |
| 🎬 | HappyHorse 1.0 / 1.1 (video/happyhorse-*) | văn bản/ảnh/tham chiếu→video, chỉnh sửa video | từ $0.70 |
| 🎬 | Grok Video / 1.5 (video/grok-*) | văn bản/ảnh→video, tối đa 30 giây | từ $0.06 |
| 🎬 | Gemini Omni (video/gemini-omni) | video có âm thanh, tối đa 4K | từ $0.39 |
| 🗣 Avatar | Kling Avatar, OmniHuman, InfiniteTalk, Lip Sync | ảnh+âm thanh→video có lời thoại | từ $0.19 |
| 🎵 Âm nhạc | Suno V6 / V6 Wild / V6 Mini (music/suno-*) | văn bản/phong cách→2 bản nhạc, bản cover, phần tiếp theo, giọng hát, các track, âm thanh | ~$0.08 |
| 🎙 Tổng hợp giọng nói | ElevenLabs Turbo / Multilingual (audio/elevenlabs-*) | văn bản→giọng nói, tách giọng | từ $0.04 / 1000 ký tự |
Tham số
Tham số tùy thuộc vào mô hình — xem danh sách chính xác tại /media/models (trường fields: tên, kiểu, tùy chọn, giá trị mặc định). Tên dùng thống nhất kiểu snake_case, giá trị viết thường. Các tham số chung:
prompt— mô tả (dành cho mọi mô hình tạo sinh).resolution—1k/2k/4k(hình ảnh) hoặc480p/720p/768p/1080p/4k(video). Giá phụ thuộc vào độ phân giải.aspect_ratio—1:1,16:9,9:16và các tỷ lệ khác; một số mô hình có tùy chọn kích thước1:1-hd.duration— thời lượng video tính bằng giây (đa số hỗ trợ5/10, Kling 3.0 và Wan 2.7 tối đa15, Grok tối đa30). Video được tính phí theo giây.audio— có hoặc không có track âm thanh trong video (true/false). Video có âm thanh đắt hơn —/media/estimatesẽ tính đến điều này.mode/quality/render_mode— mức chất lượng (Kling 3.0standard/pro/4k, GPT Imagemedium/high, Ideogramfast/balanced/quality).safety_filter— bộ lọc nội dung 18+ (được bật theo mặc định).enhance_prompt— mô hình tự bổ sung chi tiết cho prompt (Qwen, Flux 3).file_format— định dạng tệp (png/jpegcho hình ảnh,glb/obj/fbx/stl/usdzcho 3D).image— hình ảnh đầu vào (chỉnh sửa, ảnh→video; gửi liên kết trực tiếp hoặc tải lên qua/media/upload).video_url/audio_url— video/âm thanh đầu vào (video-edit, đồng bộ khẩu hình, avatar).
Âm nhạc: title, style, instrumental, version (v6, v6-wild, v6-mini), advanced (tùy chỉnh chi tiết: tên, phong cách và thời lượng duration của riêng bạn), exclude_styles, vocal (female/male), continue_from (tiếp tục từ giây nào); với âm thanh có loop, bpm, tonality; tách track bằng mode (vocals, stems, track) và track (track cần trích xuất). Các tham số tinh chỉnh phong cách: style_weight, weirdness, audio_weight (0…1).
Tổng hợp giọng nói: text, voice (tên ngắn của giọng nói lấy từ options, ví dụ james, bella, Zephyr), speed; với các mô hình Gemini có style, pace, accent, voice_description, scene, temperature. Đối thoại giữa hai giọng nói:
{ "model": "audio/gemini-3.1-flash-tts",
"input": {
"voices": [ { "voice": "Kore", "style": "newscaster" }, { "voice": "Puck", "pace": "fast" } ],
"dialogue": [ { "speaker": 1, "text": "Привет! Сегодня у нас в гостях…" }, { "speaker": 2, "text": "Спасибо, что позвали." } ]
} }Để biết chính xác giá của một cấu hình trước khi chạy, hãy gửi POST /media/estimate với cùng model + input.
Tên tham số cũ vẫn được hỗ trợ
Ngày 19 tháng 10 năm 2026, các tham số được chuẩn hóa tên và giá trị (snake_case, giá trị viết thường). Nếu tích hợp của bạn đang gửi tên và giá trị từ phiên bản tài liệu trước, bạn không cần thay đổi gì: máy chủ vẫn chấp nhận chúng, kết quả và giá không đổi. /media/models và tài liệu này chỉ dùng tên mới.
🧊 Mô hình 3D
Tạo mô hình 3D từ văn bản hoặc ảnh. Kết quả gồm GLB (cùng OBJ, FBX, STL, USDZ, USD, 3MF tùy mô hình) và ảnh xem trước: một tác vụ sẽ trả về nhiều tệp, mỗi tệp có phần mở rộng riêng.
Cách gọi giống như các loại media khác: POST /media/generate và thăm dò trạng thái qua 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":"cốc gốm, men mờ"}}'| id | đầu vào | ≈ giá | đặc điểm |
|---|---|---|---|
3d/tripo-text, 3d/tripo-image | văn bản, ảnh | từ $0.31 | rẻ nhất, lưới quad, PBR |
3d/hunyuan-rapid-text, -image | văn bản, ảnh | từ $0.43 | nhanh, 5 định dạng tệp |
3d/seed3d-image | ảnh | từ $0.50 | GLB, OBJ, USD, USDZ |
3d/hunyuan-pro-text, -image | văn bản, ảnh | từ $0.71 | tối đa 1,5 triệu đa giác |
3d/meshy-text, -image, -multi-image | văn bản, ảnh, tối đa 4 góc chụp | từ $0.94 | kết cấu tối đa 8K, tư thế nhân vật |
Ảnh làm kết cấu. Các mô hình 3d/meshy-* nhận ảnh riêng (texture_photo) hoặc mô tả vật liệu bằng lời (texture_text) — kết cấu được thiết lập độc lập với hình học. 3d/meshy-multi-image nhận tối đa bốn góc chụp của cùng một vật thể, giúp hình học chính xác hơn.
Chỉ biết giá sau khi tạo
3D được tính phí theo tài nguyên thực tế đã sử dụng, vì vậy số tiền chính xác chỉ được xác định sau khi mô hình được tạo. Chúng tôi tạm giữ chi phí tối đa có thể; khi quá trình tính toán hoàn tất, chúng tôi trừ chi phí thực tế và hoàn lại phần chênh lệch. Tổng chi phí luôn hiển thị trong trường cost_usd.
Trong studio, các mô hình này được đánh dấu riêng và quá trình tạo chỉ bắt đầu sau khi bạn xác nhận.
Quá trình này mất thời gian. Việc tạo 3D mất từ nửa phút đến vài phút, lâu hơn so với ảnh hoặc video ngắn. Bạn không cần để tác vụ mở: trạng thái được lưu và có hỗ trợ webhook.
Chi phí và lưu trữ
- Khoản phí được trừ từ số dư USD của bạn theo chi phí tạo thực tế — số tiền chính xác hiển thị trong
cost_usdsau khi hoàn tất. - Các lần tạo không thành công không bị tính phí — khoản tiền tạm giữ được tự động hoàn lại.
- Tệp được lưu trên máy chủ của chúng tôi trong thời gian giới hạn (xem
retention_daystrong/media/models) — hãy tải xuống để lưu lại.