Créer des images depuis un prompt
Mis à jour le 29 juillet 2026
Créer des images depuis un prompt
La méthode client.images.generate() est le point d’entrée principal pour créer une image à partir d’une description textuelle. Elle tient en une poignée de paramètres, mais c’est précisément parce qu’ils sont peu nombreux que chacun compte : la différence entre un résultat aléatoire et un résultat prévisible se joue presque entièrement dans le contenu du champ prompt. Cette leçon vous apprend à maîtriser les deux.
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è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" |
La limite de 32 000 caractères pour le prompt est confortable : elle vous autorise des descriptions très détaillées, et vous verrez plus loin que le détail est votre meilleur levier de contrôle.
Récupérer l’image générée
La réponse contient un objet data qui porte les images. Deux modes de récupération coexistent. Le premier vous rend une URL temporaire, pratique pour un test rapide dans un notebook.
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)
Le second vous rend directement les octets encodés en base64, que vous décodez et écrivez sur disque dans la foulée. C’est le mode à privilégier en production, car il vous affranchit des URL temporaires qui expirent après environ une heure : une fois le fichier écrit, plus rien ne dépend d’OpenAI.
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")
Générer plusieurs images en un seul appel
Le paramètre n demande plusieurs variantes en une requête. C’est le réflexe à prendre lorsque vous cherchez une direction visuelle sans savoir laquelle retenir : quatre propositions côte à côte vous renseignent bien mieux qu’une seule.
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}")
Attention toutefois à la facture : chaque image consomme des tokens indépendamment, et générer 4 images coûte 4 fois le prix d’une seule. Explorez en n élevé avec une qualité basse, réservez la qualité haute au tirage définitif.
Écrire des prompts efficaces
La qualité du résultat dépend directement de la précision de votre prompt. Un bon prompt suit une structure simple — sujet + style + contexte + détails techniques — et la comparaison ci-dessous rend la différence tangible : « une maison » laisse le modèle inventer tout ce que vous n’avez pas dit, tandis que la version développée fixe le matériau, la couleur des volets, l’heure de la prise de vue, le registre éditorial et le traitement optique.
# 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"
)
Le style visuel se déclare de la même manière, en nommant un médium plutôt qu’en espérant une intention. GPT Image comprend une grande variété de registres, et la boucle suivante vous fait sentir l’écart entre eux sur un sujet strictement identique : le vélo devant le café parisien change complètement de nature selon qu’on demande une photographie éditoriale, un aplat vectoriel ou un croquis au crayon.
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")
Le texte intégré à l’image mérite un mot à part, car c’est là que GPT Image se distingue nettement de ses prédécesseurs. Donnez le message entre guillemets dans le prompt, précisez la famille typographique et le traitement graphique attendu, et le rendu est lisible.
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
Un script de génération qui tourne en boucle finit toujours par rencontrer une limite de débit ou une erreur d’API. Traitez les deux cas distinctement dès le premier jet : RateLimitError appelle une attente et une nouvelle tentative, alors qu’une APIError demande d’examiner le message avant de relancer quoi que ce soit.
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}")
Pour ancrer tout cela, écrivez maintenant un script qui génère trois variantes d’un même sujet dans trois styles différents — photo, illustration, aquarelle — et sauvegarde chaque image en local au format PNG, en passant par le format base64 pour la récupération.