Pro API: Videos mit Sound generieren

Ein Clip aus einem Prompt oder eine Animation eines Standbilds, das du mitlieferst. Die Datei ist ein MP4, mit Sound, wenn du ihn anforderst.

Video einreichen

POST /videos

json
{ "prompt": "a woman in a white linen dress walks along a beach at sunset, wind in her hair, she turns and smiles at the camera",
  "width": 1080, "height": 1920, "audio": true }
FeldTypStandardWas es tut
promptstringerforderlichDie Handlung, die Stimmung, das Licht. Beschreib die Bewegung.
width, heightint720 x 1280Standardmäßig vertikal. Siehe das Preisraster unten.
qualitystringmax: Ultra-Modus (das feinste Rendering), siehe Ultra-Modus.
consistencystringstandardenhanced: Verstärkte Konsistenz, gleichmäßigere Bewegung, Gesichter und Hintergrund über die Zeit, bis zu 721 Frames pro Shot (30 s bei 24 fps, 24 s bei 30), Verlängerungen inklusive. Nur im Qualitätsmodus. Siehe Verstärkte Konsistenz.
modestringltx25ltx25: Engine 2.5 (Sound, automatische Dauer, 1080p, Endframe). turbo: am 11. Oktober 2026 eingestellt; eine turbo-Anfrage wird in Qualität 480p gerendert (gleiche Ausrichtung, gleiche Länge, höchstens 241 Frames, feste Länge), zum Preis von Qualität 480p.
duration_autobooltrueDie Engine wählt die Länge anhand des Prompts, bis zu 20 s bei 24 fps (16 s bei 30, 8 s bei 60: die Grenze zählt Frames, siehe fps), und length wird dann ignoriert. Auf false setzen für eine feste Länge, die durch length angegeben wird. Mit consistency enhanced über 30 fps ist die Länge immer fest (fps_requires_fixed_duration sonst).
lengthint121Länge in Frames, bei der fps-Rate, immer der Form 8n+1; die Dauer ist (length - 1) / fps. Höchstens 481 (721 mit consistency enhanced). Bei 24 fps: 73 (3 s), 121 (5 s), 241 (10 s), 361 (15 s), 481 (20 s; 721, also 30 s, in enhanced). Bei 30: 241 (8 s), 481 (16 s; 721, 24 s). Bei 60: 241 (4 s), 481 (8 s; 721, 12 s). Wird für eine feste Länge verwendet (duration_auto auf false gesetzt); bei automatischer Dauer ignoriert.
fpsint30Bildrate in Frames pro Sekunde: 24, 30 oder 60. Standardmäßig 30, die empfohlene Einstellung (geschmeidige Bewegung); 60, die weichste; 24, die Kinobildrate. 50, nur mit consistency enhanced, erzeugt eine leichte Zeitlupe (ca. 0,83x: die Engine setzt die Bewegung wie bei 60 und spielt sie bei 50 ab). length zählt Frames bei dieser Rate. Der Preis ändert sich nicht (Pauschalpreis pro Clip); die maximale Länge schon, da sie Frames zählt. Eine Verlängerung behält die Bildrate des vorherigen Clips, eine Sequenz die ihres ersten Shots. Eine Rate, die der Modus nicht unterstützt: invalid_fps, das die verfügbaren auflistet.
audioboolfalseSound wird zusammen mit dem Bild generiert (Ambiente, Stimme). Verdoppelt den Preis des Clips (siehe Formate und Preis).
imagestringStartframe in base64: das Video animiert dieses Bild.
end_imagestringEndframe in base64, zusammen mit image: der Clip blendet von einem zum anderen über (nur Engine 2.5). Ein Übergang wird in der angeforderten Größe ausgegeben, von 480p bis 1080p, und als Clip in diesem Format berechnet.
keyframesarraySchlüsselbilder (Qualitätsmodus): 1 bis 4 Objekte { "image": base64, "at": seconds, "strength": 0.1 to 1 (1 by default) }. Der Clip zeigt jedes Bild zu seinem Zeitpunkt, zum Beispiel einen Charakter in der Mitte eines Shots, der an einem leeren Ort beginnt und endet. Die Länge wird fest (length, duration_auto wird auf false gezwungen); 0 < at < Länge, mindestens 0,5 s zwischen zwei Schlüsselbildern; auf etwa ein Drittel einer Sekunde genau. Funktioniert mit image und end_image. Nicht in Ultra oder Multi-Ref; in einer Verlängerung nur mit consistency enhanced (siehe Verstärkte Konsistenz). Gleicher Preis wie ein Clip desselben Formats.
lora, lora_strengthstring, numberEin trainierter Charakter auf dem Account (name aus GET /loras) und seine Stärke (0 bis 1).
lora2, lora2_strengthstring, numberEin zweiter Charakter.
multirefobject1 bis 4 Charaktere (12 in Ultra) aus GET /characters besetzen, plus gespeicherte Objekte, Tiere und einen Ort aus GET /subjects, im Prompt mit @Name aufgerufen, siehe Multi-Ref Video.
seedintzufälligSeed des Renderings, von 0 bis 4294967295. Gleicher seed, gleicher Prompt, gleiche Bild- und gleiche Einstellungen (Format, Länge, Sound, Modus): der gleiche Clip, mit leichten Unterschieden bei einem anderen Grafikkartenwechsel. Mit automatischer Dauer ändert eine anders gewählte Länge den Clip: für eine strikte Reproduktion duration_auto auf false setzen und length angeben.
stepsintEngineLeer lassen.

Standard-Bildrate: 30 fps. Clips wurden früher bei 24 fps gerendert. Ohne fps ist ein Clip gleicher length daher kürzer als zuvor (241 Frames: 8 s statt 10 s). Sende "fps": 24, um das frühere Verhalten beizubehalten.

Die Antwort:

json
{ "jobId": "...", "seed": 908172, "cost": 30 }

Die Kosten werden bei der Einreichung berechnet und angekündigt, bevor etwas abgebucht wird. Der seed wird ebenfalls zurückgegeben, ob du ihn angegeben hast oder er zufällig gezogen wurde.

Formate und Preis

Ein Video wird pro Format berechnet, als Pauschalpreis unabhängig von seiner Länge. Basis: 5 Credits.

Der Pauschalpreis wird bei 720p mit 2 und bei 1080p mit 3 multipliziert, und Sound verdoppelt den Preis zusätzlich. Die Faktoren werden auf den Basispreis angewendet, nicht aufeinander: 1080p mit Sound kostet 5 x 3 x 2 = 30 Credits. Bis zu 481 Frames, also 20 s bei 24 fps, ändert die Länge nichts (5 s oder 20 s, gleicher Preis). Über 481 Frames (bis zu 721, nur mit consistency enhanced, feste Länge) wird der Preis des Formats verdoppelt. Die Bildrate (fps) ändert den Preis nicht, aber die Stufen zählen Frames: bei 30 fps gilt der Normalpreis bis 16 s; bei 60 bis 8 s (12 s zum doppelten Preis in enhanced).

Eine Ausnahme: in Qualität kostet 480p ohne Sound 2 Credits, unabhängig von der Länge (seit dem 11. Oktober 2026). Multi-Ref und verstärkte Konsistenz behalten den Pauschalpreis des Formats, 5 Credits.

FormatKurze SeiteBeispielgrößenStummMit Sound
480p480480 x 832, 832 x 4802 (5 in Multi-Ref und verstärkter Konsistenz)10
720p720720 x 1280, 1280 x 7201020
1080p10801080 x 1920, 1920 x 10801530

Die Größe, die du zurückbekommst. Die Engine arbeitet in Vielfachen von 32 und in zwei Stufen, daher kommt die Datei bei 720p in 768 x 1280 (oder 1280 x 768) und bei 1080p in 1088 x 1920 (oder 1920 x 1088) heraus. 480p bleibt bei 480 x 832 (oder 832 x 480), außer bei verstärkter Konsistenz. Wichtig zu wissen, wenn du unsere Renders zusammenfügst oder überlagerst.

Die turbo-Lane wurde am 11. Oktober 2026 eingestellt: eine turbo-Anfrage wird in Qualität 480p gerendert und entsprechend berechnet (2 Credits ohne Sound, 10 mit Sound).

Preis vor dem Einreichen kennen

POST /videos/quote nimmt denselben Body wie POST /videos und führt dieselbe Berechnung durch, aber es wird nichts erstellt: kein Rendering, keine Credits reserviert, kein Kontingent verbraucht. Ruf es auf, bevor du dich festlegst, besonders wenn ein Agent gegen ein Budget arbeitet.

json
{ "cost": 30, "mode": "ltx25", "format": "1080p", "audio": true, "fps": 30, "duration_auto": true,
  "seconds_max": 16, "detail": "flat 5 x 3 (1080p) x 2 (sound) = 30" }

detail erläutert die Zahl; fps ist die verwendete Bildrate und seconds_max die Länge in Sekunden bei dieser Rate. Mit "consistency": "enhanced" akzeptiert das Angebot eine feste Länge bis zu 721 Frames und wendet den Preis über 481 Frames an (x 2 (over 20 s) in detail bei 24 fps, x 2 (over 481 frames) bei einer anderen Rate). Dieselbe Route gibt es für Bilder, POST /images/quote, die immer { "cost": 1, ... } zurückgibt: ein Bild kostet immer 1 Credit.

Für einen Ultra-Clip mit Abrechnung pro Sekunde gibt das Angebot die abgerechnete Länge in seconds an, und detail schlüsselt den Preis pro Sekunde auf.

Abfragen, herunterladen, abbrechen

Dieselben Routen wie bei Bildern, unter /videos.

  • GET /videos/{jobId}: pending / completed / failed, gleiche Felder. Eine verstärkte Verlängerung kann als failed mit "error": "extension_not_applied" enden (die Engine hat das Ende des vorherigen Clips nicht übernommen): es werden keine Kosten berechnet, einfach erneut einreichen.
  • GET /videos/{jobId}/file: das MP4 (Content-Type: video/mp4).
  • POST /videos/{jobId}/cancel: bricht ab, ohne dass Kosten anfallen.

Bei Ultra mit Abrechnung pro Sekunde stoppt ein Rendering, das bereits läuft, nicht mehr: Der Abbruch antwortet 409 render_in_progress, und der Clip wird geliefert und abgerechnet. Ein Clip, den die Engine bei der Ausgabe ablehnt, endet als failed, mit einem Satz in detail und dem Code der Engine in reason: Es wird nichts abgebucht.

Ein Video dauert 1 bis 5 Minuten, länger wenn die Engine kalt startet. Alle 3 Sekunden abfragen und herunterladen, sobald der Status completed ist: die Datei wird nicht archiviert.

Mehrere Shots in einem Clip

Ein einzelner Prompt kann mehrere Shots mit harten Schnitten enthalten, insgesamt bis zu 20 Sekunden bei 24 fps (16 s bei 30, dem Standard). Beschreib sie der Reihe nach: Shot 1: <Bildausschnitt>, <Aktion>. Cut to Shot 2: .... Wiederhole in jedem Shot, was gleich bleiben soll (Charakter, Outfit, Ort, Licht), und beende mit einer Zeile gemeinsamer Stimmung.

Lass Timecodes weg: halte duration_auto an, und die Engine wählt die Länge (bis zu 20 s bei 24 fps, 16 s bei 30) und den Schnittmoment. Zwei bis vier Shots pro Clip funktionieren am besten.

text
A cinematic sequence of three shots, same woman, same place, same lighting throughout.
Shot 1: Wide shot, night, light rain on a narrow Paris street with glowing café windows. A woman in a long beige trench coat walks toward the camera under a transparent umbrella, wet cobblestones reflecting warm yellow streetlights.
Cut to Shot 2: Close-up on her face under the umbrella, raindrops on the plastic, warm café light on her cheek, she smiles softly.
Cut to Shot 3: Medium shot from inside the café through the rainy window, she pushes the door open and steps in, warm light spilling onto the wet pavement.
Calm, melancholic, romantic mood.

Mehrere Shots in einem Clip oder eine Sequenz? Sie dienen unterschiedlichen Zwecken:

Mehrere Shots in einem ClipSequenz (Verlängerungen)
Zwischen den ShotsHarte SchnitteKein Schnitt: jeder Shot führt die Bewegung fort
LängeHöchstens 20 s bei 24 fps (16 s bei 30)Länger
RenderingsEinesEines pro Shot
PreisEin ClipEin Clip pro Shot

Clip verlängern

Ein Clip kann verlängert werden: der nächste Shot führt die Bewegung des vorherigen nahtlos fort, ohne Stopp am Übergang. Er wird durch etwa die letzte Sekunde des vorherigen Clips geführt, nicht durch ein einzelnes Standbild. Füge zu POST /videos hinzu:

FeldTypStandardWas es tut
extend_job_idstringDer zu verlängernde Clip: ein Rendering von deiner Lizenz, kurz nach Fertigstellung abgerufen.
extend_framesint25Wie viel vom Ende des Clips den nächsten Shot führt, in Frames: 9, 17, 25, 33, 41 oder 49 (25 sind etwa 1 s bei 24 fps).
extend_videostringStatt extend_job_id: das Ende eines eigenen Clips als base64-MP4 mit genau extend_frames Frames, höchstens 8 MB.

Der verlängerte Shot behält die Auflösung des vorherigen Clips: width und height werden bei extend_job_id ignoriert, und bei extend_video wird die Größe aus der gesendeten Datei gelesen. Er enthält nur die neuen Frames, sodass die aneinandergereihten Shots ein durchgehendes Video ergeben. Er behält die Bildrate des vorherigen Clips: fps weglassen (er übernimmt sie) oder dieselbe angeben; eine andere wird abgelehnt (extend_fps_mismatch). length ist die neue Dauer des Shots (121 = 5 s mehr bei 24 fps), und sie ist exakt: automatische Dauer gilt nicht für eine Verlängerung. Eine Verlängerung kostet den Preis eines Clips.

Einschränkungen: kein Endframe oder Schlüsselbilder gleichzeitig, außer mit verstärkter Konsistenz.

Der Sound setzt sich am Übergang fort. Mit audio: true, wenn das Ende des vorherigen Clips eine Tonspur hat, übernimmt der neue Shot diesen Sound, anstatt einen neuen zu erstellen. Mit extend_job_id behält das abgeschnittene Ende den Sound des Clips; mit extend_video das Ende mit seinem Sound senden. Ohne Tonspur in diesem Ende, bei verstärkter Konsistenz und in Ultra, beginnt der Sound neu mit dem Shot: dieselbe Atmosphäre in jedem Prompt beibehalten, damit der Übergang möglichst wenig hörbar ist.

Einen Clip kurz nach Fertigstellung verlängern. Später ist er bei uns nicht mehr verfügbar (clip_unavailable), und du sendest sein Ende selbst in extend_video.

Einen Ultra-Shot verlängern, vorwärts oder rückwärts

Ein Shot, der in Ultra pro Sekunde gerendert wurde, wird ebenfalls in Ultra verlängert, vorwärts oder rückwärts; jeder andere Clip wird wie oben verlängert. Sende POST /videos mit "quality": "max" und:

FeldTypStandardWas es tut
extend_job_idstringDer zu verlängernde Ultra-Shot, von deiner Lizenz vor weniger als 24 Stunden gerendert.
extend_upload_idstringStattdessen, für einen älteren Shot: die von POST /extensions (unten) gelieferte ID, sobald seine Originaldatei hochgeladen ist.
extend_directionstringforwardforward rendert, was danach kommt; backward rendert die Momente direkt davor, um sie vor den Shot zu schneiden.
  • Das Rendering enthält nur den neuen Teil, so lang wie ein Ultra-Clip (length / fps, 5 s bei automatischer Dauer). Es übernimmt die Auflösung des Shots (width und height werden ignoriert) und schließt an sein letztes Bild (forward) oder sein erstes (backward) an.
  • Kein Startbild, keine Referenzen (multiref), keine Bewegung und keine verstärkte Konsistenz. backward kommt nicht in eine Sequenz, die ihre Shots nacheinander einordnet.
  • Preis: der neue Teil zum Ultra-Preis pro Sekunde, plus pro Sekunde des verlängerten Shots 2 Credits in 480p, 5 in 720p und 13 in 1080p (ultra.extend_per_second in GET /pricing). Diese Sekunden werden auf die nächste Sekunde aufgerundet (auf 0,1 s genau) und zählen bei 24 Bildern pro Sekunde: Ein Shot mit höherer Bildrate zählt anteilig (2 s bei 60 fps zählen als 5 s). POST /videos/quote mit denselben Feldern liefert extend_seconds und den genauen Preis.
  • Ein Shot, der älter als 24 Stunden ist: Lade seine Originaldatei hoch, so wie GET /videos/{jobId}/file sie geliefert hat. POST /extensions mit { "size": <Bytes> } liefert upload_id, upload_url, headers und expires_in (900 s); sende die Datei mit PUT upload_url und genau diesen headers, dann übergib extend_upload_id innerhalb von 2 Stunden. Ein Upload dient einem Rendering: ein MP4 von 4 bis 30 s, höchstens 60 MB und 1080p. Vor dem Rendern wird jedes an den Ultra-Modus gesendete Video (eine Bewegung oder ein zu verlängerndes Video) geprüft, und bei einer Ablehnung wird nichts abgebucht (400 input_video_out_of_limits): 24 bis 60 Bilder pro Sekunde, ein Verhältnis Breite/Höhe von 0,4 bis 2,5 und pro Rendering höchstens 30 s und 10 Dateien für Videos und Referenztöne zusammen. Bei einem realistischen Gesicht wird eine neu kodierte oder geschnittene Datei abgelehnt (400 engine_refused): Nur das Original geht durch. Ein Video, das nicht im Ultra-Modus gerendert wurde (etwa das Rendering eines anderen Modus), wird in Ultra nicht verlängert, wenn es ein realistisches Gesicht zeigt (400 extension_real_face, es wird nichts abgebucht): verlängere es im Qualitätsmodus oder rendere den Shot neu in Ultra.

Verstärkte Konsistenz

Mit "consistency": "enhanced" wird der Clip von einer Lane gerendert, die Bewegung, Gesichter und Hintergrund über die Zeit gleichmäßiger hält. Sie geht bis zu 721 Frames pro Shot, also 30 s bei 24 fps und 24 s bei 30 (length, feste Länge) und ist hauptsächlich für lange Videos gedacht:

  • Erster Shot: ein normaler Clip (Prompt, Startframe, keyframes, end_image), bis zu 721 Frames.
  • Verlängerung: extend_job_id (oder extend_video) wie in Clip verlängern, mit derselben consistency. length ist weiterhin die neue Dauer (bis zu 721, also 30 s mehr bei 24 fps). Eine verstärkte Verlängerung nimmt auch keyframes, deren at vom ersten neuen Frame an zählt, und einen Endframe end_image, der auf dem letzten Frame des Shots gesetzt wird: zum Beispiel der Startframe des ersten Shots, damit ein langes Video in einer Schleife läuft.

Nur im Qualitätsmodus (mode ltx25, ohne quality: "max"), bis 1080p, nicht in Multi-Ref (400 consistency_mode). Preis: der Pauschalpreis des Formats (480p ohne Sound: 5 Credits) bis zu 481 neuen Frames (20 s bei 24 fps), darüber verdoppelt (siehe das Preisraster oben). Bildraten: 24, 30, 50 oder 60. Über 30 ist die Länge fest (fps_requires_fixed_duration sonst); 50 erzeugt eine leichte Zeitlupe (siehe fps). Das Rendering dauert länger als ein Standard- Clip, und sein Start kann auf eine größere Grafikkarte warten (lange Shots). Eine Sequenz behält für alle Shots dieselbe consistency. Ausgelieferte Größe: dieselbe wie in Qualität bei 720p und 1080p; bei 480p kommt die kurze Seite auf 448 heraus (448 x 832, 832 x 448, 448 x 448), da diese Lane in Vielfachen von 64 arbeitet.

Einige Prompts werden noch nicht unterstützt. Für sie wird ein einzelner Shot von höchstens 20 s (15 s mit einem end_image, bei fester Länge) in Standard-Konsistenz gerendert, zum gleichen Preis. Darüber hinaus (length über 481 mit duration_auto: false, oder über 361 mit einem end_image), in einer Verlängerung oder in einer Sequenz, wird die Anfrage mit 400 consistency_explicit abgelehnt: den Shot kürzen oder consistency: "standard" anfordern.

Langes Video (Sequenzen)

Ein Clip dauert höchstens 481 Frames, also 20 s bei 24 fps (721 mit verstärkter Konsistenz, 30 s bei 24 fps). Für längere Videos reicht eine Sequenz jeden Shot ein, sobald sein Rendering fertig ist, und fügt sie dann ohne Re-Encoding zu einem einzelnen MP4 zusammen. Eine Minute zum Beispiel sind 3 Shots à 20 s oder 2 Shots à 30 s in verstärkter Konsistenz bei 24 fps.

  1. POST /sequences öffnet eine Sequenz und antwortet mit { "sequence_id": "seq_...", ... }.
  2. POST /videos mit "sequence_id": "seq_..." für jeden Shot: der erste wie gewohnt, die folgenden mit extend_job_id auf den vorherigen Shot gesetzt. Jeder Shot wird in die Sequenz eingereicht, in Einreichungsreihenfolge, sobald GET /videos/{jobId} ihn als fertig meldet.
  3. POST /sequences/{id}/export sobald der letzte Shot fertig ist. Es antwortet mit seconds, resolution und file_url.
  4. GET /sequences/{id}/file: das zusammengefügte Video (MP4).

Daneben gibt GET /sequences/{id} den Status zurück (eingereichte oder noch erwartete Shots), POST /sequences/{id}/clips mit { "job_id": "..." } reicht ein Rendering manuell ein, und DELETE /sequences/{id} löscht die Sequenz sofort.

Regeln. Jeder Shot hat dieselbe Auflösung (Verlängerungen behalten sie) und dieselbe Sound-Einstellung, entweder alle mit Sound oder alle stumm, dieselbe consistency und dieselbe Bildrate (fps): der erste Shot legt sie fest, und ein Shot, der abweicht, wird abgelehnt (409 consistency_mismatch, 409 sequence_fps_mismatch; 422 encoding_mismatch für einen manuell eingereichten Shot). Ein Shot ohne fps übernimmt die der Sequenz. Höchstens 30 Shots pro Sequenz und 5 Sequenzen gleichzeitig pro Lizenz.

Was wir speichern und wie lange. Die Shots einer laufenden Sequenz werden 30 Minuten nach dem letzten hinzugefügten gelöscht, und das zusammengefügte Video 24 Stunden nach dem Export. Dann ist alles weg.

Den Projektordner exportieren

Ein Projektordner bündelt in einem ZIP alles, was du brauchst, um ein Video anderswo weiterzubearbeiten oder zu automatisieren: die Shots, ihre Referenzen, den Schnitt und ein Manifest, mit dem sich jeder Shot erneut rendern lässt. Er ist kostenlos: Es wird nichts gerendert.

  • POST /videos/{jobId}/export: ein Render von POST /videos (einzelner Shot, Multi-Ref, Verlängerung).
  • POST /sequences/{id}/project: alle Shots einer Sequenz, hintereinander.
  • Optionaler Body, dieselben Optionen wie im Exportfenster der App:
    • include_media (standardmäßig true): die Videos der Shots und ihre signierten Originale. false: kein einziges Video (kein Clip, kein Original, kein Film); die Shots behalten Text, Einstellungen und Referenzen ("state": "expired"), und das Manifest enthält videos_included: false.
    • include_references (standardmäßig true): die Ansichten der Charaktere und die Bilder der Elemente, in references/. false: keine wird kopiert; ihre Namen, @Erwähnungen, id und Fingerabdrücke bleiben im Manifest (references_included: false).
    • exclude_references: die Referenzen, die nicht kopiert werden sollen, einzeln, per id (character_id, subject_id), Name oder @Erwähnung, zum Beispiel ["@Parc", "chr_..."] (höchstens 200). Das Manifest enthält references_included: "partial" und "included": false bei jeder ausgelassenen (false, wenn alle ausgelassen sind). Ein Eintrag, der keine Referenz des Exports bezeichnet: 400 unknown_reference.
    • include_film (nur Sequenz, standardmäßig false): der Film einer bereits zusammengefügten Sequenz; setzt include_media voraus (sonst 400 invalid_export_options, wie eine Option, die kein Boolean ist, oder ein exclude_references, das keine Liste von Texten ist).
    • manifest_only: true: nur das Manifest, ohne ZIP.

Die Antwort ist { "manifest": { ... }, "file_url": "...", "export_id": "exp_...", "expires_at": "...", "bytes": n }, und GET /exports/{id}/file lädt das ZIP herunter. Ein Export gleichzeitig pro Lizenz (409 export_in_progress), höchstens 2 GB (413 export_too_large: exportiere die Shots einzeln).

DateiInhalt
tendre-project.jsonDas Manifest (Schema tendre.project/1, englische Schlüssel). Für jeden Shot: sein Status, der eingegebene Prompt (prompt) und der an die Engine gesendete (prompt_sent), die Einstellungen, der Seed, die Kosten, die Verlängerung (extends, direction), die mit ihren Dateien verknüpften Referenzen und api_request, der Body von POST /videos, der den Shot erneut rendert (null, wenn ein Bild nur in Base64 gesendet wurde); am Anfang references_included: true im ZIP (die Dateien der Referenzen liegen in references/), false mit manifest_only (Referenzen ohne Datei: files leer, nur sha256-Fingerabdrücke); ein Manifest ohne dieses Feld (frühere Exporte) gilt als true. Ein von der App exportierter Ordner, in dem der Kunde die Referenzen einzeln auswählt, trägt true, false oder "partial", und jede Referenz kann included tragen (fehlt es: wie am Anfang, false, wenn dort false steht, sonst true); eine nicht enthaltene Referenz behält Namen, @Erwähnung, id und Beschreibung, mit leerem files. project.settings enthält die Einstellungen des ersten Shots (quality, width, height, fps, audio, output_format "mp4") und settings_from_shot, die id dieses Shots. Ein von der App exportierter Ordner kann einen der App vorbehaltenen app-Block enthalten: ignoriere ihn
shots/NN/clip.mp4Der Render jedes Shots, solange der Server ihn hat; shots/NN/original.mp4 oder .mov: die signierte Datei der Engine, Byte für Byte, falls sie noch existiert
references/Die Ansichten der Charaktere und die Bilder der verwendeten Orte, Objekte, Tiere, Stile und Outfits
timeline.otio, timeline.fcpxmlDer Schnitt (OpenTimelineIO; FCPXML für Final Cut Pro und DaVinci Resolve), Medien per Pfad relativ zum Ordner
film.mp4Das zusammengefügte Video einer Sequenz, nur mit include_film: true und wenn sie bereits zusammengefügt wurde (POST /sequences/{id}/export); sonst ist assembled im Manifest null

Was wir speichern und wie lange. Zu jedem angenommenen POST /videos speichert der Server einen Eintrag des Renders ohne jedes Bild und Video: den Text, die Einstellungen, die Kennungen (ein in Base64 gesendetes Bild hinterlässt nur seinen Fingerabdruck). Er wird 24 Stunden nach dem Absenden gelöscht; danach antwortet der Export mit 404 unknown_export. Das ZIP wird 45 Minuten nach seinem ersten Download gelöscht, spätestens 2 Stunden nach seiner Erstellung. Ein Shot, den der Server nicht mehr hat, erscheint mit "state": "expired", ohne Datei, aber mit Text, Einstellungen und Referenzen: Ein Agent kann ihn mit api_request erneut rendern.

Sequenz. Das Zusammenfügen löscht die Shots einen nach dem anderen. Um die Shots und den Film zu bekommen, exportiere das Projekt vor dem Zusammenfügen, füge dann zusammen und exportiere erneut mit { "include_film": true }: Der Film kommt hinzu, die Shots erscheinen dann als expired.

Ultra-Modus

Der Ultra-Modus ist das feinste Video-Rendering. Füge "quality": "max" zu POST /videos hinzu (mit mode ltx25, dem Standard). Er wird pro Sekunde abgerechnet, oder zum Festpreis mit einem LoRA oder bei einer Verlängerung eines Clips, der nicht pro Sekunde gerendert wurde; die Verlängerung eines Ultra-Shots, vorwärts oder rückwärts, wird pro Sekunde abgerechnet. POST /videos/quote nennt den genauen Preis deiner Anfrage.

Pro Sekunde

Der Clip wird pro Sekunde nach seiner Auflösung abgerechnet, Sound inklusive:

AuflösungPreis
480p4 Credits pro Sekunde
720p8 Credits pro Sekunde
1080p20 Credits pro Sekunde
  • Länge: 4 bis 30 s bei 24 Bildern pro Sekunde, vor dem Rendering bekannt: 5 s bei automatischer Länge (duration_auto, Standard), sonst length / fps (24, wenn fps fehlt), auf die Sekunde gerundet.
  • Format: das angefragte, im nächstgelegenen Seitenverhältnis; 480p wird in 480p gerendert. Über 1080p: resolution_outside_ultra.
  • Startbild (image): möglich. Die Engine kann einen Text oder ein Bild beim Absenden ablehnen: 400 engine_refused, mit dem Grund in detail und dem Code in code; es wird nichts abgebucht.
  • Kein Seed: seed wird ignoriert, und die Antwort enthält keinen.
  • Abbruch: kostenlos, solange das Rendering wartet; sobald es läuft, 409 render_in_progress, und der Clip wird geliefert und abgerechnet.
  • Kein Endbild, keine Schlüsselbilder und keine verstärkte Konsistenz in Ultra.

Zum Festpreis

Mit einem LoRA oder bei einer Verlängerung eines Clips, der nicht pro Sekunde gerendert wurde, wird Ultra mit dem vollständigen Videomodell gerendert, zum Festpreis:

Angefordertes FormatAusgelieferte GrößeFestpreis pro Clip
480p oder 720pWie in der Tabelle oben bei 720p (1280 x 768), eine 480p-Anfrage wird in 720p gerendert40 Credits
1080pWie in der Tabelle oben (1920 x 1088)60 Credits

Der Preis ist pro Format fest: Sound und Länge ändern nichts. Ultra beginnt bei 720p: eine 480p- Anfrage wird in 720p gerendert und berechnet. POST /videos/quote gibt den genauen Preis. 1080p (1920 x 1088) ist die Obergrenze, in jedem Modus: 4K wird nicht mehr angeboten. Eine größere Größe wird abgelehnt (ultra_4k_unavailable mit quality: "max", resolution_above_quality ohne).

  • Länge: höchstens 481 Frames wie bei jedem Clip (20 s bei 24 fps, 16 s bei 30, 8 s bei 60). Verlängerungen und lange Videos funktionieren auch in Ultra. Eine Verlängerung behält die Größe des fortzusetzenden Clips, und unter 720p wird sie zum 720p-Preis berechnet.
  • Dauer: mehrere Minuten für einen 5-s-Clip, länger für einen 20-s-Clip. Der Start kann auf eine freie große Grafikkarte warten.
  • Kein Übergang (end_image) in Ultra (ultra_incompatible).
  • Keine Schlüsselbilder (keyframes) in Ultra (keyframes_mode).
  • Ein Charakter-LoRA von deinem Account funktioniert in Ultra wie im normalen Modus.

Multi-Ref Video

Ein Clip, in dem 1 bis 4 Charaktere (bis zu 12 in Ultra) mitspielen, jeder erkennbar, an einem optionalen Ort, mit gespeicherten Objekten, Tieren und einem gespeicherten Ort, wenn du sie brauchst. Die Charaktere kommen aus GET /characters: über die API aus einem Foto erstellt oder in der App. Die Objekte, Tiere und Orte kommen aus GET /subjects. Das Objekt multiref zu POST /videos hinzufügen (Berechtigung videos) und jeden Charakter mit @Name im Prompt aufrufen:

json
{
  "prompt": "@Lea walks toward @Tom in a sunny kitchen and hands him a cup. Sound: footsteps, soft music.",
  "multiref": {
    "characters": [
      { "character_id": "chr_8f3a...", "name": "Lea", "description": "a 28 year old woman with long red hair" },
      { "character_id": "chr_21bc...", "name": "Tom", "description": "a 30 year old man", "strength": 1.2 }
    ],
    "background_b64": "<optional: an image of the location>",
    "background_description": "a sunny kitchen"
  },
  "width": 1088, "height": 1920,
  "audio": true
}
Feld von multirefWas es tut
characters[].character_idEin Charakter aus GET /characters
characters[].nameEin Wort (Buchstaben, Ziffern, _), das nach @ im Prompt steht
characters[].descriptionEine kurze Beschreibung auf Englisch; standardmäßig sein kind
characters[].strengthGewichtung der Ähnlichkeit, 0 bis 2 (standardmäßig 1)
characters[].sheet_idOptional: welches Sheet für einen Charakter mit mehreren verwendet werden soll (standardmäßig das neueste)
characters[].voiceMit "audio": true, characters[0] und characters[1]: character (Standard) ist die Stimme aus seinem Profil, wenn sie online ist (has_voice am Charakter), sonst eine vom Modell erzeugte Stimme; generated verlangt eine vom Modell erzeugte Stimme. Die Antwort nennt die verwendete Stimme (voices).
characters[].voice_b64Optional, nur characters[0] und characters[1], mit "audio": true: eine andere Stimme für den Charakter, eine Audiodatei (WAV, MP3, OGG, FLAC) in base64, höchstens 4 MB (ein kurzer Ausschnitt reicht), die Vorrang vor der Profilstimme hat
background_b64, background_descriptionOptionaler Ort: ein Bild und ein paar englische Wörter
  • Prompt auf Englisch, ein Absatz im Präsens; Sound: für den Sound, Dialogzeilen in Anführungszeichen, exactly 2 people und wo jede Person steht, wenn es hilft, keine Verneinungen. Ein Wesen wird durch das beschrieben, was es ist. Ein @Name, der keinem Charakter entspricht, wird abgelehnt (unknown_mention).
  • Formate (width x height): Hochformat 480 x 832, 720 x 1280, 1088 x 1920; Querformat 832 x 480, 1280 x 720, 1920 x 1088; Quadrat 480 x 480, 720 x 720, 1088 x 1088. Kein 4K; 480p nur in Qualität.
  • Modi: Qualität (Standard) oder Ultra (quality: "max"). Keine Verlängerung und kein Übergang.
  • Länge: automatisch (duration_auto, Standard) oder fest mit duration_auto: false und length 121 (5 s), 241 (10 s) oder 481 (20 s) bei 24 fps; bei einer anderen Rate dieselben Dauern in Frames gezählt, höchstens 481 (bei 30: 145, 297, 481; bei 60: 297, 481).
  • Bildrate: fps 24, 30 (Standard) oder 60, wie bei jedem Clip; length zählt Frames bei dieser Rate, höchstens 481 (16 s bei 30, 8 s bei 60).
  • Preis: der Preis eines Clips. In Qualität der Pauschalpreis des Formats im obigen Raster, mit Sound verdoppelt; 480p ohne Sound bleibt bei 5 Credits (der niedrige Preis von Qualität gilt nicht für Multi-Ref). POST /videos/quote mit "multiref": true gibt den genauen Preis.
  • Der Server passt die Ansichten an das genaue Format des Videos an: sende die Charaktere so wie sie sind. Ein Charakter, der nur eine Ansicht hat, wird gerendert, mit warnings limited_likeness in der Antwort: die Ähnlichkeit ist eingeschränkt.
  • Profilstimmen: Mit Sound sprechen characters[0] und characters[1] standardmäßig mit der Stimme aus ihrem Profil, wenn sie online ist (has_voice); voice generated lässt das Modell eine erzeugen. Die Antwort nennt die Stimme jedes Charakters in voices (character_id, voice: character, custom oder generated).
  • Charakterstimmen (voice_b64): das Modell lässt den Charakter mit dieser Stimme sprechen, inklusive Lippenbewegungen; der Server nimmt seine ersten 5 Sekunden. Höchstens zwei Stimmen, auf characters[0] und characters[1] (die Engine unterstützt 2 Stimmen). characters wie den Dialog ordnen: characters[0] spricht zuerst, characters[1] antwortet. Sound wird benötigt ("audio": true), sonst voice_requires_audio; eine Stimme auf einem anderen Charakter: voice_slot; eine unleserliche Datei: unsupported_audio_format; über 4 MB: audio_too_large. Nur die ersten 5 Sekunden werden verwendet: einen kurzen Ausschnitt senden. Der gesamte Request-Body bleibt unter 30 MB (darüber ein 413 ohne JSON-Body). Keine zusätzlichen Kosten.
  • Abfragen, Herunterladen und Abbrechen gelten wie bei jedem Video (siehe Abfragen, herunterladen, abbrechen oben).

Gespeicherte Objekte, Tiere und Orte. Zwei weitere Felder von multiref besetzen die Motive, die du aus eigenen Bildern gespeichert hast:

Feld von multirefWas es tut
subjects[]Objekte und Tiere (subject_id, dann optional name, description, strength). Sie teilen die Slots mit den Charakteren: insgesamt höchstens 4 Referenzen; in Ultra bis zu 30 Bilder insgesamt (siehe unten).
locationEin gespeicherter Ort als Kulisse (subject_id, dann optional name, description, strength): seine Bilder, mit eigener Stärke. Er ersetzt background_b64 (beides zusammen: multiref_incompatible). Er benötigt mindestens einen Charakter, ein Objekt oder ein Tier.

name ist standardmäßig das erste Wort des Namens des Motivs, und jedes @Name im Prompt wird wie bei einem Charakter abgeglichen. Ein als subjects übergebener Ort oder ein als location übergebenes Objekt wird abgelehnt (invalid_subject_type). Der Preis ändert sich nicht: es ist der Preis eines Clips. Ein Motiv spielt mit seinen ersten 5 Bildern (in Ultra mit allen, höchstens 6).

json
"multiref": {
  "characters": [{ "character_id": "chr_8f3a...", "name": "Lea" }],
  "subjects": [{ "subject_id": "sub_1c2d...", "name": "Rex" }],
  "location": { "subject_id": "sub_9e8f...", "name": "Loft" }
},
"prompt": "@Lea throws a ball to @Rex across @Loft. Sound: barking, laughter."

In Ultra folgt ein Multi-Ref-Clip den Regeln von Ultra mit Abrechnung pro Sekunde: gleicher Preis pro Sekunde, Sound inklusive, 4 bis 30 s bei 24 Bildern pro Sekunde (5 s bei automatischer Länge), 480p bis 1080p, kein Seed.

  • Jeder Charakter geht mit seiner Character Sheet (oder, ohne eine, mit allen seinen Bildern), vom Server zu einem einzigen Bild zusammengesetzt; jedes Objekt, Tier oder jeder Ort mit allen seinen Bildern (höchstens 6).
  • Das erste Rendering eines Charakters bereitet dieses Bild vor, einige Dutzend Sekunden länger: Seine jobId beginnt dann mit sdp- und wird wie die anderen verfolgt.
  • Keine Stimme: voice_b64 und die Stimme des Profils werden ignoriert (warnings voice_ignored), und strength hat keine Wirkung.
  • Die Engine kann ein Referenzbild ablehnen (zum Beispiel ein echtes Gesicht): Das Rendering endet als failed mit dem Grund, und es wird nichts abgebucht.

Stile, Outfits und Bewegung. Nur in Ultra (quality: "max"): drei weitere Felder von multiref; anderswo wird die Anfrage abgelehnt (multiref_ultra_only), nie ohne sie gerendert.

Feld von multirefWas es macht
styles[]Gespeicherte Stile (subject_id, dann optional name, description): Der ganze Clip übernimmt ihren Look (Technik, Licht, Farben, Texturen), nie ihren Inhalt.
outfits[]Gespeicherte Outfits (dieselben Felder, plus worn_by), getragen wie auf ihren Bildern. worn_by (optional) ist der name eines der Charaktere: Es fügt "<Name> wears <Outfit>." am Anfang der Szene hinzu. Ohne es schreibst du es in den Prompt: @Lea wears @RedGown.
motionEin Bewegungsvideo von 4 bis 30 s: { "motion_id": ... } (hochgeladen mit POST /motions) oder { "video_b64": ... } (MP4, MOV, WebM oder MKV, höchstens 20 MB), und eine optionale description der Bewegung auf Englisch. mode legt fest, was der Clip davon übernimmt: camera (Standard) Kamerabewegung, Bildausschnitt und Rhythmus; choreography die Körperbewegungen, Gesten und ihren Rhythmus. Nie die Person oder den Ort des Videos; gleicher Preis in beiden Modi. Der Server bringt es auf etwa 410 000 Pixel (856 × 482 bei 16:9), mit 24 Bildern pro Sekunde, ohne Ton; sein Verhältnis Breite/Höhe liegt zwischen 0,4 und 2,5.
  • Höchstens 30 Bilder in Ultra, Charaktere, Motive, Stile, Outfits und Ort zusammen (multiref_too_many_images), davon höchstens 12 Charaktere (darüber multiref_characters_required). 8 werden empfohlen: Von 9 bis 12 läuft der Render mit warnings many_characters, da einige fehlen oder sich vermischen können. Ein Stil außerhalb von styles oder ein Outfit außerhalb von outfits wird abgelehnt (invalid_subject_type).
  • Preis der Bewegung: 3 Credits pro Sekunde des Bewegungsvideos (auf die nächste Sekunde aufgerundet), zusätzlich zum Rendering, zu lesen in GET /pricing (ultra.motion_per_second); POST /videos/quote mit demselben multiref.motion liefert motion_seconds und den genauen Preis.
  • Direkter Upload für ein schweres Bewegungsvideo: POST /motions mit { "size": <Bytes> } (höchstens 20 MB) liefert motion_id, upload_url, headers und expires_in (900 s); sende die Datei mit PUT upload_url und genau diesen headers, dann übergib multiref.motion.motion_id innerhalb von 2 Stunden an POST /videos. Eine motion_id dient einem Rendering.
json
"quality": "max",
"multiref": {
  "characters": [{ "character_id": "chr_8f3a...", "name": "Lea" }],
  "styles": [{ "subject_id": "sub_a1b2..." }],
  "outfits": [{ "subject_id": "sub_c3d4...", "name": "RedGown", "worn_by": "Lea" }],
  "motion": { "motion_id": "4f0c2a9b1d7e6a35", "description": "a low tracking shot from the side" }
},
"prompt": "@Lea walks along a seaside promenade at sunset."

Die Fehlercodes für Stile, Outfits und Bewegung stehen unter Grenzen und Fehler.

Mit dem MCP-Server erledigt der Agent all das mit tendre_multiref_video: Szene anfordern und Charaktere, Objekte, Tiere sowie den Ort benennen (subjects, location_id).

Face swap

Die in deinem eigenen Video gefilmte Person wird zu einem deiner Charaktere: Gesicht, Haare, Körper und Outfit (oder nur der Kopf, siehe part), unter Beibehaltung von Gesten, Lippenbewegungen und Umgebung, und der Stimme, sofern der Charakter keine eigene hat (siehe voice). Es ist der Face swap der App, auf einem Abschnitt von höchstens 20 s: ein Charakter, ohne Verkettung und ohne Übergang. Die Anfrage ist POST /faceswap (Berechtigung videos):

json
{
  "video_b64": "<the video in base64: MP4, MOV, WebM or MKV, 20 MB at most>",
  "character_id": "chr_8f3a...",
  "start": 2,
  "duration": 6,
  "scene": "@Lea wears a long red coat.",
  "zone": "normal",
  "likeness": 1
}
FeldWas es tut
video_b64Das Video, höchstens 20 MB, mit einer deutlich sichtbaren Person. Darüber hinaus zuerst kürzen oder komprimieren, oder das MCP-Tool tendre_face_swap verwenden, das bis zu 95 MB akzeptiert.
character_id, sheet_idEin Charakter aus GET /characters und sein Sheet, wenn er mehrere hat (standardmäßig das neueste).
nameOptional, höchstens 60 Zeichen: der Name des Charakters, standardmäßig der Name in GET /characters. Ein in der App erstellter Charakter hat seinen Namen erst online, wenn die App ihn gesendet hat (App 0.9.1 und neuer; sonst ist name null in GET /characters): einen angeben, um ihn mit @Name in scene aufzurufen, sonst Image 1 verwenden.
start, durationDer Abschnitt in Sekunden: ab start (standardmäßig 0), für duration (standardmäßig bis zum Ende des Videos, höchstens 20 s).
sceneOptional, auf Englisch, höchstens 400 Zeichen: was geändert oder präzisiert werden soll. Der Charakter wird mit @Name (erstes Wort seines Namens, siehe name) oder Image 1 aufgerufen. Ohne Szene bewegt er sich genau wie die gefilmte Person. Lass den Charakter darin nie sprechen und beschreibe weder seinen Mund noch seinen Blick oder Kopf („says“, „looks at the camera“, „smiles“): Er übernimmt sie aus dem Video, und eine Anweisung lässt ihn sie erfinden, mit versetzten Lippen und gedrehtem Kopf. Beschreibe, was sich drumherum ändert: Outfit, Accessoire, Licht.
descriptionOptional, auf Englisch, höchstens 360 Zeichen: wer der Charakter ist ("a 28 year old woman with long red hair, wearing a black leather jacket"). Standardmäßig sein kind und sein Outfit.
partfull (Standard): der ganze Charakter. head: nur der Kopf (Gesicht und Haare); der gefilmte Körper, die Kleidung und die Umgebung bleiben. Der Charakter wird dann aus den drei Porträts seines character sheet gerendert, auf den Kopf zugeschnitten (heads_only in der Antwort); ein Charakter mit einer oder zwei Ansichten behält sie ganz. Seine Standardbeschreibung nennt nur sein kind, ohne Outfit, und zone ist standardmäßig tight.
zoneDer Raum um die gefilmte Silhouette, in dem der Charakter gezeichnet werden kann: tight, normal (Standard) oder wide (Platz für große Ohren, Flügel, einen breiten Körperbau). Mit part head ist es der Raum um den Kopf, standardmäßig tight.
likenessWie eng der Charakter seinen Ansichten folgt, von 0,5 bis 2 (standardmäßig 1).
audioStandardmäßig true: der Sound des Videos wird beibehalten und die Lippen folgen ihm. false: ein stummes Video.
voicecharacter (Standard): Der Sound des Videos wird in die Stimme aus dem Profil des Charakters umgewandelt, wenn er online eine hat (has_voice in GET /characters), im selben Render und ohne das Tempo zu ändern, sodass die Lippen synchron bleiben. Ohne Profilstimme bleibt die gefilmte Stimme. original: die gefilmte Stimme behalten. Die Antwort nennt die verwendete Stimme (voice: character, custom, original oder none ohne Sound).
voice_b64Optional, mit Sound: eine andere Stimme für den Charakter (WAV, MP3, OGG, FLAC, höchstens 2 MB; die ersten 20 Sekunden werden verwendet), die Vorrang vor der Profilstimme hat. Der Sound des Videos wird in diese Stimme umgewandelt, ohne das Tempo zu ändern.
seedSeed des Renderings, von 0 bis 4294967295, um es erneut zu rendern oder zu variieren.

Video und Stimme zusammen: höchstens 22 MB, damit der Request-Body unter 30 MB bleibt (darüber ein 413 ohne JSON-Body).

  • Der Server bereitet alles vor. Er schneidet den Abschnitt, setzt ihn auf die Arbeitsbildrate (30 fps bei einer Quelle mit 29 fps oder mehr, auch 50 und 60 eingeschlossen, 24 darunter) und auf das Arbeitsformat (Vielfache von 128, kurze Seite 768, das Seitenverhältnis am nächsten zu deinem Video) und passt die Ansichten des Charakters an dieses Format an.
  • Was du zurückbekommst ist das Video des Abschnitts im Arbeitsformat, etwa ein Megapixel (768 x 1408 bei einem vertikalen Video, zum Beispiel), mit den Proportionen deines Videos auf 5% genau. Volle Auflösung und mehrere Charaktere hintereinander bleiben der tendre.AI-Desktop-App vorbehalten: sie fügt den Charakter in voller Auflösung in das Originalvideo ein und verkettet mehrere Charaktere.
  • Preis: 6 Credits pro Sekunde des vorbereiteten Abschnitts (seconds in der Antwort), auf den nächsten Credit aufgerundet. Die Antwort gibt jobId, seed, cost und den vorbereiteten Abschnitt (width, height, length, fps, seconds, audio, voice, views, part) zurück. Ein Charakter mit nur einer Ansicht wird gerendert, mit warnings limited_likeness.
  • Kein Angebot: weder POST /videos/quote noch das tendre_quote des MCP kennt Face swap. Um den Preis vor dem Einreichen zu berechnen, grid.body_swap in GET /pricing lesen: Sekunden des Abschnitts x per_block_720p (Preis eines Blocks) / block_seconds (Länge eines Blocks), auf den nächsten Credit aufgerundet.
  • Einige Szenen werden aus den drei auf den Kopf zugeschnittenen Porträts des Charakters gerendert (heads_only in der Antwort), und das Outfit seiner Ansichten wird nicht mehr aufgezwungen: die Szene entscheidet.
  • Ein Face swap zählt als Verwendung des Charakters und verschiebt seine Löschung, wie Multi-Ref.
  • Abfragen, Herunterladen und Abbrechen gelten wie bei jedem Video (siehe Abfragen, herunterladen, abbrechen oben): GET /videos/{jobId}, GET /videos/{jobId}/file, POST /videos/{jobId}/cancel.
  • Eigene Fehler: video_required, video_too_large, unreadable_video, invalid_start, passage_too_short, invalid_duration, invalid_zone, invalid_likeness, invalid_scene, invalid_description, invalid_character_name, invalid_part, invalid_voice_choice, character_required, unknown_character, audio_too_large (eine Stimme über 2 MB), face_swap_too_large (der Abschnitt ist nach der Vorbereitung noch zu groß: duration kürzen), server_busy (zwei Videos werden bereits vorbereitet: nach Retry-After, 20 s, erneut versuchen), face_swap_unavailable und face_swap_price_missing (Face swap geschlossen oder ohne Preis: später erneut versuchen). Was jedes bedeutet: Grenzen und Fehler.
  • Dein Video passiert während der Vorbereitung unsere Server und geht dann wie jedes Quellbild an die Grafikkarte, die es rendert.

Verwende nur Videos von Personen, die ihr Einverständnis gegeben haben: das ist eine Regel der Nutzungsbedingungen.

Mit dem MCP-Server erledigt der Agent all das mit tendre_face_swap.

Windows · Mac · Cloud oder lokal

Privat generieren. Noch heute Abend.

Lade tendre.AI kostenlos herunter und generiere unbegrenzt, privat, auf deiner eigenen GPU.

OS Windows 10/11GPU NVIDIA 8GB+VRAM 12GB empfohlenDisk 20GB

Mac: Apple Silicon (M1 oder neuer), macOS 13 oder neuer. Intel-Macs werden nicht unterstützt.

Lokale Bildgenerierung auf dem Mac braucht einen M4 mit 24 GB Arbeitsspeicher oder einen M2 oder M3 Pro, Max oder Ultra mit 24 GB. Darunter läuft alles online mit Credits. Retusche und Video laufen auf dem Mac vorerst online.

Alles über tendre.AI für Mac

Keine NVIDIA-GPU? Starte zu 100% in der Cloud: täglich 5 kostenlose Bilder und 1 kostenloses Video. Eine NVIDIA-Karte (8GB+) schaltet unbegrenzte lokale Generierung frei.