El precio de portada por imagen es un mal primer filtro. Dos modelos con la misma tarifa nominal pueden diferir en si aceptan imágenes de referencia, si admiten ediciones con máscara, cómo se selecciona el tamaño de salida y si el cobro es por solicitud o por token. Filtre los candidatos por capacidad primero, y luego compare el costo por salida aceptada con sus propios prompts.
Este artículo es un marco de selección para APIs de generación de imágenes. Cubre la generación de imágenes, no de video. En caso de que un flujo de trabajo necesite ambos, se aplican los mismos mecanismos asincrónicos y de facturación, pero el video queda fuera del alcance de este texto.
Paso 1: Coincidir con la operación admitida
La primera ronda de eliminación es operativa. Un endpoint que genera solo a partir de texto no puede realizar una edición con máscara, y un modelo diseñado para inpainting no es una herramienta de uso general de prompt a imagen.
En TokenLab, la generación y la edición suelen ser endpoints diferentes:
| Lo que necesita | Endpoint | Notas |
|---|---|---|
| Texto a imagen | POST /v1/images/generations |
La solicitud comienza únicamente a partir de un prompt |
| Imagen a imagen / generación guiada por referencia | POST /v1/images/generations |
Modelos que aceptan operation: "image-to-image" más URLs de referencia |
| Edición con máscara o multipart | POST /v1/images/edits |
Modelos que documentan un flujo de edición |
| Variación de una imagen existente | POST /v1/images/variations |
Para integraciones que ya utilizan el formato de variaciones |
| Estado de la tarea | GET /v1/tasks/{id} |
Cuando una respuesta de creación devuelve task_id, status: "pending" o poll_url |
Consulte la guía de generación de imágenes para ver la tabla de decisión y las referencias de Crear imagen y Editar imagen para los campos de solicitud.
Una regla de enrutamiento causa una cantidad desproporcionada de fallos: las solicitudes con imagen de referencia de Nano Banana (nano-banana-2, nano-banana-pro) van a /v1/images/generations con operation: "image-to-image" e image_urls, no a /v1/images/edits. Por el contrario, las ediciones de gpt-image-2 corresponden a /v1/images/edits, donde acepta cargas multipart de image, image_url / image_urls en JSON y referencias images[] con hasta 16 imágenes de origen.
Agrupaciones útiles del catálogo actual de TokenLab:
- Tanto generar como editar:
flux-2-klein-4b,flux-2-klein-9b,flux-2-pro,flux-2-flex,flux-2-max,flux-kontext-pro,flux-kontext-max,gemini-3-pro-image,gemini-3.1-flash-image,nano-banana-2,nano-banana-2-lite,nano-banana-pro,gpt-image-2,gpt-image-2.5-flare,gpt-image-2.5-sunburst,grok-imagine-image,grok-imagine-image-quality,grok-imagine-image-2.0,qwen-image-2.0,qwen-image-2.0-pro,qwen-image-3.0,seedream-4.0,seedream-4.5,seedream-5.0,seedream-5.0-lite,seedream-5.0-pro,vidu-image-lite,vidu-image-pro. - Solo texto a imagen:
flux-1-dev,flux-pro-1.1,flux-pro-1.1-ultra,sd3.5-medium,sd3.5-large,sd3.5-large-turbo,sd3.5-flash,stable-image-core,stable-image-ultra,z-image,z-image-turbo,kling-image,kling-omni-image,hy-image-lite. - Herramientas de edición especializadas:
stability-inpaint,stability-control-sketch,stability-control-structure,stability-style-guide,stability-upscale-fast,stability-upscale-conservative,image-upscaler,image-background-remover,flux-pro-1.0-fill,qwen-image-edit.
Verifique las operaciones por modelo en lugar de por familia. GET /v1/models?recommended_for=image devuelve el conjunto recomendado actual, y la referencia de Obtener un modelo muestra el campo supported_operations que indica lo que acepta un ID específico.
Paso 2: Compruebe cómo acepta el modelo las imágenes de referencia
El manejo de imágenes de referencia es donde suelen fallar las integraciones. Los nombres de los campos no son intercambiables:
image_url: una sola imagen de referencia.image_urls: una o más referencias en JSON.reference_image_urls: referencias adicionales para modelos que separan las entradas principales de las referencias.image: una carga de archivo multipart, para imágenes de origen privadas o protegidas por encabezados.images[]conimage_urlofile_id: un formato de flujo de edición; no se acepta en/v1/images/generations.
Restricciones que conviene considerar en el diseño, según la referencia de la API:
- Las referencias remotas deben ser URLs públicas
http/https, sin credenciales integradas ni fragmentos, y no deben resolver a localhost, rangos de IP privados o reservados. Cada redirección se vuelve a comprobar. - Imágenes obtenidas mediante URL: 50 MiB por imagen, 200 MiB en total por solicitud (incluida la máscara), tiempo de espera de obtención de 30s, hasta 3 redirecciones. La carga útil obtenida debe ser un PNG, JPEG o WebP real.
- Los límites de imágenes de origen difieren:
gpt-image-2acepta hasta 16; el límite documentado de 3 imágenes de entrada se aplica específicamente agrok-imagine-imageygrok-imagine-image-quality(que fallan con400 too_many_imagespor encima de 3) y no está documentado paragrok-imagine-image-2.0. - Una máscara (
mask) debe ser un archivo PNG menor de 50 MiB con las mismas dimensiones que la imagen de origen.
Si sus imágenes de origen son privadas, planifique el uso de carga multipart o una referencia /v1/files en lugar de pasar una URL firmada con vencimiento. Una URL firmada que caduca antes de que comience el procesamiento es una entrada rechazada, no un fallo de generación.
Paso 3: Compare los controles de salida, no solo los nombres de los modelos
Dos modelos en el mismo nivel pueden exponer controles de tamaño y calidad completamente diferentes. Confirme el contrato del selector antes de construir una interfaz de usuario a su alrededor.
| Control | Qué verificar |
|---|---|
size |
Las familias con estilo de OpenAI aceptan auto o WIDTHxHEIGHT. Para gpt-image-2, las dimensiones deben ser múltiplos de 16, el borde más largo como máximo de 3840px, la relación largo/corto como máximo de 3:1 y el total de píxeles entre 655,360 y 8,294,400 |
aspect_ratio |
Las familias de imágenes de Google y Grok Imagine utilizan 1:1, 16:9, 9:16, 3:2, 2:3 y valores similares |
resolution |
gemini-3.1-flash-image, gemini-3-pro-image, nano-banana-2 y nano-banana-pro admiten 1k, 2k, 4k, mientras que nano-banana-2-lite solo admite 1k. Grok Imagine admite 1k y 2k |
quality |
Los modelos GPT Image usan auto, low, medium, high. Otros modelos pueden utilizar valores diferentes |
n |
Número de imágenes por solicitud, dependiente del modelo |
response_format |
url o b64_json. Las tareas asincrónicas devuelven URLs independientemente del formato solicitado |
background, output_format, output_compression |
Documentados para gpt-image-2; transparent no es compatible |
async |
Admitido para gpt-image-2 y modelos oficiales de imagen FLUX/BFL |
Enviar un campo no documentado no es inocuo. input_fidelity, por ejemplo, no forma parte de los campos admitidos actualmente para gpt-image-2 y devuelve 400 unsupported_parameter. Los campos no admitidos en otros modelos fallan de manera similar. La lista completa de campos se encuentra en la referencia de Crear imagen.
Paso 4: Identifique la unidad de facturación antes de comparar nada
Las comparaciones de costos salen mal cuando un modelo cobrado por token se compara contra un modelo cobrado por imagen como si fueran la misma unidad.
gpt-image-2tiene precio por token. TokenLab sigue el desglose de uso del creador para tokens de entrada de texto, entrada de imagen, entrada en caché reportada y salida de imagen; no se factura como un modelo fijo por imagen.- La mayoría de los demás modelos de imagen tienen precio por solicitud, por imagen o por otra unidad mostrada en la página del modelo.
La consecuencia práctica: para gpt-image-2, el mismo prompt con la misma configuración nominal puede costar diferente según la resolución, la calidad y el prompt en sí, porque el volumen de tokens de salida varía. Mida antes de comprometerse con una regla de enrutamiento.
Consulte la unidad de facturación y el precio vigentes al momento de la solicitud en lugar de codificar una tabla fija:
- Facturación y precios explica cómo funcionan los cobros, las estimaciones y la reserva asincrónica.
- Obtener un modelo devuelve
tokenlab.pricingytokenlab.pricing_unitpara un modelo individual. - Listar modelos devuelve el catálogo con
tokenlab.pricing,tokenlab.capabilitiesytokenlab.deliveryAvailability. - La página de modelos muestra la misma información para su visualización.
Un guión en la columna de precio de TokenLab significa que actualmente no hay ninguna oferta de TokenLab Verified disponible para ese modelo, no que el modelo sea gratuito. Los modelos con suministro Oficial aún pueden alcanzarse a través de la opción de entrega Oficial o Automática.
Paso 5: Decidir entre flujo sincrónico o basado en tareas
Las solicitudes de imágenes de alta resolución pueden tardar cerca de un minuto o más. Configure el tiempo de espera de su cliente HTTP en al menos 120s para llamadas sincrónicas, o utilice el flujo de tareas.
- Envíe
async: truecongpt-image-2o modelos oficiales de imagen FLUX/BFL para obtener untask_idy unapoll_urlen lugar de una imagen terminada. - No codifique un modelo de forma fija como siempre sincrónico o siempre asincrónico. Compruebe la respuesta de creación: si contiene
status: "pending",task_idopoll_url, siga lapoll_urldevuelta. - Los estados son
pending,processing,completedyfailed. Una lectura de estado exitosa devuelve HTTP 200 incluso cuando la tarea ha fallado; use el campostatus, no el código HTTP. - Los resultados de imágenes asincrónicas se devuelven como URLs. Si necesita
b64_jsonen bruto, use una solicitud sincrónica. - Realice sondeos cada pocos segundos y deténgase al alcanzar un estado terminal. Las URLs de resultados HTTP(S) de imágenes generadas pueden conservarse como copias multimedia durante 30 días; consulte
media_retention.itemspara ver el estado de cada elemento y suexpires_at.
Los detalles se encuentran en la guía de tareas asincrónicas y sondeo y en la referencia de Obtener estado de la imagen.
Los reintentos representan un riesgo de facturación, no solo de latencia. Una solicitud de creación reintentada tras un tiempo de espera agotado puede producir una segunda tarea y un segundo cobro. Almacene request_id, task_id y cualquier billing_transaction_id, y verifique si se creó una tarea antes de reintentar.
Paso 6: Evalúe con su propio conjunto de prompts
En este artículo no se incluye ninguna clasificación de calidad independiente de proveedores, y ninguna debe tomarse del material de marketing. Justifique la elección mediante una medición en su carga de trabajo:
- Reúna un conjunto fijo de prompts que refleje su distribución de producción: los temas, estilos y formatos de instrucción que realmente recibe. Los prompts genéricos de demostración no le servirán para diferenciar los modelos.
- Ejecute el mismo conjunto en sus modelos candidatos con la misma configuración y registre el tiempo de generación por solicitud, incluidos los reintentos.
- Califique los resultados con una rúbrica fija, ya sea automatizada o mediante un panel de revisión humana, en lugar de evaluar muestras a simple vista.
- Calcule el costo por imagen aceptada, no el costo por imagen generada. Un modelo más económico que necesita dos intentos por cada salida utilizable no es más barato.
- Si su producto es sensible a la latencia, registre percentiles en lugar de promedios, ya que la cola es lo que los usuarios perciben.
- Vuelva a ejecutar la comparación cuando cambie de proveedor o de objetivos de resolución, ya que tanto las unidades de tarificación como el comportamiento del modelo pueden cambiar.
El costo por imagen aceptada es la única cifra que responde a si un modelo más costoso vale su tarifa para su carga de trabajo.
Solicitud ilustrativa
El siguiente es un ejemplo ilustrativo de la estructura de llamada de generación, no un resultado medido. Utiliza un modelo que expone aspect_ratio y resolution.
curl https://api.tokenlab.sh/v1/images/generations \
-H "Authorization: Bearer $TOKENLAB_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-3-pro-image",
"prompt": "A cinematic portrait of a white cat sitting on a rainy windowsill",
"aspect_ratio": "16:9",
"resolution": "2k"
}'
Si esa respuesta regresa con status: "pending", sondee la poll_url devuelta en lugar de tratarla como un fallo.
El acceso a los modelos no es uniforme entre los diferentes formatos de API. TokenLab acepta formatos de solicitud de Chat Completions, Responses, Anthropic Messages y Gemini, y un modelo determinado puede admitir solo algunos de ellos. Compruebe tokenlab.accepted_request_formats en el modelo antes de reutilizar un cliente existente; consulte Formatos de API.
Límites de este artículo
- No se incluye aquí ningún benchmark independiente de calidad, medición de latencia ni cifra de rendimiento de procesamiento para ningún modelo de imagen. El posicionamiento de los proveedores sobre anatomía, renderizado de texto o fotorrealismo no se reproduce como un hecho.
- No se cotiza ningún precio. Las unidades de facturación de los modelos de imagen difieren y cambian; consulte el valor actual en la página de Modelos o mediante
GET /v1/models/{model}. - La disponibilidad del modelo varía según la opción de entrega y el espacio de trabajo.
tokenlab.deliveryAvailabilitydescribe la compatibilidad configurada; no garantiza la disponibilidad en tiempo real, la cual se comprueba cuando se ejecuta una solicitud. - Se aplican restricciones regionales públicas.
Lecturas relacionadas
- Guía de generación de imágenes
- Crear imagen y Editar imagen
- Tareas asincrónicas y sondeo
- Facturación y precios
- Listar modelos y Obtener un modelo
- Formatos de API
- Lista de modelos actuales y precios: Página de modelos
Fuentes
- https://docs.tokenlab.sh/guides/image-generationObservado el 2026-09-27
- https://docs.tokenlab.sh/api-reference/images/create-imageObservado el 2026-09-27
- https://docs.tokenlab.sh/api-reference/images/edit-imageObservado el 2026-09-27
- https://docs.tokenlab.sh/api-reference/models/get-modelObservado el 2026-09-27
- https://docs.tokenlab.sh/guides/billingObservado el 2026-09-27
- https://docs.tokenlab.sh/api-reference/models/list-modelsObservado el 2026-09-27
- https://tokenlab.sh/models
- https://docs.tokenlab.sh/guides/async-jobs-pollingObservado el 2026-09-27



