Generare Immagini con gpt-image-1 di OpenAI

Generare Immagini con gpt-image-1 di OpenAI

🎨 Come Generare Immagini con gpt-image-1 di OpenAI

Se hai mai voluto trasformare una storia o un'idea in una scena visiva utilizzando l'IA, il nuovo modello gpt-image-1 di OpenAI rende tutto ciò più semplice e potente che mai. Ecco come lo utilizziamo nel nostro progetto, StoryGPT, per creare belle illustrazioni a partire dal testo—e persino migliorarle con immagini di personaggi.

🖼️ Passo 1: Prepara il Tuo Prompt

Proprio come i modelli di testo GPT, gpt-image-1 ha bisogno di un prompt descrittivo. Ad esempio:

Una accogliente casetta nel bosco al tramonto, finestre illuminate, circondata da alberi alti.

Più il tuo prompt è dettagliato, migliore sarà la tua immagine. Aggiungi l'atmosfera, il momento della giornata, lo stile—qualunque cosa sia importante.

🧙‍♂️ Passo 2: Aggiungi Immagini di Entità (Opzionale ma Fantastico)

Diciamo che hai già un'immagine di un personaggio (ad esempio, un cane con un cappello). Puoi caricarla come base64 e usarla come riferimento visivo.

Poi, puoi estenderla in questo modo:

"Aggiungi quanto segue all'immagine: il cane ha una sciarpa rossa e si regge su due zampe."

In questo modo, il modello costruisce sull'immagine originale piuttosto che partire da zero.

📦 Passo 3: Chiama l'API

Ci sono due modalità:

🧠 Prompt solo testo:

client.images.generate(
    model="gpt-image-1",
    prompt="Un skyline di una città futuristica di notte con auto volanti",
    size="1024x1024",
    quality="low",
    n=1
)

🖼️ Modifica con input di immagine (come aggiungere a personaggi):

httpx.post(
    "https://api.openai.com/v1/images/edits",
    headers={"Authorization": f"Bearer {API_KEY}"},
    data={
        "prompt": "Aggiungi occhi magici luminosi al personaggio",
        "model": "gpt-image-1",
        "size": "1024x1024",
        "quality": "low"
    },
    files=[("image[]", ("dog.png", open("dog.png", "rb"), "image/png"))]
)

Il risultato includerà un'immagine in base64 che puoi visualizzare, archiviare o salvare su disco.

✅ Ecco Fatto!

Ora puoi generare immagini per i tuoi personaggi, ambientazioni o intere scene. In StoryGPT, utilizziamo questo per dare vita alle storie generate—personaggio per personaggio, pagina per pagina.

Provalo tu stesso e dai un volto alle tue storie!

🧪 Esempio Completo di Funzionamento – Generazione di Immagini con gpt-image-1

Questo script richiede:

  • Pacchetto openai (pip install openai)
  • httpx per inviare caricamenti di immagini multipart (pip install httpx)
  • Una chiave API OpenAI nel tuo ambiente come OPENAI_API_KEY
import os
import base64
import httpx
from openai import OpenAI

## Assicurati che sia impostato nel tuo ambiente
OPENAI_API_KEY = os.environ["OPENAI_API_KEY"]

## Generazione semplice di immagini utilizzando solo un prompt di testo
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")


## Generazione di immagini utilizzando un'immagine base64 caricata e un prompt migliorato
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"Generazione dell'immagine fallita: {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"✅ Immagine salvata in: {path}")


if __name__ == "__main__":
    # Modalità 1: Generare dal prompt
    print("🔮 Generazione solo dal prompt...")
    generate_image_from_prompt("Un castello da fiaba su un'isola galleggiante sotto un cielo viola")

    # Modalità 2: Generare dal prompt + immagine entità
    print("🖼️ Generazione con riferimento all'entità...")
    generate_image_with_entity(
        image_path="dog.png",  # sostituisci con la tua immagine reale
        prompt="Aggiungi una sciarpa rossa e un monocolo al cane"
    )

🧠 Riepilogo

  • generate_image_from_prompt(...) → necessita solo di testo
  • generate_image_with_entity(...) → include la tua immagine di personaggio o di riferimento personalizzata
  • I risultati vengono salvati nella cartella out_images/