models

OpenAI: GPT Image 2

Markdown · JSON

OpenAI: GPT Image 2

GPT Image 2 génère et modifie des images à partir de texte et de références visuelles. Il prend en charge des dimensions flexibles et traite automatiquement les images d’entrée avec une haute fidélité, avec des réglages distincts de qualité, de format et d’arrière-plan pour le visuel finalisé.

À propos du modèle

Cette description présente les capacités du modèle. Les entrées, sorties et options disponibles dans Ailoot pour la méthode sélectionnée figurent ci-dessous.

GPT Image 2 est le modèle d’OpenAI pour la génération et la modification d’images à partir de texte et d’entrées visuelles. Il crée une nouvelle image à partir d’un brief écrit et peut utiliser des images sources pour des retouches ou un travail guidé par des références. Les tâches pratiques comprennent les illustrations, les concepts de produits, les compositions visuelles et les modifications d’un visuel existant. Il s’agit d’une édition distincte des modèles GPT Image 2.5 Sunburst et Flare, avec sa propre gamme de qualités et son propre comportement de fidélité des entrées.

Pour la génération, décrivez le sujet, la scène, la composition, la lumière et le style souhaité. Pour une retouche, nommez ce qui doit changer et ce qui doit conserver son apparence. Un brief de produit peut demander une lampe en céramique sur une surface claire, avec une silhouette centrée et de la place pour une légende ; une retouche ultérieure peut changer l’arrière-plan tout en conservant la forme de la lampe et l’angle de vue. Les flux directs documentés de génération et de modification acceptent des prompts allant jusqu’à 32 000 caractères et peuvent renvoyer une à dix images.

La modification à partir de références accepte jusqu’à seize images d’entrée. Précisez l’objectif de chaque référence pour éviter de confondre sujet, arrière-plan et traitement visuel. GPT Image 2 traite automatiquement chaque image d’entrée avec une haute fidélité ; input_fidelity doit être omis, car il n’est pas réglable dans cette édition. Cela diffère du choix entre high et low de GPT Image 1 et du mode de fidélité d’entrée uniquement low de GPT Image 1 Mini. Le traitement haute fidélité favorise les détails de la source sans garantir leur reproduction à l’identique.

Un masque peut identifier la zone à retoucher. L’image source et le masque doivent avoir le même format et les mêmes dimensions et rester sous 50 Mo selon les exigences de préparation du guide ; le masque doit également comporter un canal alpha. Si plusieurs images d’entrée sont fournies, le masque s’applique à la première. Le modèle traite le masque comme un guide fondé sur le prompt plutôt que comme une frontière géométrique stricte. Décrivez le changement local et les exigences de préservation, puis examinez les zones voisines pour détecter des différences involontaires.

GPT Image 2 prend en charge les qualités low, medium, high et auto, avec auto par défaut. Les réglages xhigh et max de la famille 2.5 ne font pas partie de la gamme de cette édition. La taille peut être carrée, paysage, portrait, automatique ou définie par une largeur et une hauteur personnalisées valides. Les exemples du producteur comprennent 1024 × 1024, 1536 × 1024, 1024 × 1536, 2048 × 2048, 2048 × 1152, 3840 × 2160 et 2160 × 3840 pixels. Choisissez l’orientation et le niveau de détail pour la mise en page réelle plutôt que de traiter qualité et dimensions comme un seul réglage.

Les dimensions personnalisées doivent être des multiples de seize pixels, avec un côté maximal de 3840 pixels, un rapport entre le grand et le petit côté ne dépassant pas 3:1 et une surface de 655 360 à 8 294 400 pixels. Ces conditions s’appliquent simultanément. Les résolutions supérieures à 2560 × 1440 sont indiquées comme expérimentales. Un cadre peut respecter une règle tout en en enfreignant une autre : choisissez donc une paire de dimensions prise en charge et décrivez dans le brief les éléments sensibles au recadrage.

La sortie est PNG par défaut, avec JPEG ou WebP également disponibles. La compression de 0 à 100 est prise en charge pour JPEG et WebP. L’arrière-plan peut être opaque ou automatique ; la référence actuelle précise décrit la transparence pour GPT Image 2 comme une fonctionnalité en préversion. Pour demander la transparence, utilisez PNG ou WebP afin de conserver un canal alpha. Le flux documenté de diffusion en continu autorise jusqu’à trois images partielles avant l’image finalisée ; enregistrez le visuel final plutôt qu’un aperçu d’avancement. L’interface du fabricant prend également en charge le traitement par lots.

Évaluez la netteté du texte, la position des objets et la préservation des détails sources dans le résultat réel. GPT Image peut éprouver des difficultés avec les textes précis, les compositions sensibles à la mise en page et les identités visuelles récurrentes d’une génération à l’autre. Pour une série de retouches, utilisez le résultat choisi comme source suivante et formulez un changement concret lié à un problème visible. La sortie utile de GPT Image 2 est une image liée à un brief clair de génération ou de modification, avec des entrées haute fidélité, des dimensions et une qualité choisies pour cette tâche précise.

Ailoot · Génération d’images POST /v1/images/generations gpt-image-2

gpt-image-2

OpenAI /gpt-image-2

Premiers pas

GPT Image 2 génère et modifie des images à partir de texte et de références visuelles. Il prend en charge des dimensions flexibles et traite automatiquement les images d’entrée avec une haute fidélité, avec des réglages distincts de qualité, de format et d’arrière-plan pour le visuel finalisé.

Entrées acceptées
Texte
Résultats
Images

Disponible dans Ailoot · entrées et méthodes

Ailoot · Génération d’images POST /v1/images/generations
Entrée
text
Sortie
image
Format de sortie
Fichier image
ChampTypeExigenceValeurs et limitesPar défaut
ChampmodelTypestringExigenceObligatoireValeurs et limites
gpt-image-2
Par défaut—
ChamppromptTypestringExigenceObligatoireValeurs et limites
Longueur minimale: 1
Par défaut—
ChampnTypeintegerExigenceFacultatifValeurs et limites
Minimum: 1
Par défaut1
Champresponse_formatTypestringExigenceFacultatifValeurs et limites
url, b64_json
Par défaut—
ChampstreamTypebooleanExigenceFacultatifValeurs et limitesPar défautfalse
ChampsizeTypestringExigenceFacultatifValeurs et limites
Selon le modèle
Par défaut—
ChampqualityTypestringExigenceFacultatifValeurs et limites
Selon le modèle
Par défaut—
ChampbackgroundTypestringExigenceFacultatifValeurs et limites
Selon le modèle
Par défaut—
Champoutput_formatTypestringExigenceFacultatifValeurs et limites
Selon le modèle
Par défaut—
Champoutput_compressionTypeintegerExigenceFacultatifValeurs et limites
Selon le modèle
Par défaut—
ChampmoderationTypestringExigenceFacultatifValeurs et limites
Selon le modèle
Par défaut—
Champinput_fidelityTypestringExigenceFacultatifValeurs et limites
Selon le modèle
Par défaut—
ChampstyleTypestringExigenceFacultatifValeurs et limites
Selon le modèle
Par défaut—
Champpartial_imagesTypeintegerExigenceFacultatifValeurs et limites
Selon le modèle
Par défaut—
Combinaisons d’éléments d’entrée

Texte vers image · Obligatoire : prompt

Paramètres et cycle de vie de la méthode
ParamètreContrat
Paramètrematerial_typesContrattext
ParamètrerequiredContratmodel, prompt
Paramètreoptional_controlsContratnull
Paramètrecontent_typeContratapplication/json

Cycle de vie : synchronous_result_then_owned_library

GET /v1/media/tasks/{task_id} · task_id effectivement renvoyé ou enregistrement de la bibliothèque multimédia

GET /v1/media/assets/{asset_id}/content

GET /v1/media/assets

GET /v1/media/assets/{asset_id}

Les structures des méthodes et les identifiants sont exacts ; la capacité du fournisseur est distincte de l’admission.

Tarifs

Tarifs des méthodes Ailoot

Ailoot Génération d’imagesPOST /v1/images/generations
Texte en entrée
0,0025 USD / 1K
Entrée, image
0,004 USD / 1K tokens
Sortie, image
0,015 USD / 1K tokens

Ailoot réserve un montant estimé avant une requête. Après le résultat, le montant final est débité selon l’utilisation mesurée. Pour le streaming, le montant final à débiter est calculé à partir du relevé final d’utilisation. Fonctionnement de la réservation et du débit →

Exemples de requêtes

Ailoot · Génération d’images

curlPython SDKNode.js SDK
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");

Recevoir et enregistrer les résultats

Ailoot · Génération d’images

Téléchargez chaque image renvoyée ou enregistrez son contenu Base64

  • GET /v1/media/tasks/{task_id}
  • GET /v1/media/assets/{asset_id}/content
  • GET /v1/media/assets
  • GET /v1/media/assets/{asset_id}
Conserver tous les résultats terminés

Enregistrez chaque image terminée ; récupérez chaque URL renvoyée ou décodez son contenu Base64.

Enregistrez chaque élément de données. Décodez chaque b64_json ou récupérez chaque URL signée renvoyée. Choisissez l’extension du fichier à partir du type MIME et des octets réels.

Si la réponse d’origine doit être vérifiée

Si le résultat d’une génération ou d’une retouche d’image nécessite une vérification, conservez l’operation_id/X-Client-Request-ID d’origine et les informations renvoyées sur le résultat. Récupérez les résultats existants qui vous appartiennent via la bibliothèque multimédia, à l’aide des valeurs task_id ou asset_id réelles. Ne soumettez pas à nouveau la requête de génération/retouche et ne construisez pas d’URL d’interrogation du statut à partir d’operation_id.

Champs de la réponse
ChampType
ChampcreatedTypeinteger
Champdata[].urlTypestring
Champdata[].b64_jsonTypebase64 string
ChampusageTypeobject
Erreurs et étapes suivantes
RéponseConditionÉtape suivante
Réponse400 · invalid_request_errorConditionChamps obligatoires, représentation des contenus ou valeur de paramètre non validesÉtape suivanteCorrigez les champs indiqués avant une nouvelle requête de création.
Réponseserver_errorConditionLa réponse renvoyée indique que l’opération ou le résultat nécessite une vérificationÉtape suivanteConservez l’identifiant d’opération/de tâche initialement renvoyé, les en-têtes de la requête et la réponse ; poursuivez les lectures prises en charge de cette opération d’origine. Ne soumettez pas à nouveau la requête de création.

Alias

Alias du modèle

Ailoot gpt-image-2
Ailoot Ultra gpt-image-2, openai/gpt-image-2

Alias des chemins de méthode

/v1/images

ID d’appel associés

openai/gpt-image-2, gpt-image-2, gpt-image-2

Ailoot Ultra · Génération d’images POST /v1/images/generations gpt-image-2

gpt-image-2

OpenAI /gpt-image-2
ID du modèle
  • gpt-image-2
  • openai/gpt-image-2

Premiers pas

GPT Image 2 génère et modifie des images à partir de texte et de références visuelles. Il prend en charge des dimensions flexibles et traite automatiquement les images d’entrée avec une haute fidélité, avec des réglages distincts de qualité, de format et d’arrière-plan pour le visuel finalisé.

Entrées acceptées
Texte
Résultats
Images

Disponible dans Ailoot · entrées et méthodes

Ailoot Ultra · Génération d’images POST /v1/images/generations
Entrée
text
Sortie
image
ChampTypeExigenceValeurs et limitesPar défaut
ChampmodelTypestringExigenceObligatoireValeurs et limites
gpt-image-2
Par défaut—
ChamppromptTypestringExigenceObligatoireValeurs et limites
Longueur maximale: 32 000
Par défaut—
ChampsizeTypestringExigenceFacultatifValeurs et limites
Conditions: Utilisez auto ou WIDTHxHEIGHT avec deux dimensions divisibles par 16. Le côté le plus long mesure au maximum 3,840 pixels et la taille totale ne dépasse pas 8,300,000 pixels.
Par défautauto
ChampbackgroundTypestringExigenceFacultatifValeurs et limites
transparent, opaque, auto
Par défautauto
ChampmoderationTypestringExigenceFacultatifValeurs et limites
low, auto
Conditions: Utilisez auto pour la modération standard du contenu.
Par défaut—
ChampnTypeintegerExigenceFacultatifValeurs et limites
Minimum: 1
Maximum: 10
Par défaut1
ChampqualityTypestringExigenceFacultatifValeurs et limites
auto, high, medium, low
Par défautauto
Champoutput_compressionTypeintegerExigenceFacultatifValeurs et limites
Minimum: 0
Maximum: 100
Conditions: S’applique aux sorties JPEG et WebP ; envoyez la valeur entière documentée.
Par défaut100
Champoutput_formatTypestringExigenceFacultatifValeurs et limites
webp, png, jpeg
Par défautpng
ChampstreamTypebooleanExigenceFacultatifValeurs et limites
false
Conditions: Cette route renvoie une réponse JSON complète.
Par défautfalse
Paramètres et cycle de vie de la méthode
ParamètreContrat
Paramètrecontent_typeContratapplication/json
ParamètrerequiredContratprompt, model
Paramètrematerial_typesContrattext
ParamètreoptionalContratsize, background, moderation, n, quality, output_compression, output_format, stream
ParamètreconditionsContratUn arrière-plan transparent nécessite le format PNG ou WebP., La compression de sortie s’applique au format JPEG ou WebP., La méthode sélectionnée génère à partir de texte. Les paramètres de modification et de diffusion en continu décrits pour le fabricant sont des capacités distinctes.

Cycle de vie : synchronous_result_then_owned_library

GET /v1/media/tasks/{task_id} · task_id effectivement renvoyé ou enregistrement de la bibliothèque multimédia

GET /v1/media/assets/{asset_id}/content

GET /v1/media/assets

GET /v1/media/assets/{asset_id}

Tarifs

Calcul du coût final

Les tarifs affichés servent à estimer le coût avant la génération. Le montant final est calculé à partir du coût enregistré pour la génération d’origine. La durée mesurée du résultat et les quantités prévisionnelles ne constituent pas la quantité finale facturable.

Les tarifs n’ajoutent pas d’options de requête. Les paramètres pris en charge figurent dans la méthode sélectionnée.

Mode rapide
Non précisé Lorsque le mode rapide est sélectionné
Mode Flex
Non précisé Lorsque le mode flex est sélectionné
Effort de raisonnement maximal
Non précisé Lorsque l’effort de raisonnement maximal utilise l’ajustement par défaut (default)

Tarifs estimés à des fins de comparaison

Prix par configuration

Associez chaque coût aux conditions indiquées. Utilisez un seul tarif pour chaque ensemble de configurations alternatives.

ConfigurationBarème tarifaireQuantité prévisionnelleCoût
ConfigurationTarifs de base des jetonsBarème tarifaireTarif de baseQuantité prévisionnelle—Coût
Entrée · Tokens en entrée · Estimation à des fins de comparaison uniquement — / 1K tokens
Sortie · Tokens en sortie · Estimation à des fins de comparaison uniquement — / 1K tokens
Entrée · Lecture du cache · Estimation à des fins de comparaison uniquement — / 1K tokens
Entrée · Écriture dans le cache · Estimation à des fins de comparaison uniquement — / 1K tokens
Entrée · Écriture dans le cache, 1 h · Estimation à des fins de comparaison uniquement — / 1K tokens
ConfigurationCoût estimé de la générationBarème tarifaire—Quantité prévisionnelleEstimation pour une générationCoût
Sortie · Coût estimé de génération · Estimation à des fins de comparaison uniquement $0.24576 estimation avant génération

Cette estimation ne constitue ni des frais supplémentaires ni un tarif fixe pour la génération terminée.

Ailoot réserve un montant estimé avant une requête. Après le résultat, le montant final est débité selon l’utilisation mesurée. Pour le streaming, le montant final à débiter est calculé à partir du relevé final d’utilisation. Fonctionnement de la réservation et du débit →

Exemples de requêtes

Ailoot Ultra · Génération d’images

curl
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

Recevoir et enregistrer les résultats

Ailoot Ultra · Génération d’images

Téléchargez chaque image renvoyée ou enregistrez son contenu Base64

  • GET /v1/media/tasks/{task_id}
  • GET /v1/media/assets/{asset_id}/content
  • GET /v1/media/assets
  • GET /v1/media/assets/{asset_id}
Autres lectures de contenu
Lire les ressources existantes dont vous êtes propriétaire
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.
Conserver tous les résultats terminés

Enregistrez chaque image terminée ; récupérez chaque URL renvoyée ou décodez son contenu Base64.

Conservez la réponse complète et les en-têtes, chaque sortie effective, les identifiants initialement renvoyés et tous les champs d’utilisation. Récupérez l’opération d’origine sans soumettre à nouveau sa création.

Si la réponse d’origine doit être vérifiée

Conservez le X-Client-Request-ID renvoyé pour le rapprochement. Consultez uniquement les valeurs task_id/asset_id effectivement renvoyées ou votre bibliothèque multimédia ; ne construisez jamais une URL de tâche à partir de l’identifiant de l’opération et ne soumettez jamais à nouveau la création.

Champs de la réponse
ChampType
ChampcreatedType
Champdata[].urlType
Champdata[].b64_jsonType
ChampusageType

Alias

Alias du modèle

Ailoot gpt-image-2
Ailoot Ultra gpt-image-2, openai/gpt-image-2

Alias des chemins de méthode

/v1/images

ID d’appel associés

openai/gpt-image-2, gpt-image-2, gpt-image-2

Ailoot Ultra · Génération d’images POST /v1/images/generations openai/gpt-image-2

openai/gpt-image-2

OpenAI /openai/gpt-image-2
ID du modèle
  • gpt-image-2
  • openai/gpt-image-2

Premiers pas

GPT Image 2 génère et modifie des images à partir de texte et de références visuelles. Il prend en charge des dimensions flexibles et traite automatiquement les images d’entrée avec une haute fidélité, avec des réglages distincts de qualité, de format et d’arrière-plan pour le visuel finalisé.

Entrées acceptées
Texte · Images
Résultats
Images

Disponible dans Ailoot · entrées et méthodes

Ailoot Ultra · Génération d’images POST /v1/images/generations
Entrée
text, image
Sortie
image
ChampTypeExigenceValeurs et limitesPar défaut
ChampmodelTypestringExigenceObligatoireValeurs et limites
openai/gpt-image-2
Par défaut—
ChamppromptTypestringExigenceObligatoireValeurs et limites
Longueur minimale: 1
Par défaut—
Champaspect_ratioTypestringExigenceFacultatifValeurs et limites
1:1, 3:2, 2:3, 4:3, 3:4, 16:9, 9:16, 21:9, auto
Par défaut—
ChampqualityTypestringExigenceFacultatifValeurs et limites
auto, low, medium, high
Par défaut—
ChampbackgroundTypestringExigenceFacultatifValeurs et limites
auto, opaque
Par défaut—
ChampnTypeintegerExigenceFacultatifValeurs et limites
Minimum: 1
Maximum: 10
Par défaut—
Champinput_referencesTypearrayExigenceFacultatifValeurs et limites
Nombre minimal d’éléments: 0
Nombre maximal d’éléments: 16
Par défaut—
Champoutput_compressionTypeintegerExigenceFacultatifValeurs et limites
Minimum: 0
Maximum: 100
Par défaut—
ChampproviderTypeobjectExigenceFacultatifValeurs et limitesPar défaut—
Paramètres et cycle de vie de la méthode
ParamètreContrat
Paramètrecontent_typeContratapplication/json
ParamètrerequiredContratmodel, prompt
Paramètrematerial_typesContrattext, image

Cycle de vie : synchronous_result_then_owned_library

GET /v1/media/tasks/{task_id} · task_id effectivement renvoyé ou enregistrement de la bibliothèque multimédia

GET /v1/media/assets/{asset_id}/content

GET /v1/media/assets

GET /v1/media/assets/{asset_id}

Tarifs

Calcul du coût final

Les tarifs affichés servent à estimer le coût avant la génération. Le montant final est calculé à partir du coût enregistré pour la génération d’origine. La durée mesurée du résultat et les quantités prévisionnelles ne constituent pas la quantité finale facturable.

Les tarifs n’ajoutent pas d’options de requête. Les paramètres pris en charge figurent dans la méthode sélectionnée.

Mode rapide
Non précisé Lorsque le mode rapide est sélectionné
Mode Flex
Non précisé Lorsque le mode flex est sélectionné
Effort de raisonnement maximal
Non précisé Lorsque l’effort de raisonnement maximal utilise l’ajustement par défaut (default)

Tarifs estimés à des fins de comparaison

Prix par configuration

Associez chaque coût aux conditions indiquées. Utilisez un seul tarif pour chaque ensemble de configurations alternatives.

ConfigurationBarème tarifaireQuantité prévisionnelleCoût
ConfigurationTarifs de base des jetonsBarème tarifaireTarif de baseQuantité prévisionnelle—Coût
Entrée · Tokens en entrée · Estimation à des fins de comparaison uniquement — / 1K tokens
Sortie · Tokens en sortie · Estimation à des fins de comparaison uniquement — / 1K tokens
Entrée · Lecture du cache · Estimation à des fins de comparaison uniquement — / 1K tokens
Entrée · Écriture dans le cache · Estimation à des fins de comparaison uniquement — / 1K tokens
Entrée · Écriture dans le cache, 1 h · Estimation à des fins de comparaison uniquement — / 1K tokens
ConfigurationCoût estimé de la générationBarème tarifaire—Quantité prévisionnelleEstimation pour une générationCoût
Sortie · Coût estimé de génération · Estimation à des fins de comparaison uniquement $0.24576 estimation avant génération

Cette estimation ne constitue ni des frais supplémentaires ni un tarif fixe pour la génération terminée.

Ailoot réserve un montant estimé avant une requête. Après le résultat, le montant final est débité selon l’utilisation mesurée. Pour le streaming, le montant final à débiter est calculé à partir du relevé final d’utilisation. Fonctionnement de la réservation et du débit →

Exemples de requêtes

Ailoot Ultra · Génération d’images

curl
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

Recevoir et enregistrer les résultats

Ailoot Ultra · Génération d’images

Téléchargez chaque image renvoyée ou enregistrez son contenu Base64

  • GET /v1/media/tasks/{task_id}
  • GET /v1/media/assets/{asset_id}/content
  • GET /v1/media/assets
  • GET /v1/media/assets/{asset_id}
Autres lectures de contenu
Lire les ressources existantes dont vous êtes propriétaire
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.
Conserver tous les résultats terminés

Enregistrez chaque image terminée ; récupérez chaque URL renvoyée ou décodez son contenu Base64.

Conservez la réponse complète et les en-têtes, chaque sortie effective, les identifiants initialement renvoyés et tous les champs d’utilisation. Récupérez l’opération d’origine sans soumettre à nouveau sa création.

Si la réponse d’origine doit être vérifiée

Conservez le X-Client-Request-ID renvoyé pour le rapprochement. Consultez uniquement les valeurs task_id/asset_id effectivement renvoyées ou votre bibliothèque multimédia ; ne construisez jamais une URL de tâche à partir de l’identifiant de l’opération et ne soumettez jamais à nouveau la création.

Champs de la réponse
ChampType
ChampcreatedType
Champdata[].urlType
Champdata[].b64_jsonType
ChampusageType

Alias

Alias du modèle

Ailoot gpt-image-2
Ailoot Ultra gpt-image-2, openai/gpt-image-2

Alias des chemins de méthode

/v1/images

ID d’appel associés

openai/gpt-image-2, gpt-image-2, gpt-image-2

FAQ · OpenAI: GPT Image 2
Quelles entrées et quels résultats sont disponibles ?

POST /v1/images/generations · gpt-image-2: text → image

POST /v1/images/generations · gpt-image-2: text → image

POST /v1/images/generations · openai/gpt-image-2: text, image → image

Quels champs la requête utilise-t-elle ?

POST /v1/images/generations · gpt-image-2: model, prompt, n, response_format, stream

POST /v1/images/generations · gpt-image-2: model, prompt, size, background, moderation, n, quality, output_compression, output_format, stream

POST /v1/images/generations · openai/gpt-image-2: model, prompt, aspect_ratio, quality, background, n, input_references, output_compression, provider

Quelles limites s’appliquent ?

POST /v1/images/generations · gpt-image-2: n.minimum: 1

POST /v1/images/generations · gpt-image-2: prompt.maximum_length: 32000; n.minimum: 1; n.maximum: 10; output_compression.minimum: 0; output_compression.maximum: 100

POST /v1/images/generations · openai/gpt-image-2: n.minimum: 1; n.maximum: 10; output_compression.minimum: 0; output_compression.maximum: 100

Plus de détails

Connectez Ailoot à Claude Code, OpenCode, Hermes ou à votre application.

L’entreprise et son portefeuille de projets

L’entreprise et son portefeuille de projets : des millions de clients ; des ventes qui se chiffrent en milliards chaque mois.

Achetez des tokens à prix réduit.

Une remise d’abonnement pour le travail régulier. Des codes promo jusqu’à 50% sur l’achat de tokens.

Abonnement
Choisissez une offre à tarif réduit pour vos requêtes régulières.
Code promo jusqu’à 50%
Saisissez le code à l’achat. Le prix est recalculé selon la promotion en cours.
Dépenses dans l’historique
Modèle, tokens et montant sont enregistrés pour chaque requête.

Choisir un abonnement · Voir les prix des modèles

Connectez l’API au produit que vous vendez.

SaaS, applications et bots selon l’offre officielle et le contrat de licence Ailoot. Pour la revente, demandez une licence revendeur.

Application commerciale
Intégrez la génération de texte, d’images, de vidéo et de son aux fonctions payantes de votre service.
Licence revendeur
Envoyez la description du projet et le mode d’accès. Demandez des conditions écrites d’utilisation et de revente.
Documents sur le site
L’offre officielle, le contrat de licence et la politique de traitement des données sont accessibles avant connexion.

Demander une licence revendeur · Offre officielle et contrat de licence