Pro API: generer og retoucher billeder

Et billede koster 1 kredit, uanset tilstand. Generering fra en prompt og retouchering af et billede, du selv leverer, går begge gennem den samme rute.

POST /images/quote tager samme body og returnerer prisen uden at oprette noget, altid { "cost": 1, ... } her. Den findes for symmetriens skyld med videoer, hvor prisen varierer.

Send et billede

POST /images

json
{ "prompt": "portrait of a woman in a rainy street at night, neon reflections, cinematic",
  "width": 832, "height": 1216 }
FeltTypeStandardHvad det gør
promptstringpåkrævetScenen. Engelsk giver de mest præcise resultater.
width, heightint1024 x 1024Pixelstørrelse. Gode formater: 1024 x 1024 (kvadrat), 832 x 1216 (portræt), 1216 x 832 (landskab).
modestringgenerationedit, img2img eller inpaint, se nedenfor. Fraværende betyder generering fra prompten.
image_b64stringKildebillede i base64 (PNG eller JPEG), kræves af alle tre retoucheringstilstande. Maks. 12 MB afkodet.
mask_b64stringMaske i base64: kræves af inpaint, valgfri for edit. Mal de områder, der skal retoucheres, i rødt, i samme størrelse som kildebilledet.
lorastringEn trænet karakter på kontoen: det name, som GET /loras returnerer. Sæt dens trigger i prompten.
lora2, lora2_strengthstring, numberEn anden karakter og dens styrke (0 til 1, standard 1) til en scene med to personer.
countint1Hvor mange billeder der skal renderes fra denne ene anmodning, 1 til 8. Hvert får sit eget friske seed; med seed bruger de seed, seed+1, seed+2... Dette er appens Images per generation-vælger.
seedinttilfældigSeedet for renderingen, fra 0 til 4294967295. Samme seed, samme prompt og samme indstillinger giver samme rendering, med meget små forskelle hvis grafikkortet skifter. Beholder du seed og justerer prompten, får du en variation, der bevarer kompositionen.
stepsintmotorLad feltet være tomt. Motoren kender selv sin værdi.

Svaret:

json
{ "jobId": "test-79634842-4586-46d4-ad52-d9ea236ae00d", "seed": 178078967, "cost": 1 }

seed returneres i svaret, uanset om du angav det, eller det blev trukket tilfældigt: gem det for at rendere det samme billede igen eller en variation af det.

Anmode om flere på én gang

Med count over 1 starter én anmodning flere renderinger, hver med sit eget seed, og svaret lister dem:

json
{ "count": 4, "requested": 4, "cost_total": 4,
  "jobs": [ { "jobId": "...", "seed": 178078967, "cost": 1 }, { "jobId": "...", "seed": 903412, "cost": 1 } ],
  "errors": [],
  "jobId": "...", "seed": 178078967, "cost": 1 }

To ting du skal læse nøje.

jobId, seed og cost for den første rendering gentages på øverste niveau. Det er der for at klienter skrevet før batch-understøttelse fortsat fungerer uændret, ikke fordi den første er vigtigere. Poll hvert element i jobs, ikke kun det ene.

Og sammenlign count med requested. En afvisning undervejs, på grund af manglende kreditter eller fordi nøglen har nået sit daglige loft, stopper batchen, hvor den er: requested er det, du bad om, count er det, der rent faktisk startede, og errors fortæller, hvorfor det stoppede. En klient, der antager, at de to er ens, mister lydløst renderinger.

POST /images/quote tager count med, og prissætter hele batchen. Videoer har ingen count: én anmodning, ét klip.

De tre retoucheringstilstande

Alle tre kører på den samme instruktionsdrevne redigeringsmotor, som bevarer udseendet af kildebilledet. Når du leverer et kildebillede, læses width og height fra billedet selv og behøver ikke sendes med.

modeInputHvad motoren gør
editimage_b64 + prompt (+ valgfri mask_b64)Anvender instruktionen på hele billedet ("add sunglasses", "make it snow"). Med en maske koncentreres ændringen inden for det røde område.
inpaintimage_b64 + mask_b64 + promptRegenererer kun maskens røde område i henhold til instruktionen. Resten rekomponeres pixel for pixel.
img2imgimage_b64 + promptBearbejder hele billedet ud fra prompten, mens komposition og udtryk bevares: en variation.

I edit vælger serveren selv den bedste måde at håndtere redigeringen på, som appen:

  • med en maske: den læser instruktionen og vælger mellem at erstatte indholdet i området (et andet objekt, et andet stykke tøj, et ansigt: området tegnes igen ud fra det, der skal vises der) og at ændre det, der er der (farve, materiale, lys). Med en karakter-lora tegnes området altid igen, ansigtet medregnet;
  • uden maske, med en karakter-lora ("replace the woman with kara..."): serveren finder personen på billedet og tegner vedkommende igen som karakteren; finder den ingen, gælder instruktionen hele billedet, som før.

Samme pris i alle tilfælde (1 kredit pr. billede). Valget ses i resultatet, ikke i svaret.

bash
IMG=$(base64 -w0 photo.png)
curl -s $B/images -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -d "{\"mode\":\"edit\",\"prompt\":\"add a red scarf, keep everything else identical\",\"image_b64\":\"$IMG\"}"

Lav et billede med karakterer, objekter og en lokation

Tilføj et multiref-objekt til POST /images, så lader serveren dine karakterer (Karakterer), dine objekter og dyr og en lokation (Subjects) spille sammen i ét enkelt billede, hver enkelt genkendelig, ligesom appens "Create an image"-skærm. Kald hver af dem med @Navn i prompten, på engelsk.

json
{ "prompt": "@Mia hands a cup of coffee to @Tom on a sunny terrace, both smiling",
  "multiref": {
    "characters": [
      { "character_id": "chr_8f3a...", "name": "Mia", "view": 1 },
      { "character_id": "chr_21bc...", "name": "Tom", "lora": "tom_v1", "strength": 1.0, "lora_pass": 0.55 }
    ],
    "subjects": [ { "subject_id": "sub_...", "name": "Mug" } ],
    "location": { "subject_id": "sub_...", "name": "Terrace" }
  },
  "width": 1344, "height": 768, "seed": 42, "count": 1 }
Felt i multirefHvad det gør
characters[].character_id, nameEn karakter fra GET /characters; name er det ord, der skrives efter @ (bogstaver, cifre, _).
characters[].viewDen vinkel i dens character sheet, der repræsenterer den, 1 til 5 (1, busten forfra, som standard).
characters[].sheet_idValgfrit: den character sheet, der skal bruges (den nyeste som standard).
characters[].loraValgfrit: dens billed-LoRA, et navn fra listen image i GET /loras. Karakteren spilles så af sin LoRA, ikke af sin vinkel.
characters[].strengthLoRA-styrke, 0 til 1,5 (1 som standard).
characters[].lora_passDen andel af billedet, som dens LoRA-gennemløb maler om, 0,3 til 0,9 (0,55 som standard); nyttigt med flere subjects.
characters[].descriptionValgfrit, på engelsk: outfit, alder...
subjects[]Objekter og dyr fra /subjects: subject_id, name (som standard det første ord i dets navn), description, image (hvilket af dets billeder, 1 som standard).
locationEn lokation fra /subjects (subject_id, name), eller en engangsbaggrund: background_b64 og background_description.
count1 eller 2: billederne renderes det ene efter det andet.
  • Højst 4 subjects (karakterer, objekter og dyr). Uden LoRA, kun ud fra billeder: højst 4 referencer, lokationen medregnet. Serveren vælger metoden ud fra referencerne og placerer hver enkelt i rækkefølgen characters og derefter subjects, fra venstre mod højre.
  • Et @Navn, der ikke matcher nogen reference, afvises (unknown_mention); en reference, der mangler i prompten, sendes alligevel med.
  • Pris: ét gennemløb koster prisen for ét billede (1 kredit). Et simpelt billede er 1 gennemløb; flere karakterer spillet af en LoRA, 1 plus ét gennemløb pr. LoRA (højst 4); kun ud fra billeder, ét gennemløb pr. reference ud over den første; en blanding, begge dele. Totalen (gennemløb x count) reserveres ved indsendelsen og opkræves én gang, ved det endelige billede: en fejl eller en annullering koster intet. POST /images/quote med samme body giver den præcise pris, metoden og dens gennemløb, uden at starte noget.
  • Svar 202: { "jobId": "mri_...", "seed", "cost", "method", "passes", "billed_passes" } (med count 2: jobs og cost_total). Polling, download og annullering bruger de sædvanlige ruter nedenfor; under renderingen angiver progress det igangværende gennemløb ("2/3"). Et billede tager 1 til 3 minutter.
  • Det endelige billede forbliver tilgængeligt i 1 time, og 10 minutter efter den første download. Et mislykket gennemløb giver status: "failed" med reason: "render_failed"; en annullering, reason: "cancelled".
  • Fejl: invalid_count, invalid_view, invalid_lora_pass, invalid_subject_image, invalid_size, character_not_ready, plus dem fra Multi-Ref (unknown_character, unknown_subject, unknown_lora, unknown_mention, multiref_too_many_references, invalid_strength...). Se Grænser og fejl.

Poll

GET /images/{jobId}

SvarBetydning
{ "status": "pending", "phase": "IN_QUEUE" }I kø
{ "status": "pending", "phase": "IN_PROGRESS" }Renderes
{ "status": "completed", "cost": 1, "file_url": "/pro/v1/images/{jobId}/file", ... }Færdig, fil klar
{ "status": "failed", "detail": "..." }Fejlet, og intet bliver opkrævet

Poll hvert 3. sekund, ikke hurtigere: køen er delt.

Download

GET /images/{jobId}/file

Selve PNG-filen som response body (Content-Type: image/png). Tilgængelig så snart status er completed, og 404 media_unavailable når renderingen er slettet. Download den med det samme, den arkiveres ikke.

Annuller

POST /images/{jobId}/cancel

Annullerer en rendering i kø eller i gang. Svarer { "ok": true }. Intet opkræves, og omkostningen reserveret mod nøglens daglige loft tilbagebetales.

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.