🎨 Cómo Generar Imágenes con gpt-image-1 de OpenAI

Si alguna vez has querido convertir una historia o idea en una escena visual utilizando IA, el nuevo modelo gpt-image-1 de OpenAI facilita y potencia esa tarea más que nunca. Así es como lo usamos en nuestro propio proyecto, StoryGPT, para crear hermosas ilustraciones a partir de texto—e incluso mejorarlas con imágenes de personajes.

🖼️ Paso 1: Prepara tu Promoción

Al igual que los modelos de texto GPT, gpt-image-1 necesita un mensaje descriptivo. Por ejemplo:

Una acogedora cabaña en el bosque al atardecer, ventanas brillantes, rodeada de altos árboles.

Cuanto mejor sea tu mensaje, mejor será tu imagen. Agrega estado de ánimo, hora del día, estilo—lo que sea importante.

🧙‍♂️ Paso 2: Agregar Imágenes de Entidades (Opcional pero Genial)

Supongamos que ya tienes una imagen de un personaje (por ejemplo, un perro con un sombrero). Puedes cargarla como base64 y usarla como referencia visual.

Luego, puedes extenderla así:

"Agrega lo siguiente a la imagen: el perro tiene una bufanda roja y se sostiene sobre dos patas."

De esa manera, el modelo construye sobre la imagen original en lugar de empezar desde cero.

📦 Paso 3: Llama a la API

Hay dos modos:

🧠 Mensaje solo de texto:

client.images.generate(
    model="gpt-image-1",
    prompt="Un horizonte de ciudad futurista por la noche con coches voladores",
    size="1024x1024",
    quality="low",
    n=1
)

🖼️ Editar con imágenes de entrada (como agregar a los personajes):

httpx.post(
    "https://api.openai.com/v1/images/edits",
    headers={"Authorization": f"Bearer {API_KEY}"},
    data={
        "prompt": "Agrega ojos mágicos brillantes al personaje",
        "model": "gpt-image-1",
        "size": "1024x1024",
        "quality": "low"
    },
    files=[("image[]", ("dog.png", open("dog.png", "rb"), "image/png"))]
)

El resultado incluirá una imagen en base64 que puedes mostrar, almacenar o guardar en disco.

✅ ¡Eso es Todo!

Ahora puedes generar imágenes para tus personajes, configuraciones o escenas completas. En StoryGPT, usamos esto para dar vida a las historias generadas—personaje por personaje, página por página.

¡Pruébalo tú mismo y dale una cara a tus historias!

🧪 Ejemplo Completo de Trabajo – Generación de Imágenes con gpt-image-1

Este script requiere:

  • Paquete openai (pip install openai)
  • httpx para enviar cargas de imágenes multipartes (pip install httpx)
  • Una clave de API de OpenAI en tu entorno como OPENAI_API_KEY
import os
import base64
import httpx
from openai import OpenAI

## Asegúrate de que esto esté configurado en tu entorno
OPENAI_API_KEY = os.environ["OPENAI_API_KEY"]

## Generación simple de imagen usando solo un mensaje de texto
def generate_image_from_prompt(prompt: str):
    client = OpenAI()
    response = client.images.generate(
        model="gpt-image-1",
        prompt=prompt,
        size="1024x1024",
        quality="low",
        n=1,
    )
    image_b64 = response.data[0].b64_json
    save_image(image_b64, "image_text_only.png")


## Generación de imagen usando una imagen base64 cargada y un mensaje mejorado
def generate_image_with_entity(image_path: str, prompt: str):
    with open(image_path, "rb") as f:
        image_bytes = f.read()

    files = [
        ("image[]", (os.path.basename(image_path), image_bytes, "image/png"))
    ]

    data = {
        "prompt": prompt,
        "model": "gpt-image-1",
        "size": "1024x1024",
        "quality": "low",
    }

    headers = {
        "Authorization": f"Bearer {OPENAI_API_KEY}",
    }

    response = httpx.post(
        "https://api.openai.com/v1/images/edits",
        headers=headers,
        data=data,
        files=files,
        timeout=60,
    )

    if response.status_code != 200:
        raise Exception(f"La generación de imágenes falló: {response.text}")

    image_b64 = response.json()["data"][0]["b64_json"]
    save_image(image_b64, "image_with_entity.png")


def save_image(image_b64: str, filename: str):
    os.makedirs("out_images", exist_ok=True)
    path = os.path.join("out_images", filename)
    with open(path, "wb") as f:
        f.write(base64.b64decode(image_b64))
    print(f"✅ Imagen guardada en: {path}")


if __name__ == "__main__":
    # Modo 1: Generar a partir de un mensaje
    print("🔮 Generando solo a partir del mensaje...")
    generate_image_from_prompt("Un castillo de cuento de hadas en una isla flotante bajo un cielo púrpura")

    # Modo 2: Generar a partir de un mensaje + imagen de entidad
    print("🖼️ Generando con referencia de entidad...")
    generate_image_with_entity(
        image_path="dog.png",  # reemplaza con tu imagen real
        prompt="Agrega una bufanda roja y un monóculo al perro"
    )

🧠 Resumen

  • generate_image_from_prompt(...) → solo necesita texto
  • generate_image_with_entity(...) → incluye tu personaje personalizado o imagen de referencia
  • Los resultados se guardan en la carpeta out_images/