🎨 Como Gerar Imagens com gpt-image-1 da OpenAI

Se você já quis transformar uma história ou ideia em uma cena visual usando IA, o novo modelo gpt-image-1 da OpenAI torna isso mais fácil e poderoso do que nunca. Aqui está como o usamos em nosso próprio projeto, StoryGPT, para criar belas ilustrações a partir de texto—e até mesmo aprimorá-las com imagens de personagens.

🖼️ Passo 1: Prepare Seu Prompt

Assim como os modelos de texto GPT, o gpt-image-1 precisa de um prompt descritivo. Por exemplo:

Uma aconchegante cabana na floresta ao pôr do sol, janelas iluminadas, cercada por árvores altas.

Quanto melhor o seu prompt, melhor será sua imagem. Adicione clima, hora do dia, estilo—o que for importante.

🧙‍♂️ Passo 2: Adicione Imagens de Entidades (Opcional, mas Incrível)

Vamos dizer que você já tem uma imagem de personagem (por exemplo, um cachorro com um chapéu). Você pode carregá-la como base64 e usá-la como uma referência visual.

Em seguida, você pode estendê-la assim:

"Adicione o seguinte à imagem: o cachorro tem um lenço vermelho e está em pé sobre duas patas."

Dessa forma, o modelo constrói em cima da imagem original, em vez de começar do zero.

📦 Passo 3: Chame a API

Há dois modos:

🧠 Prompt apenas de texto:

client.images.generate(
    model="gpt-image-1",
    prompt="Um horizonte de cidade futurista à noite com carros voadores",
    size="1024x1024",
    quality="low",
    n=1
)

🖼️ Edição com entradas de imagens (como adicionar a personagens):

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

O resultado incluirá uma imagem base64 que você pode exibir, armazenar ou salvar no disco.

✅ É Isso!

Agora você pode gerar visuais para seus personagens, cenários ou cenas inteiras. No StoryGPT, usamos isso para dar vida a contos gerados—personagem por personagem, página por página.

Experimente você mesmo e dê um rosto às suas histórias!

🧪 Exemplo Completo em Funcionamento – Geração de Imagens com gpt-image-1

Este script requer:

  • Pacote openai (pip install openai)
  • httpx para enviar uploads de imagens multipart (pip install httpx)
  • Uma chave de API da OpenAI em seu ambiente como OPENAI_API_KEY
import os
import base64
import httpx
from openai import OpenAI

## Certifique-se de que isso esteja definido em seu ambiente
OPENAI_API_KEY = os.environ["OPENAI_API_KEY"]

## Geração simples de imagem usando apenas um prompt 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")


## Geração de imagem usando uma imagem base64 carregada e um prompt aprimorado
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"A geração da imagem falhou: {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"✅ Imagem salva em: {path}")


if __name__ == "__main__":
    # Modo 1: Gerar a partir de um prompt
    print("🔮 Gerando apenas a partir do prompt...")
    generate_image_from_prompt("Um castelo de conto de fadas em uma ilha flutuante sob um céu roxo")

    # Modo 2: Gerar a partir de um prompt + imagem de entidade
    print("🖼️ Gerando com referência de entidade...")
    generate_image_with_entity(
        image_path="dog.png",  # substitua pela sua imagem real
        prompt="Adicione um lenço vermelho e um monóculo ao cachorro"
    )

🧠 Resumo

  • generate_image_from_prompt(...) → precisa apenas de texto
  • generate_image_with_entity(...) → inclui sua imagem de personagem ou referência personalizada
  • Resultados são salvos na pasta out_images/