OpenAI: GPT Image 2
GPT Image 2 genera y edita imágenes a partir de texto y referencias visuales. Admite dimensiones de cuadro flexibles y procesa automáticamente las imágenes de entrada con alta fidelidad, con controles separados de calidad, formato y fondo para el recurso terminado.
- Ailoot · Imágenes
POST /v1/images/generationsgpt-image-2 - Ailoot Ultra · Imágenes
POST /v1/images/generationsgpt-image-2 - Ailoot Ultra · Imágenes
POST /v1/images/generationsopenai/gpt-image-2
Sobre el modelo
Esta descripción cubre las capacidades del modelo. Las entradas, salidas y opciones disponibles en Ailoot se indican a continuación para el método seleccionado.
GPT Image 2 es el modelo de OpenAI para generar y editar imágenes a partir de texto y entradas visuales. Crea una imagen nueva a partir de instrucciones escritas y puede usar imágenes de origen para editar o trabajar con referencias. Las tareas prácticas incluyen ilustraciones, conceptos de producto, composiciones visuales y cambios en un recurso existente. Es una edición independiente de los modelos GPT Image 2.5 Sunburst y Flare, con su propio rango de calidad y comportamiento de fidelidad de entrada.
Para generar, describe el sujeto, la escena, la composición, la luz y el estilo previsto. Para editar, indica qué debe cambiar y qué debe conservar su apariencia. Unas instrucciones de producto pueden pedir una lámpara de cerámica sobre una superficie clara, con una silueta centrada y espacio para un texto; una edición posterior puede cambiar el fondo conservando la forma y el ángulo de visión de la lámpara. Los flujos directos de generación y edición documentados aceptan prompts de hasta 32,000 caracteres y pueden devolver de una a diez imágenes.
La edición con referencias acepta hasta dieciséis imágenes de entrada. Especifica el propósito de cada referencia para evitar confusiones entre un sujeto, un fondo y un tratamiento visual. GPT Image 2 procesa automáticamente cada imagen de entrada con alta fidelidad; input_fidelity debe omitirse porque no es ajustable en esta edición. Esto difiere de la selección entre high y low de GPT Image 1 y del modo de fidelidad de entrada limitado a low de GPT Image 1 Mini. El procesamiento de entradas de alta fidelidad ayuda a conservar el detalle de origen sin garantizar que cada detalle se reproduzca sin cambios.
Una máscara puede identificar la región que se quiere editar. La imagen de origen y la máscara deben tener el mismo formato y dimensiones y estar por debajo de 50 MB según los requisitos de preparación de la guía; la máscara también necesita un canal alfa. Si se proporcionan varias imágenes de entrada, la máscara se aplica a la primera. El modelo trata la máscara como una guía basada en el prompt, no como un límite geométrico estricto. Describe el cambio local y los requisitos de conservación y luego examina el área circundante para detectar diferencias involuntarias.
GPT Image 2 admite calidad low, medium, high y auto, con auto como valor predeterminado. Los ajustes xhigh y max de la familia 2.5 no forman parte del rango de calidad de esta edición. El tamaño puede ser cuadrado, horizontal, vertical, automático o un ancho y alto personalizados válidos. Los ejemplos del desarrollador incluyen 1024 × 1024, 1536 × 1024, 1024 × 1536, 2048 × 2048, 2048 × 1152, 3840 × 2160 y 2160 × 3840 píxeles. Elige la orientación y el nivel de detalle para el diseño real en lugar de tratar la calidad y las dimensiones como un mismo control.
Las dimensiones personalizadas deben ser múltiplos de dieciséis píxeles, con un lado máximo de 3840 píxeles, una relación entre el lado largo y el corto no mayor de 3:1 y un área de 655,360 a 8,294,400 píxeles. Estas condiciones se cumplen simultáneamente. Las resoluciones superiores a 2560 × 1440 están marcadas como experimentales. Un cuadro que cumpla una regla todavía puede incumplir otra, así que selecciona una pareja de dimensiones admitida y describe en las instrucciones los elementos sensibles al recorte.
La salida es PNG de forma predeterminada, con JPEG o WebP también disponibles. JPEG y WebP admiten compresión de 0 a 100. El fondo puede ser opaco o automático; la referencia actual exacta describe la transparencia de GPT Image 2 como una capacidad en versión preliminar. Al solicitar transparencia, usa PNG o WebP para conservar un canal alfa. El flujo de streaming documentado permite hasta tres imágenes parciales antes de la imagen terminada; guarda el recurso final en lugar de una vista previa de progreso. La interfaz del fabricante también admite procesamiento por lotes.
Evalúa la claridad del texto, la posición de los objetos y la conservación de los detalles de origen en el resultado real. GPT Image puede tener dificultades con letras precisas, composiciones sensibles al diseño e identidad visual recurrente entre generaciones independientes. Para una secuencia de ediciones, usa el resultado elegido como siguiente origen y proporciona un cambio concreto ligado a un problema visible. La salida útil de GPT Image 2 es una imagen vinculada a instrucciones claras de generación o edición, con sus entradas de alta fidelidad, dimensiones y calidad elegidas para esa tarea específica.
Ailoot · Imágenes POST /v1/images/generations gpt-image-2
gpt-image-2Inicio
GPT Image 2 genera y edita imágenes a partir de texto y referencias visuales. Admite dimensiones de cuadro flexibles y procesa automáticamente las imágenes de entrada con alta fidelidad, con controles separados de calidad, formato y fondo para el recurso terminado.
- Entradas aceptadas
- Texto
- Resultados
- Imágenes
Disponible en Ailoot · entradas y métodos
Ailoot · Imágenes POST /v1/images/generations
- Entrada
text- Salida
image- Formato de salida
- Archivo de imagen
| Campo | Tipo | Requisito | Valores y límites | Predeterminado |
|---|---|---|---|---|
Campomodel | Tipostring | RequisitoObligatorio | Valores y límites gpt-image-2 | Predeterminado— |
Campoprompt | Tipostring | RequisitoObligatorio | Valores y límites Longitud mínima: 1 | Predeterminado— |
Campon | Tipointeger | RequisitoOpcional | Valores y límites Mínimo: 1 | Predeterminado1 |
Camporesponse_format | Tipostring | RequisitoOpcional | Valores y límites url, b64_json | Predeterminado— |
Campostream | Tipoboolean | RequisitoOpcional | Valores y límites | Predeterminadofalse |
Camposize | Tipostring | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campoquality | Tipostring | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campobackground | Tipostring | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campooutput_format | Tipostring | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campooutput_compression | Tipointeger | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campomoderation | Tipostring | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campoinput_fidelity | Tipostring | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campostyle | Tipostring | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campopartial_images | Tipointeger | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Combinaciones de materiales de entrada
Texto a imagen · Obligatorio: prompt
Parámetros del método y ciclo de vida
| Parámetro | Contrato |
|---|---|
Parámetromaterial_types | Contratotext |
Parámetrorequired | Contratomodel, prompt |
Parámetrooptional_controls | Contratonull |
Parámetrocontent_type | Contratoapplication/json |
Ciclo de vida: synchronous_result_then_owned_library
GET /v1/media/tasks/{task_id} · El task_id real devuelto o el registro de la biblioteca multimedia
GET /v1/media/assets/{asset_id}/content
GET /v1/media/assets
GET /v1/media/assets/{asset_id}
Las estructuras e ID de los métodos son exactos; la capacidad del proveedor y la admisión son conceptos distintos.
Tarifas
Tarifas de métodos Ailoot
POST /v1/images/generations- Entrada de texto
- USD 0.0025 / 1K
- Entrada, imagen
- USD 0.004 / 1K tokens
- Salida, imagen
- USD 0.015 / 1K tokens
Ailoot reserva un monto estimado antes de la solicitud. Tras obtener el resultado, liquida el cargo definitivo según el uso medido. En las respuestas en flujo, la liquidación usa el registro de uso final. Cómo funcionan la reserva y la liquidación →
Solicitudes de ejemplo
Ailoot · Imágenes
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");
Recibir y guardar resultados
Ailoot · Imágenes
Descarga cada imagen recibida o guarda su contenido Base64
GET /v1/media/tasks/{task_id}GET /v1/media/assets/{asset_id}/contentGET /v1/media/assetsGET /v1/media/assets/{asset_id}
Conserva todos los resultados completados
Guarda todas las imágenes completadas; descarga cada URL recibida o decodifica su contenido Base64.
Guarda cada elemento de data. Decodifica cada b64_json o descarga el contenido de cada URL firmada devuelta. Elige la extensión del archivo según el MIME y los bytes reales.
Si es necesario revisar la respuesta original
Si el resultado de una generación o edición de imágenes requiere una revisión, conserva el operation_id/X-Client-Request-ID original y la información del resultado devuelto. Recupera los resultados existentes de tu propiedad mediante la biblioteca multimedia usando valores reales de task_id o asset_id. No vuelvas a enviar la solicitud de generación o edición ni construyas una URL de consulta de estado a partir de operation_id.
Campos de respuesta
| Campo | Tipo |
|---|---|
Campocreated | Tipointeger |
Campodata[].url | Tipostring |
Campodata[].b64_json | Tipobase64 string |
Campousage | Tipoobject |
Errores y siguientes pasos
| Respuesta | Condición | Siguiente paso |
|---|---|---|
Respuesta400 · invalid_request_error | CondiciónCampos obligatorios, representación del material o valor del parámetro no válidos | Siguiente pasoCorrige los campos indicados antes de una nueva solicitud de creación. |
Respuestaserver_error | CondiciónLa respuesta devuelta indica que la operación o el resultado requiere una revisión | Siguiente pasoConserva el ID original de operación o tarea devuelto, los encabezados de la solicitud y la respuesta; continúa con las consultas admitidas de esa operación original. No vuelvas a enviar la solicitud de creación. |
Alias
Alias del modelo
Ailoot gpt-image-2
Ailoot Ultra gpt-image-2, openai/gpt-image-2
Alias de rutas de métodos
/v1/images
ID de modelo relacionados
Ailoot Ultra · Imágenes POST /v1/images/generations gpt-image-2
gpt-image-2gpt-image-2openai/gpt-image-2
Inicio
GPT Image 2 genera y edita imágenes a partir de texto y referencias visuales. Admite dimensiones de cuadro flexibles y procesa automáticamente las imágenes de entrada con alta fidelidad, con controles separados de calidad, formato y fondo para el recurso terminado.
- Entradas aceptadas
- Texto
- Resultados
- Imágenes
Disponible en Ailoot · entradas y métodos
Ailoot Ultra · Imágenes POST /v1/images/generations
- Entrada
text- Salida
image
| Campo | Tipo | Requisito | Valores y límites | Predeterminado |
|---|---|---|---|---|
Campomodel | Tipostring | RequisitoObligatorio | Valores y límites gpt-image-2 | Predeterminado— |
Campoprompt | Tipostring | RequisitoObligatorio | Valores y límites Longitud máxima: 32,000 | Predeterminado— |
Camposize | Tipostring | RequisitoOpcional | Valores y límites Condiciones: Usa auto o WIDTHxHEIGHT con ambas dimensiones divisibles entre 16. El lado más largo no debe superar 3,840 píxeles y el tamaño total no debe superar 8,300,000 píxeles. | Predeterminadoauto |
Campobackground | Tipostring | RequisitoOpcional | Valores y límites transparent, opaque, auto | Predeterminadoauto |
Campomoderation | Tipostring | RequisitoOpcional | Valores y límites low, auto Condiciones: Usa auto para la moderación estándar de contenido. | Predeterminado— |
Campon | Tipointeger | RequisitoOpcional | Valores y límites Mínimo: 1 Máximo: 10 | Predeterminado1 |
Campoquality | Tipostring | RequisitoOpcional | Valores y límites auto, high, medium, low | Predeterminadoauto |
Campooutput_compression | Tipointeger | RequisitoOpcional | Valores y límites Mínimo: 0 Máximo: 100 Condiciones: Se aplica a la salida JPEG y WebP; envía el valor entero documentado. | Predeterminado100 |
Campooutput_format | Tipostring | RequisitoOpcional | Valores y límites webp, png, jpeg | Predeterminadopng |
Campostream | Tipoboolean | RequisitoOpcional | Valores y límites false Condiciones: Esta ruta devuelve una respuesta JSON completa. | Predeterminadofalse |
Parámetros del método y ciclo de vida
| Parámetro | Contrato |
|---|---|
Parámetrocontent_type | Contratoapplication/json |
Parámetrorequired | Contratoprompt, model |
Parámetromaterial_types | Contratotext |
Parámetrooptional | Contratosize, background, moderation, n, quality, output_compression, output_format, stream |
Parámetroconditions | ContratoUn fondo transparente requiere PNG o WebP., La compresión de salida se aplica a JPEG o WebP., El método seleccionado genera a partir de texto. La edición y los controles de transmisión descritos para el fabricante son capacidades independientes. |
Ciclo de vida: synchronous_result_then_owned_library
GET /v1/media/tasks/{task_id} · El task_id real devuelto o el registro de la biblioteca multimedia
GET /v1/media/assets/{asset_id}/content
GET /v1/media/assets
GET /v1/media/assets/{asset_id}
Tarifas
Cómo se calcula el cargo definitivo
Las tarifas mostradas permiten estimar el costo antes de la generación. El cargo final se calcula a partir del costo registrado para la generación original. La duración medida de la salida y las cantidades estimadas no son la cantidad facturable final.
Las referencias tarifarias no añaden opciones a la solicitud. Los parámetros admitidos se indican en el método seleccionado.
- Modo fast
- Sin especificar Cuando se selecciona el modo fast
- Modo flex
- Sin especificar Cuando se selecciona el modo flex
- Esfuerzo máximo de razonamiento
- Sin especificar Cuando el esfuerzo máximo de razonamiento usa el ajuste default
Tarifas estimadas para comparar
Precios por configuración
Relaciona cada cargo con las condiciones mostradas. Usa una tarifa para cada conjunto de configuraciones alternativas.
| Configuración | Tabla de tarifas | Cantidad prevista | Cargo |
|---|---|---|---|
| ConfiguraciónTarifas base por token | Tabla de tarifasTarifa base | Cantidad prevista— | Cargo Entrada · Tokens de entrada · Estimación solo para comparar — / 1K tokens Salida · Tokens de salida · Estimación solo para comparar — / 1K tokens Entrada · Lectura de caché · Estimación solo para comparar — / 1K tokens Entrada · Escritura en caché · Estimación solo para comparar — / 1K tokens Entrada · Escritura en caché, 1 hora · Estimación solo para comparar — / 1K tokens |
| ConfiguraciónCosto estimado de generación | Tabla de tarifas— | Cantidad previstaestimación para una generación | Cargo Salida · Costo estimado de generación · Estimación solo para comparar $0.24576 estimación previa a la generación Esta estimación no es un cargo adicional ni una tarifa fija por la generación completada. |
Ailoot reserva un monto estimado antes de la solicitud. Tras obtener el resultado, liquida el cargo definitivo según el uso medido. En las respuestas en flujo, la liquidación usa el registro de uso final. Cómo funcionan la reserva y la liquidación →
Solicitudes de ejemplo
Ailoot Ultra · Imágenes
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
Recibir y guardar resultados
Ailoot Ultra · Imágenes
Descarga cada imagen recibida o guarda su contenido Base64
GET /v1/media/tasks/{task_id}GET /v1/media/assets/{asset_id}/contentGET /v1/media/assetsGET /v1/media/assets/{asset_id}
Otras consultas de contenido
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 todos los resultados completados
Guarda todas las imágenes completadas; descarga cada URL recibida o decodifica su contenido Base64.
Conserva la respuesta completa y los encabezados, todas las salidas reales, los identificadores originales devueltos y todos los campos de uso. Recupera la operación original sin volver a enviar la solicitud de creación.
Si es necesario revisar la respuesta original
Conserva el X-Client-Request-ID devuelto para la conciliación. Consulta únicamente los valores reales de task_id/asset_id devueltos o la biblioteca multimedia de tu propiedad; nunca construyas una URL de tarea a partir del ID de la operación ni vuelvas a enviar la solicitud de creación.
Campos de respuesta
| Campo | Tipo |
|---|---|
Campocreated | Tipo |
Campodata[].url | Tipo |
Campodata[].b64_json | Tipo |
Campousage | Tipo |
Alias
Alias del modelo
Ailoot gpt-image-2
Ailoot Ultra gpt-image-2, openai/gpt-image-2
Alias de rutas de métodos
/v1/images
ID de modelo relacionados
Ailoot Ultra · Imágenes POST /v1/images/generations openai/gpt-image-2
openai/gpt-image-2gpt-image-2openai/gpt-image-2
Inicio
GPT Image 2 genera y edita imágenes a partir de texto y referencias visuales. Admite dimensiones de cuadro flexibles y procesa automáticamente las imágenes de entrada con alta fidelidad, con controles separados de calidad, formato y fondo para el recurso terminado.
- Entradas aceptadas
- Texto · Imágenes
- Resultados
- Imágenes
Disponible en Ailoot · entradas y métodos
Ailoot Ultra · Imágenes POST /v1/images/generations
- Entrada
text,image- Salida
image
| Campo | Tipo | Requisito | Valores y límites | Predeterminado |
|---|---|---|---|---|
Campomodel | Tipostring | RequisitoObligatorio | Valores y límites openai/gpt-image-2 | Predeterminado— |
Campoprompt | Tipostring | RequisitoObligatorio | Valores y límites Longitud mínima: 1 | Predeterminado— |
Campoaspect_ratio | Tipostring | RequisitoOpcional | Valores y límites 1:1, 3:2, 2:3, 4:3, 3:4, 16:9, 9:16, 21:9, auto | Predeterminado— |
Campoquality | Tipostring | RequisitoOpcional | Valores y límites auto, low, medium, high | Predeterminado— |
Campobackground | Tipostring | RequisitoOpcional | Valores y límites auto, opaque | Predeterminado— |
Campon | Tipointeger | RequisitoOpcional | Valores y límites Mínimo: 1 Máximo: 10 | Predeterminado— |
Campoinput_references | Tipoarray | RequisitoOpcional | Valores y límites Número mínimo de elementos: 0 Número máximo de elementos: 16 | Predeterminado— |
Campooutput_compression | Tipointeger | RequisitoOpcional | Valores y límites Mínimo: 0 Máximo: 100 | Predeterminado— |
Campoprovider | Tipoobject | RequisitoOpcional | Valores y límites | Predeterminado— |
Parámetros del método y ciclo de vida
| Parámetro | Contrato |
|---|---|
Parámetrocontent_type | Contratoapplication/json |
Parámetrorequired | Contratomodel, prompt |
Parámetromaterial_types | Contratotext, image |
Ciclo de vida: synchronous_result_then_owned_library
GET /v1/media/tasks/{task_id} · El task_id real devuelto o el registro de la biblioteca multimedia
GET /v1/media/assets/{asset_id}/content
GET /v1/media/assets
GET /v1/media/assets/{asset_id}
Tarifas
Cómo se calcula el cargo definitivo
Las tarifas mostradas permiten estimar el costo antes de la generación. El cargo final se calcula a partir del costo registrado para la generación original. La duración medida de la salida y las cantidades estimadas no son la cantidad facturable final.
Las referencias tarifarias no añaden opciones a la solicitud. Los parámetros admitidos se indican en el método seleccionado.
- Modo fast
- Sin especificar Cuando se selecciona el modo fast
- Modo flex
- Sin especificar Cuando se selecciona el modo flex
- Esfuerzo máximo de razonamiento
- Sin especificar Cuando el esfuerzo máximo de razonamiento usa el ajuste default
Tarifas estimadas para comparar
Precios por configuración
Relaciona cada cargo con las condiciones mostradas. Usa una tarifa para cada conjunto de configuraciones alternativas.
| Configuración | Tabla de tarifas | Cantidad prevista | Cargo |
|---|---|---|---|
| ConfiguraciónTarifas base por token | Tabla de tarifasTarifa base | Cantidad prevista— | Cargo Entrada · Tokens de entrada · Estimación solo para comparar — / 1K tokens Salida · Tokens de salida · Estimación solo para comparar — / 1K tokens Entrada · Lectura de caché · Estimación solo para comparar — / 1K tokens Entrada · Escritura en caché · Estimación solo para comparar — / 1K tokens Entrada · Escritura en caché, 1 hora · Estimación solo para comparar — / 1K tokens |
| ConfiguraciónCosto estimado de generación | Tabla de tarifas— | Cantidad previstaestimación para una generación | Cargo Salida · Costo estimado de generación · Estimación solo para comparar $0.24576 estimación previa a la generación Esta estimación no es un cargo adicional ni una tarifa fija por la generación completada. |
Ailoot reserva un monto estimado antes de la solicitud. Tras obtener el resultado, liquida el cargo definitivo según el uso medido. En las respuestas en flujo, la liquidación usa el registro de uso final. Cómo funcionan la reserva y la liquidación →
Solicitudes de ejemplo
Ailoot Ultra · Imágenes
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
Recibir y guardar resultados
Ailoot Ultra · Imágenes
Descarga cada imagen recibida o guarda su contenido Base64
GET /v1/media/tasks/{task_id}GET /v1/media/assets/{asset_id}/contentGET /v1/media/assetsGET /v1/media/assets/{asset_id}
Otras consultas de contenido
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 todos los resultados completados
Guarda todas las imágenes completadas; descarga cada URL recibida o decodifica su contenido Base64.
Conserva la respuesta completa y los encabezados, todas las salidas reales, los identificadores originales devueltos y todos los campos de uso. Recupera la operación original sin volver a enviar la solicitud de creación.
Si es necesario revisar la respuesta original
Conserva el X-Client-Request-ID devuelto para la conciliación. Consulta únicamente los valores reales de task_id/asset_id devueltos o la biblioteca multimedia de tu propiedad; nunca construyas una URL de tarea a partir del ID de la operación ni vuelvas a enviar la solicitud de creación.
Campos de respuesta
| Campo | Tipo |
|---|---|
Campocreated | Tipo |
Campodata[].url | Tipo |
Campodata[].b64_json | Tipo |
Campousage | Tipo |
Alias
Alias del modelo
Ailoot gpt-image-2
Ailoot Ultra gpt-image-2, openai/gpt-image-2
Alias de rutas de métodos
/v1/images
ID de modelo relacionados
FAQ · OpenAI: GPT Image 2
- ¿Qué entradas y resultados están disponibles?
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- ¿Qué campos utiliza la solicitud?
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- ¿Qué límites se aplican?
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