Skip to content

Mediengenerierung (Video, Bilder, Musik) ​

NordRouter kann Bilder, Videos und Musik generieren – mit demselben sk-nr-…-Schlüssel und demselben Guthaben wie für Textmodelle. Sie zahlen pro tatsächlicher Nutzung, ohne Tokens oder Pakete.

Anfragen nur vom Backend, nicht aus dem Browser

Direkte Anfragen an /media/* aus dem Browser sind nicht möglich – sie bestehen die CORS-Prüfung nicht und werden mit Failed to fetch abgebrochen.

Das ist beabsichtigt. Der Endpunkt erfordert Ihren Schlüssel im Authorization-Header. Alles, was im Browser landet, ist für alle sichtbar, die die Entwicklertools öffnen: Ihr Schlüssel würde offengelegt und andere könnten Ihr Guthaben ausgeben. Auch Header in fetch schützen davor nicht.

Der richtige Ablauf:

Browser → Ihr Server (der Schlüssel bleibt hier) → nordrouter.com

Die fertige Datei wird über einen gewöhnlichen Link bereitgestellt. Sie können ihn direkt in <img src> oder <video src> auf der Seite einfügen; dafür ist keine zusätzliche Konfiguration nötig.

So funktioniert es ​

Die Generierung erfolgt asynchron (Video und Musik dauern einige Sekunden bis zu ein paar Minuten):

  1. Aufgabe erstellen – POST /media/generate mit Modell und Parametern.
  2. Auf das Ergebnis warten – GET /media/job/:id abfragen, bis status den Wert done hat.
  3. Datei abrufen – über result_url (ein Link zu nordrouter.com).

1. Aufgabe erstellen ​

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" }
  }'

Antwort:

json
{ "id": "beefb531-…", "model": "image/nano-banana-2", "status": "processing",
  "poll": "https://nordrouter.com/media/job/beefb531-…" }

Fehler haben immer dasselbe Format: { "error": "понятный текст", "code": "missing_param" }. Anhand von code können Sie bequem im Code verzweigen (invalid_input, missing_param, unknown_model, insufficient_balance, rate_limited, no_auth …), error ist für Menschen gedacht.

2. Auf das Ergebnis warten ​

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 (oder failed). Die fertige Datei ist unter result_url verfügbar.

🎵 Suno generiert zwei Tracks pro Aufgabe: Der erste steht unter result_url, der zweite unter result_url_2 (Link im selben Format). Der Preis gilt für die gesamte Aufgabe; beide Tracks sind bereits enthalten.

Webhooks (statt Polling) ​

Sie möchten nicht pollen? Übergeben Sie das Feld callback_url in POST /media/generate, und wir senden Ihnen das Ergebnis automatisch per POST-Anfrage, sobald die Aufgabe abgeschlossen ist:

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": "ваш-секрет"
  }'

Sobald die Aufgabe den Status done oder failed erreicht, wird eine POST-Anfrage mit demselben Inhalt wie bei GET /media/job/:id an callback_url gesendet, ergänzt um das Feld 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 oder media.failed.

Signatur überprüfen. Wenn Sie callback_secret angegeben haben, wird im Header X-NR-Signature der Wert sha256=<hmac> gesendet – ein HMAC-SHA256 über den Anfrageinhalt, berechnet mit Ihrem Secret. Prüfen Sie die Signatur, um sicherzustellen, dass die Anfrage von uns stammt:

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"])

Anforderungen und Zuverlässigkeit:

  • callback_url muss mit https:// beginnen und eine öffentliche Adresse sein (interne/private IP-Adressen werden mit Fehler 400 abgelehnt).
  • Bis zu 4 Zustellversuche mit zunehmenden Pausen; antworten Sie mit 2xx, andernfalls versuchen wir es erneut.
  • Webhooks ersetzen das Polling nicht. Sie können beides kombinieren oder GET /media/job/:id als Ausweichmöglichkeit verwenden.

Weitere Informationen

Der Lebenszyklus von Aufgaben, die Signaturprüfung mit Beispielen und die Zuverlässigkeit der Zustellung werden auf der Seite Aufgaben und Webhooks beschrieben.

3. Modellliste und Preise ​

GET /media/models gibt verfügbare Modelle, ihre Parameter und eine Kostenschätzung zurück:

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 }

Vollständige Referenz

Alle Modelle mit input-Parametern und Preisen finden Sie auf der Seite Medien: alle Modelle und Abrechnung.

Modelle ​

95 Modelle sind verfügbar. Die vollständige aktuelle Liste mit Parametern und Preisen ist immer unter GET /media/models abrufbar. Die wichtigsten Familien:

TypFamilieModi≈ Preis
🖼 BilderNano Banana / 2 / Pro (image/nano-banana*)Text→Bild, Bearbeitung, bis zu 4Kab $0.025
🖼Imagen 4 Fast / Ultra (image/imagen4*)Text→Bildab $0.025
🖼GPT Image 1.5 / 2 (image/gpt-image-*)Text→Bild, Bearbeitung, bis zu 4Kab $0.025
🖼Flux 2 Pro / Flex (image/flux2-*)Text→Bild, Bearbeitungab $0.03
🖼Seedream v4 / 4.5 / 5 Lite (image/seedream-*)Text→Bild, Bearbeitungab $0.04
🖼Ideogram v3 / Character (image/ideogram-*)Text, Remix, Charakterab $0.02
🖼Qwen / Wan Image / Grok / Z-ImageText→Bild, Bearbeitungab $0.01
🛠 DienstprogrammeTopaz / Recraft (image/*upscale*, image/recraft-remove-bg)Upscaling bis 8K, Hintergrund entfernenab $0.01
🎬 VideoVeo 3.1 Lite / Fast / Quality (video/veo-3.1-*)Text/Foto→Videoab $0.19
🎬Kling 2.1 → 3.0 (video/kling-*)Text/Foto→Video, Motion, Avatare, bis zu 4K und 15 sab $0.16
🎬Wan 2.2 → 2.7 (video/wan-*)Text/Foto/Video→Video, Speech-to-Videoab $0.25
🎬Seedance 1.5 / 2 / Fast / Mini (video/seedance-*)Text/Foto→Video, bis zu 4K, Audioab $0.06
🎬Hailuo 02 / 2.3 (video/hailuo-*)Text/Foto→Videoab $0.08
🎬HappyHorse 1.0 / 1.1 (video/happyhorse-*)Text/Foto/Referenz→Video, Videobearbeitungab $0.70
🎬Grok Video / 1.5 (video/grok-*)Text/Foto→Video, bis zu 30 sab $0.06
🎬Gemini Omni (video/gemini-omni)Video mit Audio, bis zu 4Kab $0.39
🗣 AvatareKling Avatar, OmniHuman, InfiniteTalk, Lip SyncFoto+Audio→sprechendes Videoab $0.19
🎵 MusikSuno V6 / V6 Wild / V6 Mini (music/suno-*)Text/Stil→2 Tracks, Cover, Fortsetzung, Gesang, Spuren, Sounds~$0.08
🎙 SprachsyntheseElevenLabs Turbo / Multilingual (audio/elevenlabs-*)Text→Sprache, Stimmenisolationab $0.04 / 1000 Zeichen

Parameter ​

Die Parameter hängen vom Modell ab. Die genaue Liste finden Sie unter /media/models (Feld fields: Name, Typ, Optionen, Standardwert). Die Namen verwenden ein einheitliches Format (snake_case), Werte werden kleingeschrieben. Allgemeine Parameter:

  • prompt — Beschreibung (für alle generativen Modelle).
  • resolution — 1k/2k/4k (Bilder) oder 480p/720p/768p/1080p/4k (Video). Der Preis hängt von der Auflösung ab.
  • aspect_ratio — 1:1, 16:9, 9:16 usw.; Modelle mit Größenwahl unterstützen auch 1:1-hd.
  • duration — Videolänge in Sekunden (bei den meisten Modellen 5/10, bei Kling 3.0 und Wan 2.7 bis zu 15, bei Grok bis zu 30). Videos werden sekundengenau abgerechnet.
  • audio — Audiospur im Video (true/false). Mit Audio ist es teurer; die Schätzung unter /media/estimate berücksichtigt das.
  • mode / quality / render_mode — Qualitätsstufe (Kling 3.0 standard/pro/4k, GPT Image medium/high, Ideogram fast/balanced/quality).
  • safety_filter — Filter für Inhalte ab 18 Jahren (standardmäßig aktiviert).
  • enhance_prompt — Das Modell ergänzt den Prompt automatisch um Details (Qwen, Flux 3).
  • file_format — Dateiformat (png/jpeg für Bilder, glb/obj/fbx/stl/usdz für 3D).
  • image — Eingabebild (Bearbeitung, Foto→Video; übergeben Sie einen direkten Link oder laden Sie die Datei über /media/upload hoch).
  • video_url / audio_url — Eingabevideo/-audio (Videobearbeitung, Lip-Sync, Avatare).

Musik: title, style, instrumental, version (v6, v6-wild, v6-mini), advanced (genaue Konfiguration: eigener Titel, Stil und Dauer duration), exclude_styles, vocal (female/male), continue_from (ab welcher Sekunde fortgesetzt werden soll), bei Sounds: loop, bpm, tonality; zum Aufteilen in Spuren: mode (vocals, stems, track) und track (welche Spur extrahiert werden soll). Feine Stilregler: style_weight, weirdness, audio_weight (0…1).

Sprachsynthese: text, voice (Kurzname einer Stimme aus options, z. B. james, bella, Zephyr), speed; bei Gemini-Modellen: style, pace, accent, voice_description, scene, temperature. Dialog mit zwei Stimmen:

json
{ "model": "audio/gemini-3.1-flash-tts",
  "input": {
    "voices": [ { "voice": "Kore", "style": "newscaster" }, { "voice": "Puck", "pace": "fast" } ],
    "dialogue": [ { "speaker": 1, "text": "Hallo! Heute haben wir einen Gast bei uns …" }, { "speaker": 2, "text": "Danke für die Einladung." } ]
  } }

Den genauen Preis einer Konfiguration können Sie vor dem Start mit POST /media/estimate und denselben Werten für model + input ermitteln.

Frühere Parameternamen funktionieren weiterhin

Am 19. Oktober 2026 erhielten die Parameter einheitliche Namen und Werte (snake_case, Werte kleingeschrieben). Wenn Ihre Integration Namen und Werte aus einer früheren Version der Dokumentation übergibt, müssen Sie nichts ändern: Der Server akzeptiert sie ebenfalls, Ergebnis und Preis bleiben gleich. Unter /media/models und in dieser Dokumentation werden nur die neuen Namen und Werte aufgeführt.

🧊 3D-Modelle ​

Generierung von 3D-Modellen aus Text oder einem Foto. Das Ergebnis ist GLB (bei verschiedenen Modellen auch OBJ, FBX, STL, USDZ, USD und 3MF) sowie ein Vorschaubild: Der Auftrag liefert mehrere Dateien mit jeweils eigener Dateiendung.

Der Aufruf entspricht dem für andere Medien: POST /media/generate und Statusabfrage über 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":"Keramiktasse mit matter Glasur"}}'
idEingabe≈ PreisBesonderheiten
3d/tripo-text, 3d/tripo-imageText, Fotoab $0.31am günstigsten, Quad-Netz, PBR
3d/hunyuan-rapid-text, -imageText, Fotoab $0.43schnell, 5 Dateiformate
3d/seed3d-imageFotoab $0.50GLB, OBJ, USD, USDZ
3d/hunyuan-pro-text, -imageText, Fotoab $0.71bis zu 1,5 Mio. Polygone
3d/meshy-text, -image, -multi-imageText, Foto, bis zu 4 Perspektivenab $0.94Texturen bis 8K, Charakterpose

Foto als Textur. Die Modelle 3d/meshy-* akzeptieren ein separates Bild (texture_photo) oder eine Materialbeschreibung in Worten (texture_text) – die Textur wird unabhängig von der Geometrie festgelegt. 3d/meshy-multi-image verarbeitet bis zu vier Perspektiven desselben Objekts: So wird die Geometrie präziser.

Der Preis steht erst nach der Generierung fest

3D wird nach den tatsächlich verbrauchten Ressourcen abgerechnet. Der genaue Betrag steht daher erst dann fest, wenn das Modell berechnet wurde. Wir reservieren den maximal möglichen Betrag. Sobald die Berechnung abgeschlossen ist, buchen wir den tatsächlichen Betrag ab und erstatten die Differenz. Der Endbetrag ist immer im Feld cost_usd zu sehen.

Im Studio sind solche Modelle gekennzeichnet. Die Generierung beginnt erst nach Ihrer Zustimmung.

Das dauert länger. Die Berechnung eines 3D-Modells dauert zwischen einer halben Minute und mehreren Minuten – länger als bei einem Bild oder einem kurzen Video. Sie müssen den Auftrag nicht geöffnet lassen: Der Status wird gespeichert, und Webhooks sind verfügbar.

Kosten und Speicherung ​

  • Die Kosten werden zum tatsächlichen Generierungspreis von Ihrem USD-Guthaben abgezogen. Den genauen Betrag sehen Sie nach Abschluss unter cost_usd.
  • Fehlgeschlagene Generierungen werden nicht berechnet – die Reservierung wird automatisch zurückerstattet.
  • Die Dateien werden für begrenzte Zeit auf unseren Servern gespeichert (siehe retention_days unter /media/models). Laden Sie sie herunter, um sie dauerhaft zu speichern.