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
{ "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ält | Typ | Standard | Vad det gör |
|---|---|---|---|
prompt | string | required | Handlingen, stämningen, ljuset. Beskriv rörelsen. |
width, height | int | 720 x 1280 | Vertikalt som standard. Se prislistan nedan. |
quality | string | max: Ultra-läge (den finaste renderingen), se Ultra-läge. | |
consistency | string | standard | enhanced: 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. |
mode | string | ltx25 | ltx25: 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_auto | bool | true | Motorn 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). |
length | int | 121 | Lä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. |
fps | int | 30 | Bildfrekvens, 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. |
audio | bool | false | Ljud genererat tillsammans med bilden (omgivningsljud, röst). Fördubblar klippets pris (se Format och pris). |
image | string | Startram i base64: videon animerar den här bilden. | |
end_image | string | Slutram 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. | |
keyframes | array | Keyframes (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_strength | string, number | En tränad karaktär på kontot (name från GET /loras) och dess styrka (0 till 1). | |
lora2, lora2_strength | string, number | En andra karaktär. | |
multiref | object | Sä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. | |
seed | int | random | Renderingens 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. |
steps | int | engine | Lä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:
{ "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.
| Format | Kort sida | Exempelstorlekar | Utan ljud | Med ljud |
|---|---|---|---|---|
| 480p | 480 | 480 x 832, 832 x 480 | 2 (5 i Multi-Ref och förbättrad konsistens) | 10 |
| 720p | 720 | 720 x 1280, 1280 x 720 | 10 | 20 |
| 1080p | 1080 | 1080 x 1920, 1920 x 1080 | 15 | 30 |
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.
{ "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 somfailedmed"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.
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 klipp | Sekvens (förlängningar) | |
|---|---|---|
| Mellan tagningar | Hårda klipp | Inget klipp: varje tagning för rörelsen vidare |
| Längd | Max 20 s vid 24 fps (16 s vid 30) | Längre |
| Renderingar | En | En per tagning |
| Pris | Ett klipp | Ett 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ält | Typ | Standard | Vad det gör |
|---|---|---|---|
extend_job_id | string | Klippet som ska förlängas: en rendering från din licens, hämtad kort efter att den är klar. | |
extend_frames | int | 25 | Hur 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_video | string | I 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ält | Typ | Standard | Vad det gör |
|---|---|---|---|
extend_job_id | string | Ultra-tagningen som ska förlängas, renderad av din licens för mindre än 24 timmar sedan. | |
extend_upload_id | string | I stället, för en äldre tagning: det id som POST /extensions (nedan) returnerar, när originalfilen är uppladdad. | |
extend_direction | string | forward | forward 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 (widthochheightignoreras) 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.backwardgå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_secondiGET /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/quotemed samma fält gerextend_secondsoch det exakta priset. - En tagning äldre än 24 timmar: ladda upp dess originalfil, så som
GET /videos/{jobId}/filelevererade den.POST /extensionsmed{ "size": <byte> }returnerarupload_id,upload_url,headersochexpires_in(900 s); skicka filen medPUT upload_urloch exakt deheaders, och skicka sedanextend_upload_idinom 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(ellerextend_video) som i Förläng ett klipp, med sammaconsistency.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å emotkeyframes, varsaträknas från den första nya ramen, och en slutramend_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.
POST /sequencesöppnar en sekvens och svarar{ "sequence_id": "seq_...", ... }.POST /videosmed"sequence_id": "seq_..."för varje tagning: den första som vanligt, de följande medextend_job_idsatt till den föregående tagningen. Varje tagning läggs in i sekvensen, i inskickningsordning, så fortGET /videos/{jobId}ser att den är klar.POST /sequences/{id}/exportnär den sista tagningen är klar. Det svarar medseconds,resolutionochfile_url.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ånPOST /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(truesom 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 harvideos_included: false.include_references(truesom standard): karaktärernas vyer och elementens bilder, ireferences/.false: ingen kopieras; deras namn, @omnämnanden,idoch fingeravtryck stannar i manifestet (references_included: false).exclude_references: referenserna som inte ska kopieras, en och en, viaid(character_id,subject_id), namn eller @omnämnande, till exempel["@Parc", "chr_..."](högst 200). Manifestet harreferences_included: "partial"och"included": falsepå varje utesluten (falseom alla är det). En post som inte anger någon referens i exporten:400 unknown_reference.include_film(endast sekvens,falsesom standard): filmen för en redan sammanfogad sekvens; kräverinclude_media(annars400 invalid_export_options, liksom ett alternativ som inte är ett booleskt värde eller enexclude_referencessom 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).
| Fil | Innehåll |
|---|---|
tendre-project.json | Manifestet (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.mp4 | Renderingen 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.fcpxml | Klippningen (OpenTimelineIO; FCPXML för Final Cut Pro och DaVinci Resolve), media via sökväg relativ till mappen |
film.mp4 | Den 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ösning | Pris |
|---|---|
| 480p | 4 krediter per sekund |
| 720p | 8 krediter per sekund |
| 1080p | 20 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), annarslength/fps(24 omfpssaknas), 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 idetailoch koden icode; inget debiteras. - Ingen seed:
seedignoreras 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 format | Levererad storlek | Fast pris per klipp |
|---|---|---|
| 480p eller 720p | Som i tabellen ovan vid 720p (1280 x 768), en 480p-förfrågan renderas i 720p | 40 krediter |
| 1080p | Som 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:
{
"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 multiref | Vad det gör |
|---|---|
characters[].character_id | En karaktär från GET /characters |
characters[].name | Ett ord (bokstäver, siffror, _), det som skrivs efter @ i prompten |
characters[].description | En kort beskrivning på engelska; som standard dess kind |
characters[].strength | Likhetsviktning, 0 till 2 (1 som standard) |
characters[].sheet_id | Valfritt: vilken character sheet som ska användas för en karaktär som har flera (den senaste som standard) |
characters[].voice | Med "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_b64 | Valfritt, 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_description | Valfri plats: en bild och några engelska ord |
- Prompt på engelska, ett stycke i presens;
Sound:för ljudet, dialograder inom citattecken,exactly 2 peopleoch var var och en befinner sig när det hjälper, inga negationer. Ett väsen beskrivs med vad det är. Ett@Namnsom inte matchar någon karaktär nekas (unknown_mention). - Format (
widthxheight): 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 medduration_auto: falseochlength121 (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:
fps24, 30 (standard) eller 60, som för alla klipp;lengthrä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/quotemed"multiref": trueger 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
warningslimited_likenessi svaret: likheten är begränsad. - Profilröster: med ljud talar
characters[0]ochcharacters[1]som standard med rösten i sin profil när den finns online (has_voice);voicegeneratedlåter modellen göra en. Svaret anger rösten för var och en ivoices(character_id,voice:character,customellergenerated). - 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]ochcharacters[1](motorn stöder 2 röster). Sorteracharactersefter dialogen:characters[0]talar först,characters[1]svarar. Det kräver ljud ("audio": true), annarsvoice_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, en413utan 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 multiref | Vad 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). |
location | En 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).
"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
jobIdbörjar då medsdp-och följs som de andra. - Ingen röst:
voice_b64och profilens röst ignoreras (warningsvoice_ignored), ochstrengthhar ingen effekt. - Motorn kan neka en referensbild (ett verkligt ansikte, till exempel): renderingen slutar som
failedmed 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 multiref | Vad 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. |
motion | En 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övermultiref_characters_required). 8 rekommenderas: från 9 till 12 går renderingen igenom medwarningsmany_characters, eftersom några kan saknas eller blandas ihop. En stil utanförstyles, eller en outfit utanföroutfits, 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/quotemed sammamultiref.motiongermotion_secondsoch det exakta priset. - Direkt uppladdning, för en tung rörelsevideo:
POST /motionsmed{ "size": <byte> }(högst 20 MB) returnerarmotion_id,upload_url,headersochexpires_in(900 s); skicka filen medPUT upload_urloch exakt deheaders, och skicka sedanmultiref.motion.motion_idtillPOST /videosinom 2 timmar. Ettmotion_idräcker till en rendering.
"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):
{
"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ält | Vad det gör |
|---|---|
video_b64 | Videon, 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_id | En karaktär från GET /characters, och dess character sheet om den har flera (den senaste som standard). |
name | Valfritt, 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, duration | Avsnittet, i sekunder: från start (0 som standard), i duration (som standard till videons slut, max 20 s). |
scene | Valfritt, 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. |
description | Valfritt, 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. |
part | full (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. |
zone | Utrymmet 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. |
likeness | Hur nära karaktären håller sig till sina vyer, från 0,5 till 2 (1 som standard). |
audio | true som standard: videons ljud behålls, och läpparna följer det. false: en tyst video. |
voice | character (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_b64 | Valfritt, 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. |
seed | Renderingens 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 (
secondsi svaret), avrundat uppåt till närmaste kredit. Svaret gerjobId,seed,costoch det förberedda avsnittet (width,height,length,fps,seconds,audio,voice,views,part). En karaktär som bara har en vy renderas, medwarningslimited_likeness. - Ingen offert: varken
POST /videos/quoteeller MCP:stendre_quotekänner till Face swap. För att räkna ut priset innan du skickar in, läsgrid.body_swapiGET /pricing: sekunder av avsnittet xper_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_onlyi 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örkortaduration),server_busy(två videor förbereds redan: försök igen efterRetry-After, 20 s),face_swap_unavailableochface_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.