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.comDie 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):
- Aufgabe erstellen –
POST /media/generatemit Modell und Parametern. - Auf das Ergebnis warten –
GET /media/job/:idabfragen, bisstatusden Wertdonehat. - Datei abrufen – über
result_url(ein Link zunordrouter.com).
1. Aufgabe erstellen
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:
{ "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
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 (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 unterresult_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:
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:
{ "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:
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_urlmuss mithttps://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/:idals 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:
{ "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:
| Typ | Familie | Modi | ≈ Preis |
|---|---|---|---|
| 🖼 Bilder | Nano Banana / 2 / Pro (image/nano-banana*) | Text→Bild, Bearbeitung, bis zu 4K | ab $0.025 |
| 🖼 | Imagen 4 Fast / Ultra (image/imagen4*) | Text→Bild | ab $0.025 |
| 🖼 | GPT Image 1.5 / 2 (image/gpt-image-*) | Text→Bild, Bearbeitung, bis zu 4K | ab $0.025 |
| 🖼 | Flux 2 Pro / Flex (image/flux2-*) | Text→Bild, Bearbeitung | ab $0.03 |
| 🖼 | Seedream v4 / 4.5 / 5 Lite (image/seedream-*) | Text→Bild, Bearbeitung | ab $0.04 |
| 🖼 | Ideogram v3 / Character (image/ideogram-*) | Text, Remix, Charakter | ab $0.02 |
| 🖼 | Qwen / Wan Image / Grok / Z-Image | Text→Bild, Bearbeitung | ab $0.01 |
| 🛠 Dienstprogramme | Topaz / Recraft (image/*upscale*, image/recraft-remove-bg) | Upscaling bis 8K, Hintergrund entfernen | ab $0.01 |
| 🎬 Video | Veo 3.1 Lite / Fast / Quality (video/veo-3.1-*) | Text/Foto→Video | ab $0.19 |
| 🎬 | Kling 2.1 → 3.0 (video/kling-*) | Text/Foto→Video, Motion, Avatare, bis zu 4K und 15 s | ab $0.16 |
| 🎬 | Wan 2.2 → 2.7 (video/wan-*) | Text/Foto/Video→Video, Speech-to-Video | ab $0.25 |
| 🎬 | Seedance 1.5 / 2 / Fast / Mini (video/seedance-*) | Text/Foto→Video, bis zu 4K, Audio | ab $0.06 |
| 🎬 | Hailuo 02 / 2.3 (video/hailuo-*) | Text/Foto→Video | ab $0.08 |
| 🎬 | HappyHorse 1.0 / 1.1 (video/happyhorse-*) | Text/Foto/Referenz→Video, Videobearbeitung | ab $0.70 |
| 🎬 | Grok Video / 1.5 (video/grok-*) | Text/Foto→Video, bis zu 30 s | ab $0.06 |
| 🎬 | Gemini Omni (video/gemini-omni) | Video mit Audio, bis zu 4K | ab $0.39 |
| 🗣 Avatare | Kling Avatar, OmniHuman, InfiniteTalk, Lip Sync | Foto+Audio→sprechendes Video | ab $0.19 |
| 🎵 Musik | Suno V6 / V6 Wild / V6 Mini (music/suno-*) | Text/Stil→2 Tracks, Cover, Fortsetzung, Gesang, Spuren, Sounds | ~$0.08 |
| 🎙 Sprachsynthese | ElevenLabs Turbo / Multilingual (audio/elevenlabs-*) | Text→Sprache, Stimmenisolation | ab $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) oder480p/720p/768p/1080p/4k(Video). Der Preis hängt von der Auflösung ab.aspect_ratio—1:1,16:9,9:16usw.; Modelle mit Größenwahl unterstützen auch1:1-hd.duration— Videolänge in Sekunden (bei den meisten Modellen5/10, bei Kling 3.0 und Wan 2.7 bis zu15, bei Grok bis zu30). Videos werden sekundengenau abgerechnet.audio— Audiospur im Video (true/false). Mit Audio ist es teurer; die Schätzung unter/media/estimateberücksichtigt das.mode/quality/render_mode— Qualitätsstufe (Kling 3.0standard/pro/4k, GPT Imagemedium/high, Ideogramfast/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/jpegfür Bilder,glb/obj/fbx/stl/usdzfür 3D).image— Eingabebild (Bearbeitung, Foto→Video; übergeben Sie einen direkten Link oder laden Sie die Datei über/media/uploadhoch).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:
{ "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}.
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"}}'| id | Eingabe | ≈ Preis | Besonderheiten |
|---|---|---|---|
3d/tripo-text, 3d/tripo-image | Text, Foto | ab $0.31 | am günstigsten, Quad-Netz, PBR |
3d/hunyuan-rapid-text, -image | Text, Foto | ab $0.43 | schnell, 5 Dateiformate |
3d/seed3d-image | Foto | ab $0.50 | GLB, OBJ, USD, USDZ |
3d/hunyuan-pro-text, -image | Text, Foto | ab $0.71 | bis zu 1,5 Mio. Polygone |
3d/meshy-text, -image, -multi-image | Text, Foto, bis zu 4 Perspektiven | ab $0.94 | Texturen 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_daysunter/media/models). Laden Sie sie herunter, um sie dauerhaft zu speichern.