Pro API: generer og retusjere bilder
Ett bilde koster 1 kreditt, uansett modus. Generering fra en prompt og retusjeringav et bilde du laster opp går gjennom den samme ruten.
POST /images/quote tar samme body og returnerer prisen uten å opprette noe, alltid
{ "cost": 1, ... } her. Den finnes for symmetri med videoer, der prisen faktisk varierer.
Send inn et bilde
POST /images
{ "prompt": "portrait of a woman in a rainy street at night, neon reflections, cinematic",
"width": 832, "height": 1216 }| Felt | Type | Standard | Hva det gjør |
|---|---|---|---|
prompt | streng | påkrevd | Scenen. Engelsk gir de mest presise resultatene. |
width, height | int | 1024 x 1024 | Pikselstørrelse. Gode formater: 1024 x 1024 (kvadrat), 832 x 1216 (portrett), 1216 x 832 (landskap). |
mode | streng | generation | edit, img2img eller inpaint, se nedenfor. Fraværende betyr generer fra prompten. |
image_b64 | streng | Kildebilde i base64 (PNG eller JPEG), påkrevd av alle tre retusjeringsmodusene. Maks 12 MB dekodet. | |
mask_b64 | streng | Maske i base64: påkrevd av inpaint, valgfri for edit. Mal områdene som skal retusjeres i rødt, i samme størrelse som kildebildet. | |
lora | streng | En trent karakter på kontoen: name returnert av GET /loras. Legg til trigger i prompten. | |
lora2, lora2_strength | streng, tall | En andre karakter og dens styrke (0 til 1, standard 1) for en scene med to personer. | |
count | int | 1 | Hvor mange bilder som skal rendres fra denne ene forespørselen, 1 til 8. Hvert får sitt eget unike seed; med seed brukes seed, seed+1, seed+2... Dette er appens Images per generation-velger. |
seed | int | tilfeldig | Seed for renderingen, fra 0 til 4294967295. Samme seed, samme prompt og samme innstillinger gir samme rendering, med svært små forskjeller hvis grafikkortet endres. Å beholde seed og justere prompten gir en variasjon som bevarer komposisjonen. |
steps | int | motor | La stå tom. Motoren vet sin egen verdi. |
Svaret:
{ "jobId": "test-79634842-4586-46d4-ad52-d9ea236ae00d", "seed": 178078967, "cost": 1 }seed returneres i svaret, enten du oppga det eller det ble trukket tilfeldig: behold det for å
rendre det samme bildet igjen, eller en variasjon av det.
Be om flere på én gang
Med count over 1 starter én forespørsel flere renderinger, hver med sitt eget seed, og
svaret lister dem opp:
{ "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 å lese nøye.
jobId, seed og cost for den første renderingen gjentas på toppnivå. Det er der
for at klienter skrevet før batch-støtte skal fortsette å fungere uendret, ikke fordi den første
er viktigere. Poll hver oppføring i jobs, ikke bare den ene.
Og sammenlign count med requested. En avvisning underveis, på grunn av manglende kreditter eller
fordi nøkkelen nådde sitt daglige tak, stopper batchen der den er: requested er det du ba om,
count er det som faktisk startet, og errors forteller hvorfor det stoppet. En klient som antar
at de to er like mister renderinger uten å merke det.
POST /images/quote tar også count og prissetter hele batchen. Videoer har ingen count:
én forespørsel, én klipp.
De tre retusjeringsmodusene
Alle tre kjører på den samme instruksjonsdrevne redigeringsmotoren, som bevarer utseendet til
kildebildet. Når du laster opp et kildebilde, leses width og height fra selve bildet
og trenger ikke sendes med.
mode | Inndata | Hva motoren gjør |
|---|---|---|
edit | image_b64 + prompt (+ valgfri mask_b64) | Bruker instruksjonen på hele bildet ("add sunglasses", "make it snow"). Med en maske konsentreres endringen inne i det røde området. |
inpaint | image_b64 + mask_b64 + prompt | Regenererer kun det røde området i masken, i tråd med instruksjonen. Resten rekomponeres piksel for piksel. |
img2img | image_b64 + prompt | Bearbeider hele bildet langs prompten mens komposisjon og utseende bevares: en variasjon. |
I edit velger serveren selv den beste måten å håndtere redigeringen på, som appen:
- med en maske: den leser instruksjonen og velger mellom å erstatte innholdet i området (et annet objekt, et annet plagg, et ansikt: området tegnes på nytt ut fra det som skal vises der) og å endre det som er der (farge, materiale, lys). Med en karakter-
lorategnes området alltid på nytt, ansiktet inkludert; - uten maske, med en karakter-
lora("replace the woman with kara..."): serveren finner personen på bildet og tegner den på nytt som karakteren; finner den ingen, gjelder instruksjonen hele bildet, som før.
Samme pris i alle tilfeller (1 kreditt per bilde). Valget ses i resultatet, ikke i svaret.
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\"}"Lag et bilde med karakterer, objekter og et sted
Legg til et multiref-objekt i POST /images, så lar serveren dine karakterer (Karakterer), dine objekter og dyr og et sted (Subjekter) spille sammen i ett enkelt bilde, hver gjenkjennelig, som appens "Create an image"-skjerm. Kall hver av dem med @Navn i prompten, på engelsk.
{ "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 multiref | Hva det gjør |
|---|---|
characters[].character_id, name | En karakter fra GET /characters; name er ordet som skrives etter @ (bokstaver, siffer, _). |
characters[].view | Visningen i dens character sheet som representerer den, 1 til 5 (1, bysten forfra, som standard). |
characters[].sheet_id | Valgfritt: character sheet som skal brukes (den nyeste som standard). |
characters[].lora | Valgfritt: dens bilde-LoRA, et navn fra listen image i GET /loras. Karakteren spilles da av sin LoRA, ikke av sin visning. |
characters[].strength | LoRA-styrke, 0 til 1,5 (1 som standard). |
characters[].lora_pass | Andelen av bildet som males om av dens LoRA-runde, 0,3 til 0,9 (0,55 som standard); nyttig med flere subjekter. |
characters[].description | Valgfritt, på engelsk: antrekk, alder... |
subjects[] | Objekter og dyr fra /subjects: subject_id, name (som standard det første ordet i navnet), description, image (hvilket av bildene, 1 som standard). |
location | Et sted fra /subjects (subject_id, name), eller en engangsbakgrunn: background_b64 og background_description. |
count | 1 eller 2: bildene rendres ett etter ett. |
- Maks 4 subjekter (karakterer, objekter og dyr). Uten LoRA, kun fra bilder: maks 4 referanser, stedet medregnet. Serveren velger metoden ut fra referansene, og plasserer hver av dem i rekkefølgen
charactersog derettersubjects, fra venstre mot høyre. - Et
@Navnsom ikke matcher noen referanse avvises (unknown_mention); en referanse som mangler i prompten sendes likevel. - Pris: én runde koster prisen for ett bilde (1 kreditt). Et enkelt bilde er 1 runde; flere karakterer spilt av en LoRA, 1 pluss én runde per LoRA (maks 4); kun fra bilder, én runde per referanse utover den første; en blanding, begge deler. Totalen (runder x
count) reserveres ved innsending og belastes én gang, ved det endelige bildet: en feil eller en avbrytelse koster ingenting.POST /images/quotemed samme body gir den eksakte prisen, metoden og rundene dens, uten å starte noe. - Svar
202:{ "jobId": "mri_...", "seed", "cost", "method", "passes", "billed_passes" }(medcount2:jobsogcost_total). Polling, nedlasting og avbryt går via de vanlige rutene nedenfor; under renderingen oppgirprogressden pågående runden ("2/3"). Et bilde tar 1 til 3 minutter. - Det endelige bildet forblir tilgjengelig i 1 time, og 10 minutter etter første nedlasting. En mislykket runde gir
status: "failed"medreason: "render_failed"; en avbrytelse,reason: "cancelled". - Feil:
invalid_count,invalid_view,invalid_lora_pass,invalid_subject_image,invalid_size,character_not_ready, pluss dem fra Multi-Ref (unknown_character,unknown_subject,unknown_lora,unknown_mention,multiref_too_many_references,invalid_strength...). Se Grenser og feil.
Poll
GET /images/{jobId}
| Svar | Betydning |
|---|---|
{ "status": "pending", "phase": "IN_QUEUE" } | I kø |
{ "status": "pending", "phase": "IN_PROGRESS" } | Rendrer |
{ "status": "completed", "cost": 1, "file_url": "/pro/v1/images/{jobId}/file", ... } | Ferdig, fil klar |
{ "status": "failed", "detail": "..." } | Mislyktes, og ingenting belastes |
Poll hvert 3. sekund, ikke raskere: køen er delt.
Last ned
GET /images/{jobId}/file
Selve PNG-filen, som responskropp (Content-Type: image/png). Tilgjengelig så snart
statusen er completed, og 404 media_unavailable når renderingen er borte. Last den ned
med én gang, den arkiveres ikke.
Avbryt
POST /images/{jobId}/cancel
Avbryter en køet eller pågående rendering. Svarer { "ok": true }. Ingenting belastes, og kostnaden
reservert mot nøkkelens daglige tak tilbakebetales.