OpenAI: GPT Image 2
GPT Image 2 genera e modifica immagini a partire da testo e riferimenti visivi. Supporta dimensioni flessibili e tratta automaticamente gli input immagine ad alta fedeltà, con controlli separati di qualità, formato e sfondo per la risorsa finita.
- Ailoot · Immagini
POST /v1/images/generationsgpt-image-2 - Ailoot Ultra · Immagini
POST /v1/images/generationsgpt-image-2 - Ailoot Ultra · Immagini
POST /v1/images/generationsopenai/gpt-image-2
Informazioni sul modello
Questa descrizione illustra le funzionalità del modello. Gli input, gli output e le opzioni disponibili in Ailoot per il metodo selezionato sono elencati di seguito.
GPT Image 2 è il modello di OpenAI per la generazione e la modifica di immagini a partire da input testuali e visivi. Crea una nuova immagine da un brief scritto e può usare immagini di partenza per modifiche o lavori guidati dai riferimenti. I compiti pratici comprendono illustrazioni, concept di prodotto, composizioni visive e cambiamenti a risorse esistenti. È un'edizione separata dai modelli GPT Image 2.5 Sunburst e Flare, con una propria gamma di qualità e un proprio comportamento per la fedeltà degli input.
Per la generazione, descrivi il soggetto, la scena, la composizione, la luce e lo stile desiderato. Per una modifica, indica ciò che deve cambiare e ciò che deve mantenere il proprio aspetto. Il brief di un prodotto può chiedere una lampada in ceramica su una superficie chiara, con una silhouette centrata e spazio per una didascalia; una modifica successiva può cambiare lo sfondo mantenendo la forma della lampada e l'angolo di visione. I flussi diretti documentati di generazione e modifica accettano prompt fino a 32.000 caratteri e possono restituire da una a dieci immagini.
La modifica con riferimenti accetta fino a sedici immagini in ingresso. Specifica lo scopo di ciascun riferimento, affinché soggetto, sfondo e trattamento visivo non vengano confusi. GPT Image 2 elabora automaticamente ogni immagine in ingresso ad alta fedeltà; input_fidelity deve essere omesso perché non è regolabile per questa edizione. Questo differisce dalla scelta fra high e low di GPT Image 1 e dalla modalità di fedeltà in ingresso solo low di GPT Image 1 Mini. L'elaborazione ad alta fedeltà sostiene i dettagli del materiale di partenza senza garantire che ogni dettaglio venga riprodotto senza modifiche.
Una maschera può identificare la regione da modificare. Secondo i requisiti di preparazione della guida, l'immagine di partenza e la maschera devono avere lo stesso formato e le stesse dimensioni ed essere inferiori a 50 MB; la maschera richiede anche un canale alfa. Se vengono fornite più immagini in ingresso, la maschera si applica alla prima. Il modello tratta la maschera come indicazione basata sul prompt, anziché come un confine geometrico rigido. Descrivi la modifica locale e i requisiti di conservazione, poi esamina l'area circostante alla ricerca di differenze indesiderate.
GPT Image 2 supporta le qualità low, medium, high e auto, con auto come valore predefinito. Le impostazioni xhigh e max della famiglia 2.5 non fanno parte della gamma di qualità di questa edizione. Le dimensioni possono essere quadrate, orizzontali, verticali, automatiche oppure una coppia valida di larghezza e altezza personalizzate. Gli esempi del produttore comprendono 1024 × 1024, 1536 × 1024, 1024 × 1536, 2048 × 2048, 2048 × 1152, 3840 × 2160 e 2160 × 3840 pixel. Scegli l'orientamento e il livello di dettaglio in funzione dell'impaginazione effettiva, anziché considerare qualità e dimensioni come lo stesso controllo.
Le dimensioni personalizzate devono essere multipli di sedici pixel, con un lato massimo di 3840 pixel, un rapporto fra lato lungo e lato corto non superiore a 3:1 e un'area compresa fra 655.360 e 8.294.400 pixel. Queste condizioni valgono contemporaneamente. Le risoluzioni superiori a 2560 × 1440 sono contrassegnate come sperimentali. Un'inquadratura che soddisfa una regola può comunque violarne un'altra: seleziona quindi una coppia di dimensioni supportata e descrivi nel brief gli elementi che rischiano di essere tagliati.
L'output è PNG per impostazione predefinita, con JPEG o WebP disponibili. Per JPEG e WebP è supportata una compressione da 0 a 100. Lo sfondo può essere opaco o automatico; il riferimento attuale specifico descrive la trasparenza di GPT Image 2 come una capacità in anteprima. Quando richiedi la trasparenza, usa PNG o WebP affinché sia possibile conservare un canale alfa. Il flusso documentato in streaming consente fino a tre immagini parziali prima dell'immagine finita; salva la risorsa finale anziché un'anteprima di avanzamento. L'interfaccia del produttore supporta anche l'elaborazione in batch.
Valuta la chiarezza del testo, la posizione degli oggetti e la conservazione dei dettagli di partenza nel risultato effettivo. GPT Image può incontrare difficoltà con testi precisi, composizioni sensibili all'impaginazione e identità visive ricorrenti in generazioni separate. Per una sequenza di modifiche, usa il risultato scelto come materiale di partenza successivo e indica un cambiamento concreto legato a un problema visibile. L'output utile di GPT Image 2 è un'immagine collegata a un brief chiaro di generazione o modifica, con input ad alta fedeltà, dimensioni e qualità scelti per quel compito specifico.
Ailoot · Immagini POST /v1/images/generations gpt-image-2
gpt-image-2Introduzione
GPT Image 2 genera e modifica immagini a partire da testo e riferimenti visivi. Supporta dimensioni flessibili e tratta automaticamente gli input immagine ad alta fedeltà, con controlli separati di qualità, formato e sfondo per la risorsa finita.
- Input accettati
- Testo
- Risultati
- Immagini
Disponibile in Ailoot · input e metodi
Ailoot · Immagini POST /v1/images/generations
- Tipi di input
text- Tipi di output
image- Formato di output
- File immagine
| Campo | Tipo | Requisito | Valori e limiti | Predefinito |
|---|---|---|---|---|
Campomodel | Tipostring | RequisitoObbligatorio | Valori e limiti gpt-image-2 | Predefinito— |
Campoprompt | Tipostring | RequisitoObbligatorio | Valori e limiti Lunghezza minima: 1 | Predefinito— |
Campon | Tipointeger | RequisitoFacoltativo | Valori e limiti Minimo: 1 | Predefinito1 |
Camporesponse_format | Tipostring | RequisitoFacoltativo | Valori e limiti url, b64_json | Predefinito— |
Campostream | Tipoboolean | RequisitoFacoltativo | Valori e limiti | Predefinitofalse |
Camposize | Tipostring | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
Campoquality | Tipostring | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
Campobackground | Tipostring | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
Campooutput_format | Tipostring | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
Campooutput_compression | Tipointeger | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
Campomoderation | Tipostring | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
Campoinput_fidelity | Tipostring | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
Campostyle | Tipostring | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
Campopartial_images | Tipointeger | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
Combinazioni di materiali in input
Da testo a immagine · Obbligatorio: prompt
Parametri e ciclo di vita del metodo
| Parametro | Contratto |
|---|---|
Parametromaterial_types | Contrattotext |
Parametrorequired | Contrattomodel, prompt |
Parametrooptional_controls | Contrattonull |
Parametrocontent_type | Contrattoapplication/json |
Ciclo di vita: synchronous_result_then_owned_library
GET /v1/media/tasks/{task_id} · task_id effettivamente restituito o record della libreria multimediale
GET /v1/media/assets/{asset_id}/content
GET /v1/media/assets
GET /v1/media/assets/{asset_id}
Le strutture dei metodi e gli ID sono esatti; la capacità del fornitore è distinta dall’ammissione delle richieste.
Tariffe
Tariffe dei metodi Ailoot
POST /v1/images/generations- Testo in input
- 0,0025 USD / 1K
- Input, immagine
- 0,004 USD / 1K tokens
- Output, immagine
- 0,015 USD / 1K tokens
Ailoot prenota un importo stimato prima di una richiesta. Dopo il risultato, addebita il costo finale in base all’utilizzo misurato. Per lo streaming, l’addebito usa il record finale di utilizzo. Come funzionano la prenotazione e l’addebito finale →
Esempi di richieste
Ailoot · Immagini
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
export AILOOT_API_KEY
: "${AILOOT_PROMPT_FILE:?Set your actual UTF-8 image brief}"
export AILOOT_PROMPT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "gpt-image-2", "prompt": ""}')
f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 brief")
p['prompt']=f.read_text(encoding="utf-8")
if not p['prompt'].strip():raise SystemExit("Brief must contain text")
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \
-H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin
def save_images(items):
if not items: raise SystemExit("No completed images; retain the full response")
for index, item in enumerate(items):
encoded=item.get("b64_json")
uri=item.get("url", "")
if not encoded and uri.startswith("data:image/"):
header, separator, encoded=uri.partition(",")
if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
if encoded:
raw=base64.b64decode(encoded,validate=True)
elif uri:
uri=urljoin("https://api.ailoot.ai",uri)
parsed=urlsplit(uri)
if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
raise SystemExit("Invalid returned image URL")
owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
args=["curl","--fail-with-body","--silent","--show-error",uri]
if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
temporary=Path(f"image-{index}.bin")
subprocess.run(args+["-o",str(temporary)],check=True)
raw=temporary.read_bytes()
temporary.unlink()
else: raise SystemExit("Image has neither bytes nor URL")
if not raw: raise SystemExit("Empty image result")
ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
Path(f"image-{index}.{ext}").write_bytes(raw)
print("Every returned image saved; complete response metadata retained")
save_images(json.loads(Path("result.json").read_text())["data"])
PY_RESULT
from openai import OpenAI
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin
def save_images(items):
if not items: raise SystemExit("No completed images; retain the full response")
for index, item in enumerate(items):
encoded=item.get("b64_json")
uri=item.get("url", "")
if not encoded and uri.startswith("data:image/"):
header, separator, encoded=uri.partition(",")
if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
if encoded:
raw=base64.b64decode(encoded,validate=True)
elif uri:
uri=urljoin("https://api.ailoot.ai",uri)
parsed=urlsplit(uri)
if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
raise SystemExit("Invalid returned image URL")
owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
args=["curl","--fail-with-body","--silent","--show-error",uri]
if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
temporary=Path(f"image-{index}.bin")
subprocess.run(args+["-o",str(temporary)],check=True)
raw=temporary.read_bytes()
temporary.unlink()
else: raise SystemExit("Image has neither bytes nor URL")
if not raw: raise SystemExit("Empty image result")
ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
Path(f"image-{index}.{ext}").write_bytes(raw)
print("Every returned image saved; complete response metadata retained")
f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Set your actual UTF-8 image brief file")
request={'model': 'gpt-image-2', 'prompt': ''}
request["prompt"]=f.read_text(encoding="utf-8")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.images.generate(**request)
Path("sdk-result.txt").write_text(str(result),encoding="utf-8")
save_images([{"b64_json":getattr(item,"b64_json",None),"url":getattr(item,"url",None)} for item in result.data])
import OpenAI from "openai";
import { readFileSync, writeFileSync } from "node:fs";
const key=process.env.AILOOT_API_KEY;
if(!key) throw new Error("Set your actual Ailoot API key");
const client=new OpenAI({baseURL:"https://api.ailoot.ai/v1",apiKey:key,maxRetries:0});
const request={"model": "gpt-image-2", "prompt": ""};
if(!process.env.AILOOT_PROMPT_FILE)throw new Error("Set your actual UTF-8 image brief file");
request.prompt=readFileSync(process.env.AILOOT_PROMPT_FILE,"utf8");
const result=await client.images.generate(request);
writeFileSync("sdk-result.json",JSON.stringify(result,null,2));
if(!result.data?.length) throw new Error("No completed images");
for(let index=0;index<result.data.length;index++) {
const item=result.data[index];let encoded=item.b64_json,uri=item.url||"",raw;
if(!encoded && uri.startsWith("data:image/")) {
const comma=uri.indexOf(",");if(comma<0 || !uri.slice(0,comma).includes(";base64")) throw new Error("Unsupported image data URI");
encoded=uri.slice(comma+1);
}
if(encoded) {
if(encoded.length%4!==0 || !/^[A-Za-z0-9+/]*={0,2}$/.test(encoded)) throw new Error("Invalid Base64");
raw=Buffer.from(encoded,"base64");
} else if(uri) {
const u=new URL(uri,"https://api.ailoot.ai");
if(u.protocol!=="https:" || u.username || u.password) throw new Error("Invalid returned URL");
const owned=u.origin==="https://api.ailoot.ai" && u.pathname.startsWith("/v1/media/assets/") && u.pathname.endsWith("/content");
const response=await fetch(u,{headers:owned?{Authorization:"Bearer "+key}:{},redirect:"manual"});
if(!response.ok) throw new Error("Image content download failed: "+response.status);
raw=Buffer.from(await response.arrayBuffer());
} else throw new Error("Image has neither bytes nor URL");
if(!raw.length) throw new Error("Empty image result");
const ext=raw.subarray(0,4).equals(Buffer.from([137,80,78,71]))?"png":raw[0]===255&&raw[1]===216?"jpg":raw.toString("ascii",0,4)==="RIFF"&&raw.toString("ascii",8,12)==="WEBP"?"webp":raw.toString("utf8").trimStart().startsWith("<svg")||raw.toString("utf8").trimStart().startsWith("<?xml")?"svg":"bin";
writeFileSync(`image-${index}.${ext}`,raw);
}
console.log("Every returned image saved; sdk-result.json retains complete metadata");
Ricevi e salva i risultati
Ailoot · Immagini
Scarica ogni immagine restituita o salvane il contenuto Base64
GET /v1/media/tasks/{task_id}GET /v1/media/assets/{asset_id}/contentGET /v1/media/assetsGET /v1/media/assets/{asset_id}
Conserva tutti i risultati completati
Salva ogni immagine completata; recupera ogni URL restituito oppure decodificane il contenuto Base64.
Salva ogni elemento data. Decodifica ogni b64_json o recupera ogni URL firmato restituito. Scegli l'estensione del nome del file in base al MIME e ai byte effettivi.
Se occorre verificare la risposta originale
Se il risultato di una generazione o modifica di immagini richiede una verifica, conserva operation_id/X-Client-Request-ID originale e le informazioni sul risultato restituito. Recupera i risultati esistenti che ti appartengono tramite la libreria multimediale usando i valori effettivi di task_id o asset_id. Non reinviare la richiesta di generazione/modifica e non costruire un URL di polling a partire da operation_id.
Campi della risposta
| Campo | Tipo |
|---|---|
Campocreated | Tipointeger |
Campodata[].url | Tipostring |
Campodata[].b64_json | Tipobase64 string |
Campousage | Tipoobject |
Errori e passaggi successivi
| Risposta | Condizione | Passaggio successivo |
|---|---|---|
Risposta400 · invalid_request_error | CondizioneCampi obbligatori, rappresentazione del materiale o valore del parametro non validi | Passaggio successivoCorreggi i campi indicati prima di una nuova richiesta di creazione. |
Rispostaserver_error | CondizioneLa risposta restituita indica che l'operazione o il risultato richiede una verifica | Passaggio successivoConserva l'ID originale di operazione/task restituito, gli header della richiesta e la risposta; continua a leggere l'operazione originale tramite le modalità supportate. Non reinviare la richiesta di creazione. |
Alias
Alias del modello
Ailoot gpt-image-2
Ailoot Ultra gpt-image-2, openai/gpt-image-2
Alias dei percorsi dei metodi
/v1/images
ID di chiamata correlati
Ailoot Ultra · Immagini POST /v1/images/generations gpt-image-2
gpt-image-2gpt-image-2openai/gpt-image-2
Introduzione
GPT Image 2 genera e modifica immagini a partire da testo e riferimenti visivi. Supporta dimensioni flessibili e tratta automaticamente gli input immagine ad alta fedeltà, con controlli separati di qualità, formato e sfondo per la risorsa finita.
- Input accettati
- Testo
- Risultati
- Immagini
Disponibile in Ailoot · input e metodi
Ailoot Ultra · Immagini POST /v1/images/generations
- Tipi di input
text- Tipi di output
image
| Campo | Tipo | Requisito | Valori e limiti | Predefinito |
|---|---|---|---|---|
Campomodel | Tipostring | RequisitoObbligatorio | Valori e limiti gpt-image-2 | Predefinito— |
Campoprompt | Tipostring | RequisitoObbligatorio | Valori e limiti Lunghezza massima: 32.000 | Predefinito— |
Camposize | Tipostring | RequisitoFacoltativo | Valori e limiti Condizioni: Usa auto o WIDTHxHEIGHT con entrambe le dimensioni divisibili per 16. Il lato più lungo non deve superare 3,840 pixel e la dimensione totale non deve superare 8,300,000 pixel. | Predefinitoauto |
Campobackground | Tipostring | RequisitoFacoltativo | Valori e limiti transparent, opaque, auto | Predefinitoauto |
Campomoderation | Tipostring | RequisitoFacoltativo | Valori e limiti low, auto Condizioni: Usa auto per la moderazione standard dei contenuti. | Predefinito— |
Campon | Tipointeger | RequisitoFacoltativo | Valori e limiti Minimo: 1 Massimo: 10 | Predefinito1 |
Campoquality | Tipostring | RequisitoFacoltativo | Valori e limiti auto, high, medium, low | Predefinitoauto |
Campooutput_compression | Tipointeger | RequisitoFacoltativo | Valori e limiti Minimo: 0 Massimo: 100 Condizioni: Si applica all'output JPEG e WebP; invia il valore intero documentato. | Predefinito100 |
Campooutput_format | Tipostring | RequisitoFacoltativo | Valori e limiti webp, png, jpeg | Predefinitopng |
Campostream | Tipoboolean | RequisitoFacoltativo | Valori e limiti false Condizioni: Questa rotta restituisce un'unica risposta JSON completa. | Predefinitofalse |
Parametri e ciclo di vita del metodo
| Parametro | Contratto |
|---|---|
Parametrocontent_type | Contrattoapplication/json |
Parametrorequired | Contrattoprompt, model |
Parametromaterial_types | Contrattotext |
Parametrooptional | Contrattosize, background, moderation, n, quality, output_compression, output_format, stream |
Parametroconditions | ContrattoUno sfondo trasparente richiede PNG o WebP., La compressione dell'output si applica a JPEG o WebP., Il metodo selezionato genera a partire dal testo. I controlli di modifica e di streaming descritti per il produttore sono funzionalità separate. |
Ciclo di vita: synchronous_result_then_owned_library
GET /v1/media/tasks/{task_id} · task_id effettivamente restituito o record della libreria multimediale
GET /v1/media/assets/{asset_id}/content
GET /v1/media/assets
GET /v1/media/assets/{asset_id}
Tariffe
Calcolo del costo finale
Le tariffe visualizzate stimano il costo prima della generazione. L'addebito finale viene calcolato in base al costo registrato per la generazione originale. La durata misurata dell'output e le quantità previste non costituiscono la quantità finale fatturabile.
Le tariffe non aggiungono opzioni alla richiesta. I parametri supportati sono elencati nel metodo selezionato.
- Modalità rapida
- Non specificato Quando è selezionata la modalità rapida
- Modalità flex
- Non specificato Quando è selezionata la modalità flex
- Sforzo massimo di ragionamento
- Non specificato Quando lo sforzo massimo di ragionamento usa l'adeguamento predefinito (default)
Tariffe stimate per il confronto
Prezzi per configurazione
Associa ogni costo alle condizioni indicate. Usa una sola tariffa per ogni insieme di configurazioni alternative.
| Configurazione | Listino delle tariffe | Quantità prevista | Costo |
|---|---|---|---|
| ConfigurazioneTariffe base dei token | Listino delle tariffeTariffa base | Quantità prevista— | Costo Input · Token in input · Stima solo a fini di confronto — / 1K token Output · Token in output · Stima solo a fini di confronto — / 1K token Input · Lettura dalla cache · Stima solo a fini di confronto — / 1K token Input · Scrittura nella cache · Stima solo a fini di confronto — / 1K token Input · Scrittura nella cache, 1 ora · Stima solo a fini di confronto — / 1K token |
| ConfigurazioneCosto stimato della generazione | Listino delle tariffe— | Quantità previstastima per una generazione | Costo Output · Costo di generazione stimato · Stima solo a fini di confronto $0.24576 stima prima della generazione Questa stima non è un addebito aggiuntivo né una tariffa fissa per la generazione completata. |
Ailoot prenota un importo stimato prima di una richiesta. Dopo il risultato, addebita il costo finale in base all’utilizzo misurato. Per lo streaming, l’addebito usa il record finale di utilizzo. Come funzionano la prenotazione e l’addebito finale →
Esempi di richieste
Ailoot Ultra · Immagini
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p={'prompt': 'A cute baby sea otter', 'model': 'gpt-image-2', 'size': '1024x1024', 'n': 1, 'background': 'auto', 'moderation': 'auto', 'output_format': 'png'}
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \
-H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin
def save_images(items):
if not items: raise SystemExit("No completed images; retain the full response")
for index, item in enumerate(items):
encoded=item.get("b64_json")
uri=item.get("url", "")
if not encoded and uri.startswith("data:image/"):
header, separator, encoded=uri.partition(",")
if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
if encoded:
raw=base64.b64decode(encoded,validate=True)
elif uri:
uri=urljoin("https://api.ailoot.ai",uri)
parsed=urlsplit(uri)
if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
raise SystemExit("Invalid returned image URL")
owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
args=["curl","--fail-with-body","--silent","--show-error",uri]
if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
temporary=Path(f"image-{index}.bin")
subprocess.run(args+["-o",str(temporary)],check=True)
raw=temporary.read_bytes()
temporary.unlink()
else: raise SystemExit("Image has neither bytes nor URL")
if not raw: raise SystemExit("Empty image result")
ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
Path(f"image-{index}.{ext}").write_bytes(raw)
print("Every returned image saved; complete response metadata retained")
save_images(json.loads(Path("result.json").read_text())["data"])
PY_RESULT
Ricevi e salva i risultati
Ailoot Ultra · Immagini
Scarica ogni immagine restituita o salvane il contenuto Base64
GET /v1/media/tasks/{task_id}GET /v1/media/assets/{asset_id}/contentGET /v1/media/assetsGET /v1/media/assets/{asset_id}
Altre letture di contenuto
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \
-H "Authorization: Bearer $AILOOT_API_KEY" -o owned-assets.json
# Preserve every returned asset and follow its exact signed content URL. Do not construct a signed token.
Conserva tutti i risultati completati
Salva ogni immagine completata; recupera ogni URL restituito oppure decodificane il contenuto Base64.
Conserva la risposta completa e gli header, ogni output effettivo, gli identificatori originali restituiti e tutti i campi di utilizzo. Recupera l'operazione originale senza inviare nuovamente la richiesta di creazione.
Se occorre verificare la risposta originale
Conserva l'X-Client-Request-ID restituito per la riconciliazione. Leggi solo i valori task_id/asset_id effettivamente restituiti o la tua libreria multimediale; non costruire mai un URL del task a partire dall'ID dell'operazione e non reinviare mai la richiesta di creazione.
Campi della risposta
| Campo | Tipo |
|---|---|
Campocreated | Tipo |
Campodata[].url | Tipo |
Campodata[].b64_json | Tipo |
Campousage | Tipo |
Alias
Alias del modello
Ailoot gpt-image-2
Ailoot Ultra gpt-image-2, openai/gpt-image-2
Alias dei percorsi dei metodi
/v1/images
ID di chiamata correlati
Ailoot Ultra · Immagini POST /v1/images/generations openai/gpt-image-2
openai/gpt-image-2gpt-image-2openai/gpt-image-2
Introduzione
GPT Image 2 genera e modifica immagini a partire da testo e riferimenti visivi. Supporta dimensioni flessibili e tratta automaticamente gli input immagine ad alta fedeltà, con controlli separati di qualità, formato e sfondo per la risorsa finita.
- Input accettati
- Testo · Immagini
- Risultati
- Immagini
Disponibile in Ailoot · input e metodi
Ailoot Ultra · Immagini POST /v1/images/generations
- Tipi di input
text,image- Tipi di output
image
| Campo | Tipo | Requisito | Valori e limiti | Predefinito |
|---|---|---|---|---|
Campomodel | Tipostring | RequisitoObbligatorio | Valori e limiti openai/gpt-image-2 | Predefinito— |
Campoprompt | Tipostring | RequisitoObbligatorio | Valori e limiti Lunghezza minima: 1 | Predefinito— |
Campoaspect_ratio | Tipostring | RequisitoFacoltativo | Valori e limiti 1:1, 3:2, 2:3, 4:3, 3:4, 16:9, 9:16, 21:9, auto | Predefinito— |
Campoquality | Tipostring | RequisitoFacoltativo | Valori e limiti auto, low, medium, high | Predefinito— |
Campobackground | Tipostring | RequisitoFacoltativo | Valori e limiti auto, opaque | Predefinito— |
Campon | Tipointeger | RequisitoFacoltativo | Valori e limiti Minimo: 1 Massimo: 10 | Predefinito— |
Campoinput_references | Tipoarray | RequisitoFacoltativo | Valori e limiti Numero minimo di elementi: 0 Numero massimo di elementi: 16 | Predefinito— |
Campooutput_compression | Tipointeger | RequisitoFacoltativo | Valori e limiti Minimo: 0 Massimo: 100 | Predefinito— |
Campoprovider | Tipoobject | RequisitoFacoltativo | Valori e limiti | Predefinito— |
Parametri e ciclo di vita del metodo
| Parametro | Contratto |
|---|---|
Parametrocontent_type | Contrattoapplication/json |
Parametrorequired | Contrattomodel, prompt |
Parametromaterial_types | Contrattotext, image |
Ciclo di vita: synchronous_result_then_owned_library
GET /v1/media/tasks/{task_id} · task_id effettivamente restituito o record della libreria multimediale
GET /v1/media/assets/{asset_id}/content
GET /v1/media/assets
GET /v1/media/assets/{asset_id}
Tariffe
Calcolo del costo finale
Le tariffe visualizzate stimano il costo prima della generazione. L'addebito finale viene calcolato in base al costo registrato per la generazione originale. La durata misurata dell'output e le quantità previste non costituiscono la quantità finale fatturabile.
Le tariffe non aggiungono opzioni alla richiesta. I parametri supportati sono elencati nel metodo selezionato.
- Modalità rapida
- Non specificato Quando è selezionata la modalità rapida
- Modalità flex
- Non specificato Quando è selezionata la modalità flex
- Sforzo massimo di ragionamento
- Non specificato Quando lo sforzo massimo di ragionamento usa l'adeguamento predefinito (default)
Tariffe stimate per il confronto
Prezzi per configurazione
Associa ogni costo alle condizioni indicate. Usa una sola tariffa per ogni insieme di configurazioni alternative.
| Configurazione | Listino delle tariffe | Quantità prevista | Costo |
|---|---|---|---|
| ConfigurazioneTariffe base dei token | Listino delle tariffeTariffa base | Quantità prevista— | Costo Input · Token in input · Stima solo a fini di confronto — / 1K token Output · Token in output · Stima solo a fini di confronto — / 1K token Input · Lettura dalla cache · Stima solo a fini di confronto — / 1K token Input · Scrittura nella cache · Stima solo a fini di confronto — / 1K token Input · Scrittura nella cache, 1 ora · Stima solo a fini di confronto — / 1K token |
| ConfigurazioneCosto stimato della generazione | Listino delle tariffe— | Quantità previstastima per una generazione | Costo Output · Costo di generazione stimato · Stima solo a fini di confronto $0.24576 stima prima della generazione Questa stima non è un addebito aggiuntivo né una tariffa fissa per la generazione completata. |
Ailoot prenota un importo stimato prima di una richiesta. Dopo il risultato, addebita il costo finale in base all’utilizzo misurato. Per lo streaming, l’addebito usa il record finale di utilizzo. Come funzionano la prenotazione e l’addebito finale →
Esempi di richieste
Ailoot Ultra · Immagini
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p={'model': 'openai/gpt-image-2', 'prompt': 'a red panda astronaut floating in space, studio lighting'}
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \
-H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin
def save_images(items):
if not items: raise SystemExit("No completed images; retain the full response")
for index, item in enumerate(items):
encoded=item.get("b64_json")
uri=item.get("url", "")
if not encoded and uri.startswith("data:image/"):
header, separator, encoded=uri.partition(",")
if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
if encoded:
raw=base64.b64decode(encoded,validate=True)
elif uri:
uri=urljoin("https://api.ailoot.ai",uri)
parsed=urlsplit(uri)
if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
raise SystemExit("Invalid returned image URL")
owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
args=["curl","--fail-with-body","--silent","--show-error",uri]
if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
temporary=Path(f"image-{index}.bin")
subprocess.run(args+["-o",str(temporary)],check=True)
raw=temporary.read_bytes()
temporary.unlink()
else: raise SystemExit("Image has neither bytes nor URL")
if not raw: raise SystemExit("Empty image result")
ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
Path(f"image-{index}.{ext}").write_bytes(raw)
print("Every returned image saved; complete response metadata retained")
save_images(json.loads(Path("result.json").read_text())["data"])
PY_RESULT
Ricevi e salva i risultati
Ailoot Ultra · Immagini
Scarica ogni immagine restituita o salvane il contenuto Base64
GET /v1/media/tasks/{task_id}GET /v1/media/assets/{asset_id}/contentGET /v1/media/assetsGET /v1/media/assets/{asset_id}
Altre letture di contenuto
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \
-H "Authorization: Bearer $AILOOT_API_KEY" -o owned-assets.json
# Preserve every returned asset and follow its exact signed content URL. Do not construct a signed token.
Conserva tutti i risultati completati
Salva ogni immagine completata; recupera ogni URL restituito oppure decodificane il contenuto Base64.
Conserva la risposta completa e gli header, ogni output effettivo, gli identificatori originali restituiti e tutti i campi di utilizzo. Recupera l'operazione originale senza inviare nuovamente la richiesta di creazione.
Se occorre verificare la risposta originale
Conserva l'X-Client-Request-ID restituito per la riconciliazione. Leggi solo i valori task_id/asset_id effettivamente restituiti o la tua libreria multimediale; non costruire mai un URL del task a partire dall'ID dell'operazione e non reinviare mai la richiesta di creazione.
Campi della risposta
| Campo | Tipo |
|---|---|
Campocreated | Tipo |
Campodata[].url | Tipo |
Campodata[].b64_json | Tipo |
Campousage | Tipo |
Alias
Alias del modello
Ailoot gpt-image-2
Ailoot Ultra gpt-image-2, openai/gpt-image-2
Alias dei percorsi dei metodi
/v1/images
ID di chiamata correlati
FAQ · OpenAI: GPT Image 2
- Quali input e risultati sono disponibili?
POST /v1/images/generations·gpt-image-2:text→imagePOST /v1/images/generations·gpt-image-2:text→imagePOST /v1/images/generations·openai/gpt-image-2:text,image→image- Quali campi usa la richiesta?
POST /v1/images/generations·gpt-image-2:model,prompt,n,response_format,streamPOST /v1/images/generations·gpt-image-2:model,prompt,size,background,moderation,n,quality,output_compression,output_format,streamPOST /v1/images/generations·openai/gpt-image-2:model,prompt,aspect_ratio,quality,background,n,input_references,output_compression,provider- Quali limiti si applicano?
POST /v1/images/generations·gpt-image-2:n.minimum:1POST /v1/images/generations·gpt-image-2:prompt.maximum_length:32000;n.minimum:1;n.maximum:10;output_compression.minimum:0;output_compression.maximum:100POST /v1/images/generations·openai/gpt-image-2:n.minimum:1;n.maximum:10;output_compression.minimum:0;output_compression.maximum:100