Skip to main content
Le service d’édition d’images d’OpenAI permet de soumettre des images et des instructions, et de recevoir des images modifiées en retour. La série de modèles GPT Image peut accepter jusqu’à 16 images de référence en même temps. Actuellement, l’API prend en charge gpt-image-1, le dernier gpt-image-2, ainsi que les modèles de la série nano-banana / nano-banana-2-lite / nano-banana-2 / nano-banana-pro accessibles via la même interface. Ce document présente principalement le processus d’utilisation de l’API OpenAI Images Edits, ce qui nous permet d’utiliser facilement les fonctionnalités d’édition d’images officielles d’OpenAI.

Processus de Demande

Pour utiliser l’API OpenAI Images Edits, commencez par obtenir votre API Token sur le tableau de bord Ace Data Cloud pour le garder en réserve. Si vous n’êtes pas encore connecté ou inscrit, vous serez automatiquement redirigé vers la page de connexion pour vous inviter à vous inscrire et à vous connecter, après quoi vous serez automatiquement renvoyé à la page actuelle. Un seul API Token suffit pour accéder à tous les services de la plateforme, sans avoir à en demander un pour chaque service. La première demande vous donnera un quota gratuit pour une expérience sans frais ; lorsque le quota est insuffisant, vous pouvez recharger le solde général dans le tableau de bord.
📘 Documentation complète : OpenAI Images Edits API →

Modèle GPT-Image-2

gpt-image-2 présente des améliorations significatives par rapport à gpt-image-1 dans le cadre de l’édition d’images :
  • La structure est plus stable : changer de peau, de couleur ou de fond ne déforme presque jamais la mise en page et la composition de l’image d’origine.
  • La conservation du texte est plus précise : les images contenant du texte, comme les infographies, les affiches et les menus, restent claires et lisibles après l’édition.
  • Support de l’URL directe : en plus du téléchargement de fichiers traditionnel multipart/form-data, gpt-image-2 supporte également l’entrée d’URL d’image au format JSON, sans avoir besoin de télécharger l’image localement, ce qui est idéal pour l’intégration dans des pipelines côté serveur.
  • Support de l’entrée base64 directe : conformément à l’official, le champ image peut également accepter directement du base64 (data:image/png;base64,... ou base64 brut), permettant d’éditer des images locales sans avoir à les télécharger sur un hébergement d’images.
  • Support de la redéfinition en haute résolution : vous pouvez soumettre une image d’origine de 1K et demander une sortie en 2K / 4K via le paramètre size, le modèle agrandissant simultanément pendant le processus d’édition.

Variantes de ligne (:official / :reverse)

gpt-image-2 utilise par défaut la ligne standard. Vous pouvez explicitement choisir la ligne en ajoutant un suffixe au nom du modèle :
  • gpt-image-2:official : canal officiel, stable et conforme. Les coûts sont déterminés par le Token d’entrée de texte, le Token d’entrée d’image lors de l’édition et le Token de sortie d’image, le tout étant facturé selon l’utilisation réelle indiquée dans la réponse ; le prix affiché pour la qualité/dimension est uniquement une estimation ; le prix client est d’environ 80 % du prix standard d’OpenAI, calculé selon le forfait d’utilisation maximal. Le service gère automatiquement les erreurs entre les canaux disponibles, et les capacités et coûts sont basés sur les résultats réels retournés.
  • gpt-image-2:reverse : équivalent complet à gpt-image-2 par défaut, avec un meilleur rapport qualité-prix, sans changement de prix.
Formule de facturation :official Coût final = Token d’entrée de texte + Token d’entrée d’image (édition uniquement) + Token de sortie d’image. Le prix affiché pour quality × size est une estimation avant la demande, le montant réel facturé étant basé sur le usage de la réponse réussie. Par exemple, un coût de sortie d’image d’environ 0,0505 crédits pour low, 1024x1024, plus un petit nombre de Tokens d’entrée ; lors de l’utilisation de auto, le modèle peut choisir une qualité supérieure, et le montant préautorisé sera vérifié de manière conservatrice selon le niveau supérieur.

Valeurs size supportées

La validation du format size pour l’interface d’édition est cohérente avec celle de l’interface de génération — gpt-image-2 nécessite que size soit auto, vide, ou conforme au format WIDTHxHEIGHT, toute autre forme renverra 400. Par défaut, gpt-image-2 et :reverse facturent uniformément par image ; :official calcule simultanément les Tokens d’entrée de texte, d’image de référence et de sortie d’image, l’image d’origine, la taille et la qualité pouvant tous influencer le coût final. Limites de taille : les dimensions personnalisées doivent être des multiples de 16 pour la largeur et la hauteur, avec une longueur maximale de 3840 et un nombre total de pixels ≤ 8 294 400, tout dépassement renverra 4xx.
Par exemple : si l’image d’origine est 1024x1024, lorsque size est 2048x2048, le modèle redessinera et sortira une image 2K selon les instructions d’édition ; si size est 3840x2160, il sortira une image 4K en mode paysage. Les frais pour les trois tailles par défaut de gpt-image-2 et :reverse sont identiques ; :official est basé sur l’utilisation réelle des Tokens. Omettre le champ size est équivalent à transmettre explicitement auto : gpt-image-2 lira d’abord l’intention de taille explicite dans les mots d’invite, y compris les pixels, le ratio, l’orientation, le niveau de résolution (par exemple 4K / haute résolution) ou le nom du canevas. Lorsqu’une intention de taille est identifiée, la taille spécifique planifiée sera adoptée ; si les mots d’invite ne contiennent pas d’exigences de taille ou si le jugement automatique n’est pas disponible, il reviendra à la taille de la première image de référence. La taille finale sera normalisée à des multiples de 16, avec des limites de longueur et de pixels totaux avant la soumission de la demande ; pour un contrôle absolu, veuillez transmettre directement WIDTHxHEIGHT. Une fois la génération terminée, il n’y aura pas de nouvelle tentative en raison de pixels de sortie différents, afin d’éviter des frais de génération répétée. À propos du paramètre n L’interface d’édition gpt-image-2 prend en charge n > 1 : une seule demande peut renvoyer le nombre correspondant de résultats d’édition. Par défaut, gpt-image-2 et :reverse sont facturés en fonction du nombre de succès ; :official est facturé en fonction de l’utilisation réelle des tokens pour l’ensemble de la réponse (valeurs de n de 1 à 10). Cela s’applique également à gpt-image-1 / gpt-image-1.5, ainsi qu’aux séries nano-banana / nano-banana-2-lite / nano-banana-2 / nano-banana-pro. Notez que response_format=b64_json ne prend en charge que n=1, pour n>1, veuillez utiliser le retour par défaut de l’URL. Si certaines images échouent à être générées, seules les parties réussies seront renvoyées et facturées.
Voici deux exemples réels sous différents angles pour ressentir la capacité d’édition de gpt-image-2.

Méthode d’appel 1 : JSON + URL d’image (recommandé)

Envoyez directement la demande au format application/json, en remplissant le champ image avec l’URL d’une image, le modèle ira chercher cette image et l’éditera selon le prompt. Par exemple, l’image originale ci-dessous a été générée avec gpt-image-2 :

Nous souhaitons la modifier en un schéma de couleurs “mode nuit”. Nous pouvons l’appeler ainsi :
Ou en utilisant Python :
Le résultat renvoyé est le suivant :
L’image après édition est la suivante :

On peut voir que la structure des modules, la partition des informations et la typographie ont été strictement conservées, seule la palette de couleurs a été inversée en un thème sombre.
Remarque : Le champ image prend également en charge le passage d’un tableau, par exemple "image": ["url1", "url2", "url3"], permettant de transmettre jusqu’à 16 images de référence simultanément pour que le modèle puisse les utiliser pour l’édition.
Transmission directe en base64 : image (et chaque élément du tableau) peut être une URL ou du base64 — data:image/png;base64,... ou du base64 brut, ce qui est adapté aux images locales que l’on ne souhaite pas d’abord télécharger sur un hébergement d’images. Par exemple :

Méthode d’appel 2 : JSON + plusieurs images de référence

gpt-image-2 prend en charge la référence simultanée à plusieurs images pour générer le résultat final, par exemple en combinant plusieurs photos de produits dans un seul panier-cadeau :

Exemple de scénario : changer de style + conserver la structure

Voici un autre exemple, remplaçant une étagère en bois par une étagère flottante moderne, tout en conservant strictement le nombre et l’arrangement des livres sur chaque étagère. Image originale (étagère en bois générée avec gpt-image-2) :

Appel :
Résultat de l’édition (ID de tâche : e9544dba-727e-44a2-81e1-223d49869380) :

On peut voir que le style et l’environnement ont été complètement remplacés selon les instructions, mais le nombre de livres par étagère (1 / 3 / 7) a été strictement conservé, et une petite plante succulente a été ajoutée comme demandé.

Méthode d’appel 3 : multipart/form-data (compatible avec OpenAI SDK)

Si vous utilisez déjà le SDK Python officiel d’OpenAI, l’ancienne méthode de téléchargement multipart/form-data s’applique également, il suffit de changer model en gpt-image-2 :
Lors de l’utilisation du SDK, vous devez d’abord importer deux variables d’environnement, OPENAI_BASE_URL doit être défini sur https://api.acedata.cloud/openai, et OPENAI_API_KEY doit être défini sur le token obtenu :

Modèles de la série Nano Banana

La série nano-banana a également intégré /openai/images/edits dans le cadre de l’édition, il suffit de changer model en l’un des modèles du tableau ci-dessous.
Important : Plage de support des paramètres Nano Banana se connecte au protocole OpenAI via une couche d’adaptation, ne prenant en charge que les paramètres suivants : model, prompt, image, n.
  • image peut être téléchargé via multipart/form-data (les fichiers locaux seront automatiquement convertis en base64), ou vous pouvez transmettre directement une chaîne d’URL d’image via un champ de formulaire.
  • Les paramètres mask, size, response_format, etc. ne sont pas pris en charge ; s’ils sont remplis, ils seront ignorés. n > 1 est pris en charge (1–10), renverra et facturera le nombre correspondant de résultats d’édition.
  • La structure de retour suit le format OpenAI (data[].url), mais created est fixé à 0, et b64_json ne sera pas renvoyé, revised_prompt est toujours égal au prompt d’origine.

Appel via formulaire + URL d’image

Le résultat retourné est le suivant :
Image éditée :

Appel via formulaire + fichier local

Rappel asynchrone

Le mécanisme de rappel asynchrone callback_url est également valable pour nano-banana, le processus d’appel est identique à celui des autres modèles, voir la section Rappel asynchrone ci-dessous.

Utilisation de base

Vous pouvez maintenant utiliser le code pour faire des appels, ci-dessous un appel via CURL :
Lors de la première utilisation de cette interface, nous devons remplir au moins quatre éléments, l’un est authorization, que vous pouvez sélectionner directement dans la liste déroulante. Un autre paramètre est model, model est la catégorie de modèle que nous choisissons d’utiliser sur le site officiel d’OpenAI, ici nous avons principalement 1 type de modèle, les détails peuvent être consultés dans les modèles que nous fournissons. Un autre paramètre est prompt, prompt est le mot d’invite que nous entrons pour générer l’image. Le dernier paramètre est image, ce paramètre nécessite le chemin de l’image à éditer, l’image à éditer est illustrée ci-dessous :
Remarque : image[] peut apparaître plusieurs fois pour télécharger plusieurs images de référence, par exemple -F "image[]=@a.png" -F "image[]=@b.png", les modèles de la série GPT Image prennent en charge jusqu’à 16 images (chaque image ne dépassant pas 50 Mo, au format png/webp/jpg). Un dépassement du nombre entraînera un retour 400.

Exemple de code d’appel Python avec le même effet :
Pour appeler avec Python, nous devons d’abord importer deux variables d’environnement, une OPENAI_BASE_URL, qui peut être définie sur https://api.acedata.cloud/openai, et une autre variable d’authentification OPENAI_API_KEY, cette valeur est obtenue à partir de authorization, sur Mac OS, vous pouvez définir les variables d’environnement avec la commande suivante :
Après l’appel, nous constatons qu’une image gift-basket.png sera générée dans le répertoire actuel, le résultat est le suivant :

Ainsi, nous avons terminé l’opération d’édition d’image. Actuellement, l’interface Edits prend en charge deux modèles : gpt-image-1 et gpt-image-2, dont gpt-image-2 est le modèle recommandé à utiliser, voir la section ci-dessus Modèle GPT-Image-2.

Rappel asynchrone

Étant donné que l’API OpenAI Images Edits peut prendre un certain temps pour éditer une image, si l’API ne répond pas pendant une longue période, la requête HTTP maintiendra la connexion, entraînant une consommation supplémentaire de ressources système. C’est pourquoi cette API propose également un support de rappel asynchrone. Le processus global est le suivant : lorsque le client initie une requête, il spécifie un champ callback_url supplémentaire. Après que le client a lancé la requête API, l’API renvoie immédiatement un résultat contenant un champ task_id, représentant l’ID de la tâche actuelle. Lorsque la tâche est terminée, le résultat de l’édition de l’image est envoyé au callback_url spécifié par le client sous forme de POST JSON, incluant également le champ task_id, permettant ainsi de lier le résultat de la tâche par ID. Voyons comment procéder à travers un exemple. Tout d’abord, le rappel Webhook est un service capable de recevoir des requêtes HTTP, les développeurs doivent le remplacer par l’URL de leur propre serveur HTTP. Pour des raisons de démonstration, nous utilisons un site Web de Webhook public https://webhook.site/, en ouvrant ce site, vous obtiendrez une URL Webhook, comme illustré ci-dessous : Copiez cette URL, elle peut être utilisée comme Webhook, l’exemple ici est https://webhook.site/3d32690d-6780-4187-a65c-870061e8c8ab. Ensuite, nous pouvons définir le champ callback_url sur l’URL Webhook ci-dessus, tout en remplissant les paramètres correspondants, comme le montre le code suivant :
Après l’appel, vous constaterez qu’un résultat est immédiatement obtenu, comme suit :
Après un court instant, nous pouvons observer le résultat de l’édition de l’image sur l’URL Webhook, le contenu est le suivant :
On peut voir qu’il y a un champ task_id dans le résultat, le champ data contient les mêmes résultats d’édition d’image que l’appel synchrone, et le champ task_id permet de lier la tâche.

Gestion des erreurs

Lors de l’appel de l’API, si une erreur se produit, l’API renverra le code d’erreur et les informations correspondantes. Par exemple :
  • 400 token_mismatched : Mauvaise requête, probablement en raison de paramètres manquants ou invalides.
  • 400 api_not_implemented : Mauvaise requête, probablement en raison de paramètres manquants ou invalides.
  • 401 invalid_token : Non autorisé, jeton d’autorisation invalide ou manquant.
  • 429 too_many_requests : Trop de requêtes, vous avez dépassé la limite de taux.
  • 500 api_error : Erreur interne du serveur, quelque chose s’est mal passé sur le serveur.

Exemple de réponse d’erreur

Conclusion

Grâce à ce document, vous avez compris comment utiliser facilement l’API OpenAI Images Edits pour utiliser les fonctionnalités d’édition d’image officielles d’OpenAI. Nous espérons que ce document vous aidera à mieux intégrer et utiliser cette API. Si vous avez des questions, n’hésitez pas à contacter notre équipe de support technique.