For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
Navegación principal
Theme

Generación de imágenes

Aprende a generar o editar imágenes.

Descripción general

La API te permite generar y editar imágenes a partir de prompts de texto con gpt-image-2.5-sunburst y gpt-image-2.5-flare. Elige Sunburst para flujos de trabajo en los que la precisión al editar sea la prioridad, y Flare para generar imágenes de alta calidad con rapidez en el día a día. Puedes acceder a las funciones de generación de imágenes mediante dos API:

API de imágenes

La API de imágenes ofrece dos puntos de acceso con funciones distintas:

API de respuestas

La API de respuestas te permite generar imágenes como parte de una conversación o de un flujo de varios pasos. Ofrece la generación de imágenes como herramienta integrada y admite imágenes de entrada y de salida dentro del contexto.

Además de las funciones de la API de imágenes, ofrece las siguientes:

  • Edición en varios turnos: edita imágenes con alta fidelidad mediante prompts sucesivos.
  • Entradas flexibles: además de bytes, acepta identificadores de archivos de imagen como entradas.

Para saber qué modelos principales pueden llamar a la herramienta de generación de imágenes, consulta los modelos compatibles.

Elegir la API adecuada

  • Si solo necesitas generar o editar una imagen a partir de un único prompt, la API de imágenes es la mejor opción.
  • Si quieres crear experiencias conversacionales en las que se puedan editar imágenes con GPT Image, elige la API de respuestas.

Con la API de imágenes, establece model directamente en gpt-image-2.5-sunburst o gpt-image-2.5-flare. Con la API de respuestas, selecciona un modelo principal compatible en el nivel superior y especifica gpt-image-2.5-sunburst o gpt-image-2.5-flare en el campo model de la herramienta de generación de imágenes.

Ambas API te permiten personalizar la salida ajustando la calidad, el tamaño, el formato y la compresión.

Para garantizar el uso responsable de estos modelos, es posible que debas completar la verificación de tu organización para la API desde la consola de desarrollador antes de usar los modelos GPT Image.

GPT-Image-2.6

GPT-Image-2.6 incluye Sunburst para trabajos visuales que requieren mucho detalle y Flare para probar variaciones rápidamente. Con ambos modelos, la API de imágenes te permite ajustar la complejidad, guiar la edición con anotaciones y generar archivos SVG o GIF animados. Los ejemplos que aparecen más adelante usan GPT-Image-2.5.

Ajustar la complejidad de la imagen

Usa el campo complexity de la solicitud para controlar cuánto planifica el modelo antes de renderizar la imagen. Un nivel bajo de complejidad puede ser adecuado para cambios puntuales, como modificar un fondo o un letrero. Un nivel más alto puede ayudar cuando hay mucho texto, la composición es compleja o importa la relación entre los objetos. Una mayor complejidad también puede aumentar la latencia e introducir cambios no deseados, así que compara los resultados para tu tarea.

Sunburst y Flare admiten los niveles de complejidad low, medium y high. Si omites complexity, ambos modelos usan high. El ajuste quality controla por separado la calidad del renderizado.

Ajustar la complejidad no tiene un cargo adicional.

Sunburst generó estas escenas de fútbol con estilo de papel recortado a partir del mismo prompt y con calidad media. Compara el trofeo, los uniformes y la ubicación del letrero “CHAMPIONS” en los distintos niveles de complejidad.

Complejidad baja

Complejidad media

Complejidad alta

Identificadores de seguridad

Si tu aplicación tiene usuarios finales individuales, incluye un identificador estable que proteja su privacidad en el campo safety_identifier de cada solicitud de generación de imágenes o de edición de imágenes. En lugar de enviar datos que identifiquen al usuario, calcula el hash de su nombre de usuario o dirección de correo electrónico. El identificador debe tener como máximo 128 caracteres. Se recomienda usar identificadores de seguridad, aunque son opcionales.

El parámetro user de la API de imágenes está obsoleto. Envía el mismo identificador en safety_identifier. Las solicitudes existentes que usan user siguen siendo compatibles. Si safety_identifier tiene un valor no vacío, tiene prioridad sobre user. Si omites safety_identifier, le asignas null o envías una cadena vacía, la API usa user cuando está disponible.

Una taza de café beige sobre una mesa de madera

Generar imágenes

Puedes usar el punto de acceso de generación de imágenes para crear imágenes a partir de prompts de texto, o la herramienta de generación de imágenes de la API de respuestas para generarlas como parte de una conversación.

Para obtener más información sobre cómo personalizar el tamaño, la calidad, el formato y la compresión, consulta la sección Personalizar la imagen de salida más adelante.

Puedes configurar el parámetro n para generar varias imágenes a la vez en una sola solicitud. De forma predeterminada, la API devuelve una sola imagen.

Generar una imagen
from openai import OpenAI
import base64

client = OpenAI()

prompt = """
A children's book drawing of a veterinarian using a stethoscope to
listen to the heartbeat of a baby otter.
"""

result = client.images.generate(model="gpt-image-2.5-sunburst", prompt=prompt)

image_base64 = result.data[0].b64_json
image_bytes = base64.b64decode(image_base64)

# Save the image to a file
with open("otter.png", "wb") as f:
    f.write(image_bytes)

Generación de imágenes en varios turnos

Con la API de respuestas, puedes crear conversaciones de varios turnos que incluyan generación de imágenes. Para hacerlo, incluye en el contexto los resultados de las llamadas de generación de imágenes (también basta con el ID de la imagen) o usa previous_response_id para indicar la respuesta anterior. Así puedes trabajar sobre una imagen en varios turnos, ajustar los prompts y aplicar nuevas instrucciones para modificar el resultado visual a medida que avanza la conversación.

Con la herramienta de generación de imágenes de la API de respuestas, los modelos compatibles con la herramienta pueden decidir si generan una imagen nueva o editan una que ya está en la conversación. El parámetro opcional action controla este comportamiento. Usa action: "auto" para que el modelo decida, action: "generate" para crear siempre una imagen nueva o action: "edit" para forzar la edición cuando el contexto incluya una imagen.

Forzar la creación de una imagen con action
from openai import OpenAI
import base64

client = OpenAI()

response = client.responses.create(
    model="gpt-6-astra",
    input="Generate an image of gray tabby cat hugging an otter with an orange scarf",
    tools=[
        {"type": "image_generation", "model": "gpt-image-2.5-sunburst", "action": "generate"}
    ],
)

# Save the image to a file
image_data = [
    output.result
    for output in response.output
    if output.type == "image_generation_call"
]

if image_data:
    image_base64 = image_data[0]
    with open("otter.png", "wb") as f:
        f.write(base64.b64decode(image_base64))

Si fuerzas edit sin incluir una imagen en el contexto, la llamada devolverá un error. Deja action en auto para que el modelo decida cuándo generar una imagen y cuándo editarla.

Generación de imágenes en varios turnos
from openai import OpenAI
import base64

client = OpenAI()

response = client.responses.create(
    model="gpt-6-astra",
    input="Generate an image of gray tabby cat hugging an otter with an orange scarf",
    tools=[{"type": "image_generation", "model": "gpt-image-2.5-sunburst"}],
)

image_data = [
    output.result
    for output in response.output
    if output.type == "image_generation_call"
]

if image_data:
    image_base64 = image_data[0]

    with open("cat_and_otter.png", "wb") as f:
        f.write(base64.b64decode(image_base64))


# Follow up

response_fwup = client.responses.create(
    model="gpt-6-astra",
    previous_response_id=response.id,
    input="Now make it look realistic",
    tools=[{"type": "image_generation", "model": "gpt-image-2.5-sunburst"}],
)

image_data_fwup = [
    output.result
    for output in response_fwup.output
    if output.type == "image_generation_call"
]

if image_data_fwup:
    image_base64 = image_data_fwup[0]
    with open("cat_and_otter_realistic.png", "wb") as f:
        f.write(base64.b64decode(image_base64))

Resultado

“Genera una imagen de un gato gris atigrado que abraza a una nutria con una bufanda naranja”

Un gato y una nutria

“Ahora haz que se vea realista”

Un gato y una nutria

Transmisión en tiempo real

La API de respuestas y la API de imágenes admiten la transmisión en tiempo real durante la generación de imágenes. Puedes recibir imágenes parciales a medida que las API las generan para ofrecer una experiencia más interactiva.

Puedes ajustar el parámetro partial_images para recibir entre 0 y 3 imágenes parciales.

  • Si estableces partial_images en 0, solo recibirás la imagen final.
  • Si el valor es mayor que cero y la imagen final se genera antes, es posible que recibas menos imágenes parciales de las que solicitaste.
Transmitir una imagen en tiempo real
from openai import OpenAI
import base64

client = OpenAI()


def save_base64_image(filename, image_base64):
    image_bytes = base64.b64decode(image_base64)
    with open(filename, "wb") as f:
        f.write(image_bytes)


stream = client.responses.create(
    model="gpt-6-astra",
    input="Draw a gorgeous image of a river made of white owl feathers, snaking its way through a serene winter landscape",
    stream=True,
    tools=[
        {"type": "image_generation", "model": "gpt-image-2.5-sunburst", "partial_images": 2}
    ],
)

for event in stream:
    if event.type == "response.image_generation_call.partial_image":
        idx = event.partial_image_index
        save_base64_image(f"river-partial-{idx}.png", event.partial_image_b64)
    elif event.type == "response.completed":
        image_data = [
            output.result
            for output in event.response.output
            if output.type == "image_generation_call"
        ]

        if image_data:
            save_base64_image("river-final.png", image_data[0])

Resultado

Imagen parcial 1 Imagen parcial 2 Imagen final
Primera imagen parcial Segunda imagen parcial Imagen final

Prompt: dibuja una hermosa imagen de un río de plumas blancas de búho que serpentea por un apacible paisaje invernal.

Prompt revisado

Cuando usas la herramienta de generación de imágenes de la API de respuestas, el modelo principal (por ejemplo, gpt-5.5) revisa automáticamente tu prompt para mejorar los resultados.

Puedes consultar el prompt revisado en el campo revised_prompt de la llamada de generación de imágenes:

Respuesta con el prompt revisado
{
  "id": "ig_123",
  "type": "image_generation_call",
  "status": "completed",
  "revised_prompt": "A gray tabby cat hugging an otter. The otter is wearing an orange scarf. Both animals are cute and friendly, depicted in a warm, heartwarming style.",
  "result": "..."
}

Editar imágenes

El punto de acceso de edición de imágenes te permite:

  • Editar imágenes existentes.
  • Generar imágenes nuevas usando otras imágenes como referencia.
  • Editar partes de una imagen. Para hacerlo, sube la imagen junto con una máscara que indique las áreas que se deben reemplazar.

Crear una imagen a partir de imágenes de referencia

Puedes usar una o más imágenes como referencia para generar una imagen nueva.

En este ejemplo, usaremos cuatro imágenes de entrada para generar una imagen de una canasta de regalo que contenga los artículos que aparecen en las imágenes de referencia.

Loción corporalJabónKit de inciensoBomba de baño
Canasta de regalo con productos de baño

Con la API de respuestas, puedes enviar imágenes de entrada de tres maneras:

  • mediante una URL completa
  • mediante una URL de datos que contiene la imagen codificada en Base64
  • mediante el ID de un archivo creado con la API de archivos

Crea un archivo

Crea un archivo
from openai import OpenAI

client = OpenAI()


def create_file(file_path):
    with open(file_path, "rb") as file_content:
        result = client.files.create(
            file=file_content,
            purpose="vision",
        )
        return result.id

Crea una imagen codificada en Base64

Crea una imagen codificada en Base64
import base64


def encode_image(file_path):
    with open(file_path, "rb") as f:
        base64_image = base64.b64encode(f.read()).decode("utf-8")
    return base64_image
Edita una imagen
from openai import OpenAI
import base64

client = OpenAI()


def encode_image(file_path):
    with open(file_path, "rb") as image_file:
        return base64.b64encode(image_file.read()).decode("utf-8")


def create_file(file_path):
    with open(file_path, "rb") as file_content:
        result = client.files.create(file=file_content, purpose="vision")
    return result.id


prompt = """Generate a photorealistic image of a gift basket on a white background
labeled 'Relax & Unwind' with a ribbon and handwriting-like font,
containing all the items in the reference pictures."""

base64_image1 = encode_image("body-lotion.png")
base64_image2 = encode_image("soap.png")
file_id1 = create_file("bath-bomb.png")
file_id2 = create_file("incense-kit.png")

response = client.responses.create(
    model="gpt-6-astra",
    input=[
        {
            "role": "user",
            "content": [
                {"type": "input_text", "text": prompt},
                {
                    "type": "input_image",
                    "image_url": f"data:image/png;base64,{base64_image1}",
                },
                {
                    "type": "input_image",
                    "image_url": f"data:image/png;base64,{base64_image2}",
                },
                {
                    "type": "input_image",
                    "file_id": file_id1,
                },
                {
                    "type": "input_image",
                    "file_id": file_id2,
                },
            ],
        }
    ],
    tools=[{"type": "image_generation", "model": "gpt-image-2.5-sunburst"}],
)

image_generation_calls = [
    output for output in response.output if output.type == "image_generation_call"
]

image_data = [output.result for output in image_generation_calls]

if image_data:
    image_base64 = image_data[0]
    with open("gift-basket.png", "wb") as f:
        f.write(base64.b64decode(image_base64))
else:
    print(response.output_text)

Guiar la edición con anotaciones

Usa el punto de acceso POST /v1/images/edits de la API de imágenes para guiar la edición con anotaciones en los modelos compatibles de GPT-Image-2.5 y GPT-Image-2.6. Para editar una zona específica con la API de respuestas, usa una máscara. Indica en una capa de anotaciones dónde quieres hacer el cambio y describe el cambio en prompt.

Por ejemplo, descarga la foto de la cocina y la capa transparente en el mismo directorio. En la capa transparente, un círculo señala el florero que se va a cambiar de color.

Editar el florero marcado con un círculo con la API de imágenes
import base64
from pathlib import Path

from openai import OpenAI

client = OpenAI()
overlay = Path("markup-vase-overlay-gpt-image-2-6.png")
with open("kitchen.webp", "rb") as image, overlay.open("rb") as markup:
    result = client.images.edit(
        model="gpt-image-2.6-flare",
        image=("kitchen.webp", image, "image/webp"),
        markup=(overlay.name, markup, "image/png"),
        quality="medium",
        prompt=(
            "Recolor the striped vase inside the red circle to solid cobalt blue ceramic. "
            "Keep its shape, the dried stems, and the rest of the kitchen unchanged. "
            "Remove the red circle from the finished photo."
        ),
    )

Path("vase.png").write_bytes(base64.b64decode(result.data[0].b64_json))

Foto con la capa superpuesta

Resultado de Flare

  1. Usa la imagen original como primera imagen de entrada.
  2. Crea un archivo PNG transparente por separado con tus círculos, bocetos u otras anotaciones. Una vez aplicada la orientación, la capa de anotaciones y la primera imagen deben tener el mismo ancho y la misma altura. El PNG debe contener píxeles transparentes. No fusiones la capa con la imagen original.
  3. Envía la capa de anotaciones en markup. Las solicitudes multiparte permiten subir un archivo. Las solicitudes JSON aceptan un objeto que debe contener exactamente uno de estos dos campos: image_url o file_id. El campo image_url admite una URL HTTPS o una URL de datos en base64. Las solicitudes de edición en JSON usan images para el arreglo de imágenes de entrada.
  4. Describe el cambio que quieres hacer y los detalles que quieres conservar. Revisa el resultado antes de usarlo.

Las anotaciones se aplican a la primera imagen de entrada. Las imágenes adicionales sirven como referencia. Tanto la primera imagen de entrada como la capa de anotaciones pueden contener hasta 16 777 216 píxeles cada una. Además, el archivo de anotaciones no puede superar los 50 MB. No combines markup con mask.

Editar una imagen con una máscara

Puedes usar una máscara para indicar qué parte de la imagen quieres editar.

Cuando usas una máscara con GPT Image, el modelo recibe instrucciones adicionales que lo orientan durante la edición.

En GPT Image, la edición con máscara se basa por completo en prompts. El modelo usa la máscara como guía, pero es posible que no siga su contorno con total precisión.

Si proporcionas varias imágenes de entrada, la máscara se aplica a la primera.

Editar una imagen con una máscara
from openai import OpenAI
import base64

client = OpenAI()


def create_file(file_path):
    with open(file_path, "rb") as file_content:
        result = client.files.create(file=file_content, purpose="vision")
    return result.id


fileId = create_file("sunlit_lounge.png")
maskId = create_file("mask.png")

response = client.responses.create(
    model="gpt-6-astra",
    input=[
        {
            "role": "user",
            "content": [
                {
                    "type": "input_text",
                    "text": "generate an image of the same sunlit indoor lounge area with a pool but the pool should contain a flamingo",
                },
                {
                    "type": "input_image",
                    "file_id": fileId,
                },
            ],
        },
    ],
    tools=[
        {
            "type": "image_generation",
            "model": "gpt-image-2.5-sunburst",
            "quality": "high",
            "input_image_mask": {
                "file_id": maskId,
            },
        },
    ],
)

image_data = [
    output.result
    for output in response.output
    if output.type == "image_generation_call"
]

if image_data:
    image_base64 = image_data[0]
    with open("lounge.png", "wb") as f:
        f.write(base64.b64decode(image_base64))
Imagen Máscara Resultado
Una sala rosa con una piscina Una máscara sobre parte de la piscina La piscina original con un flamenco inflable en el lugar de la máscara

Prompt: una sala de descanso interior iluminada por el sol, con un flamenco en la piscina.

Requisitos de la máscara

La imagen que quieres editar y la máscara deben tener el mismo formato y las mismas dimensiones. Cada archivo debe ocupar menos de 50 MB.

La imagen de la máscara también debe tener un canal alfa. Si creas la máscara con una herramienta de edición de imágenes, asegúrate de guardarla con un canal alfa.

Puedes agregar un canal alfa a una imagen en blanco y negro mediante código.

Agregar un canal alfa a una máscara en blanco y negro
from PIL import Image
from io import BytesIO

# 1. Load your black & white mask as a grayscale image
mask = Image.open("mask.png").convert("L")

# 2. Convert it to RGBA so it has space for an alpha channel
mask_rgba = mask.convert("RGBA")

# 3. Then use the mask itself to fill that alpha channel
mask_rgba.putalpha(mask)

# 4. Convert the mask into bytes
buf = BytesIO()
mask_rgba.save(buf, format="PNG")
mask_bytes = buf.getvalue()

# 5. Save the resulting file
img_path_mask_alpha = "mask_alpha.png"
with open(img_path_mask_alpha, "wb") as f:
    f.write(mask_bytes)

Personalizar la imagen de salida

Puedes configurar las siguientes opciones de salida:

  • Tamaño: dimensiones de la imagen (por ejemplo, 1024x1024, 1024x1536).
  • Calidad: calidad de renderizado (por ejemplo, low, medium, high).
  • Formato: formato del archivo de salida.
  • Compresión: nivel de compresión (del 0 al 100 %) para los formatos JPEG y WebP.
  • Fondo: transparente, opaco o automático.

size, quality y background admiten la opción auto, que permite al modelo seleccionar automáticamente el valor más adecuado según el prompt.

Opciones de tamaño y calidad

gpt-image-2.5-sunburst y gpt-image-2.5-flare incorporan los niveles de calidad xhigh y max. Ambos modelos usan auto de forma predeterminada. Los modelos GPT Image anteriores admiten niveles de calidad de hasta high.

Ajuste Opciones
Tamaños recomendados 1024x1024 (cuadrado), 1536x1024 (horizontal), 1024x1536 (vertical)
Calidad low, medium, high, xhigh, max, auto

Ambos modelos también admiten dimensiones personalizadas expresadas como cadenas con el formato WIDTHxHEIGHT, por ejemplo, 1536x864. El ancho y la altura deben ser múltiplos de 16, la relación de aspecto debe estar entre 1:3 y 3:1, y ningún lado puede superar los 3840 píxeles. El total de píxeles debe estar entre 655 360 y 8 294 400 (4K). Las resoluciones superiores a 2560x1440 son experimentales.

Para obtener un fondo transparente con cualquiera de los dos modelos, configura background: "transparent" y usa output_format: "png" o "webp".

Usa quality: "low" para generar borradores rápidamente. Para las imágenes finales, compara niveles de calidad más altos hasta encontrar el equilibrio adecuado entre detalle, latencia y costo.

Formato de salida

La API de imágenes devuelve los datos de imagen codificados en base64. El formato predeterminado es png, pero también puedes solicitar jpeg o webp.

Si usas jpeg o webp, también puedes especificar el parámetro output_compression para controlar el nivel de compresión (del 0 al 100 %). Por ejemplo, output_compression=50 comprime la imagen en un 50 %.

El formato jpeg es más rápido que png, así que dale prioridad si necesitas reducir la latencia.

Generar imágenes en formato SVG

Configura output_format: "svg" en POST /v1/images/generations. Usa SVG para gráficos cuyos trazados, formas y colores debas poder editar, como íconos e ilustraciones.

Establece n en 1. La salida SVG no admite la transmisión en tiempo real, las imágenes parciales ni output_compression. El punto de acceso de edición de imágenes no admite el formato SVG como salida ni acepta archivos SVG como imágenes de mapa de bits de entrada.

La API crea una imagen de referencia y la usa para generar el SVG. El ajuste quality controla la calidad de esa imagen de referencia. Decodifica data[0].b64_json en base64 y guarda los bytes resultantes en un archivo XML con codificación UTF-8 y extensión .svg. El documento que devuelve la API contiene gráficos vectoriales estáticos. No admite scripts, recursos externos ni imágenes de mapa de bits incrustadas.

Flare y Sunburst generaron estos logotipos en formato SVG a partir del mismo prompt para diseñar el logotipo de la panadería Field & Flour.

GPT-Image-2.6 Flare

GPT-Image-2.6 Sunburst

Generar GIF animados

Configura output_format: "gif" en POST /v1/images/generations o POST /v1/images/edits. Describe en el prompt qué quieres animar, cómo debe moverse y cómo debe repetirse la animación. Si quieres guiar la animación con imágenes de referencia estáticas, envíalas al punto de acceso de edición de imágenes.

Usa estos campos de la solicitud para configurar la salida GIF en cualquiera de los dos puntos de acceso:

Campo Valores Valor predeterminado
frame_count De 2 a 16 fotogramas 9
frame_duration_ms De 20 a 2000 milisegundos por fotograma, redondeados al múltiplo de 10 ms más cercano 200
size auto o WIDTHxHEIGHT con dimensiones positivas y múltiplos de 16 tanto para el ancho como para la altura auto

size indica las dimensiones finales de cada fotograma. La cantidad de fotogramas, sus dimensiones y la cantidad de animaciones deben ajustarse a los límites de tamaño del modelo y al total de píxeles permitido por solicitud. Si la solicitud supera estos límites, reduce frame_count, las dimensiones de los fotogramas o n. Usa auto para que la API elija un tamaño de fotograma dentro de los límites del modelo.

La respuesta contiene la animación terminada. Decodifica el valor b64_json de cada resultado en base64 y guarda los bytes en un archivo con extensión .gif. La salida GIF no admite la transmisión en tiempo real, las imágenes parciales ni un valor personalizado de output_compression. Usa frame_count y frame_duration_ms solo con la salida GIF.

Sunburst generó esta animación del farol con frame_count=9 y frame_duration_ms=200. El mono vuelve a su postura inicial al cabo de 1,8 segundos.

Limitaciones

Los modelos GPT Image ofrecen funciones potentes y versátiles de generación de imágenes, aunque todavía tienen algunas limitaciones que debes tener en cuenta:

  • Latencia: los prompts complejos pueden tardar hasta 2 minutos en procesarse.
  • Renderizado de texto: aunque el modelo ha mejorado considerablemente, todavía puede tener dificultades para colocar el texto con precisión y lograr que sea legible.
  • Coherencia visual: el modelo puede producir imágenes coherentes entre sí, pero a veces le cuesta mantener la apariencia de personajes recurrentes o elementos de marca en imágenes generadas en distintas ocasiones.
  • Control de la composición: aunque el modelo sigue mejor las instrucciones, puede tener dificultades para colocar elementos con precisión en composiciones estructuradas o que requieren una distribución específica.

Moderación de contenido

Todos los prompts y las imágenes generadas se filtran de acuerdo con nuestra política de contenido.

Al generar imágenes con los modelos GPT Image, puedes ajustar el rigor de la moderación con el parámetro moderation. Este parámetro admite dos valores:

  • auto (predeterminado): filtrado estándar que busca limitar la creación de ciertas categorías de contenido que podría ser inapropiado para algunas edades.
  • low: filtrado menos restrictivo.

Manejar solicitudes bloqueadas y otros errores

Maneja los errores de generación de imágenes como cualquier otro error de la API. Comprueba el código de estado HTTP o el tipo de excepción del SDK, registra el ID de la solicitud y consulta la guía de códigos de error para errores de autenticación, de cuota, de límite de solicitudes y del servidor. Si el error es temporal y se debe al límite de solicitudes o al servidor, vuelve a enviar la solicitud con intervalos de espera cada vez mayores. No reintentes automáticamente las solicitudes que fallan por errores de cuota o por errores del usuario en la generación de imágenes que requieren modificar la solicitud.

El usuario puede corregir algunos errores de generación de imágenes. En esos casos, la API puede devolver error.type = "image_generation_user_error". No reintentes la solicitud automáticamente sin modificar el prompt o las imágenes de entrada. Para manejar los errores mediante código, usa error.code como criterio estable para distinguirlos.

Cuando error.code = "moderation_blocked", el error también puede incluir el objeto opcional error.moderation_details:

{
  "error": {
    "type": "image_generation_user_error",
    "code": "moderation_blocked",
    "moderation_details": {
      "moderation_stage": "input",
      "categories": ["harassment"]
    }
  }
}

El objeto moderation_details proporciona información general para la depuración sin revelar las etiquetas ni las puntuaciones internas del clasificador.

moderation_stage puede tener los siguientes valores:

  • input: el bloqueo se originó en el prompt o en los datos de entrada de la solicitud.
  • output: el bloqueo se originó en una imagen generada o en una etapa posterior de moderación de la salida.
  • unknown: valor de respaldo que se usa en los pocos casos en que es difícil determinar el origen del bloqueo.

categories contiene etiquetas públicas que indican categorías generales. Por ejemplo, puedes encontrar valores como harassment, self-harm, sexual o violence.

En la mayoría de las aplicaciones, conviene que el mensaje principal para el usuario final sea genérico. Usa moderation_details en los registros para desarrolladores, en los flujos de trabajo de soporte y en los análisis, así como para ofrecer sugerencias breves sobre cómo corregir el problema.

Manejar errores de generación de imágenes por bloqueos de moderación
import OpenAI from "openai";

const openai = new OpenAI();

try {
  // The same error handling pattern applies to image generation requests,
  // image edits, and Responses API tool calls that generate images.
  await openai.images.generate({
    model: "gpt-image-2.5-sunburst",
    prompt: "Create a poster humiliating my coworker with insulting captions",
  });
} catch (error) {
  if (error?.code !== "moderation_blocked") {
    throw error;
  }

  const moderationDetails = error.error?.moderation_details;
  const categories = moderationDetails?.categories ?? [];
  const stage = moderationDetails?.moderation_stage;

  let hint =
    "This request could not be completed because it did not meet safety requirements.";

  if (categories.includes("harassment")) {
    hint =
      "Try removing abusive or targeting language and focus on neutral visual details instead.";
  } else if (stage === "input") {
    hint =
      "Try revising the prompt or input images and submit the request again.";
  } else if (stage === "output") {
    hint =
      "The generated result was blocked by a safety check. Try changing the prompt and generating again.";
  }

  console.error("Image generation blocked", {
    request_id: error?.requestID,
    code: error?.code,
    moderation_details: moderationDetails,
  });

  console.log(hint);
}

Modelos compatibles

En la API de respuestas, gpt-5 y los modelos posteriores deberían admitir la herramienta de generación de imágenes. Consulta la página de detalles de tu modelo para confirmar si el modelo que quieres usar admite esta herramienta.

Costo y latencia

Costos de GPT-Image-2.6

La tarifa de salida de imágenes es de $30 por millón de tokens facturables. Usa la calculadora para estimar el costo de salida de una imagen.

Consulta los precios de generación de imágenes para conocer las tarifas de texto e imagen por millón de tokens.

Las ediciones guiadas por anotaciones tienen las mismas tarifas por token que las demás ediciones, sin cargos adicionales. Para la salida SVG, pagas la tarifa del modelo de imágenes por la imagen de referencia y la tarifa del modelo que escribe el SVG por los tokens que usa para producirlo. El total depende de la cantidad de tokens que use cada modelo.

Costos de GPT-Image-2.5

Las solicitudes a la API de respuestas incluyen el consumo de tokens del modelo principal, además del costo de generar las imágenes.

Los dos modelos GPT-Image-2.5 tienen las mismas tarifas por millón de tokens: $8 por tokens de imagen de entrada, $2 por tokens de imagen de entrada en caché, $30 por tokens de imagen de salida, $5 por tokens de texto de entrada y $1,25 por tokens de texto de entrada en caché. Consulta los precios.

Usa el campo usage de la respuesta para medir el consumo de tokens con tus prompts, tamaños y niveles de calidad. Aunque las tarifas por token sean iguales, el costo por imagen puede variar porque el consumo de tokens depende del modelo y del nivel de calidad. Para ver ejemplos de precios de modelos anteriores, consulta Modelos GPT Image anteriores.

Precios de las entradas en caché

En GPT-Image-2 y GPT-Image-2.5, las tarifas de entradas en caché solo se aplican a la herramienta de generación de imágenes de la API de respuestas. Las solicitudes directas a la API de imágenes, incluidas las que se envían a /v1/images/edits, quedan fuera de estas tarifas.

Las entradas en caché para la generación de imágenes se reflejan en la facturación, pero la API de respuestas no incluye en su salida el recuento de esos tokens. El campo usage de la respuesta no permite verificar estos aciertos de caché.

Calcular los costos

Selecciona un modelo, un nivel de calidad y un tamaño para estimar la cantidad de tokens de salida y el costo de la imagen de salida. Para los modelos Sunburst y Flare, tanto en GPT-Image-2.6 como en GPT-Image-2.5, las opciones de calidad son low, medium, high, xhigh y max. Para gpt-image-2, las opciones son low, medium y high. Los modelos pueden usar distintas cantidades de tokens con el mismo nivel de calidad, y el precio por token de imagen de salida es el mismo. Para esta estimación, especifica los valores de calidad y tamaño. Con auto, los valores dependen de la imagen generada.

Modelo
Calidad
Tokens de salida
823
Costo estimado por imagen generada
USD 0.02469

El costo por imagen se calcula con una tarifa de 30 USD por millón de tokens de salida de imagen. No incluye los tokens de entrada de texto e imagen ni la transmisión de imágenes parciales.

Costo de las imágenes parciales

Si quieres transmitir imágenes mientras se generan con el parámetro partial_images, cada imagen parcial consume 100 tokens de imagen de salida adicionales.

Modelos GPT Image anteriores

Los detalles que siguen corresponden a modelos anteriores y no se aplican a Sunburst ni a Flare. Para integraciones nuevas, usa GPT-Image-2.6 Sunburst o Flare.

Configuración de GPT-Image-2 y fidelidad de las imágenes de entrada

gpt-image-2 acepta en el parámetro size cualquier resolución que cumpla las condiciones que se indican a continuación. Por lo general, las imágenes cuadradas se generan más rápido.

Tamaños habituales
  • 1024x1024 (cuadrado)

  • 1536x1024 (horizontal)

  • 1024x1536 (vertical)

  • 2048x2048 (cuadrado, 2K)

  • 2048x1152 (horizontal, 2K)

  • 3840x2160 (horizontal, 4K)

  • 2160x3840 (vertical, 4K)

  • auto (predeterminado)

Restricciones de tamaño
  • La longitud de cada lado debe ser menor o igual que 3840px

  • Ambos lados deben medir un múltiplo de 16px

  • La relación entre el lado largo y el corto no debe superar 3:1

  • El total de píxeles debe ser de al menos 655,360 y como máximo 8,294,400

Opciones de calidad
  • low
  • medium
  • high
  • auto (predeterminado)

Fidelidad de las imágenes de entrada

El parámetro input_fidelity controla en qué medida el modelo conserva los detalles de las imágenes de entrada al editarlas o al usar imágenes de referencia. Con gpt-image-2, omite este parámetro. La API no permite cambiarlo porque el modelo procesa automáticamente todas las imágenes de entrada con alta fidelidad.

Como gpt-image-2 siempre procesa las imágenes de entrada con alta fidelidad, las solicitudes de edición que incluyen imágenes de referencia pueden consumir más tokens de imagen de entrada. Para saber cómo influye esto en el costo, consulta la sección sobre costos de visión.

Ejemplos de precios de modelos anteriores

Modelos anteriores a gpt-image-2

Para generar una imagen, los modelos GPT Image anteriores a gpt-image-2 primero producen tokens de imagen especializados. Tanto la latencia como el costo final son proporcionales a la cantidad de tokens necesarios para renderizar la imagen. A mayor tamaño o calidad, mayor cantidad de tokens.

La cantidad de tokens generados depende de las dimensiones y de la calidad de la imagen:

Calidad Cuadrada (1024×1024) Vertical (1024×1536) Horizontal (1536×1024)
Baja 272 tokens 408 tokens 400 tokens
Media 1056 tokens 1584 tokens 1568 tokens
Alta 4160 tokens 6240 tokens 6208 tokens

También debes tener en cuenta los tokens de entrada: los tokens de texto del prompt y, si editas imágenes, los tokens de imagen de las imágenes de entrada. Como gpt-image-2 siempre procesa las imágenes de entrada con alta fidelidad, las solicitudes de edición que incluyen imágenes de referencia pueden consumir más tokens de entrada.

Consulta la página de precios para conocer las tarifas vigentes de los tokens de texto e imagen. Usa la sección Calcular los costos para estimar el costo de las imágenes de salida.

El costo final es la suma de los costos de:

  • Los tokens de texto de entrada.
  • Los tokens de imagen de entrada, si usas el punto de acceso de edición.
  • Los tokens de imagen de salida.

Costos históricos de las imágenes de salida

gpt-image-2 admite miles de resoluciones válidas. Para facilitar la comparación, la tabla muestra los mismos tamaños que se usaban con los modelos GPT Image anteriores. También incluye las tarifas históricas de salida por imagen de GPT-Image-1.5, GPT-Image-1 y GPT-Image-1 Mini. Al estimar el costo total de una solicitud, recuerda incluir los tokens de texto e imagen de entrada.

gpt-image-1 dejó de estar disponible el 23 de octubre de 2026. Sus precios se conservan en la tabla para facilitar las comparaciones históricas. Consulta el aviso de retirada para conocer los modelos de reemplazo.

Con el mismo nivel de calidad, una resolución mayor de formato no cuadrado a veces produce menos tokens de salida que una resolución menor o de formato cuadrado.

Modelo

Calidad

1024 × 10241024 × 15361536 × 1024

GPT-Image-2


Hay más tamaños disponibles
Baja$0,006$0,005$0,005
Media$0,053$0,041$0,041
Alta$0,211$0,165$0,165

GPT-Image-1.5

Baja$0,009$0,013$0,013
Media$0,034$0,05$0,05
Alta$0,133$0,2$0,2

GPT-Image-1

Baja$0,011$0,016$0,016
Media$0,042$0,063$0,063
Alta$0,167$0,25$0,25

GPT-Image-1 Mini

Baja$0,005$0,006$0,006
Media$0,011$0,015$0,015
Alta$0,036$0,052$0,052