🎨 Hur man generar bilder med OpenAI:s gpt-image-1

Om du någonsin har velat förvandla en berättelse eller idé till en visuell scen med hjälp av AI, gör OpenAI:s nya gpt-image-1-modell det enklare och mer kraftfullt än någonsin. Här är hur vi använder det i vårt eget projekt, StoryGPT, för att skapa vackra illustrationer från text—och till och med förstärka dem med karaktärsbilder.

🖼️ Steg 1: Förbered din uppmaning

Precis som GPT-textmodeller behöver gpt-image-1 en beskrivande uppmaning. Till exempel:

En mysig stuga i skogen vid solnedgången, lysande fönster, omgiven av höga träd.

Ju bättre din uppmaning är, desto bättre blir din bild. Lägg till stämning, tid på dygnet, stil—vad som helst som är viktigt.

🧙‍♂️ Steg 2: Lägg till entitetsbilder (Valfritt men fantastiskt)

Låt oss säga att du redan har en karaktärsbild (t.ex. en hund med en hatt). Du kan ladda upp den som base64 och använda den som en visuell referens.

Sedan kan du utvidga den så här:

"Lägg till följande till bilden: hunden har en röd halsduk och står på två ben."

På så sätt bygger modellen vidare på den ursprungliga bilden istället för att börja från början.

📦 Steg 3: Anropa API:et

Det finns två lägen:

🧠 Text-endast uppmaning:

client.images.generate(
    model="gpt-image-1",
    prompt="En futuristisk stadssiluett på natten med flygande bilar",
    size="1024x1024",
    quality="low",
    n=1
)

🖼️ Redigera med bildinmatningar (som att lägga till karaktärer):

httpx.post(
    "https://api.openai.com/v1/images/edits",
    headers={"Authorization": f"Bearer {API_KEY}"},
    data={
        "prompt": "Lägg till magiskt lysande ögon till karaktären",
        "model": "gpt-image-1",
        "size": "1024x1024",
        "quality": "low"
    },
    files=[("image[]", ("dog.png", open("dog.png", "rb"), "image/png"))]
)

Resultatet kommer att inkludera en base64-bild som du kan visa, lagra eller spara på disk.

✅ Det är allt!

Du kan nu generera visuella bilder för dina karaktärer, miljöer eller hela scener. I StoryGPT använder vi detta för att ge liv åt genererade berättelser—karaktär för karaktär, sida för sida.

Prova själv och ge dina berättelser ett ansikte!

🧪 Fullständig fungerande exempel – Bildgenerering med gpt-image-1

Detta skript kräver:

  • openai paketet (pip install openai)
  • httpx för att skicka multipart bilduppladdningar (pip install httpx)
  • En OpenAI API-nyckel i din miljö som OPENAI_API_KEY
import os
import base64
import httpx
from openai import OpenAI

## Se till att detta är inställt i din miljö
OPENAI_API_KEY = os.environ["OPENAI_API_KEY"]

## Enkel bildgenerering med endast en textuppmaning
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")


## Bildgenerering med en uppladdad base64-bild och en förbättrad uppmaning
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"Bildgenerering misslyckades: {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"✅ Sparade bilden till: {path}")


if __name__ == "__main__":
    # Läge 1: Generera från uppmaning
    print("🔮 Genererar från uppmaning endast...")
    generate_image_from_prompt("Ett sagoslott på en flytande ö under en lila himmel")

    # Läge 2: Generera från uppmaning + entitetsbild
    print("🖼️ Genererar med entitetsreferens...")
    generate_image_with_entity(
        image_path="dog.png",  # ersätt med din faktiska bild
        prompt="Lägg till en röd halsduk och en monokel till hunden"
    )

🧠 Sammanfattning

  • generate_image_from_prompt(...) → behöver endast text
  • generate_image_with_entity(...) → inkluderar din anpassade karaktär eller referensbild
  • Resultaten sparas i out_images/-mappen