Saltar al contenido 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

La API de generación de imágenes gpt-image-1 de OpenAI ofrece tanto generación de texto a imagen como capacidades de edición de imagen a imagen guiadas por texto.
Antes de usar esta API, asegúrate de tener instalado el paquete más reciente de OpenAI ejecutando pip install -U openai.

Notas importantes

  • Una vez enviada la llamada a la API, se te cobrará independientemente de cualquier interrupción o fallo durante el proceso de generación
  • Los nombres de artistas vivos (como “Hayao Miyazaki”, “Makoto Shinkai”, etc.) activarán el error moderation_blocked, provocando el fallo de la generación. Puedes evitarlo utilizando términos no sensibles como “estilo Ghibli” o “estilo de anime japonés moderno y luminoso”. Lo mismo ocurre con imágenes que muestren ropa reveladora o contenido sugerente.
  • En general, referirse a “estilos” es más seguro que nombrar a “artistas”; por ejemplo, “Pixar” está admitido.
  • Un enfoque más fiable es utilizar artistas fallecidos o sus estilos correspondientes, como “Van Gogh” o “Mona Lisa”

Modelo y precios

ModeloCalidad1024x10241024x15361536x1024
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
Nota: Los tokens del texto de entrada se facturan por separado a $5 por millón de tokens.

Uso de la API

Endpoints
  1. Generación de imágenes: https://aihubmix.com/v1/images/generations
  2. Edición de imágenes: https://aihubmix.com/v1/images/edits
Ejemplos en 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.")
Para más detalles de parámetros, consulta la documentación oficial de OpenAI.

Ejemplos de salida

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

Escenarios de rechazo

Mensaje de error cuando se rechaza una solicitud:
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'}}
Al solicitar de 2 a 10 imágenes en una única generación, si el sistema detecta que la solicitud infringe las políticas de la plataforma, el contenido marcado no se generará. Esto puede resultar en menos imágenes generadas de las solicitadas originalmente; sin embargo, no se lanzará un error moderation_blocked en la generación multi-imagen. Por ello, se recomienda evitar de forma proactiva posibles problemas de propiedad intelectual (IP) o de derechos de autor para minimizar el riesgo de rechazo y asegurar una generación fluida. ✍️ Recomendaciones clave:
  • Evita el uso directo de personajes con derechos de autor, logotipos, parecidos de famosos, etc.
  • Considera utilizar “inspiración de estilo”, “reinterpretación creativa” o “descripciones generalizadas”
  • Si haces referencia a elementos específicos, verifica si están dentro del dominio público

Consejos prácticos

  • Compatible con todos los idiomas. El texto en chino funciona de forma fiable, aunque no recomendamos generar grandes cantidades de texto en ningún idioma
  • El parámetro size no admite pasar explícitamente size=“auto” — auto es el valor predeterminado
  • Las relaciones de aspecto pueden especificarse en el prompt (admite 2:3, 3:2, 1:1) o establecerse mediante el parámetro size
  • El parámetro moderation controla la sensibilidad, pero incluso con él configurado en “low”, las solicitudes pueden seguir siendo rechazadas (por ejemplo, si Venus aparece demasiado descubierta)
  • El endpoint de edits no admite el parámetro moderation
  • Combinar descripciones de texto con imágenes de referencia produce resultados más precisos
  • Comprimir las imágenes subidas como paso previo puede mejorar la velocidad
  • Se admiten fondos transparentes (sin necesidad de recortes manuales): basta con añadir este requisito a tu prompt

2️⃣ GPT Image (Reverse)

Para responder a las firmes expectativas de nuestros usuarios, hemos lanzado especialmente dos interfaces de ingeniería inversa: gpt-4o-image y gpt-4o-image-vip. El modelo VIP ofrece un rendimiento y una estabilidad superiores.
Ten en cuenta que las interfaces de ingeniería inversa no pueden garantizar una estabilidad total y pueden encontrarse con el estado 🕐 En cola... o con fallos de generación. Se recomiendan únicamente para experiencias de prueba y pruebas funcionales.
La interfaz oficial de OpenAI gpt-image-1 ya está disponible. Teniendo en cuenta el coste de uso, las interfaces de ingeniería inversa actuales se mantendrán de forma temporal, con métodos de llamada compatibles disponibles para todos.

Notas

  • Aviso especial: Independientemente de la causa, una vez iniciada la llamada a la API se aplicarán cargos aunque la generación falle.
  • El nombre de artistas vivos (como “Ghibli” y “Makoto Shinkai”) activará el error input_moderation, provocando el fallo de la generación. Puedes evitarlo utilizando expresiones no sensibles como “estilo Ghibli” o “estilo de anime japonés moderno y luminoso”.
  • En general, “estilo” es más seguro que “artista”; por ejemplo, “Pixar” también está admitido.
  • Un enfoque más seguro es utilizar nombres de artistas fallecidos o estilos correspondientes, como “Van Gogh” y “Mona Lisa”.

Modelo y precios

ModeloPrecio ($/IMG)
gpt-4o-image-vip$0.009
gpt-4o-image$0.005
Debido al aumento de los costos de mantenimiento de las interfaces de ingeniería inversa, se ha incrementado el precio por llamada. (Actualizado el: 2025-06-04).

Ejemplo en Python

Utilizando el conocido endpoint v1/completions ofrecemos compatibilidad total. Para el uso específico, consulta:
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)}")

Ejemplo de salida

{
  "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)%      

Compatibilidad con la API oficial de OpenAI

Si prefieres usar el método de generación de imágenes más reciente publicado por OpenAI, puedes consultar la siguiente implementación. Solo ten en cuenta estos 3 puntos:
  1. No incluyas el parámetro quality: los modelos como gpt-4o-image-vip y gpt-4o-image lo llevan incorporado internamente.
  2. El campo usage (seguimiento de tokens) no es compatible.
  3. La salida más reciente devuelve datos de imagen codificados en Base64, y el script actual ya gestiona el guardado automático.
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.")

Demostración de efectos

Girl-with-a-Pearl-Earring

Girl with a Pearl Earring

  1. La famosa pintura se reinterpreta, con el texto y la marca de agua impresos directamente.
pixar

Pixar

  1. El estilo de dibujo animado 3D de Pixar, tan estable como siempre.
ghibli

Ghibli

  1. El estilo Ghibli, el más popular

Consejos prácticos

  • Compatible con cualquier idioma; los dibujos en chino también funcionan de manera estable, aunque no recomendamos dibujar una gran cantidad de texto.
  • Especifica la relación de aspecto en el prompt; de lo contrario, 4o la determinará automáticamente. Admite 2:3, 3:2 y 1:1.
  • Proporciona imágenes de referencia si te faltan ideas; se admiten una o varias imágenes.
  • Las imágenes subidas pueden comprimirse en un paso previo para mejorar la velocidad.
  • Admite fondo transparente, sin necesidad de eliminar el fondo: basta con añadir el requisito al prompt.

Última actualización: 2026-06-01