Pro API: generera videor med ljud

Ett klipp från en prompt, eller en animation av en stillbild du tillhandahåller. Filen är en MP4, med ljud när du ber om det.

Skicka in en video

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 }
FältTypStandardVad det gör
promptstringrequiredHandlingen, stämningen, ljuset. Beskriv rörelsen.
width, heightint720 x 1280Vertikalt som standard. Se prislistan nedan.
qualitystringmax: Ultra-läge (den finaste renderingen), se Ultra-läge.
consistencystringstandardenhanced: förbättrad konsistens, stabilare rörelse, ansikten och bakgrund över tid, upp till 721 ramar per tagning (30 s vid 24 fps, 24 s vid 30), tillägg ingår. Endast kvalitetsläge. Se Förbättrad konsistens.
modestringltx25ltx25: motor 2.5 (ljud, automatisk längd, 1080p, slutram). turbo: avvecklad den 11 oktober 2026; en turbo-förfrågan renderas i Quality 480p (samma orientering, samma längd, max 241 ramar, fast längd), till priset för Quality 480p.
duration_autobooltrueMotorn väljer längden utifrån prompten, upp till 20 s vid 24 fps (16 s vid 30, 8 s vid 60: taket räknas i ramar, se fps), och length ignoreras då. Sätt false för fast längd, angiven av length. Med consistency enhanced över 30 fps är längden alltid fast (fps_requires_fixed_duration annars).
lengthint121Längd i ramar, vid fps-takten, alltid av formen 8n+1; varaktigheten är (length - 1) / fps. Max 481 (721 med consistency enhanced). Vid 24 fps: 73 (3 s), 121 (5 s), 241 (10 s), 361 (15 s), 481 (20 s; 721, det vill säga 30 s, i enhanced). Vid 30: 241 (8 s), 481 (16 s; 721, 24 s). Vid 60: 241 (4 s), 481 (8 s; 721, 12 s). Används för fast längd (duration_auto satt till false); ignoreras med automatisk längd.
fpsint30Bildfrekvens, i bilder per sekund: 24, 30 eller 60. 30 som standard, den rekommenderade inställningen (skarp rörelse); 60, den jämnaste; 24, biorefrekvensen. 50, med consistency enhanced endast, ger en lätt slow motion (ungefär 0,83x: motorn ställer in rörelsen som för 60 och spelar upp vid 50). length räknar ramar vid den här takten. Priset ändras inte (fast taxa per klipp); maxlängden gör det däremot, eftersom den räknas i ramar. En förlängning behåller det föregående klippets bildfrekvens, en sekvens det första tagningens. En takt som läget inte har: invalid_fps, som listar de som stöds.
audioboolfalseLjud genererat tillsammans med bilden (omgivningsljud, röst). Fördubblar klippets pris (se Format och pris).
imagestringStartram i base64: videon animerar den här bilden.
end_imagestringSlutram i base64, tillsammans med image: klippet övergår från den ena till den andra (endast motor 2.5). En övergång levereras i önskad storlek, från 480p till 1080p, och debiteras som ett klipp i det formatet.
keyframesarrayKeyframes (kvalitetsläge): 1 till 4 objekt { "image": base64, "at": seconds, "strength": 0.1 to 1 (1 by default) }. Klippet visar varje bild vid sin tidpunkt, till exempel en karaktär mitt i en tagning som börjar och slutar på en tom plats. Längden blir fast (length, duration_auto tvingas till false); 0 < at < length, minst 0,5 s mellan två keyframes; träffsäker till ungefär en tredjedels sekund. Fungerar med image och end_image. Inte i Ultra eller Multi-Ref; i en förlängning, bara med consistency enhanced (se Förbättrad konsistens). Samma pris som ett klipp i samma format.
lora, lora_strengthstring, numberEn tränad karaktär på kontot (name från GET /loras) och dess styrka (0 till 1).
lora2, lora2_strengthstring, numberEn andra karaktär.
multirefobjectSätt 1 till 4 karaktärer (12 i Ultra) från GET /characters, plus sparade objekt, djur och en plats från GET /subjects, anropade med @Namn i prompten, se Multi-Ref Video.
seedintrandomRenderingens seed, från 0 till 4294967295. Samma seed, samma prompt, samma bild och samma inställningar (format, längd, ljud, läge): samma klipp, med små skillnader om grafikkortet ändras. Med automatisk längd kan en annorlunda vald längd ändra klippet: för exakt reproduktion, sätt duration_auto till false och ange length.
stepsintengineLämna tomt.

Standard bildfrekvens: 30 fps. Klipp renderades tidigare vid 24 fps. Utan fps är ett klipp med samma length därför kortare än tidigare (241 ramar: 8 s i stället för 10 s). Skicka "fps": 24 för att behålla det tidigare beteendet.

Svaret:

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

Kostnaden beräknas och meddelas vid inskickning, innan något debiteras. seed returneras också, oavsett om du angav den eller om den drogs slumpmässigt.

Format och pris

En video prissätts per format, som en fast taxa oberoende av längden. Bas: 5 krediter.

Den fasta taxan multipliceras med 2 vid 720p och med 3 vid 1080p, och sedan fördubblar ljud priset. Faktorerna gäller bastaxan, inte varandra: 1080p med ljud kostar 5 x 3 x 2 = 30 krediter. Upp till 481 ramar, det vill säga 20 s vid 24 fps, ändrar längden ingenting (5 s eller 20 s, samma taxa). Över 481 ramar (upp till 721, med consistency enhanced enbart, fast längd) är formatets pris fördubblat. Bildfrekvensen (fps) ändrar inte priset, men nivåerna räknas i ramar: vid 30 fps gäller normalpriset upp till 16 s; vid 60, upp till 8 s (12 s till dubbelt pris i enhanced).

Ett undantag: i Quality kostar 480p utan ljud 2 krediter, oavsett längd (sedan den 11 oktober 2026). Multi-Ref och förbättrad konsistens behåller formatets fasta taxa, 5 krediter.

FormatKort sidaExempelstorlekarUtan ljudMed ljud
480p480480 x 832, 832 x 4802 (5 i Multi-Ref och förbättrad konsistens)10
720p720720 x 1280, 1280 x 7201020
1080p10801080 x 1920, 1920 x 10801530

Storleken du får tillbaka. Motorn arbetar i multipler av 32 och i två steg, så filen levereras i 768 x 1280 (eller 1280 x 768) för 720p och 1088 x 1920 (eller 1920 x 1088) för 1080p. 480p stannar på 480 x 832 (eller 832 x 480), utom i förbättrad konsistens. Bra att känna till om du sammanfogar eller lägger över våra renderingar.

turbo-spåret avvecklades den 11 oktober 2026: en turbo-förfrågan renderas i Quality 480p och prissätts som det (2 krediter utan ljud, 10 med ljud).

Känn till priset innan du skickar in

POST /videos/quote tar samma body som POST /videos och kör samma beräkning, men inget skapas: ingen rendering, inga krediter reserveras, ingen kvot förbrukas. Anropa den innan du bestämmer dig, särskilt från en agent som arbetar mot en budget.

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 redovisar beräkningen; fps är den använda bildfrekvensen, och seconds_max längden i sekunder vid den takten. Med "consistency": "enhanced" godtar offerten en fast längd upp till 721 ramar och tillämpar taxan över 481 ramar (x 2 (over 20 s) i detail vid 24 fps, x 2 (over 481 frames) vid annan takt). Samma rutt finns för bilder, POST /images/quote, som alltid svarar { "cost": 1, ... }: en bild kostar alltid 1 kredit.

För ett Ultra-klipp som debiteras per sekund ger offerten den debiterade längden i seconds, och detail specificerar priset per sekund.

Hämta status, ladda ner, avbryt

Samma rutter som för bilder, under /videos.

  • GET /videos/{jobId}: pending / completed / failed, samma fält. En förbättrad förlängning kan sluta som failed med "error": "extension_not_applied" (motorn tog inte upp slutet av det föregående klippet): inget debiteras, skicka in igen.
  • GET /videos/{jobId}/file: MP4:n (Content-Type: video/mp4).
  • POST /videos/{jobId}/cancel: avbryter, och inget debiteras.

I Ultra per sekund stannar en rendering som redan beräknas inte längre: avbrottet svarar 409 render_in_progress, och klippet levereras och debiteras. Ett klipp som motorn nekar vid utdata slutar som failed, med en mening i detail och motorns kod i reason: inget debiteras.

En video tar 1 till 5 minuter, längre när motorn startar kallt. Hämta status var 3:e sekund och ladda ner så fort statusen är completed: filen arkiveras inte.

Flera tagningar i ett klipp

En enda prompt kan innehålla flera tagningar med hårda klipp, totalt upp till 20 sekunder vid 24 fps (16 s vid 30, standard). Beskriv dem i ordning: Shot 1: <bildvinkel>, <handling>. Cut to Shot 2: .... Upprepa i varje tagning vad som måste förbli detsamma (karaktär, outfit, plats, ljus), och avsluta med en rad gemensam stämning.

Utelämna tidkoder: lämna duration_auto på, så väljer motorn längden (upp till 20 s vid 24 fps, 16 s vid 30) och var klippta ska vara. Två till fyra tagningar per klipp fungerar bäst.

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.

Flera tagningar i ett klipp, eller en sekvens? De gör olika saker:

Flera tagningar i ett klippSekvens (förlängningar)
Mellan tagningarHårda klippInget klipp: varje tagning för rörelsen vidare
LängdMax 20 s vid 24 fps (16 s vid 30)Längre
RenderingarEnEn per tagning
PrisEtt klippEtt klipp per tagning

Förläng ett klipp

Ett klipp kan förlängas: nästa tagning för rörelsen från det föregående vidare utan stopp vid skarven. Den styrs av ungefär den sista sekunden av det föregående klippet, inte av en enstaka stillbild. Lägg till i POST /videos:

FältTypStandardVad det gör
extend_job_idstringKlippet som ska förlängas: en rendering från din licens, hämtad kort efter att den är klar.
extend_framesint25Hur mycket av klippets slut som styr nästa tagning, i ramar: 9, 17, 25, 33, 41 eller 49 (25 är ungefär 1 s vid 24 fps).
extend_videostringI stället för extend_job_id: slutet av ett klipp du själv har, som en base64-MP4 med exakt extend_frames ramar, max 8 MB.

Den förlängda tagningen behåller det föregående klippets upplösning: width och height ignoreras med extend_job_id, och med extend_video läses storleken från filen du skickar. Den innehåller bara de nya ramarna, så tagningarna lagda efter varandra bildar en sammanhängande video. Den behåller bildfrekvensen från det föregående klippet: utelämna fps (den tar över den) eller ange samma; en annan nekas (extend_fps_mismatch). length är den nya tagningens varaktighet (121 = 5 s till vid 24 fps), och den är exakt: automatisk varaktighet gäller inte för en förlängning. En förlängning kostar priset av ett klipp.

Begränsningar: ingen slutram eller keyframes samtidigt, utom med förbättrad konsistens.

Ljudet fortsätter vid skarven. Med audio: true, när slutet av det föregående klippet har ett ljudspår, plockar den nya tagningen upp det ljudet i stället för att hitta på ett nytt. Med extend_job_id behåller det avskurna slutet klippets ljud; med extend_video, skicka slutet med sitt ljud. Utan ett ljudspår i det slutet, i förbättrad konsistens och i Ultra, börjar ljudet om från tagningen: håll samma stämning i varje prompt, så att skarven hörs så lite som möjligt.

Förläng ett klipp strax efter att det är klart. Senare är det inte längre tillgängligt för oss (clip_unavailable), och du skickar in dess slut själv i extend_video.

Förläng en Ultra-tagning, framåt eller bakåt

En tagning som renderats i Ultra per sekund förlängs också i Ultra, framåt eller bakåt; alla andra klipp förlängs som ovan. Skicka POST /videos med "quality": "max" och:

FältTypStandardVad det gör
extend_job_idstringUltra-tagningen som ska förlängas, renderad av din licens för mindre än 24 timmar sedan.
extend_upload_idstringI stället, för en äldre tagning: det id som POST /extensions (nedan) returnerar, när originalfilen är uppladdad.
extend_directionstringforwardforward renderar det som kommer sedan; backward renderar ögonblicken strax före tagningen, att klippa in framför den.
  • Renderingen innehåller bara den nya delen, lika lång som ett Ultra-klipp (length / fps, 5 s med automatisk längd). Den tar tagningens upplösning (width och height ignoreras) och ansluter till dess sista bildruta (forward) eller dess första (backward).
  • Ingen startbild, inga referenser (multiref), ingen rörelse och ingen förbättrad konsistens. backward går inte in i en sekvens, som lägger sina tagningar efter varandra.
  • Pris: den nya delen till Ultra-priset per sekund, plus, per sekund av den förlängda tagningen, 2 krediter i 480p, 5 i 720p och 13 i 1080p (ultra.extend_per_second i GET /pricing). De sekunderna avrundas uppåt till hel sekund (på 0,1 s när) och räknas vid 24 bildrutor per sekund: en tagning med högre bildfrekvens räknas proportionellt (2 s vid 60 fps räknas som 5 s). POST /videos/quote med samma fält ger extend_seconds och det exakta priset.
  • En tagning äldre än 24 timmar: ladda upp dess originalfil, så som GET /videos/{jobId}/file levererade den. POST /extensions med { "size": <byte> } returnerar upload_id, upload_url, headers och expires_in (900 s); skicka filen med PUT upload_url och exakt de headers, och skicka sedan extend_upload_id inom 2 timmar. En uppladdning räcker till en rendering: en MP4 på 4 till 30 s, högst 60 MB och 1080p. Före renderingen kontrolleras varje video som skickas till Ultra-läget (en rörelse eller en video att förlänga), och inget dras om den avvisas (400 input_video_out_of_limits): 24 till 60 bilder per sekund, ett förhållande bredd/höjd på 0,4 till 2,5 och, per rendering, högst 30 s och 10 filer för videor och referensljud tillsammans. För ett realistiskt ansikte avvisas en omkodad eller redigerad fil (400 engine_refused): bara originalet går igenom. En video som inte renderades i Ultra-läget (till exempel en rendering från ett annat läge) förlängs inte i Ultra när den visar ett realistiskt ansikte (400 extension_real_face, inget debiteras): förläng den i kvalitetsläge, eller gör om tagningen i Ultra.

Förbättrad konsistens

Med "consistency": "enhanced" renderas klippet av ett spår som håller rörelse, ansikten och bakgrund stabilare över tid. Det går upp till 721 ramar per tagning, det vill säga 30 s vid 24 fps och 24 s vid 30 (length, fast längd) och är främst avsett för långa videor:

  • Första tagningen: ett vanligt klipp (prompt, startram, keyframes, end_image), upp till 721 ramar.
  • Förlängning: extend_job_id (eller extend_video) som i Förläng ett klipp, med samma consistency. length är fortfarande den nya varaktigheten (upp till 721, det vill säga 30 s till vid 24 fps). En förbättrad förlängning tar också emot keyframes, vars at räknas från den första nya ramen, och en slutram end_image, satt på tagningens sista ram: till exempel startram för den första tagningen, så att en lång video loopar.

Endast kvalitetsläge (mode ltx25, utan quality: "max"), upp till 1080p, inte i Multi-Ref (400 consistency_mode). Pris: den fasta taxan för formatet (480p utan ljud: 5 krediter) upp till 481 nya ramar (20 s vid 24 fps), fördubblat däröver (se prislistan ovan). Bildfrekvenser: 24, 30, 50 eller 60. Över 30 är längden fast (fps_requires_fixed_duration annars); 50 ger en lätt slow motion (se fps). Renderingen tar längre tid än ett standardklipp, och starten kan behöva vänta på ett större grafikkort (långa tagningar). En sekvens behåller samma consistency för alla sina tagningar. Levererad storlek: samma som i Quality vid 720p och 1080p; vid 480p är den korta sidan 448 (448 x 832, 832 x 448, 448 x 448), eftersom det här spåret arbetar i multipler av 64.

Vissa promptar stöds inte än. För dem renderas en enstaka tagning på 20 s eller mindre (15 s med en end_image, vid fast längd) i standard-konsistens, till samma pris. Över det (length över 481 med duration_auto: false, eller över 361 med en end_image), i en förlängning eller i en sekvens, nekas förfrågan med 400 consistency_explicit: förkorta tagningen eller begär consistency: "standard".

Lång video (sekvenser)

Ett klipp är max 481 ramar, det vill säga 20 s vid 24 fps (721 med förbättrad konsistens, 30 s vid 24 fps). För längre videor lägger en sekvens in varje tagning allt eftersom renderingen är klar, och fogar sedan samman dem till en enda MP4 utan ny kodning. En minut är till exempel 3 tagningar på 20 s, eller 2 tagningar på 30 s i förbättrad konsistens, vid 24 fps.

  1. POST /sequences öppnar en sekvens och svarar { "sequence_id": "seq_...", ... }.
  2. POST /videos med "sequence_id": "seq_..." för varje tagning: den första som vanligt, de följande med extend_job_id satt till den föregående tagningen. Varje tagning läggs in i sekvensen, i inskickningsordning, så fort GET /videos/{jobId} ser att den är klar.
  3. POST /sequences/{id}/export när den sista tagningen är klar. Det svarar med seconds, resolution och file_url.
  4. GET /sequences/{id}/file: den sammanfogade videon (MP4).

Därtill: GET /sequences/{id} ger tillståndet (inlagda tagningar eller fortfarande väntade), POST /sequences/{id}/clips med { "job_id": "..." } lägger manuellt in en rendering, och DELETE /sequences/{id} raderar sekvensen omedelbart.

Regler. Alla tagningar har samma upplösning (förlängningar behåller den) och samma ljudval, antingen alla med ljud eller alla tysta, samma consistency och samma bildfrekvens (fps): den första tagningen sätter dem, och en tagning som avviker nekas (409 consistency_mismatch, 409 sequence_fps_mismatch; 422 encoding_mismatch för en manuellt inlagd tagning). En tagning utan fps tar sekvensens. Max 30 tagningar per sekvens och 5 sekvenser pågående per licens.

Vad vi behåller och hur länge. Tagningarna i en pågående sekvens raderas 30 minuter efter att den sista lades till, och den sammanfogade videon 24 timmar efter exporten. Sedan är allt borta.

Exportera projektmappen

En projektmapp samlar i en ZIP allt som behövs för att fortsätta med en video någon annanstans eller automatisera den: tagningarna, deras referenser, klippningen och ett manifest som låter dig rendera varje tagning igen. Den är gratis: ingenting renderas.

  • POST /videos/{jobId}/export: en rendering från POST /videos (enskild tagning, Multi-Ref, förlängning).
  • POST /sequences/{id}/project: alla tagningar i en sekvens, i följd.
  • Valfri kropp, samma val som i appens exportfönster:
    • include_media (true som standard): tagningarnas videor och deras signerade original. false: ingen video alls (inget klipp, inget original, ingen film); tagningarna behåller text, inställningar och referenser ("state": "expired") och manifestet har videos_included: false.
    • include_references (true som standard): karaktärernas vyer och elementens bilder, i references/. false: ingen kopieras; deras namn, @omnämnanden, id och fingeravtryck stannar i manifestet (references_included: false).
    • exclude_references: referenserna som inte ska kopieras, en och en, via id (character_id, subject_id), namn eller @omnämnande, till exempel ["@Parc", "chr_..."] (högst 200). Manifestet har references_included: "partial" och "included": false på varje utesluten (false om alla är det). En post som inte anger någon referens i exporten: 400 unknown_reference.
    • include_film (endast sekvens, false som standard): filmen för en redan sammanfogad sekvens; kräver include_media (annars 400 invalid_export_options, liksom ett alternativ som inte är ett booleskt värde eller en exclude_references som inte är en lista med texter).
    • manifest_only: true: bara manifestet, utan ZIP.

Svaret är { "manifest": { ... }, "file_url": "...", "export_id": "exp_...", "expires_at": "...", "bytes": n }, och GET /exports/{id}/file laddar ner ZIP-filen. En export åt gången per licens (409 export_in_progress), högst 2 GB (413 export_too_large: exportera tagningarna en och en).

FilInnehåll
tendre-project.jsonManifestet (schema tendre.project/1, engelska nycklar). För varje tagning: dess status, den skrivna prompten (prompt) och den som skickades till motorn (prompt_sent), inställningarna, seeden, kostnaden, förlängningen (extends, direction), referenserna kopplade till sina filer, och api_request, kroppen för POST /videos som renderar tagningen igen (null om en bild bara skickades i base64); överst references_included: true i ZIP-filen (referensernas filer ligger i references/), false med manifest_only (referenser utan fil: files tom, bara sha256-fingeravtryck); ett manifest utan detta fält (äldre exporter) läses som true. En mapp som appen exporterat, där kunden väljer referenserna en och en, har true, false eller "partial", och varje referens kan ha included (saknas det: som överst, false om det står false där, annars true); en referens som inte tagits med behåller namn, @omnämnande, id och beskrivning, med files tom. project.settings innehåller inställningarna för den första tagningen (quality, width, height, fps, audio, output_format "mp4") och settings_from_shot, den tagningens id. En mapp som appen exporterat kan innehålla ett app-block reserverat för appen: ignorera det
shots/NN/clip.mp4Renderingen av varje tagning, så länge servern har den; shots/NN/original.mp4 eller .mov: motorns signerade fil, byte för byte, om den fortfarande finns
references/Karaktärernas vyer och bilderna av de platser, objekt, djur, stilar och plagg som använts
timeline.otio, timeline.fcpxmlKlippningen (OpenTimelineIO; FCPXML för Final Cut Pro och DaVinci Resolve), media via sökväg relativ till mappen
film.mp4Den sammanfogade videon för en sekvens, bara med include_film: true och om den redan har sammanfogats (POST /sequences/{id}/export); annars är assembled null i manifestet

Vad vi behåller och hur länge. För varje accepterat POST /videos sparar servern ett kort över renderingen utan någon bild eller video: texten, inställningarna, identifierarna (en bild som skickats i base64 lämnar bara sitt fingeravtryck). Det raderas 24 timmar efter inskickandet; därefter svarar exporten 404 unknown_export. ZIP-filen raderas 45 minuter efter den första nedladdningen, senast 2 timmar efter att den skapades. En tagning som servern inte längre har kommer ut som "state": "expired", utan fil men med text, inställningar och referenser: en agent kan rendera den igen med api_request.

Sekvens. Sammanfogningen raderar tagningarna en efter en. För att få både tagningarna och filmen, exportera projektet innan du sammanfogar, sammanfoga sedan och exportera igen med { "include_film": true }: filmen läggs till, och tagningarna kommer då ut som expired.

Ultra-läge

Ultra-läget är den finaste videorenderingen. Lägg till "quality": "max" i POST /videos (med mode ltx25, standardvärdet). Det debiteras per sekund, eller till fast pris med en LoRA eller vid en förlängning av ett klipp som inte renderats per sekund; att förlänga en Ultra-tagning, framåt eller bakåt, debiteras per sekund. POST /videos/quote ger det exakta priset för din begäran.

Per sekund

Klippet debiteras per sekund efter sin upplösning, ljud ingår:

UpplösningPris
480p4 krediter per sekund
720p8 krediter per sekund
1080p20 krediter per sekund
  • Längd: 4 till 30 s vid 24 bilder per sekund, känd före renderingen: 5 s med automatisk längd (duration_auto, standard), annars length / fps (24 om fps saknas), avrundad till sekunden.
  • Format: det begärda, i närmaste förhållande; 480p renderas i 480p. Över 1080p: resolution_outside_ultra.
  • Startbild (image): möjlig. Motorn kan neka en text eller en bild vid inskickning: 400 engine_refused, med orsaken i detail och koden i code; inget debiteras.
  • Ingen seed: seed ignoreras och svaret anger ingen.
  • Avbrott: fritt medan renderingen väntar på sin tur; när den beräknas, 409 render_in_progress, och klippet levereras och debiteras.
  • Ingen slutbild, inga keyframes och ingen förbättrad konsistens i Ultra.

Till fast pris

Med en LoRA eller vid en förlängning av ett klipp som inte renderats per sekund renderas Ultra med den fullständiga videomodellen, till fast pris:

Begärt formatLevererad storlekFast pris per klipp
480p eller 720pSom i tabellen ovan vid 720p (1280 x 768), en 480p-förfrågan renderas i 720p40 krediter
1080pSom i tabellen ovan (1920 x 1088)60 krediter

Priset är fast per format: ljud och längd ändrar ingenting. Ultra börjar på 720p: en 480p-förfrågan renderas, och debiteras, i 720p. POST /videos/quote ger det exakta priset. 1080p (1920 x 1088) är taket, i alla lägen: 4K erbjuds inte längre. En större storlek nekas (ultra_4k_unavailable med quality: "max", resolution_above_quality utan).

  • Längd: max 481 ramar, som alla klipp (20 s vid 24 fps, 16 s vid 30, 8 s vid 60). Förlängningar och långa videor fungerar i Ultra också. En förlängning behåller storleken på klippet den fortsätter, och under 720p debiteras den till 720p-priset.
  • Tid: flera minuter för ett 5 s-klipp, längre för ett 20 s-klipp. Starten kan behöva vänta på att ett stort grafikkort blir ledigt.
  • Ingen övergång (end_image) i Ultra (ultra_incompatible).
  • Inga keyframes (keyframes) i Ultra (keyframes_mode).
  • En karaktärs-LoRA från ditt konto gäller i Ultra som i normalläget.

Multi-Ref Video

Ett klipp där 1 till 4 karaktärer (upp till 12 i Ultra) spelar, var och en igenkännbar, på en valfri plats, med sparade objekt, djur och en sparad plats när du behöver dem. Karaktärerna kommer från GET /characters: skapade från ett foto via API:t, eller i appen. Objekt, djur och platser kommer från GET /subjects. Lägg till multiref-objektet i POST /videos (behörighet videos) och anropa varje karaktär med @Namn i prompten:

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
}
Fält i multirefVad det gör
characters[].character_idEn karaktär från GET /characters
characters[].nameEtt ord (bokstäver, siffror, _), det som skrivs efter @ i prompten
characters[].descriptionEn kort beskrivning på engelska; som standard dess kind
characters[].strengthLikhetsviktning, 0 till 2 (1 som standard)
characters[].sheet_idValfritt: vilken character sheet som ska användas för en karaktär som har flera (den senaste som standard)
characters[].voiceMed "audio": true, characters[0] och characters[1]: character (standard) är rösten i dess profil när den finns online (has_voice på karaktären), annars en röst som modellen gör; generated ber om en röst som modellen gör. Svaret anger vilken som användes (voices).
characters[].voice_b64Valfritt, characters[0] och characters[1] enbart, med "audio": true: en annan röst för karaktären, en ljudfil (WAV, MP3, OGG, FLAC) i base64, max 4 MB (ett kort utdrag räcker), som går före profilens röst
background_b64, background_descriptionValfri plats: en bild och några engelska ord
  • Prompt på engelska, ett stycke i presens; Sound: för ljudet, dialograder inom citattecken, exactly 2 people och var var och en befinner sig när det hjälper, inga negationer. Ett väsen beskrivs med vad det är. Ett @Namn som inte matchar någon karaktär nekas (unknown_mention).
  • Format (width x height): stående 480 x 832, 720 x 1280, 1088 x 1920; liggande 832 x 480, 1280 x 720, 1920 x 1088; kvadratiskt 480 x 480, 720 x 720, 1088 x 1088. Inget 4K; 480p bara i Quality.
  • Lägen: Quality (standard), eller Ultra (quality: "max"). Ingen förlängning och ingen övergång.
  • Längd: automatisk (duration_auto, standard), eller fast med duration_auto: false och length 121 (5 s), 241 (10 s) eller 481 (20 s) vid 24 fps; vid annan takt, samma varaktigheter räknade i ramar, max 481 (vid 30: 145, 297, 481; vid 60: 297, 481).
  • Bildfrekvens: fps 24, 30 (standard) eller 60, som för alla klipp; length räknar ramar vid den takten, max 481 (16 s vid 30, 8 s vid 60).
  • Pris: priset för ett klipp. I Quality, den fasta prisnivån för formatet i tabellen ovan, fördubblat med ljud; 480p utan ljud stannar på 5 krediter (det låga priset för Quality gäller inte Multi-Ref). POST /videos/quote med "multiref": true ger det exakta priset.
  • Servern anpassar vyerna till exakt videoformatet: skicka karaktärerna som de är. En karaktär som har bara en vy renderas, med warnings limited_likeness i svaret: likheten är begränsad.
  • Profilröster: med ljud talar characters[0] och characters[1] som standard med rösten i sin profil när den finns online (has_voice); voice generated låter modellen göra en. Svaret anger rösten för var och en i voices (character_id, voice: character, custom eller generated).
  • Karaktärsröster (voice_b64): modellen får karaktären att tala med den rösten, läppar inkluderade; servern tar de första 5 sekunderna. Max två röster, på characters[0] och characters[1] (motorn stöder 2 röster). Sortera characters efter dialogen: characters[0] talar först, characters[1] svarar. Det kräver ljud ("audio": true), annars voice_requires_audio; en röst på en annan karaktär: voice_slot; en oläsbar fil: unsupported_audio_format; över 4 MB: audio_too_large. Bara de första 5 sekunderna används: skicka ett kort utdrag. Hela request body håller sig under 30 MB (över det, en 413 utan JSON-body). Ingen extra kostnad.
  • Statushämtning, nedladdning och avbryt är desamma som för alla videor (se Hämta status, ladda ner, avbryt, ovan).

Sparade objekt, djur och platser. Ytterligare två fält i multiref sätter in de subjects du sparat från dina egna bilder:

Fält i multirefVad det gör
subjects[]Objekt och djur (subject_id, sedan valfritt name, description, strength). De delar platserna med karaktärerna: max 4 referenser totalt; i Ultra upp till 30 bilder totalt (se nedan).
locationEn sparad plats som miljö (subject_id, sedan valfritt name, description, strength): dess bilder, med en egen styrka. Den ersätter background_b64 (båda tillsammans: multiref_incompatible). Den kräver minst en karaktär, ett objekt eller ett djur tillsammans med den.

name är som standard det första ordet i subjectets namn, och varje @Namn i prompten matchas som en karaktärs. En plats skickad i subjects, eller ett objekt skickat som location, nekas (invalid_subject_type). Priset ändras inte: det är priset för ett klipp. Ett subjekt används med sina första 5 bilder (alla i Ultra, högst 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."

I Ultra följer ett Multi-Ref-klipp reglerna för Ultra per sekund: samma pris per sekund, ljud ingår, 4 till 30 s vid 24 bilder per sekund (5 s med automatisk längd), 480p till 1080p, ingen seed.

  • Varje karaktär skickas med sitt character sheet (eller, utan ett sådant, med alla sina bilder), och servern sätter ihop allt till en enda bild; varje objekt, djur eller plats med alla sina bilder (högst 6).
  • Den första renderingen av en karaktär förbereder den bilden, några tiotal sekunder längre: dess jobId börjar då med sdp- och följs som de andra.
  • Ingen röst: voice_b64 och profilens röst ignoreras (warnings voice_ignored), och strength har ingen effekt.
  • Motorn kan neka en referensbild (ett verkligt ansikte, till exempel): renderingen slutar som failed med orsaken, och inget debiteras.

Stilar, outfits och rörelse. Endast i Ultra (quality: "max"), tre fält till i multiref; annars avvisas begäran (multiref_ultra_only), den renderas aldrig utan dem.

Fält i multirefVad det gör
styles[]Sparade stilar (subject_id, sedan valfritt name, description): hela klippet tar över deras utseende (teknik, ljus, färger, texturer), aldrig deras innehåll.
outfits[]Sparade outfits (samma fält, plus worn_by), burna som på sina bilder. worn_by (valfritt) är name för en av karaktärerna: det lägger till "<Namn> wears <Outfit>." i början av scenen. Utan det skriver du det i prompten: @Lea wears @RedGown.
motionEn rörelsevideo på 4 till 30 s: { "motion_id": ... } (uppladdad med POST /motions) eller { "video_b64": ... } (MP4, MOV, WebM eller MKV, högst 20 MB), och en valfri description av rörelsen på engelska. mode anger vad klippet tar från den: camera (standard) kamerarörelsen, bildutsnittet och rytmen; choreography kroppsrörelserna, gesterna och deras rytm. Aldrig personen eller platsen i videon; samma pris i båda lägena. Servern skalar ner den till ungefär 410 000 pixlar (856 × 482 i 16:9), 24 bilder per sekund, utan ljud; förhållandet bredd/höjd ska ligga mellan 0,4 och 2,5.
  • Högst 30 bilder i Ultra, karaktärer, subjekt, stilar, outfits och plats sammanlagt (multiref_too_many_images), varav högst 12 karaktärer (därutöver multiref_characters_required). 8 rekommenderas: från 9 till 12 går renderingen igenom med warnings many_characters, eftersom några kan saknas eller blandas ihop. En stil utanför styles, eller en outfit utanför outfits, avvisas (invalid_subject_type).
  • Pris för rörelsen: 3 krediter per sekund av rörelsevideon (avrundat uppåt till hel sekund), utöver renderingen, angivet i GET /pricing (ultra.motion_per_second); POST /videos/quote med samma multiref.motion ger motion_seconds och det exakta priset.
  • Direkt uppladdning, för en tung rörelsevideo: POST /motions med { "size": <byte> } (högst 20 MB) returnerar motion_id, upload_url, headers och expires_in (900 s); skicka filen med PUT upload_url och exakt de headers, och skicka sedan multiref.motion.motion_id till POST /videos inom 2 timmar. Ett motion_id räcker till en 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."

Felkoderna för stilar, outfits och rörelse finns i Gränser och fel.

Med MCP-servern gör agenten allt detta med tendre_multiref_video: beskriv scenen och namnge karaktärerna, objekten, djuren och platsen (subjects, location_id).

Face swap

Personen filmad i din egen video blir en av dina karaktärer: ansikte, hår, kropp och outfit (eller bara huvudet, se part), med bibehållna gester, läppar och miljö, och rösten om inte karaktären har en egen (se voice). Det är appens Face swap, på ett avsnitt på max 20 s: en karaktär, utan kedjeförlängning och ingen övergång. Förfrågan är POST /faceswap (behörighet 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
}
FältVad det gör
video_b64Videon, max 20 MB, med en tydligt synlig person. Över det, beskär eller komprimera den först, eller använd MCP-verktyget tendre_face_swap, som tar upp till 95 MB.
character_id, sheet_idEn karaktär från GET /characters, och dess character sheet om den har flera (den senaste som standard).
nameValfritt, max 60 tecken: karaktärens namn, som standard det den har i GET /characters. En karaktär skapad i appen har sitt namn online först när appen har skickat det (app 0.9.1 och senare; annars är name null i GET /characters): ange ett för att anropa den med @Namn i scene, annars anropas den med Image 1.
start, durationAvsnittet, i sekunder: från start (0 som standard), i duration (som standard till videons slut, max 20 s).
sceneValfritt, på engelska, max 400 tecken: vad som ska ändras eller preciseras. Karaktären anropas med @Namn (det första ordet i dess namn, se name) eller Image 1. Utan en scene rör den sig exakt som personen på kameran. Låt aldrig karaktären tala i den och beskriv aldrig dess mun, blick eller huvud ("says", "looks at the camera", "smiles"): den kopierar dem från videon, och en instruktion får den att hitta på dem, med osynkade läppar och vridet huvud. Beskriv det som ändras runtomkring: outfit, accessoar, ljus.
descriptionValfritt, på engelska, max 360 tecken: vem karaktären är ("a 28 year old woman with long red hair, wearing a black leather jacket"). Som standard dess kind och outfit.
partfull (standard): hela karaktären. head: bara huvudet (ansikte och hår); den filmade kroppen, kläderna och miljön blir kvar. Karaktären renderas då från de tre porträtten i dess character sheet, beskurna till huvudet (heads_only i svaret); en karaktär med en eller två vyer behåller dem hela. Dess standardbeskrivning anger bara dess kind, utan outfit, och zone är tight som standard.
zoneUtrymmet runt den filmade silhuetten där karaktären kan ritas: tight, normal (standard) eller wide (plats för stora öron, vingar, en bred kroppsbyggnad). Med part head är det utrymmet runt huvudet, tight som standard.
likenessHur nära karaktären håller sig till sina vyer, från 0,5 till 2 (1 som standard).
audiotrue som standard: videons ljud behålls, och läpparna följer det. false: en tyst video.
voicecharacter (standard): videons ljud konverteras till rösten i karaktärens profil när den har en online (has_voice i GET /characters), i samma rendering och utan att ändra takten, så läpparna förblir synkade. Utan profilröst blir den filmade rösten kvar. original: behåll den filmade rösten. Svaret anger vilken som användes (voice: character, custom, original eller none utan ljud).
voice_b64Valfritt, med ljud: en annan röst för karaktären (WAV, MP3, OGG, FLAC, max 2 MB; de första 20 sekunderna används), som går före profilens röst. Videons ljud konverteras till den här rösten, utan att ändra takten.
seedRenderingens seed, från 0 till 4294967295, för att rendera om eller variera den.

Video och röst tillsammans: max 22 MB, så att request body håller sig under 30 MB (över det, en 413 utan JSON-body).

  • Servern förbereder allt. Den klipper ut avsnittet, sätter det till arbetsbildfrekvensen (30 fps för en källa vid 29 fps eller mer, 50 och 60 inkluderat, 24 under det) och till arbetsformatet (multipler av 128, en kort sida på 768, förhållandet närmast din video), och anpassar karaktärens vyer till det formatet.
  • Vad du får tillbaka är videon av avsnittet i arbetsformatet, ungefär en megapixel (768 x 1408 för en vertikal video, till exempel), med din videos proportioner inom 5%. Full upplösning och flera karaktärer i rad är specifikt för tendre.AI:s skrivbordsapp: den klistrar tillbaka karaktären på originalvideon i full upplösning och kedjar flera karaktärer.
  • Pris: 6 krediter per sekund av det förberedda avsnittet (seconds i svaret), avrundat uppåt till närmaste kredit. Svaret ger jobId, seed, cost och det förberedda avsnittet (width, height, length, fps, seconds, audio, voice, views, part). En karaktär som bara har en vy renderas, med warnings limited_likeness.
  • Ingen offert: varken POST /videos/quote eller MCP:s tendre_quote känner till Face swap. För att räkna ut priset innan du skickar in, läs grid.body_swap i GET /pricing: sekunder av avsnittet x per_block_720p (priset för ett block) / block_seconds (ett blocks längd), avrundat uppåt till närmaste kredit.
  • Vissa scener renderas från karaktärens tre porträtt beskurna till huvudet (heads_only i svaret), och outfiten från dess vyer påtvingas inte längre: scenen bestämmer.
  • Ett Face swap räknas som en användning av karaktären och skjuter upp raderingen, precis som Multi-Ref.
  • Statushämtning, nedladdning och avbryt är desamma som för alla videor (se Hämta status, ladda ner, avbryt, ovan): GET /videos/{jobId}, GET /videos/{jobId}/file, POST /videos/{jobId}/cancel.
  • Egna felkoder: 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 (en röst över 2 MB), face_swap_too_large (avsnittet är fortfarande för tungt efter förberedelse: förkorta duration), server_busy (två videor förbereds redan: försök igen efter Retry-After, 20 s), face_swap_unavailable och face_swap_price_missing (Face swap stängt, eller utan pris: försök igen senare). Vad var och en betyder: Gränser och fel.
  • Din video passerar genom våra servrar medan den förbereds och skickas sedan till grafikkortet som renderar den, som alla källbilder.

Använd bara videor på personer som har gett sitt samtycke: det är ett krav i användarvillkoren.

Med MCP-servern gör agenten allt detta med tendre_face_swap.

Windows · Mac · Moln eller lokalt

Generera privat. Ikväll.

Ladda ner tendre.AI gratis och generera utan gränser, privat, på ditt eget GPU.

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

Mac: Apple silicon (M1 eller senare), macOS 13 eller senare. Intel-Mac stöds inte.

Lokal bildgenerering på Mac kräver en M4 med 24 GB minne, eller en M2 eller M3 Pro, Max eller Ultra med 24 GB. Under det körs allt online med krediter. Retuschering och video körs online på Mac för tillfället.

Allt om tendre.AI för Mac

Inget NVIDIA-GPU? Börja 100% i molnet: 5 gratis bilder och 1 gratis video varje dag. Ett NVIDIA-kort (8GB+) låser upp obegränsad lokal generering.