Aller au contenu principal

Créer des images depuis un prompt

Créer des images depuis un prompt

La méthode client.images.generate() est le point d’entrée principal pour créer des images à partir d’une description textuelle. Dans cette leçon, vous apprendrez à maîtriser ses paramètres et à obtenir des résultats prévisibles.

Anatomie d’un appel de génération

Voici la structure complète d’un appel avec tous les paramètres disponibles :

from openai import OpenAI

client = OpenAI()

response = client.images.generate(
    model="gpt-image-1",
    prompt="Description détaillée de l'image souhaitée",
    n=1,
    size="1024x1024",
    quality="high"
)

Paramètres détaillés

ParamètreTypeDescription
modelstringToujours "gpt-image-1"
promptstringDescription de l’image (jusqu’à 32 000 caractères)
nintegerNombre d’images à générer (1 à 10)
sizestring"1024x1024", "1024x1536", "1536x1024"
qualitystring"low", "medium", "high"

Récupérer l’image générée

La réponse contient un objet data avec les images. Vous pouvez récupérer soit une URL temporaire, soit les données en base64 :

Via URL temporaire

response = client.images.generate(
    model="gpt-image-1",
    prompt="Un jardin japonais sous la pluie, photographie",
    n=1,
    size="1024x1024"
)

image_url = response.data[0].url
print(image_url)

Via base64 (recommandé en production)

import base64

response = client.images.generate(
    model="gpt-image-1",
    prompt="Un jardin japonais sous la pluie, photographie",
    n=1,
    size="1024x1024",
    response_format="b64_json"
)

image_data = base64.b64decode(response.data[0].b64_json)

with open("jardin.png", "wb") as f:
    f.write(image_data)

print("Image sauvegardée : jardin.png")

Le format base64 évite la dépendance aux URL temporaires qui expirent après environ une heure.

Générer plusieurs images en un seul appel

Le paramètre n vous permet de demander plusieurs variantes simultanément :

response = client.images.generate(
    model="gpt-image-1",
    prompt="Logo minimaliste pour une boulangerie artisanale, fond blanc",
    n=4,
    size="1024x1024",
    quality="high"
)

for i, image in enumerate(response.data):
    print(f"Variante {i+1} : {image.url}")

Chaque image consomme des tokens indépendamment. Générer 4 images coûte 4 fois le prix d’une seule.

Écrire des prompts efficaces

La qualité du résultat dépend directement de la précision de votre prompt. Voici les bonnes pratiques :

Structurez votre description

Un bon prompt suit cette structure : sujet + style + contexte + détails techniques.

# Prompt vague — résultat imprévisible
prompt_faible = "une maison"

# Prompt structuré — résultat contrôlé
prompt_fort = (
    "Maison de campagne provençale en pierre blonde, "
    "volets bleu lavande, vigne vierge sur la façade, "
    "photographiée à l'heure dorée, "
    "style éditorial pour magazine d'architecture, "
    "composition centrée, profondeur de champ"
)

response = client.images.generate(
    model="gpt-image-1",
    prompt=prompt_fort,
    size="1536x1024",
    quality="high"
)

Spécifiez le style visuel

GPT Image comprend une grande variété de styles :

styles = [
    "photographie éditoriale, éclairage studio",
    "illustration vectorielle flat design",
    "aquarelle sur papier texturé",
    "rendu 3D photoréaliste, Octane Render",
    "croquis au crayon sur papier kraft",
]

for style in styles:
    prompt = f"Un vélo vintage garé devant un café parisien, {style}"
    response = client.images.generate(
        model="gpt-image-1",
        prompt=prompt,
        size="1024x1024",
        quality="medium"
    )
    print(f"Style : {style}")
    print(f"URL : {response.data[0].url}\n")

Incluez du texte dans l’image

GPT Image gère remarquablement bien le rendu typographique :

response = client.images.generate(
    model="gpt-image-1",
    prompt=(
        "Affiche promotionnelle avec le texte \"SOLDES D'ÉTÉ -50%\" "
        "en grandes lettres blanches sur fond dégradé bleu-orange, "
        "typographie moderne sans-serif, style commercial professionnel"
    ),
    size="1024x1536",
    quality="high"
)

Gestion des erreurs

Anticipez les erreurs courantes dans votre code :

from openai import OpenAI, APIError, RateLimitError

client = OpenAI()

try:
    response = client.images.generate(
        model="gpt-image-1",
        prompt="Un paysage de montagne enneigée au lever du jour",
        size="1024x1024"
    )
    print(response.data[0].url)

except RateLimitError:
    print("Limite de requêtes atteinte. Attendez avant de réessayer.")

except APIError as e:
    print(f"Erreur API : {e.message}")

Exercice pratique

Créez un script qui génère 3 variantes d’un même sujet dans 3 styles différents (photo, illustration, aquarelle) et sauvegarde chaque image en local au format PNG. Utilisez le format base64 pour la récupération.