Pro API: generer videoer med lyd

Et klip fra en prompt, eller en animation af et stillbillede du leverer. Filen er en MP4, med lyd når du beder om det.

Indsend 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 }
FeltTypeStandardHvad det gør
promptstringpåkrævetHandlingen, stemningen, lyset. Beskriv bevægelsen.
width, heightint720 x 1280Vertikal som standard. Se prisguiden nedenfor.
qualitystringmax: Ultra-tilstand (den fineste gengivelse), se Ultra-tilstand.
consistencystringstandardenhanced: forbedret konsistens, steadigere bevægelse, ansigter og baggrund over tid, op til 721 frames pr. skud (30 s ved 24 fps, 24 s ved 30), udvidelser inkluderet. Kun Quality-tilstand. Se Forbedret konsistens.
modestringltx25ltx25: motor 2.5 (lyd, automatisk varighed, 1080p, slutframe). turbo: udfaset den 11. oktober 2026; en turbo-anmodning gengives i Quality 480p (samme orientering, samme længde, 241 frames maks., fast længde) til Quality 480p-prisen.
duration_autobooltrueMotoren vælger længden fra prompten, op til 20 s ved 24 fps (16 s ved 30, 8 s ved 60: grænsen tæller frames, se fps), og length ignoreres herefter. Sæt false for en fast længde angivet af length. Med consistency enhanced over 30 fps er længden altid fast (fps_requires_fixed_duration ellers).
lengthint121Længde i frames ved fps-hastigheden, altid på formen 8n+1; varigheden er (length - 1) / fps. Maks. 481 (721 med consistency enhanced). Ved 24 fps: 73 (3 s), 121 (5 s), 241 (10 s), 361 (15 s), 481 (20 s; 721, dvs. 30 s, i enhanced). Ved 30: 241 (8 s), 481 (16 s; 721, 24 s). Ved 60: 241 (4 s), 481 (8 s; 721, 12 s). Bruges til fast længde (duration_auto sat til false); ignoreres ved automatisk varighed.
fpsint30Billedhastighed i frames pr. sekund: 24, 30 eller 60. 30 som standard, den anbefalede indstilling (skarp bevægelse); 60, den jævneste; 24, biografhastigheden. 50, kun med consistency enhanced, giver en let slowmotion (ca. 0,83x: motoren sætter bevægelsen som ved 60 og afspiller den ved 50). length tæller frames ved denne hastighed. Prisen ændrer sig ikke (fast sats pr. klip); den maksimale længde gør, da den tæller frames. En udvidelse beholder billedhastigheden fra det forrige klip, en sekvens den fra sit første skud. En hastighed tilstanden ikke understøtter: invalid_fps, som lister dem den har.
audioboolfalseLyd genereret sammen med billedet (baggrundslyd, stemme). Fordobler prisen på klippet (se Formater og pris).
imagestringStartframe i base64: videoen animerer dette billede.
end_imagestringSlutframe i base64, sammen med image: klippet overgår fra det ene til det andet (kun motor 2.5). En overgang leveres i den ønskede størrelse, fra 480p til 1080p, og faktureres som et klip i det format.
keyframesarrayKeyframes (Quality-tilstand): 1 til 4 objekter { "image": base64, "at": seconds, "strength": 0.1 to 1 (1 by default) }. Klippet viser hvert billede på sit tidspunkt, f.eks. en karakter midt i et skud der starter og slutter på en tom location. Længden bliver fast (length, duration_auto tvinges til false); 0 < at < length, mindst 0,5 s mellem to keyframes; præcis til ca. en tredjedel af et sekund. Fungerer med image og end_image. Ikke i Ultra eller Multi-Ref; i en udvidelse kun med consistency enhanced (se Forbedret konsistens). Samme pris som et klip i samme format.
lora, lora_strengthstring, numberEn trænet karakter på kontoen (name fra GET /loras) og dens styrke (0 til 1).
lora2, lora2_strengthstring, numberEn anden karakter.
multirefobjectCast 1 til 4 karakterer (12 i Ultra) fra GET /characters, plus gemte objekter, dyr og en location fra GET /subjects, kaldt med @Navn i prompten, se Multi-Ref Video.
seedinttilfældigSeed til gengivelsen, fra 0 til 4294967295. Samme seed, samme prompt, samme billede og samme indstillinger (format, længde, lyd, tilstand): samme klip, med små forskelle hvis grafikkortet skifter. Med automatisk varighed ændrer en anden valgt længde klippet: for en streng gengivelse, sæt duration_auto til false og angiv length.
stepsintmotorLad feltet være tomt.

Standard billedhastighed: 30 fps. Klip blev tidligere gengivet ved 24 fps. Uden fps er et klip med samme length derfor kortere end før (241 frames: 8 s i stedet for 10 s). Send "fps": 24 for at beholde den tidligere adfærd.

Svaret:

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

Prisen beregnes og meddeles ved indsendelse, inden noget trækkes. seed returneres også, uanset om du angav den eller den blev trukket tilfældigt.

Formater og pris

En video prissættes pr. format som en fast sats uafhængig af dens længde. Grundpris: 5 kreditter.

Den faste sats ganges med 2 ved 720p og med 3 ved 1080p, og lyd fordobler derefter prisen. Faktorerne anvendes på grundsatsen, ikke på hinanden: 1080p med lyd koster 5 x 3 x 2 = 30 kreditter. Op til 481 frames, dvs. 20 s ved 24 fps, ændrer længden intet (5 s eller 20 s, samme sats). Over 481 frames (op til 721, kun med consistency enhanced, fast længde) fordobles prisen for formatet. Billedhastigheden (fps) ændrer ikke prisen, men niveauerne tæller frames: ved 30 fps gælder normalprisen op til 16 s; ved 60 op til 8 s (12 s til dobbelt pris i enhanced).

En undtagelse: i Quality koster 480p uden lyd 2 kreditter, uanset længde (siden 11. oktober 2026). Multi-Ref og forbedret konsistens beholder den faste sats for formatet, 5 kreditter.

FormatKorteste sideEksempelstørrelserUden lydMed lyd
480p480480 x 832, 832 x 4802 (5 i Multi-Ref og forbedret konsistens)10
720p720720 x 1280, 1280 x 7201020
1080p10801080 x 1920, 1920 x 10801530

Den størrelse du modtager. Motoren arbejder i multipler af 32 og i to trin, så filen leveres i 768 x 1280 (eller 1280 x 768) ved 720p og 1088 x 1920 (eller 1920 x 1088) ved 1080p. 480p forbliver 480 x 832 (eller 832 x 480), undtagen i forbedret konsistens. Godt at vide hvis du sammensætter eller lægger noget ovenpå vores gengivelser.

turbo-sporet blev udfaset den 11. oktober 2026: en turbo-anmodning gengives i Quality 480p og prissættes som sådan (2 kreditter uden lyd, 10 med lyd).

Kend prisen inden du indsender

POST /videos/quote tager samme body som POST /videos og kører samme beregning, men intet oprettes: ingen gengivelse, ingen kreditter tilbageholdt, intet kvote forbrugt. Kald det inden du forpligter dig, især fra en agent der arbejder inden for et 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 forklarer tallet; fps er den anvendte billedhastighed, og seconds_max er længden i sekunder ved den hastighed. Med "consistency": "enhanced" accepterer quote en fast længde op til 721 frames og anvender satsen over 481 frames (x 2 (over 20 s) i detail ved 24 fps, x 2 (over 481 frames) ved en anden hastighed). Den samme rute findes for billeder, POST /images/quote, som altid svarer { "cost": 1, ... }: et billede koster altid 1 kredit.

For et Ultra-klip, der afregnes pr. sekund, giver tilbuddet den afregnede længde i seconds, og detail specificerer prisen pr. sekund.

Poll, download, annuller

Samme ruter som billeder, under /videos.

  • GET /videos/{jobId}: pending / completed / failed, samme felter. En forbedret udvidelse kan ende med failed og "error": "extension_not_applied" (motoren tog ikke fat i slutningen af det forrige klip): intet trækkes, indsend igen.
  • GET /videos/{jobId}/file: MP4'en (Content-Type: video/mp4).
  • POST /videos/{jobId}/cancel: annullerer, og intet trækkes.

I Ultra pr. sekund stopper en gengivelse, der allerede beregnes, ikke længere: annulleringen svarer 409 render_in_progress, og klippet leveres og afregnes. Et klip, som motoren afviser ved output, ender som failed, med en sætning i detail og motorens kode i reason: intet trækkes.

En video tager 1 til 5 minutter, længere når motoren starter koldt. Poll hvert 3. sekund og download så snart status er completed: filen arkiveres ikke.

Flere skud i ét klip

En enkelt prompt kan indeholde flere skud med hårde klip, op til 20 sekunder i alt ved 24 fps (16 s ved 30, standarden). Beskriv dem i rækkefølge: Shot 1: <framing>, <action>. Cut to Shot 2: .... Gentag i hvert skud det der skal forblive det samme (karakter, tøj, sted, lys), og afslut med én linje fælles stemning.

Udelad tidskoder: lad duration_auto være slået til, og motoren vælger længden (op til 20 s ved 24 fps, 16 s ved 30) og hvor der klippes. To til fire skud pr. klip fungerer bedst.

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.

Flere skud i ét klip eller en sekvens? De gør forskellige ting:

Flere skud i ét klipSekvens (udvidelser)
Mellem skudHårde klipIntet klip: hvert skud fører bevægelsen videre
LængdeMaks. 20 s ved 24 fps (16 s ved 30)Længere
GengivelserÉnÉn pr. skud
PrisÉt klipÉt klip pr. skud

Forlæng et klip

Et klip kan forlænges: det næste skud fortsætter bevægelsen fra det forrige uden stop ved samlingen. Det styres af ca. det sidste sekund af det forrige klip, ikke af et enkelt stillbillede. Tilføj til POST /videos:

FeltTypeStandardHvad det gør
extend_job_idstringKlippet der skal forlænges: en gengivelse fra din licens, hentet kort efter den er færdig.
extend_framesint25Hvor meget af slutningen af klippet der styrer det næste skud, i frames: 9, 17, 25, 33, 41 eller 49 (25 er ca. 1 s ved 24 fps).
extend_videostringI stedet for extend_job_id: slutningen af et klip du selv har, som en base64 MP4 med præcis extend_frames frames, maks. 8 MB.

Det forlængede skud beholder opløsningen fra det forrige klip: width og height ignoreres med extend_job_id, og med extend_video læses størrelsen fra den fil du sender. Det indeholder kun de nye frames, så skuddene lagt efter hinanden udgør én sammenhængende video. Det beholder billedhastigheden fra det forrige klip: udelad fps (det overtager den) eller angiv den samme; en anden afvises (extend_fps_mismatch). length er den nye varighed af skuddet (121 = 5 s mere ved 24 fps), og den er præcis: automatisk varighed gælder ikke for en udvidelse. En udvidelse koster prisen på et klip.

Begrænsninger: ingen slutframe eller keyframes på samme tid, undtagen med forbedret konsistens.

Lyden fortsætter ved samlingen. Med audio: true, når slutningen af det forrige klip har et lydspor, henter det nye skud den lyd i stedet for at opfinde en ny. Med extend_job_id beholder det afskårne stykke klippets lyd; med extend_video, send slutningen med dens lyd. Uden et lydspor i det stykke, i forbedret konsistens og i Ultra, starter lyden frisk med skuddet: behold den samme stemning i hver prompt, så samlingen høres mindst muligt.

Forlæng et klip kort efter det er færdigt. Senere er det ikke længere tilgængeligt for os (clip_unavailable), og du sender selv slutningen i extend_video.

Forlæng et Ultra-skud, fremad eller bagud

Et skud, der er gengivet i Ultra pr. sekund, forlænges også i Ultra, fremad eller bagud; alle andre klip forlænges som ovenfor. Send POST /videos med "quality": "max" og:

FeltTypeStandardHvad det gør
extend_job_idstringUltra-skuddet, der skal forlænges, gengivet af din licens for mindre end 24 timer siden.
extend_upload_idstringI stedet, for et ældre skud: det id, som POST /extensions (nedenfor) returnerer, når originalfilen er uploadet.
extend_directionstringforwardforward gengiver det, der kommer bagefter; backward gengiver øjeblikkene lige før skuddet, til at klippe ind foran det.
  • Gengivelsen indeholder kun den nye del, lige så lang som et Ultra-klip (length / fps, 5 s med automatisk længde). Den får skuddets opløsning (width og height ignoreres) og slutter sig til dets sidste billede (forward) eller dets første (backward).
  • Intet startbillede, ingen referencer (multiref), ingen bevægelse og ingen forbedret konsistens. backward går ikke ind i en sekvens, som lægger sine skud efter hinanden.
  • Pris: den nye del til Ultra-prisen pr. sekund, plus, pr. sekund af det forlængede skud, 2 kreditter i 480p, 5 i 720p og 13 i 1080p (ultra.extend_per_second i GET /pricing). De sekunder rundes op til hele sekunder (med 0,1 s nøjagtighed) og tælles ved 24 billeder pr. sekund: et skud med højere billedfrekvens tælles forholdsmæssigt (2 s ved 60 fps tæller som 5 s). POST /videos/quote med de samme felter giver extend_seconds og den nøjagtige pris.
  • Et skud ældre end 24 timer: upload dets originalfil, sådan som GET /videos/{jobId}/file leverede den. POST /extensions med { "size": <bytes> } returnerer upload_id, upload_url, headers og expires_in (900 s); send filen med PUT upload_url og præcis disse headers, og send derefter extend_upload_id inden for 2 timer. En upload gælder for én gengivelse: en MP4 på 4 til 30 s, højst 60 MB og 1080p. Før renderingen kontrolleres hver video, der sendes til Ultra-tilstanden (en bevægelse eller en video, der skal forlænges), og intet trækkes, hvis den afvises (400 input_video_out_of_limits): 24 til 60 billeder pr. sekund, et forhold bredde/højde på 0,4 til 2,5 og, pr. rendering, højst 30 s og 10 filer for videoer og referencelyde tilsammen. For et realistisk ansigt afvises en omkodet eller redigeret fil (400 engine_refused): kun originalen går igennem. En video, som ikke er renderet i Ultra-tilstand (for eksempel en rendering fra en anden tilstand), forlænges ikke i Ultra, når den viser et realistisk ansigt (400 extension_real_face, intet trækkes): forlæng den i Quality-tilstand, eller lav skuddet om i Ultra.

Forbedret konsistens

Med "consistency": "enhanced" gengives klippet af et spor der holder bevægelse, ansigter og baggrund steadigere over tid. Det går op til 721 frames pr. skud, dvs. 30 s ved 24 fps og 24 s ved 30 (length, fast længde) og er primært beregnet til lange videoer:

  • Første skud: et normalt klip (prompt, startframe, keyframes, end_image), op til 721 frames.
  • Udvidelse: extend_job_id (eller extend_video) som i Forlæng et klip, med samme consistency. length er stadig den nye varighed (op til 721, dvs. 30 s mere ved 24 fps). En forbedret udvidelse tager også keyframes, hvis at tæller fra den første nye frame, og en slutframe end_image, sat på den sidste frame i skuddet: f.eks. startframen fra det første skud, så en lang video looper.

Kun Quality-tilstand (mode ltx25, uden quality: "max"), op til 1080p, ikke i Multi-Ref (400 consistency_mode). Pris: den faste sats for formatet (480p uden lyd: 5 kreditter) op til 481 nye frames (20 s ved 24 fps), fordoblet derover (se prisguiden ovenfor). Billedhastigheder: 24, 30, 50 eller 60. Over 30 er længden fast (fps_requires_fixed_duration ellers); 50 giver en let slowmotion (se fps). Gengivelsen tager længere end et standard klip, og starten kan vente på et større grafikkort (lange skud). En sekvens beholder den samme consistency for alle sine skud. Leveret størrelse: den samme som i Quality ved 720p og 1080p; ved 480p kommer den korte side ud på 448 (448 x 832, 832 x 448, 448 x 448), da dette spor arbejder i multipler af 64.

Nogle prompts understøttes endnu ikke. For dem gengives et enkelt skud på 20 s eller mindre (15 s med en end_image, ved fast længde) i standard konsistens, til samme pris. Over det (length over 481 med duration_auto: false, eller over 361 med en end_image), i en udvidelse eller i en sekvens, afvises anmodningen med 400 consistency_explicit: afkort skuddet eller bed om consistency: "standard".

Lang video (sekvenser)

Et klip er maks. 481 frames, dvs. 20 s ved 24 fps (721 med forbedret konsistens, 30 s ved 24 fps). For længere videoer arkiverer en sekvens hvert skud efterhånden som det er færdigt, og samler dem til én MP4 uden re-encoding. Et minut er f.eks. 3 skud à 20 s, eller 2 skud à 30 s i forbedret konsistens, ved 24 fps.

  1. POST /sequences åbner en sekvens og svarer med { "sequence_id": "seq_...", ... }.
  2. POST /videos med "sequence_id": "seq_..." for hvert skud: det første som sædvanligt, de næste med extend_job_id sat til det forrige skud. Hvert skud arkiveres i sekvensen, i indsendelsesrækkefølge, så snart GET /videos/{jobId} ser det som færdigt.
  3. POST /sequences/{id}/export når det sidste skud er færdigt. Det svarer med seconds, resolution og file_url.
  4. GET /sequences/{id}/file: den samlede video (MP4).

Derudover: GET /sequences/{id} giver tilstanden (skud arkiveret eller stadig forventet), POST /sequences/{id}/clips med { "job_id": "..." } arkiverer en gengivelse manuelt, og DELETE /sequences/{id} sletter sekvensen med det samme.

Regler. Alle skud har samme opløsning (udvidelser beholder den) og samme lydvalg, alle med lyd eller alle lydløse, samme consistency og samme billedhastighed (fps): det første skud sætter dem, og et skud der afviger afvises (409 consistency_mismatch, 409 sequence_fps_mismatch; 422 encoding_mismatch for et skud arkiveret manuelt). Et skud uden fps overtager sekvensens. Maks. 30 skud pr. sekvens og 5 sekvenser i gang pr. licens.

Hvad vi gemmer, og hvor længe. Skuddene i en igangværende sekvens slettes 30 minutter efter det sidste blev tilføjet, og den samlede video 24 timer efter eksporten. Derefter er alt væk.

Eksportér projektmappen

En projektmappe samler i en ZIP alt, hvad du skal bruge for at arbejde videre med en video et andet sted eller automatisere den: skuddene, deres referencer, klipningen og et manifest, der kan rendere hvert skud igen. Den er gratis: intet renderes.

  • POST /videos/{jobId}/export: én rendering fra POST /videos (enkelt skud, Multi-Ref, forlængelse).
  • POST /sequences/{id}/project: alle skud i en sekvens, efter hinanden.
  • Valgfri krop, de samme valg som i appens eksportvindue:
    • include_media (true som standard): skuddenes videoer og deres signerede originaler. false: ingen video overhovedet (hverken klip, original eller film); skuddene beholder tekst, indstillinger og referencer ("state": "expired"), og manifestet har videos_included: false.
    • include_references (true som standard): karakterernes vinkler og elementernes billeder, i references/. false: ingen kopieres; deres navne, @omtaler, id og fingeraftryk bliver i manifestet (references_included: false).
    • exclude_references: de referencer, der ikke skal kopieres, én ad gangen, via id (character_id, subject_id), navn eller @omtale, for eksempel ["@Parc", "chr_..."] (højst 200). Manifestet har references_included: "partial" og "included": false på hver udeladt (false, hvis alle er det). En post, der ikke peger på nogen reference i eksporten: 400 unknown_reference.
    • include_film (kun sekvens, false som standard): filmen for en allerede samlet sekvens; kræver include_media (ellers 400 invalid_export_options, ligesom et valg, der ikke er en boolesk værdi, eller en exclude_references, der ikke er en liste af tekster).
    • manifest_only: true: kun manifestet, uden ZIP.

Svaret er { "manifest": { ... }, "file_url": "...", "export_id": "exp_...", "expires_at": "...", "bytes": n }, og GET /exports/{id}/file downloader ZIP-filen. Én eksport ad gangen pr. licens (409 export_in_progress), maks. 2 GB (413 export_too_large: eksportér skuddene ét ad gangen).

FilIndhold
tendre-project.jsonManifestet (skema tendre.project/1, engelske nøgler). For hvert skud: dets status, den prompt du skrev (prompt) og den, der blev sendt til motoren (prompt_sent), indstillingerne, seeden, prisen, forlængelsen (extends, direction), referencerne knyttet til deres filer, og api_request, kroppen til POST /videos, der renderer skuddet igen (null, hvis et billede kun blev sendt i base64); øverst references_included: true i ZIP-filen (referencernes filer ligger i references/), false med manifest_only (referencer uden fil: files tom, kun sha256-fingeraftryk); et manifest uden dette felt (tidligere eksporter) læses som true. En mappe, som appen har eksporteret, hvor kunden vælger referencerne én ad gangen, har true, false eller "partial", og hver reference kan have included (mangler det: som øverst, false hvis der står false der, ellers true); en reference, der ikke er med, beholder navn, @omtale, id og beskrivelse, med files tom. project.settings indeholder indstillingerne for det første skud (quality, width, height, fps, audio, output_format "mp4") og settings_from_shot, det skuds id. En mappe, som appen har eksporteret, kan indeholde en app-blok forbeholdt appen: ignorér den
shots/NN/clip.mp4Renderingen af hvert skud, så længe serveren har den; shots/NN/original.mp4 eller .mov: motorens signerede fil, byte for byte, hvis den stadig findes
references/Karakterernes vinkler og billederne af de anvendte steder, objekter, dyr, stilarter og outfits
timeline.otio, timeline.fcpxmlKlipningen (OpenTimelineIO; FCPXML til Final Cut Pro og DaVinci Resolve), medier via sti i forhold til mappen
film.mp4Den samlede video for en sekvens, kun med include_film: true og hvis den allerede er samlet (POST /sequences/{id}/export); ellers er assembled null i manifestet

Hvad vi gemmer, og hvor længe. For hver accepteret POST /videos gemmer serveren et kort over renderingen uden noget billede eller video: teksten, indstillingerne, identifikatorerne (et billede sendt i base64 efterlader kun sit fingeraftryk). Det slettes 24 timer efter indsendelsen; derefter svarer eksporten 404 unknown_export. ZIP-filen slettes 45 minutter efter den første download, senest 2 timer efter oprettelsen. Et skud, som serveren ikke længere har, kommer ud som "state": "expired", uden fil, men med tekst, indstillinger og referencer: en agent kan rendere det igen med api_request.

Sekvens. Samlingen sletter skuddene ét efter ét. For at få både skuddene og filmen skal du eksportere projektet før samlingen, derefter samle og eksportere igen med { "include_film": true }: filmen tilføjes, og skuddene kommer så ud som expired.

Ultra-tilstand

Ultra-tilstanden er den fineste videogengivelse. Tilføj "quality": "max" til POST /videos (med mode ltx25, standardværdien). Den afregnes pr. sekund, eller til fast pris med en LoRA eller ved en udvidelse af et klip, der ikke er gengivet pr. sekund; at forlænge et Ultra-skud, fremad eller bagud, afregnes pr. sekund. POST /videos/quote giver den nøjagtige pris for din forespørgsel.

Pr. sekund

Klippet afregnes pr. sekund efter sin opløsning, lyd inkluderet:

OpløsningPris
480p4 kreditter pr. sekund
720p8 kreditter pr. sekund
1080p20 kreditter pr. sekund
  • Længde: 4 til 30 s ved 24 billeder pr. sekund, kendt før gengivelsen: 5 s med automatisk længde (duration_auto, standard), ellers length / fps (24 hvis fps mangler), afrundet til sekundet.
  • Format: det ønskede, i nærmeste forhold; 480p gengives i 480p. Over 1080p: resolution_outside_ultra.
  • Startbillede (image): muligt. Motoren kan afvise en tekst eller et billede ved indsendelse: 400 engine_refused, med årsagen i detail og koden i code; intet trækkes.
  • Intet seed: seed ignoreres, og svaret angiver intet.
  • Annullering: fri, mens gengivelsen venter på sin tur; når den beregnes, 409 render_in_progress, og klippet leveres og afregnes.
  • Intet slutbillede, ingen keyframes og ingen forbedret konsistens i Ultra.

Til fast pris

Med en LoRA eller ved en udvidelse af et klip, der ikke er gengivet pr. sekund, gengives Ultra med den fulde videomodel, til fast pris:

Ønsket formatLeveret størrelseFast pris pr. klip
480p eller 720pSom i tabellen ovenfor ved 720p (1280 x 768), en 480p-anmodning gengives i 720p40 kreditter
1080pSom i tabellen ovenfor (1920 x 1088)60 kreditter

Prisen er fast pr. format: lyd og længde ændrer intet. Ultra starter ved 720p: en 480p-anmodning gengives og faktureres i 720p. POST /videos/quote giver den præcise pris. 1080p (1920 x 1088) er loftet, i alle tilstande: 4K tilbydes ikke længere. En større størrelse afvises (ultra_4k_unavailable med quality: "max", resolution_above_quality uden).

  • Længde: maks. 481 frames, som ethvert klip (20 s ved 24 fps, 16 s ved 30, 8 s ved 60). Udvidelser og lange videoer fungerer i Ultra også. En udvidelse beholder størrelsen fra det klip den fortsætter, og under 720p faktureres den til 720p-prisen.
  • Tid: flere minutter for et 5 s klip, længere for et 20 s klip. Starten kan vente på at et stort grafikkort bliver ledigt.
  • Ingen overgang (end_image) i Ultra (ultra_incompatible).
  • Ingen keyframes (keyframes) i Ultra (keyframes_mode).
  • En karakter-LoRA fra din konto fungerer i Ultra som i normaltilstanden.

Multi-Ref Video

Et klip hvor 1 til 4 karakterer (op til 12 i Ultra) spiller med, hver enkelt genkendelig, i en valgfri location, med gemte objekter, dyr og en gemt location når du har brug for det. Karaktererne kommer fra GET /characters: lavet fra ét foto via API'en eller i appen. Objekter, dyr og locations kommer fra GET /subjects. Tilføj multiref-objektet til POST /videos (tilladelse videos) og kald hver karakter med @Navn 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
}
Felt i multirefHvad det gør
characters[].character_idEn karakter fra GET /characters
characters[].nameÉt ord (bogstaver, cifre, _), det der skrives efter @ i prompten
characters[].descriptionEn kort beskrivelse på engelsk; som standard dens kind
characters[].strengthVægten af ligheden, 0 til 2 (1 som standard)
characters[].sheet_idValgfrit: hvilken character sheet der bruges for en karakter med flere (den nyeste som standard)
characters[].voiceMed "audio": true, characters[0] og characters[1]: character (standard) er stemmen i dens profil, når den er online (has_voice på karakteren), ellers en stemme lavet af modellen; generated beder om en stemme lavet af modellen. Svaret angiver, hvilken der blev brugt (voices).
characters[].voice_b64Valgfrit, kun characters[0] og characters[1], med "audio": true: en anden stemme til karakteren, en lydfil (WAV, MP3, OGG, FLAC) i base64, maks. 4 MB (et kort uddrag er nok), som går forud for profilens stemme
background_b64, background_descriptionValgfri location: et billede og nogle få engelske ord
  • Prompt på engelsk, ét afsnit i nutid; Sound: for lyden, replikker i anførselstegn, exactly 2 people og hvor hver person står når det hjælper, ingen negationer. Et væsen beskrives ved hvad det er. Et @Navn der ikke matcher nogen karakter afvises (unknown_mention).
  • Formater (width x height): portræt 480 x 832, 720 x 1280, 1088 x 1920; landskab 832 x 480, 1280 x 720, 1920 x 1088; kvadrat 480 x 480, 720 x 720, 1088 x 1088. Ingen 4K; 480p kun i Quality.
  • Tilstande: Quality (standard) eller Ultra (quality: "max"). Ingen udvidelse og ingen overgang.
  • Længde: automatisk (duration_auto, standard), eller fast med duration_auto: false og length 121 (5 s), 241 (10 s) eller 481 (20 s) ved 24 fps; ved en anden hastighed de samme varigheder talt i frames, maks. 481 (ved 30: 145, 297, 481; ved 60: 297, 481).
  • Billedhastighed: fps 24, 30 (standard) eller 60, som for ethvert klip; length tæller frames ved denne hastighed, maks. 481 (16 s ved 30, 8 s ved 60).
  • Pris: prisen på et klip. I Quality den faste pris for formatet i guiden ovenfor, fordoblet med lyd; 480p uden lyd forbliver 5 kreditter (Quality's lave pris gælder ikke for Multi-Ref). POST /videos/quote med "multiref": true giver den præcise pris.
  • Serveren tilpasser visningerne til det præcise videoformat: send karaktererne som de er. En karakter der kun har én visning gengives, med warnings limited_likeness i svaret: ligheden er begrænset.
  • Profilstemmer: med lyd taler characters[0] og characters[1] som standard med stemmen i deres profil, når den er online (has_voice); voice generated lader modellen lave en. Svaret angiver stemmen for hver i voices (character_id, voice: character, custom eller generated).
  • Karakterstemmer (voice_b64): modellen får karakteren til at tale med den stemme, inklusive læberne; serveren bruger de første 5 sekunder. Maks. to stemmer, på characters[0] og characters[1] (motoren understøtter 2 stemmer). Sorter characters efter dialogen: characters[0] taler først, characters[1] svarer. Det kræver lyd ("audio": true), ellers voice_requires_audio; en stemme på en anden karakter: voice_slot; en ulæselig fil: unsupported_audio_format; over 4 MB: audio_too_large. Kun de første 5 sekunder bruges: send et kort uddrag. Hele anmodningsbodyen forbliver under 30 MB (over det, en 413 uden JSON-body). Ingen ekstra pris.
  • Polling, download og annullering er dem for en hvilken som helst video (se Poll, download, annuller, ovenfor).

Gemte objekter, dyr og locations. To yderligere felter i multiref caster de subjects du har gemt fra dine egne billeder:

Felt i multirefHvad det gør
subjects[]Objekter og dyr (subject_id, derefter valgfrit name, description, strength). De deler slots med karaktererne: maks. 4 referencer i alt; i Ultra op til 30 billeder i alt (se nedenfor).
locationÉn gemt location som setting (subject_id, derefter valgfrit name, description, strength): dens billeder, med sin egen styrke. Den erstatter background_b64 (begge sammen: multiref_incompatible). Den kræver mindst én karakter, ét objekt eller ét dyr med sig.

name er som standard det første ord i subjectets navn, og hvert @Navn i prompten matches som en karakters. En location sendt i subjects, eller et objekt sendt som location, afvises (invalid_subject_type). Prisen ændres ikke: det er prisen på et klip. Et subject bruges med sine første 5 billeder (alle i Ultra, højst 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ølger et Multi-Ref-klip reglerne for Ultra pr. sekund: samme pris pr. sekund, lyd inkluderet, 4 til 30 s ved 24 billeder pr. sekund (5 s med automatisk længde), 480p til 1080p, intet seed.

  • Hver karakter sendes med sit character sheet (eller, uden et, med alle sine billeder), og serveren samler det hele til ét billede; hvert objekt, dyr eller sted med alle sine billeder (højst 6).
  • Den første gengivelse af en karakter forbereder det billede, nogle titals sekunder længere: dens jobId begynder da med sdp- og følges som de andre.
  • Ingen stemme: voice_b64 og profilens stemme ignoreres (warnings voice_ignored), og strength har ingen virkning.
  • Motoren kan afvise et referencebillede (et rigtigt ansigt, for eksempel): gengivelsen ender som failed med årsagen, og intet trækkes.

Stilarter, outfits og bevægelse. Kun i Ultra (quality: "max"), tre felter mere i multiref; ellers afvises forespørgslen (multiref_ultra_only), den renderes aldrig uden dem.

Felt i multirefHvad det gør
styles[]Gemte stilarter (subject_id, derefter valgfrit name, description): hele klippet overtager deres udtryk (teknik, lys, farver, teksturer), aldrig deres indhold.
outfits[]Gemte outfits (samme felter plus worn_by), båret som på deres billeder. worn_by (valgfrit) er name på en af karaktererne: det tilføjer "<Navn> wears <Outfit>." i starten af scenen. Uden det skriver du det i prompten: @Lea wears @RedGown.
motionÉn bevægelsesvideo på 4 til 30 s: { "motion_id": ... } (uploadet med POST /motions) eller { "video_b64": ... } (MP4, MOV, WebM eller MKV, højst 20 MB) og en valgfri description af bevægelsen på engelsk. mode angiver, hvad klippet overtager fra den: camera (standard) kamerabevægelsen, beskæringen og rytmen; choreography kropsbevægelserne, gestusserne og deres rytme. Aldrig personen eller stedet i videoen; samme pris i begge tilstande. Serveren nedskalerer den til omkring 410.000 pixels (856 × 482 i 16:9), 24 billeder pr. sekund, uden lyd; forholdet bredde/højde skal ligge mellem 0,4 og 2,5.
  • Højst 30 billeder i Ultra, karakterer, subjects, stilarter, outfits og lokation tilsammen (multiref_too_many_images), heraf højst 12 karakterer (derudover multiref_characters_required). 8 anbefales: fra 9 til 12 gennemføres renderen med warnings many_characters, fordi nogle kan mangle eller blive blandet sammen. En stil uden for styles eller et outfit uden for outfits afvises (invalid_subject_type).
  • Pris for bevægelsen: 3 kreditter pr. sekund af bevægelsesvideoen (rundet op til hele sekunder), oven i renderingen, angivet i GET /pricing (ultra.motion_per_second); POST /videos/quote med samme multiref.motion giver motion_seconds og den nøjagtige pris.
  • Direkte upload af en tung bevægelsesvideo: POST /motions med { "size": <bytes> } (højst 20 MB) returnerer motion_id, upload_url, headers og expires_in (900 s); send filen med PUT upload_url og præcis disse headers, og send derefter multiref.motion.motion_id til POST /videos inden for 2 timer. Et motion_id gælder for én 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."

Fejlkoderne for stilarter, outfits og bevægelse står i Grænser og fejl.

Med MCP-serveren klarer agenten alt dette med tendre_multiref_video: bed om scenen og navngiv karaktererne, objekterne, dyrene og locationen (subjects, location_id).

Face swap

Personen filmet i din egen video bliver til en af dine karakterer: ansigt, hår, krop og tøj (eller kun hovedet, se part), mens gestik, læber og omgivelser bevares, og stemmen også, medmindre karakteren har sin egen (se voice). Det er appens Face swap, på ét passager på maks. 20 s: én karakter, uden kædering og ingen overgang. Anmodningen er POST /faceswap (tilladelse 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
}
FeltHvad det gør
video_b64Videoen, maks. 20 MB, med én person tydeligt synlig. Over det, trim eller komprimer den først, eller brug MCP-værktøjet tendre_face_swap, som tager op til 95 MB.
character_id, sheet_idEn karakter fra GET /characters, og dens character sheet hvis den har flere (den nyeste som standard).
nameValgfrit, maks. 60 tegn: karakterens navn, som standard det den har i GET /characters. En karakter oprettet i appen har først sit navn online, når appen har sendt det (app 0.9.1 og nyere; ellers er name null i GET /characters): angiv et for at kalde den @Navn i scene, ellers kald den Image 1.
start, durationPassagen i sekunder: fra start (0 som standard), i duration (som standard til slutningen af videoen, maks. 20 s).
sceneValgfrit, på engelsk, maks. 400 tegn: hvad der skal ændres eller præciseres. Karakteren kaldes @Navn (det første ord i dens navn, se name) eller Image 1. Uden en scene bevæger den sig præcis som personen på kameraet. Lad aldrig karakteren tale i den, og beskriv aldrig dens mund, blik eller hoved (»says«, »looks at the camera«, »smiles«): den kopierer dem fra videoen, og en instruktion får den til at opfinde dem, med usynkrone læber og drejet hoved. Beskriv det, der ændrer sig omkring: tøj, tilbehør, lys.
descriptionValgfrit, på engelsk, maks. 360 tegn: hvem karakteren er ("a 28 year old woman with long red hair, wearing a black leather jacket"). Som standard dens kind og dens tøj.
partfull (standard): hele karakteren. head: kun hovedet (ansigt og hår); den filmede krop, tøjet og omgivelserne bliver. Karakteren gengives så fra de tre portrætter i dens character sheet, beskåret til hovedet (heads_only i svaret); en karakter med én eller to visninger beholder dem hele. Standardbeskrivelsen angiver kun dens kind, uden tøjet, og zone er tight som standard.
zonePladsen rundt om den filmede silhouet hvor karakteren kan tegnes: tight, normal (standard) eller wide (plads til store ører, vinger, en bred bygning). Med part head er det pladsen rundt om hovedet, tight som standard.
likenessHvor tæt karakteren holder sig til sine visninger, fra 0,5 til 2 (1 som standard).
audiotrue som standard: videoens lyd bevares, og læberne følger den. false: en lydløs video.
voicecharacter (standard): videoens lyd konverteres til stemmen i karakterens profil, når den har en online (has_voice i GET /characters), i samme rendering og uden at ændre tempoet, så læberne forbliver synkroniseret. Uden profilstemme bliver den filmede stemme. original: behold den filmede stemme. Svaret angiver, hvilken der blev brugt (voice: character, custom, original eller none uden lyd).
voice_b64Valgfrit, med lyd: en anden stemme til karakteren (WAV, MP3, OGG, FLAC, maks. 2 MB; de første 20 sekunder bruges), som går forud for profilens stemme. Videoens lyd konverteres til denne stemme uden at ændre tempoet.
seedSeed til gengivelsen, fra 0 til 4294967295, for at gengive den igen eller variere den.

Video og stemme tilsammen: maks. 22 MB, så anmodningsbodyen forbliver under 30 MB (over det, en 413 uden JSON-body).

  • Serveren forbereder alt. Den klipper passagen, sætter den til den arbejdsmæssige billedhastighed (30 fps for en kilde ved 29 fps eller mere, 50 og 60 inkluderet, 24 under) og til det arbejdsmæssige format (multipler af 128, en kort side på 768, det format tættest på din video), og tilpasser karakterens visninger til det format.
  • Det du modtager er videoen af passagen i det arbejdsmæssige format, ca. én megapixel (768 x 1408 for en vertikal video, f.eks.), med din videos proportioner inden for 5%. Fuld opløsning og flere karakterer i træk er specifikt for tendre.AI-desktopappen: den indsætter karakteren tilbage i den originale video i fuld opløsning og kæder flere karakterer.
  • Pris: 6 kreditter pr. sekund af den forberedte passage (seconds i svaret), rundet op til næste kredit. Svaret giver jobId, seed, cost og den forberedte passage (width, height, length, fps, seconds, audio, voice, views, part). En karakter der kun har én visning gengives, med warnings limited_likeness.
  • Ingen quote: hverken POST /videos/quote eller MCP'ens tendre_quote kender Face swap. For at beregne prisen inden du indsender, læs grid.body_swap i GET /pricing: sekunder af passagen x per_block_720p (prisen pr. blok) / block_seconds (længden af en blok), rundet op til næste kredit.
  • Nogle scener gengives fra karakterens tre portrætter beskåret til hovedet (heads_only i svaret), og tøjet fra dens visninger pålægges ikke længere: scenen bestemmer.
  • En Face swap tæller som en brug af karakteren og udskyder dens sletning, ligesom Multi-Ref.
  • Polling, download og annullering er dem for en hvilken som helst video (se Poll, download, annuller, ovenfor): GET /videos/{jobId}, GET /videos/{jobId}/file, POST /videos/{jobId}/cancel.
  • Egne fejl: 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 stemme over 2 MB), face_swap_too_large (passagen er stadig for tung efter forberedelse: afkort duration), server_busy (to videoer forberedes allerede: prøv igen efter Retry-After, 20 s), face_swap_unavailable og face_swap_price_missing (Face swap lukket, eller uden en pris: prøv igen senere). Hvad hver enkelt betyder: Grænser og fejl.
  • Din video sendes igennem vores servere mens den forberedes, og sendes derefter til det grafikkort der gengiver den, ligesom et killebillede.

Brug kun videoer af personer der har givet deres samtykke: det er en regel i brugsbetingelserne.

Med MCP-serveren klarer agenten alt dette med tendre_face_swap.

Windows · Mac · Cloud eller lokalt

Generer privat. I aften.

Download tendre.AI gratis og generér uden grænser, privat, på din egen GPU.

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

Mac: Apple Silicon (M1 eller nyere), macOS 13 eller nyere. Intel-Mac'er understøttes ikke.

Lokal billedgenerering på Mac kræver en M4 med 24 GB hukommelse, eller en M2 eller M3 Pro, Max eller Ultra med 24 GB. Under det kører alt online med credits. Retouchering og video kører online på Mac indtil videre.

Alt om tendre.AI til Mac

Intet NVIDIA GPU? Start 100% i skyen: 5 gratis billeder og 1 gratis video hver dag. Et NVIDIA-kort (8GB+) låser op for ubegrænset lokal generering.