Passer au contenu principal

API gpt-image-1

L’API de génération d’images gpt-image-1 d’OpenAI propose à la fois la génération texte-vers-image et l’édition image-vers-image guidée par texte.
Avant d’utiliser cette API, assurez-vous d’avoir installé la dernière version du package OpenAI en exécutant pip install -U openai.

Remarques importantes

  • Une fois un appel API envoyé, vous serez facturé indépendamment des interruptions ou échecs pendant le processus de génération
  • Le nom d’artistes vivants (comme « Hayao Miyazaki », « Makoto Shinkai », etc.) déclenchera une erreur moderation_blocked, provoquant l’échec de la génération. Vous pouvez contourner cela en utilisant des termes non sensibles comme « Ghibli » ou « style anime japonais moderne lumineux » à la place. Il en va de même pour les images aux vêtements révélateurs ou au contenu suggestif.
  • En général, référencer un « style » est plus sûr que nommer un « artiste » — par exemple, « Pixar » est pris en charge.
  • Une approche plus fiable consiste à utiliser des artistes décédés ou leurs styles correspondants, comme « Van Gogh » ou « Mona Lisa »

Modèle et tarification

ModèleQualité1024x10241024x15361536x1024
gpt-image-1low$0.011$0.016$0.016
gpt-image-1medium$0.042$0.063$0.063
gpt-image-1high$0.167$0.25$0.25
Remarque : les jetons de texte d’entrée sont facturés séparément à $5 par million de jetons.

Utilisation de l’API

Endpoints
  1. Génération d’images : https://aihubmix.com/v1/images/generations
  2. Édition d’images : https://aihubmix.com/v1/images/edits
Exemples Python :
from openai import OpenAI
import base64
import os

client = OpenAI(
    api_key="AIHUBMIX_API_KEY", # Replace with your AIHUBMIX Key "sk-***"
    base_url="https://aihubmix.com/v1"
)

prompt = """redesign poster of the movie [Black Swan], 3D cartoon, smooth render, bright tone, 2:3 portrait."""

result = client.images.generate(
    model="gpt-image-1",
    prompt=prompt,
    n=1, # Number of images to generate, maximum 10
    size="1024x1536", # 1024x1024 (square), 1536x1024 (3:2 landscape), 1024x1536 (2:3 portrait), auto (default) 
    quality="high", # high, medium, low, auto (default)
    moderation="low", # low, auto (default) - requires updated openai package 📍
    background="auto", # transparent, opaque, auto (default)
)

print(result.usage)

# Define file name prefix and save directory
output_dir = "." # You can specify another directory
file_prefix = "image_gen"

# Ensure output directory exists
os.makedirs(output_dir, exist_ok=True)

# Iterate through all returned image data
for i, image_data in enumerate(result.data):
    image_base64 = image_data.b64_json
    if image_base64: # Ensure b64_json is not empty
        image_bytes = base64.b64decode(image_base64)

        # --- Handle filename conflict logic ---
        current_index = i
        while True:
            # Create filename with incremental counter
            file_name = f"{file_prefix}_{current_index}.png"
            file_path = os.path.join(output_dir, file_name) # Build complete file path

            # Check if file exists
            if not os.path.exists(file_path):
                break # No filename conflict, exit loop

            # Filename conflict, increment counter
            current_index += 1

        # Save image to file using unique file_path
        with open(file_path, "wb") as f:
            f.write(image_bytes)
        print(f"Image saved to: {file_path}")
    else:
        print(f"Image data for index {i} is empty, skipping save.")
Pour plus de détails sur les paramètres, consultez la documentation officielle d’OpenAI

Exemples de sortie

Usage(input_tokens=150, input_tokens_details=UsageInputTokensDetails(image_tokens=0, text_tokens=150), output_tokens=6240, total_tokens=6390)
Image saved to: ./image_gen_14.png

Scénarios de rejet

Message d’erreur lorsqu’une requête est rejetée :
Error code: 400 - {'error': {'message': 'Your request was rejected as a result of our safety system. Your request may contain content that is not allowed by our safety system.', 'type': 'user_error', 'param': None, 'code': 'moderation_blocked'}}
Lors d’une requête de génération de 2 à 10 images, si le système détecte que la requête enfreint les politiques de la plateforme, le contenu signalé ne sera pas généré. Cela peut entraîner un nombre d’images générées inférieur au nombre demandé initialement ; toutefois, aucune erreur moderation_blocked ne sera levée lors de la génération multi-images. Il est donc recommandé d’éviter proactivement les éventuels problèmes de propriété intellectuelle (PI) ou de droits d’auteur pour minimiser le risque de rejet par le système et garantir une génération fluide. ✍️ Recommandations clés :
  • Évitez l’utilisation directe de personnages protégés par le droit d’auteur, de logos, de ressemblances de célébrités, etc.
  • Privilégiez l’« inspiration stylistique », la « réinterprétation créative » ou des « descriptions généralisées »
  • Si vous référencez des éléments spécifiques, vérifiez s’ils relèvent du domaine public

Conseils pratiques

  • Prend en charge toutes les langues. Le texte chinois fonctionne de manière fiable, bien que nous ne recommandions pas de générer de grandes quantités de texte dans n’importe quelle langue
  • Le paramètre size ne prend pas en charge le passage explicite de size=“auto” — auto est la valeur par défaut
  • Les rapports d’aspect peuvent être spécifiés dans le prompt (prend en charge 2:3, 3:2, 1:1) ou définis via le paramètre size
  • Le paramètre moderation contrôle la sensibilité, mais même réglé sur « low », les requêtes peuvent toujours être rejetées (par exemple, si Vénus est trop dénudée)
  • L’endpoint edits ne prend pas en charge le paramètre moderation
  • Combiner des descriptions textuelles avec des images de référence produit des résultats plus précis
  • Compresser les images téléversées en pré-traitement peut améliorer la vitesse
  • Les arrière-plans transparents sont pris en charge (pas besoin de détourer manuellement) — ajoutez simplement cette exigence dans votre prompt