Skip to content

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.com

Sau đó, 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):

  1. Tạo tác vụ — POST /media/generate với mô hình và các tham số.
  2. Chờ kết quả — gọi GET /media/job/:id lặp lại cho đến khi status chuyển thành done.
  3. Lấy tệp — qua result_url (liên kết trên nordrouter.com).

1. Tạo tác vụ ​

bash
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:

json
{ "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ả ​

bash
curl https://nordrouter.com/media/job/beefb531-…
json
{ "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:

bash
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:

json
{ "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:

python
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_url chỉ được dùng https:// 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/:id là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:

json
{ "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ạiHọChế độ≈ Giá
🖼 Hình ảnhNano Banana / 2 / Pro (image/nano-banana*)văn bản→hình ảnh, chỉnh sửa, tối đa 4Ktừ $0.025
🖼Imagen 4 Fast / Ultra (image/imagen4*)văn bản→hình ảnhtừ $0.025
🖼GPT Image 1.5 / 2 (image/gpt-image-*)văn bản→hình ảnh, chỉnh sửa, tối đa 4Ktừ $0.025
🖼Flux 2 Pro / Flex (image/flux2-*)văn bản→hình ảnh, chỉnh sửatừ $0.03
🖼Seedream v4 / 4.5 / 5 Lite (image/seedream-*)văn bản→hình ảnh, chỉnh sửatừ $0.04
🖼Ideogram v3 / Character (image/ideogram-*)văn bản, phối lại, nhân vậttừ $0.02
🖼Qwen / Wan Image / Grok / Z-Imagevăn bản→hình ảnh, chỉnh sửatừ $0.01
🛠 Tiện íchTopaz / Recraft (image/*upscale*, image/recraft-remove-bg)nâng cấp độ phân giải đến 8K, xóa nềntừ $0.01
🎬 VideoVeo 3.1 Lite / Fast / Quality (video/veo-3.1-*)văn bản/ảnh→videotừ $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âytừ $0.16
🎬Wan 2.2 → 2.7 (video/wan-*)văn bản/ảnh/video→video, speech-to-videotừ $0.25
🎬Seedance 1.5 / 2 / Fast / Mini (video/seedance-*)văn bản/ảnh→video, tối đa 4K, có âm thanhtừ $0.06
🎬Hailuo 02 / 2.3 (video/hailuo-*)văn bản/ảnh→videotừ $0.08
🎬HappyHorse 1.0 / 1.1 (video/happyhorse-*)văn bản/ảnh/tham chiếu→video, chỉnh sửa videotừ $0.70
🎬Grok Video / 1.5 (video/grok-*)văn bản/ảnh→video, tối đa 30 giâytừ $0.06
🎬Gemini Omni (video/gemini-omni)video có âm thanh, tối đa 4Ktừ $0.39
🗣 AvatarKling Avatar, OmniHuman, InfiniteTalk, Lip Syncảnh+âm thanh→video có lời thoạitừ $0.19
🎵 Âm nhạcSuno 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óiElevenLabs Turbo / Multilingual (audio/elevenlabs-*)văn bản→giọng nói, tách giọngtừ $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ặc 480p/720p/768p/1080p/4k (video). Giá phụ thuộc vào độ phân giải.
  • aspect_ratio — 1:1, 16:9, 9:16 và các tỷ lệ khác; một số mô hình có tùy chọn kích thước 1: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 đa 15, Grok tối đa 30). 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/estimate sẽ tính đến điều này.
  • mode / quality / render_mode — mức chất lượng (Kling 3.0 standard/pro/4k, GPT Image medium/high, Ideogram fast/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/jpeg cho hình ảnh, glb/obj/fbx/stl/usdz cho 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:

json
{ "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}.

bash
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-imagevăn bản, ảnhtừ $0.31rẻ nhất, lưới quad, PBR
3d/hunyuan-rapid-text, -imagevăn bản, ảnhtừ $0.43nhanh, 5 định dạng tệp
3d/seed3d-imageảnhtừ $0.50GLB, OBJ, USD, USDZ
3d/hunyuan-pro-text, -imagevăn bản, ảnhtừ $0.71tối đa 1,5 triệu đa giác
3d/meshy-text, -image, -multi-imagevăn bản, ảnh, tối đa 4 góc chụptừ $0.94kế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_usd sau 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_days trong /media/models) — hãy tải xuống để lưu lại.