Pro API: generera och retuschera bilder

En bild kostar 1 kredit, oavsett läge. Generering från en prompt och retuschering av en bild du tillhandahåller går båda genom samma rutt.

POST /images/quote tar samma body och svarar med priset utan att skapa något, alltid { "cost": 1, ... } här. Det finns för symmetrins skull med videor, där priset faktiskt varierar.

Skicka en bild

POST /images

json
{ "prompt": "portrait of a woman in a rainy street at night, neon reflections, cinematic",
  "width": 832, "height": 1216 }
FältTypStandardVad det gör
promptsträngkrävsScenen. Engelska ger de mest precisa resultaten.
width, heightint1024 x 1024Pixelstorlek. Bra proportioner: 1024 x 1024 (kvadrat), 832 x 1216 (porträtt), 1216 x 832 (landskap).
modestränggenerationedit, img2img eller inpaint, se nedan. Saknas det genereras bilden från prompten.
image_b64strängKällbild i base64 (PNG eller JPEG), krävs av alla tre retuscheringslägen. Max 12 MB avkodat.
mask_b64strängMask i base64: krävs av inpaint, valfri för edit. Måla de områden du vill retuschera i rött, i källbildens storlek.
lorasträngEn tränad karaktär på kontot: det name som returneras av GET /loras. Lägg dess trigger i prompten.
lora2, lora2_strengthsträng, talEn andra karaktär och dess styrka (0 till 1, standard 1) för en scen med två personer.
countint1Hur många bilder som ska renderas från denna förfrågan, 1 till 8. Var och en får sitt eget nya seed; med seed tar de seed, seed+1, seed+2... Det här är appens Images per generation-väljare.
seedintslumpmässigtRenderingens seed, från 0 till 4294967295. Samma seed, samma prompt och samma inställningar ger samma rendering, med mycket små skillnader om grafikkortet byts. Att behålla seed och justera prompten ger en variation som behåller kompositionen.
stepsintmotornLämna tomt. Motorn känner till sitt eget värde.

Svaret:

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

seed returneras i svaret, oavsett om du angav det eller om det drogs slumpmässigt: spara det för att rendera samma bild igen, eller en variation av den.

Be om flera på en gång

Med count över 1 startar en förfrågan flera renderingar, var och en med sitt eget seed, och svaret listar 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 }

Två saker att läsa noggrant.

jobId, seed och cost för den första renderingen upprepas på toppnivån. Det finns där för att klienter skrivna innan batcher stöds ska fortsätta fungera oförändrat, inte för att den första spelar större roll. Polla varje post i jobs, inte bara den.

Och jämför count med requested. Ett avvisande mitt i processen, på grund av brist på krediter eller för att nyckeln nådde sitt dagliga tak, stoppar batchen där den är: requested är vad du bad om, count är vad som faktiskt startade, och errors förklarar varför det stannade. En klient som antar att de två är lika tappar tyst renderingar.

POST /images/quote tar count också och prissätter hela batchen. Videor har ingen count: en förfrågan, ett klipp.

De tre retuscheringslägena

Alla tre körs på samma instruktionsdrivna redigeringsmotor, som bevarar källbildens utseende. När du tillhandahåller en källbild läses width och height från bilden själv och behöver inte skickas med.

modeIndataVad motorn gör
editimage_b64 + prompt (+ valfri mask_b64)Tillämpar instruktionen på hela bilden ("add sunglasses", "make it snow"). Med en mask koncentreras ändringen till det röda området.
inpaintimage_b64 + mask_b64 + promptRegenererar bara maskens röda område enligt instruktionen. Resten återkomponeras pixel för pixel.
img2imgimage_b64 + promptBearbetar hela bilden utifrån prompten och bevarar dess komposition och utseende: en variation.

I edit väljer servern själv det bästa sättet att hantera redigeringen, som appen:

  • med en mask: den läser instruktionen och väljer mellan att ersätta det som finns i området (ett annat föremål, ett annat plagg, ett ansikte: området ritas om efter det som ska synas där) och att ändra det som finns där (färg, material, ljus). Med en karaktärs-lora ritas området alltid om, ansiktet inräknat;
  • utan mask, med en karaktärs-lora ("replace the woman with kara..."): servern hittar personen på fotot och ritar om den som karaktären; hittar den ingen gäller instruktionen hela bilden, som tidigare.

Samma pris i alla fall (1 kredit per bild). Valet syns i resultatet, inte 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\"}"

Skapa en bild med karaktärer, objekt och en plats

Lägg till ett multiref-objekt i POST /images så låter servern dina karaktärer (Karaktärer), dina objekt och djur och en plats (Subjekt) spela tillsammans i en enda bild, var och en igenkännbar, som appens "Create an image"-skärm. Anropa var och en med @Namn i prompten, på engelska.

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 }
Fält i multirefVad det gör
characters[].character_id, nameEn karaktär från GET /characters; name är ordet som skrivs efter @ (bokstäver, siffror, _).
characters[].viewDen vy i dess character sheet som representerar den, 1 till 5 (1, bysten framifrån, som standard).
characters[].sheet_idValfritt: den character sheet som ska användas (den senaste som standard).
characters[].loraValfritt: dess bild-LoRA, ett namn från listan image i GET /loras. Karaktären spelas då av sin LoRA, inte av sin vy.
characters[].strengthLoRA-styrka, 0 till 1,5 (1 som standard).
characters[].lora_passAndelen av bilden som målas om av dess LoRA-omgång, 0,3 till 0,9 (0,55 som standard); användbart med flera subjekt.
characters[].descriptionValfritt, på engelska: outfit, ålder...
subjects[]Objekt och djur från /subjects: subject_id, name (som standard det första ordet i dess namn), description, image (vilken av dess bilder, 1 som standard).
locationEn plats från /subjects (subject_id, name), eller en tillfällig bakgrund: background_b64 och background_description.
count1 eller 2: bilderna renderas en efter en.
  • Högst 4 subjekt (karaktärer, objekt och djur). Utan LoRA, enbart från bilder: högst 4 referenser, platsen inräknad. Servern väljer metoden utifrån referenserna och placerar var och en i ordningen characters och sedan subjects, från vänster till höger.
  • Ett @Namn som inte matchar någon referens nekas (unknown_mention); en referens som saknas i prompten skickas ändå med.
  • Pris: en omgång kostar priset för en bild (1 kredit). En enkel bild är 1 omgång; flera karaktärer som spelas av en LoRA, 1 plus en omgång per LoRA (högst 4); enbart från bilder, en omgång per referens utöver den första; en blandning, båda. Totalen (omgångar x count) reserveras när förfrågan skickas och debiteras en enda gång, vid den slutliga bilden: ett misslyckande eller ett avbrott kostar ingenting. POST /images/quote med samma body ger det exakta priset, metoden och dess omgångar, utan att starta något.
  • Svar 202: { "jobId": "mri_...", "seed", "cost", "method", "passes", "billed_passes" } (med count 2: jobs och cost_total). Polling, nedladdning och avbrytning går via de vanliga rutterna nedan; under renderingen anger progress den pågående omgången ("2/3"). En bild tar 1 till 3 minuter.
  • Den slutliga bilden förblir tillgänglig i 1 timme, och 10 minuter efter sin första nedladdning. En misslyckad omgång ger status: "failed" med reason: "render_failed"; ett avbrott, reason: "cancelled".
  • Fel: invalid_count, invalid_view, invalid_lora_pass, invalid_subject_image, invalid_size, character_not_ready, samt de från Multi-Ref (unknown_character, unknown_subject, unknown_lora, unknown_mention, multiref_too_many_references, invalid_strength...). Se Begränsningar och fel.

Polla

GET /images/{jobId}

SvarBetydelse
{ "status": "pending", "phase": "IN_QUEUE" }I kö
{ "status": "pending", "phase": "IN_PROGRESS" }Renderar
{ "status": "completed", "cost": 1, "file_url": "/pro/v1/images/{jobId}/file", ... }Klar, fil redo
{ "status": "failed", "detail": "..." }Misslyckades, och inget debiteras

Polla var 3:e sekund, inte snabbare: kön är delad.

Ladda ned

GET /images/{jobId}/file

PNG-filen i sig, som svarskropp (Content-Type: image/png). Tillgänglig så snart statusen är completed, och 404 media_unavailable när renderingen är borta. Ladda ned den direkt, den arkiveras inte.

Avbryt

POST /images/{jobId}/cancel

Avbryter en köad eller pågående rendering. Svarar { "ok": true }. Inget debiteras, och kostnaden reserverad mot nyckelns dagliga tak återbetalas.

Windows · Mac · Moln eller lokalt

Generera privat. Ikväll.

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

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

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

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

Allt om tendre.AI för Mac

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