Passer au contenu principal

Documentation Index

Fetch the complete documentation index at: https://docs.aihubmix.com/llms.txt

Use this file to discover all available pages before exploring further.

1️⃣ 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

2️⃣ GPT Image (Reverse)

Pour répondre aux fortes attentes de nos utilisateurs, nous avons lancé deux interfaces issues d’une rétro-ingénierie : gpt-4o-image et gpt-4o-image-vip. Le modèle VIP offre des performances et une stabilité supérieures.
Notez que les interfaces issues de rétro-ingénierie ne peuvent garantir une stabilité totale et peuvent rencontrer un statut 🕐 Queuing... ou des échecs de génération. Elles sont recommandées uniquement pour l’essai et les tests fonctionnels.
L’interface officielle d’OpenAI gpt-image-1 a été publiée. Compte tenu du coût d’utilisation, les interfaces issues de rétro-ingénierie actuelles seront temporairement conservées, avec des méthodes d’appel compatibles fournies à tous.

Remarques

  • Remarque spéciale : quelle qu’en soit la cause, dès que l’appel API est initié, des frais s’appliquent même si la génération échoue.
  • Le nom d’artistes vivants (comme « Ghibli » ou « Makoto Shinkai ») déclenchera une erreur input_moderation, provoquant l’échec de la génération. Vous pouvez l’éviter en utilisant des termes non sensibles comme « Ghibli » et « Style anime japonais lumineux et moderne ».
  • En général, « style » est plus sûr que « artiste » ; par exemple, « Pixar » est également pris en charge.
  • Une approche plus sûre consiste à utiliser le nom d’artistes décédés ou les styles correspondants, comme « Van Gogh » et « Mona Lisa ».

Modèle et tarification

ModèlePrix ($/IMG)
gpt-4o-image-vip$0.009
gpt-4o-image$0.005
En raison de l’augmentation des coûts de maintenance des interfaces issues de rétro-ingénierie, le prix par appel a été augmenté. (Mis à jour le : 2025-06-04).

Exemple Python

Avec l’endpoint familier v1/completions, nous offrons une prise en charge entièrement compatible. Pour une utilisation spécifique, consultez :
from openai import OpenAI

client = OpenAI(
    api_key="AIHUBMIX_API_KEY", # Your Key Here
    base_url="https://aihubmix.com/v1"
)

# Create a chat completion request
stream = client.chat.completions.create(
    model="gpt-4o-image-vip", #list: gpt-4o-image-vip, gpt-4o-image
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "text",
                    "text": """Redesign [Girl wearing a pearl earring] as an anime-style illustrated cover. Preserve original essence and composition. Render in refined Kyoto Anime-inspired style—soft brushwork, cinematic lighting, progressive depth. 
Format in AV cover layout: 
Japanese-English mixed typography, serif title with significant visual hierarchy - sense of design is the key.
Extract words tha conveys profound meanings as title, then creative slogan, the original name can be a smaller information ONLY if necessary.
Subtly embed watermark "jerlin" in clothing or background. Maintain emotional tone and posture, soften only when necessary. 2:3 portrait"""
                }
            ]
        }
    ],
    stream=True
)

# Process the streaming response
for chunk in stream:
    try:
        if chunk.choices and len(chunk.choices) > 0 and chunk.choices[0].delta and chunk.choices[0].delta.content:
            print(chunk.choices[0].delta.content, end="", flush=True)
    except Exception as e:
        print(f"\nError occurred while processing the response: {str(e)}")

Exemple de sortie

{
  "prompt": "Redesign 'Girl with a Pearl Earring' as an anime-style illustrated cover. Preserve the original essence and composition: the iconic side-glance pose, serene expression, and intimate framing. Render in refined Kyoto Anime-inspired style with soft brushwork, cinematic lighting, and progressive depth. Create an AV cover layout with Japanese-English mixed typography, using a prominent serif title with strong visual hierarchy. Extract profound words for the title and include a creative slogan. The original name 'Girl with a Pearl Earring' should appear as smaller text if needed. Subtly embed the watermark 'jerlin' in clothing or background. For modesty, replace any potential nudity with flowing fabric, hair, or veils while maintaining the emotional tone and posture. Soften details only when necessary.",
  "ratio": "2:3"
}

>🕐 Queuing.

>⚡ Generating.....

>🏃‍ Progress 11....19....27...34....42....50....57...64....[100](https://videos.openai.com/vg-assets/assets%2Ftask_01jsccq77nfcsab7dn8bx7z230%2Fsrc_1.png?st=2025-04-21T13%3A08%3A48Z&se=2025-04-27T14%3A08%3A48Z&sks=b&skt=2025-04-21T13%3A08%3A48Z&ske=2025-04-27T14%3A08%3A48Z&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skoid=aa5ddad1-c91a-4f0a-9aca-e20682cc8969&skv=2019-02-02&sv=2018-11-09&sr=b&sp=r&spr=https%2Chttp&sig=xm6K6M7au3F3Vd9qcYxR3mYWrqAHsgbagbUV5GQo39w%3D&az=oaivgprodscus)

> ✅ Generation complete


![gen_01jsccq83pfg6ssfqf3pzfaytj](https://filesystem.site/cdn/20250421/XBCrAs6qvMARG7BkFX0KI3MBs1qoto.png)

[Click to download](https://filesystem.site/cdn/download/20250421/XBCrAs6qvMARG7BkFX0KI3MBs1qoto.png)

![gen_01jsccq83nf6ftmtx8y48h383y](https://filesystem.site/cdn/20250421/tQ62gh0BbdESApNmFJMNzsdUFDflkl.png)

[Click to download](https://filesystem.site/cdn/download/20250421/tQ62gh0BbdESApNmFJMNzsdUFDflkl.png)%      

Compatibilité avec l’API officielle OpenAI

Si vous préférez utiliser la dernière méthode de génération d’images publiée par OpenAI, vous pouvez vous référer à l’implémentation suivante. Gardez à l’esprit ces 3 points :
  1. N’incluez pas le paramètre quality — les modèles comme gpt-4o-image-vip et gpt-4o-image l’embarquent en interne.
  2. Le champ usage (suivi des jetons) n’est pas pris en charge.
  3. La dernière sortie renvoie des données d’image encodées en Base64, et le script actuel gère déjà la sauvegarde automatique.
Python
from openai import OpenAI
import os
import requests
import base64

client = OpenAI(
    api_key="AIHUBMIX_API_KEY", # Replace with your AiHubMix API key
    base_url="https://aihubmix.com/v1"
)

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

result = client.images.generate(
    model="gpt-4o-image-vip",
    prompt=prompt,
    n=1, # Number of images to generate
    size="1024x1536", # 1024x1024 (square), 1536x1024 (3:2 landscape), 1024x1536 (2:3 portrait), auto (default)
    #quality="high" # Do not pass quality for reverse model, it's internally bound 📍
)

print(result) # Print full API response; usage not supported for reverse API 📍

# Define output filename prefix and directory
output_dir = "." # You can specify another directory
file_prefix = "image_gen-reverse"

# 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):
    # Handle base64 string first
    if hasattr(image_data, "b64_json") and image_data.b64_json:
        image_bytes = base64.b64decode(image_data.b64_json)
        current_index = i
        while True:
            file_name = f"{file_prefix}_{current_index}.png"
            file_path = os.path.join(output_dir, file_name)
            if not os.path.exists(file_path):
                break
            current_index += 1
        with open(file_path, "wb") as f:
            f.write(image_bytes)
        print(f"Image saved to: {file_path} (base64)")
    # Then handle url field (robust fallback in case of interface change)
    elif hasattr(image_data, "url") and image_data.url:
        try:
            response = requests.get(image_data.url, stream=True)
            response.raise_for_status()
            image_bytes = response.content
            current_index = i
            while True:
                file_name = f"{file_prefix}_{current_index}.png"
                file_path = os.path.join(output_dir, file_name)
                if not os.path.exists(file_path):
                    break
                current_index += 1
            with open(file_path, "wb") as f:
                f.write(image_bytes)
            print(f"Image saved to: {file_path} (url)")
        except requests.exceptions.RequestException as e:
            print(f"Failed to download image #{i}: {e}")
        except Exception as e:
            print(f"Error occurred while processing image #{i}: {e}")
    else:
        print(f"No b64_json or url found in image #{i}, skipping save.")

Démonstration des résultats

Girl-with-a-Pearl-Earring

La Jeune Fille à la perle

  1. Le tableau célèbre est réinterprété, avec texte et filigrane directement générés.
pixar

Pixar

  1. Le style cartoon 3D Pixar, stable comme toujours.
ghibli

Ghibli

  1. Le Ghibli, le plus populaire

Conseils pratiques

  • Prend en charge toutes les langues, le dessin en chinois est également stable, mais nous ne recommandons pas de dessiner de grandes quantités de texte.
  • Spécifiez le rapport d’aspect dans le prompt, sinon 4o le déterminera automatiquement. Ratios pris en charge : 2:3, 3:2, 1:1.
  • Fournissez des images de référence si vous manquez d’inspiration ; les images uniques et multiples sont prises en charge.
  • Les images téléchargées peuvent être compressées pour le pré-traitement, ce qui améliore la vitesse.
  • Prend en charge l’arrière-plan transparent, pas besoin de détourer — ajoutez simplement l’exigence dans le prompt.

Dernière mise à jour : 2026-06-01