🎨 Kuinka luoda kuvia OpenAI:n gpt-image-1 avulla

Jos olet koskaan halunnut muuttaa tarinan tai idean visuaaliseksi kohtaukseksi AI:n avulla, OpenAI:n uusi gpt-image-1 -malli tekee siitä helpompaa ja tehokkaampaa kuin koskaan. Tässä on, miten käytämme sitä omassa projektissamme, StoryGPT:ssä, luodaksemme kauniita kuvastoja tekstistä—ja jopa parantaaksemme niitä hahmokuvilla.

🖼️ Vaihe 1: Valmistele Kehotus

Aivan kuten GPT-tekstimallit, gpt-image-1 tarvitsee kuvailevan kehotuksen. Esimerkiksi:

Kodikas metsämökkimaisema auringonlaskussa, hohtavat ikkunat, ympärillä korkeita puita.

Mitä parempi kehotus, sitä parempi kuva. Lisää tunnelmaa, vuorokauden aikaa, tyyliä—mikä ikinä onkaan tärkeää.

🧙‍♂️ Vaihe 2: Lisää Entiteettikuvia (Valinnainen mutta Upeaa)

Oletetaan, että sinulla on jo hahmokuva (esim. koira hatulla). Voit ladata sen base64-muodossa ja käyttää sitä visuaalisena viittauksena.

Sitten voit laajentaa sitä näin:

"Lisää seuraava kuvaan: koiralla on punainen huivi ja se seisoo kahdella jalalla."

Tällä tavalla malli rakentaa alkuperäisen kuvan päälle sen sijaan, että se aloittaisi alusta.

📦 Vaihe 3: Kutsu APIa

On kaksi tilaa:

🧠 Vain teksti-kehotus:

client.images.generate(
    model="gpt-image-1",
    prompt="Futuristinen kaupunkitaivaan ääniyö, lentäviä autoja",
    size="1024x1024",
    quality="low",
    n=1
)

🖼️ Muokkaa kuvasyötteellä (kuten hahmojen lisääminen):

httpx.post(
    "https://api.openai.com/v1/images/edits",
    headers={"Authorization": f"Bearer {API_KEY}"},
    data={
        "prompt": "Lisää taianomaiset hohtavat silmät hahmolle",
        "model": "gpt-image-1",
        "size": "1024x1024",
        "quality": "low"
    },
    files=[("image[]", ("dog.png", open("dog.png", "rb"), "image/png"))]
)

Tuloksena on base64-kuva, jonka voit näyttää, tallentaa tai tallentaa levylle.

✅ Siinä se!

Voit nyt luoda visuaaleja hahmoillesi, asetuksillesi tai koko kohtauksille. StoryGPT:ssä käytämme tätä saadaksemme luodut tarinat eloon—hahmo kerrallaan, sivu kerrallaan.

Kokeile itse ja anna tarinoillesi kasvot!

🧪 Täydellinen toimi esimerkki – Kuvan luominen gpt-image-1 avulla

Tämä skripti vaatii:

  • openai-paketti (pip install openai)
  • httpx monipuolisten kuvien latausten lähettämiseen (pip install httpx)
  • OpenAI API-avain ympäristössäsi nimellä OPENAI_API_KEY
import os
import base64
import httpx
from openai import OpenAI

## Varmista, että tämä on asetettu ympäristöösi
OPENAI_API_KEY = os.environ["OPENAI_API_KEY"]

## Yksinkertainen kuvan luominen käyttäen vain tekstiä
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")


## Kuvan luominen ladatun base64-kuvan ja parannetun kehotuksen avulla
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"Kuvan luominen epäonnistui: {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"✅ Kuvan tallennus: {path}")


if __name__ == "__main__":
    # Tila 1: Generoi kehotuksesta
    print("🔮 Generoidaan vain kehotuksesta...")
    generate_image_from_prompt("Satujen linna kelluvalla saarella violetin taivaan alla")

    # Tila 2: Generoi kehotuksesta + entiteettikuva
    print("🖼️ Generoidaan entiteettiviittauksen kanssa...")
    generate_image_with_entity(
        image_path="dog.png",  # vaihda omaan kuvaasi
        prompt="Lisää punainen huivi ja monokkelia koiralle"
    )

🧠 Yhteenveto

  • generate_image_from_prompt(...) → tarvitsee vain tekstiä
  • generate_image_with_entity(...) → sisältää mukautetun hahmon tai viittauskuvan
  • Tulokset tallennetaan out_images/-kansioon