Schnellstart
Ein Schlüssel, ein Anfrageformat, jedes Bild- und Videomodell. Einen Job absenden, abfragen, die Datei erhalten.
/data/models.json.POST /v1/chat/completions, pro Token abgerechnet aus demselben Guthaben: siehe Chat Completions.| Basis-URL | https://api.revana.si/v1 |
| Authentifizierung | Authorization: Bearer <key> |
| Absenden | POST /v1/generations |
| Abfragen | GET /v1/generations/{id} |
| Modelle | GET /v1/models (kein Schlüssel): jedes Modell, mit dem Sie gerade generieren können |
| Guthaben | GET /v1/balance: was das Konto Ihres Schlüssels ausgeben kann |
| Hochladen | POST /v1/uploads: ein Link für eine Referenzdatei auf Ihrem Computer |
| Format | JSON rein, JSON raus. Preise in USD; 100 Credits = $1. |
| Maschinenlesbar | /openapi.json · /llms.txt |
Authentifizierung
Erstellen Sie in Ihrem Konto einen Schlüssel und senden Sie ihn bei jeder Anfrage als Bearer-Token. Behalten Sie ihn auf Ihrem Server; liefern Sie ihn nie in einem Browser oder einer mobilen App aus.
Eine Generierung absenden
Senden Sie die Modell-ID und ihr input. Die Antwort kommt sofort mit einer Generierungs-id und dem Status queued; die Arbeit geschieht im Hintergrund.
| Feld | Typ | Beschreibung |
|---|---|---|
model | String, erforderlich | Eine Modell-ID von der Modellseite, z. B. seedance-2.5. |
input | Objekt, erforderlich | Der Prompt und die Einstellungen; siehe Eingabefelder. Unbekannte Felder werden abgelehnt. |
max_cost_usd | Zahl, optional | Der höchste Betrag, den Sie für diese Generierung zahlen, bis zu 100 (der Standard). Routen, die darüber bepreist sind, werden übersprungen; bleibt keine übrig, antwortet die Anfrage mit 422 max_cost_exceeded. |
max_wait_s | Ganzzahl, optional | Routen, bei denen länger als diese Zahl von Sekunden erwartet wird, werden übersprungen. Ist die Zeit abgelaufen, wird keine neue Route mehr versucht, aber eine bereits laufende darf zu Ende laufen (bis zu 40 Minuten) und wird berechnet, wenn sie liefert. |
Idempotency-Key | Header, optional | Bis zu 200 Zeichen. Senden Sie denselben Schlüssel und Body noch einmal (nach einem Timeout oder einem 503), und Sie erhalten dieselbe Generierung zurück, keine zweite. Derselbe Schlüssel mit einem anderen Body ergibt 409 idempotency_conflict. |
Das Ergebnis abrufen
Lieber ein Endpunkt pro Modell und Webhooks bei Abschluss? Siehe die fal-kompatible Queue-API für Anfrage-IDs, Status- und Ergebnis-URLs, unterstützte fal-Aliase und Migrationsgrenzen.
Fragen Sie alle paar Sekunden ab, bis status den Wert succeeded oder failed hat, und laden Sie dann die Dateien in output.urls mit Ihrem Schlüssel herunter: GET /v1/generations/{id}/content für die erste und /content/2, /content/3 …, wenn ein Bildmodell mehrere zurückgibt. Bilder brauchen meist Sekunden; Video braucht je nach Modell und Länge von unter einer Minute bis zu mehreren Minuten.
Eine abgeschlossene Generierung:
Eingabefelder
Dieselben Namen werden über alle Modelle hinweg verwendet. Welche Felder und Werte jedes Modell nimmt und seine Standardwerte, steht pro Modell in /data/models.json (options, tasks). Unterstützt ein Modell ein Feld oder einen Wert nicht, wird die Anfrage mit 422 invalid_input abgelehnt, bevor etwas berechnet wird.
| Feld | Typ | Verwendet für |
|---|---|---|
prompt | string | Was generiert werden soll. Erforderlich für Text-zu-Bild und Text-zu-Video. |
image_url | String (URL) | Startbild für Bild-zu-Video oder das zu bearbeitende Bild für Bild-zu-Bild. |
end_image_url | String (URL) | Letztes Bild, für Modelle mit erstem und letztem Bild. |
image_urls | string[] | Referenzbilder, bis zum Limit des Modells. |
resolution | string | 720p, 1080p, 2K … eine der Auflösungen des Modells. |
duration | number | Videolänge in Sekunden, eine der Längen des Modells. |
aspect_ratio | string | 16:9, 9:16, 1:1... |
audio | boolean | Ton zusammen mit dem Video erzeugen, wo das Modell dies unterstützt. Kann den Preis ändern. |
negative_prompt | string | Was vermieden werden soll, bei Modellen, die das annehmen. |
video_url | String (URL) | Ein Clip zum Umwandeln, Verlängern oder Hochskalieren. Seine Länge wird gemessen und bei Modellen mit Abrechnung pro Sekunde berechnet. |
audio_url | String (URL) | Die Stimme oder der Ton, zu dem ein Modell für sprechende Avatare oder Lippensynchronisation animiert. |
quality | string | Eine Qualitätsstufe bei Modellen, die danach bepreist werden (z. B. low, medium, high). |
seed | integer | Ein Seed, bei Modellen, die einen annehmen. |
Seedance 2.5 verwendet standardmäßig 720p, 5 Sekunden (4–30), 16:9 und keinen Ton und nimmt außerdem:
| Feld | Typ | Verwendet für |
|---|---|---|
video_url | String (URL) | Ein Clip von 4–30 s zum Bearbeiten. Das Ergebnis behält seine Länge, lassen Sie duration also weg. |
video_urls | string[] | Referenzclips, bis zu 10 und insgesamt 30 Sekunden. Ihre Sekunden werden zum Satz für Videoeingabe berechnet. |
audio_urls | string[] | Referenzton, bis zu 10 und insgesamt 30 Sekunden. |
image_url ist ein exaktes erstes Bild und kann daher nicht mit Referenzmedien kombiniert werden; verwenden Sie image_urls für eine lockerere visuelle Referenz. end_image_url braucht image_url. Medien müssen öffentliche https-URLs sein, die sich direkt herunterladen lassen.
Nemesis
nemesis inszeniert einen Clip mit Ihren eigenen Personen, Produkten und Orten neu: Bewegung, Timing und Kamera des Clips, gespielt von bis zu 8 Referenzbildern. Das Ergebnis behält Länge und Format des Clips. Es wird zum Satz einer Seedance-2.5-Bearbeitung plus $0.02 pro Sekunde bepreist ($0.08, $0.17 und $0.36 in 480p, 720p und 1080p), pro Sekunde des eingehenden Clips plus des ausgehenden Videos.
Es folgt dem Rezept von Scenario ALTER: Ihr Clip selbst wird bearbeitet, stumm, wobei ein Bild davon mit bereits vorgenommener Änderung als erste Referenz neu gezeichnet wird, und der eigene Ton des Clips wird danach wieder aufgelegt. Bei mehr als einer Person werden die Bilder von links nach rechts so zugeordnet, wie die Personen im ersten Bild stehen.
| Feld | Typ | Verwendet für |
|---|---|---|
video_url | String (URL), erforderlich | Der Clip von 4–30 s, der neu inszeniert werden soll. |
image_urls | string[], erforderlich | 1–8 Referenzbilder. |
roles | string[] | Eines pro Bild: person (Standard), product, location oder look. |
target_frame | boolean | Vor dem Rendern wird das erste Bild des Clips mit bereits vorgenommener Änderung in derselben Pose, Größe und demselben Licht neu gezeichnet und als erste Referenz gesendet, sodass Haare, Gesicht und Kleidung Ihren Bildern treu bleiben. Standardmäßig an bei nemesis, aus bei nemesis-lite. Kostenlos. |
guide | string | nemesis-lite nur (nemesis bearbeitet immer den Clip selbst). clip (Standard mit Zielbild): folgt dem eigenen Bild des Clips. people (Standard ohne eines): Die Personen werden ersetzt und der Hintergrund bleibt. scene: Alles Sichtbare stammt aus den Referenzen und dem Prompt. |
sound | string | original (Standard bei nemesis): Der eigene Ton des Clips wird wieder aufgelegt. none (Standard bei nemesis-lite): stumm. |
face_mesh | boolean | nemesis-lite nur. Verfolgt jedes Gesicht im Clip, damit das neue Gesicht seine Ausdrücke, Augen und Lippen behält. Standardmäßig an bei guide: "people", aus bei scene und clip. Senden Sie false, um es auszulassen. Nie im Ergebnis zu sehen. |
resolution | string | 480p, 720p (Standard) oder 1080p. |
prompt | string | Optionale Anweisung, bis zu 5000 Zeichen. |
Bei nemesis-lite wird ein Clip ohne Personen, gesendet mit guide: "people", mit invalid_input abgelehnt und nicht berechnet; senden Sie ihn mit scene oder clip.
Wie lange es dauert. Zuerst wird der Clip vorbereitet: Bei nemesis wird das Zielbild gezeichnet, etwa 15–40 Sekunden; bei nemesis-lite wird die Stimme getrennt und jedes Bild wird zur Tiefenvorlage, etwa 25 Sekunden bei einem Clip von 8 Sekunden und anderthalb Minuten bei einem von 30 Sekunden. Dann wird das Video gerendert, was den größten Teil der Wartezeit ausmacht: Ein Clip von 8 Sekunden in 480p dauert etwa 4–7 Minuten. Fragen Sie die Generierung ab, bis sie fertig ist.
Nemesis Lite
nemesis-lite nimmt dieselbe Eingabe wie nemesis und rendert sie mit Wan 3.0: günstiger, bei Gesichtern und feinen Details etwas weniger treu. Der Clip hat 2–15 s. Es wird zum Satz von Wan 3.0 plus $0.02 pro Sekunde bepreist ($0.07, $0.11 und $0.19 in 480p, 720p und 1080p), pro Sekunde des eingehenden Clips plus des ausgehenden Videos.
Generierungsobjekt
| Feld | Typ | Beschreibung |
|---|---|---|
id | string | Generierungs-ID (gen_…), zum Abfragen. |
object | string | Immer generation. |
model | string | Das von Ihnen angeforderte Modell. |
status | string | Siehe Status. |
message | string | Nur während ein Ergebnis bei einem Anbieter bestätigt wird: was gerade geschieht. |
quoted_usd | number | Der Preis der günstigsten Route, die als erste versucht wird. Kann sie ihn nicht erzeugen und eine teurere Backup-Route schon, ist der berechnete Betrag der Preis dieser Route, bis zu reserved_usd. |
reserved_usd | number | Was von Ihrem Guthaben reserviert wird: das Höchste, was diese Generierung kosten kann, falls eine teurere Backup-Route sie erzeugt, nachdem andere Routen versucht wurden. Die Differenz wird bei der Abrechnung freigegeben. Um nie mehr als quoted_usd zu zahlen, setzen Sie max_cost_usd darauf: Teurere Backups werden dann übersprungen. |
output | Objekt | null | Bei succeeded: urls, die Ergebnisdateien (ein Bildmodell kann mehrere zurückgeben), mit width und height; Video hat außerdem duration_s und has_audio. Laden Sie sie zeitnah herunter; Dateien laufen ab. |
cost_usd | Zahl | null | Was berechnet wurde. Wird gesetzt, sobald die Generierung gelingt; 0, wenn sie fehlschlägt. |
attempts | number | Versuchte Routen, einschließlich Fallbacks. Nur die erfolgreiche wird berechnet. |
error | Objekt | null | Bei failed: code, message und retryable; eine inhaltliche Ablehnung hat außerdem reason. Siehe warum eine Generierung fehlgeschlagen ist. |
created_at, completed_at | string | Zeitstempel nach ISO 8601. |
Status
| Status | Bedeutung |
|---|---|
queued | Angenommen, wartet auf eine Route. |
running | Wird generiert. Schlägt eine Route fehl, bleibt der Job running, während er zur nächsten wechselt, und solange ein Ergebnis bestätigt wird (siehe message). |
succeeded | Fertig. output.urls enthält die Dateien und cost_usd das, was Sie bezahlt haben. |
failed | Jede Route ist fehlgeschlagen oder die Eingabe wurde abgelehnt. Es wird nichts berechnet. |
Abrechnung
- Sie zahlen mit vorausbezahlten Credits, 100 pro Dollar, gekauft in Paketen von $10 bis $5.000. Jeder Preis ist eine ganze Zahl von Credits.
- Beim Absenden wird
reserved_usdvon Ihrem Guthaben reserviert. Schlägt die Generierung fehl, wird alles freigegeben. - Berechnet wird nur, wenn die Generierung gelingt, zum genannten Preis der Route, die sie erzeugt hat. Meist ist das die erste Route zu
quoted_usd. Muss ein Backup sie erzeugen, kann sie mehr kosten: den Preis dieser Route oder, wenn eine zuvor versuchte Route von ihrem Lieferanten abgerechnet wurde, was diese Versuche kosten plus 10 %, je nachdem, was höher ist. Nie überreserved_usd. - Es gibt kein monatliches Kontingent und kein Limit pro Minute: Ihr Guthaben und
max_cost_usdsind die Grenze. - Der Preis jedes Modells steht auf seiner Seite und in der Preistabelle.
Guthaben
Das Konto, zu dem Ihr Schlüssel gehört. Prüfen Sie es vor einem großen Stapel; es kostet nichts und zählt nicht auf die Generierungslimits.
| Feld | Bedeutung |
|---|---|
available_usd | Was eine neue Generierung reservieren kann. Ein Absenden, dessen reserved_usd höher ist, erhält 402 insufficient_credits. |
held_usd | Von noch laufenden Generierungen reserviert. Was sie nicht verbrauchen, kommt bei der Abrechnung zurück. |
balance_usd | Verfügbar plus reserviert. |
spent_usd | Für abgeschlossene Generierungen berechnet, insgesamt. |
*_credits | Dieselben Beträge in Credits (100 pro Dollar), so gerundet, dass verfügbar nie höher aussieht, als es ist. |
Eine Referenzdatei hochladen
Referenzen werden als öffentliche https://-Links übergeben. Für eine Datei auf Ihrem eigenen Rechner fordern Sie einen Upload-Link an, senden die Bytes dorthin und verwenden den zurückgegebenen Link. Das ist kostenlos.
| Feld | Bedeutung |
|---|---|
upload_url | Senden Sie die Datei innerhalb einer Stunde mit PUT hierher, mit genau den Headern aus upload_headers (Typ und Größe). Alles andere wird abgelehnt. |
url | Der Link der Datei auf api.revana.si, gültig bis expires_at (14 Tage). Er braucht keinen Schlüssel und leitet auf die Datei weiter, sodass alles, was einen Link abrufen kann, sie lesen kann. Verwenden Sie ihn als Referenz in POST /v1/generations. Die Datei wird kurz darauf gelöscht. |
id | upl_… |
Bilder (image/*) bis 30 MB, Clips (video/*) bis 50 MB, Ton (audio/*) bis 15 MB. Eine größere oder andere Datei erhält 413 too_large oder 400 invalid_request.
Warum eine Generierung fehlgeschlagen ist
Eine Generierung mit failed hat error.code, eine message, die für die anfragende Person geschrieben ist, und retryable: true, wenn ein späteres erneutes Senden derselben Anfrage funktionieren kann, false, wenn die Anfrage selbst geändert werden muss. Eine fehlgeschlagene Generierung wird nie berechnet.
| Code | Wiederholbar | Wann |
|---|---|---|
content_policy | no | Das Modell hat den Prompt oder die Medien abgelehnt oder das Ergebnis zurückgehalten. reason nennt die Regel: sexual (NSFW oder nicht jugendfreie Inhalte), minors (Kinder oder Jugendliche), copyright (urheberrechtlich geschütztes oder fremdes Material, Marken, Figuren), real_person (das Abbild einer realen oder berühmten Person) oder other, wenn das Modell keinen Grund nennt. |
invalid_input | no | Eine Referenz konnte nicht gelesen werden, ein Prompt nennt @Image2, obwohl ein Bild gesendet wurde, oder ein Wert, den das Modell ablehnt. Die Meldung sagt, welcher. |
model_declined | no | Das Modell hat in Worten geantwortet, statt das Bild oder Video zu erzeugen, meist weil der Prompt etwas verlangt, das es braucht und das nicht gesendet wurde. Lassen Sie den Prompt das Ergebnis selbst beschreiben. |
reference_changed | no | Eine Referenzdatei hat sich nach der Prüfung geändert. Senden Sie sie erneut. |
max_cost_exceeded | no | Die einzige Route, die laufen konnte, kostet mehr als max_cost_usd. |
model_busy | yes | Jede Route für das Modell war ausgelastet. Versuchen Sie es in einer Minute erneut. |
model_unavailable | yes | Keine Route für das Modell konnte den Job gerade annehmen. |
timeout | yes | Keine Route lieferte rechtzeitig ein Ergebnis, oder max_wait_s ist verstrichen. |
all_routes_failed | yes | Jede Route ist aus Gründen auf ihrer Seite fehlgeschlagen. |
Fehler
Fehler verwenden HTTP-Statuscodes und einen JSON-Body: {"error": {"code": "...", "message": "..."}}.
| HTTP | Code | Wann |
|---|---|---|
| 400 | invalid_request | Der Body ist kein JSON, es fehlt model oder input, oder er enthält ein Feld, das die API nicht kennt. |
| 401 | unauthorized | API-Schlüssel fehlt oder ist ungültig. |
| 402 | insufficient_credits | Ihr verfügbares Guthaben deckt reserved_usd nicht. Laden Sie auf und versuchen Sie es erneut. |
| 403 | account_disabled | Das Konto ist pausiert. Kontaktieren Sie den Support. |
| 403 | generation_not_enabled | Ihr Schlüssel kann Preise abrufen, aber noch nicht generieren. |
| 404 | not_found | Auf Ihrem Konto gibt es keine Generierung mit dieser ID. |
| 409 | idempotency_conflict | Der Idempotency-Key wurde bereits mit einem anderen Body verwendet. |
| 409 | not_ready | Die Datei wurde angefordert, bevor die Generierung gelungen war. |
| 413 | body_too_large | Der Body ist größer als 1 MB. Senden Sie Medien als URLs. |
| 422 | invalid_input | Ein Feld, Wert oder eine Kombination, die das Modell nicht unterstützt, oder Medien, die nicht gelesen werden können. Es wird nichts berechnet. |
| 422 | max_cost_exceeded | Jede Route kostet mehr als max_cost_usd. |
| 422 | model_not_available | Kein Modell mit dieser ID in der API. IDs stehen auf der Modellseite. |
| 429 | rate_limited | Zu viele Anfragen in derselben Sekunde von einem Konto (ein Schutz vor außer Kontrolle geratenen Schleifen, kein Kontingent). Warten Sie die Retry-After Sekunden. |
| 429 | concurrency_limit | Das Konto hat bereits sein Maximum an laufenden Generierungen. Versuchen Sie es erneut, wenn eine fertig ist. |
| 503 | busy | Ein Moment hoher Last. Versuchen Sie es nach Retry-After mit demselben Idempotency-Key erneut. |
| 503 | model_unavailable | Gerade ist keine Route für dieses Modell verfügbar. Versuchen Sie es in Kürze erneut. |
| 500 | server_error | Auf unserer Seite ist etwas schiefgegangen. Ein erneuter Versuch mit demselben Idempotency-Key ist sicher. |
Modellliste
Jedes Modell, seine Optionen und Preise werden als JSON unter /data/models.json veröffentlicht, derselben Datei, aus der diese Website gerendert wird.