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ètre | Type | Description |
|---|---|---|
model | string | Toujours "gpt-image-1" |
prompt | string | Description de l’image (jusqu’à 32 000 caractères) |
n | integer | Nombre d’images à générer (1 à 10) |
size | string | "1024x1024", "1024x1536", "1536x1024" |
quality | string | "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.