Tutoriel

Statut éditorial : En attente de relecture

Générer des images avec l’API OpenAI en Python

Créer, enregistrer et valider une image depuis Python avec un prompt structuré et une gestion sûre des secrets et des erreurs.

Classification du contenu

Types

  • Génération d’images
Niveau
Débutant
Publié le
24 août 2026
Dernière relecture
Relecture en attente
Prochaine vérification
24 octobre 2026

Ce tutoriel crée une image depuis un script Python, l’enregistre sur disque et ajoute les contrôles nécessaires avant une intégration dans un produit. Les noms de modèles et options pouvant évoluer, vérifiez la page officielle Image generation avant de figer une configuration.

Installer le SDK

~~~bash python -m venv .venv source .venv/bin/activate pip install -U openai python-dotenv pillow ~~~

Créez ".env" :

~~~text OPENAI_API_KEY=votre_cle ~~~

Ajoutez ce fichier à ".gitignore".

Générer et enregistrer l’image

~~~python import base64 import os from pathlib import Path

from dotenv import load_dotenv from openai import OpenAI

load_dotenv() client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])

prompt = """ Illustration éditoriale d'un atelier de développement logiciel. Composition : ordinateur au centre, trois personnes collaborent. Style : aplats géométriques, palette bleu nuit et corail. Contraintes : aucun logo, aucun texte, format horizontal. """.strip()

result = client.images.generate( model="gpt-image-1", prompt=prompt, size="1536x1024", )

image_bytes = base64.b64decode(result.data[0].b64_json) Path("output.png").write_bytes(image_bytes) print("Image enregistrée dans output.png") ~~~

Selon le modèle et la version du SDK, la réponse peut contenir des données encodées ou une URL temporaire. Lisez le type retourné avant d’écrire votre adaptateur.

Écrire un prompt reproductible

Séparez le sujet, la composition, le style, la palette et les contraintes. Évitez les adjectifs vagues accumulés. Pour une série cohérente, gardez une fiche de direction artistique versionnée et ne changez qu’une variable à la fois.

Valider le fichier

~~~python from PIL import Image

with Image.open("output.png") as image: image.verify()

with Image.open("output.png") as image: width, height = image.size assert width >= 1024 and height >= 1024 ~~~

La validation applicative doit aussi vérifier l’absence de texte indésirable, le respect de la charte et les droits liés aux entrées fournies par l’utilisateur.

Exposer la génération dans une API

Ne retournez pas une énorme chaîne base64 depuis toutes vos routes. En production, stockez le fichier dans un espace objet, conservez l’identifiant de génération, le prompt normalisé, le modèle et le statut, puis retournez une URL signée courte durée.

Ajoutez une file de tâches : la génération peut dépasser le délai normal d’une requête HTTP. Dédupliquez les relances avec une clé d’idempotence et plafonnez le nombre d’images par utilisateur.

Gestion des erreurs

Traitez séparément authentification, limitation de débit, contenu refusé et erreur fournisseur. Une relance exponentielle est pertinente pour une erreur temporaire, pas pour un prompt refusé. Ne journalisez ni clé API ni données sensibles du prompt.

FAQ

Peut-on demander du texte dans l’image ?

Oui, mais contrôlez systématiquement l’orthographe. Pour un visuel de marque, il reste souvent plus fiable de générer l’illustration puis d’ajouter le texte dans votre moteur graphique.

Comment maîtriser le coût ?

Fixez taille, qualité, nombre de variantes et budget par utilisateur. Mesurez le taux d’images réellement conservées : le coût utile est celui d’une image validée, pas celui d’un appel.

Sources utilisées