Saltar al contenido

Midjourney

Genere imágenes con Midjourney de forma asíncrona: parámetros, respuesta y advertencias.

ElementoValor
Base URLhttps://api.hop-base.com/v1
Enviar una tareaPOST /v1/images/generations
Consultar una tareaGET /v1/video/tasks/{task_id}
Listar tareasGET /v1/video/tasks
Grupo de la claveMidjourney generación de imágenes

Midjourney es una API asíncrona: envíe una tarea para obtener un ID de tarea de HopBase y consúltelo hasta tener el resultado; cada tarea devuelve exactamente cuatro imágenes y todas se facturan.

Modelos disponibles

ModeloID de modeloNivel / tamañoPrecio oficial
Midjourney v8.2midjourney-v8-21K por defecto; 2K nativo con --hd$0,0067desde/ imagen

Confirme el ID exacto de modelo disponible para su clave con GET /v1/models antes de enviar trabajo de pago.

Parámetros de la solicitud

Todas las solicitudes usan Authorization: Bearer sk-su-clave y Content-Type: application/json. El tamaño y la calidad van en parámetros -- al final del prompt, no en campos de la solicitud.

Campos del cuerpo

ParámetroObligatorioTipo y límitesPredeterminadoDescripción
modelObligatoriostring, coincidencia exacta—midjourney-v8-2
promptObligatoriostring con una descripción—Añada parámetros -- después
imagesOpcionalarreglo de 0–1 elementos—Imagen de referencia
nOpcionalsolo 44Cada tarea devuelve cuatro imágenes
qualityOmitirdebe estar vacío—Use --hd para 2K
extraOmitirdebe estar vacío—Sin parámetros adicionales
  • prompt debe incluir una descripción, no solo parámetros --, y no puede contener ::; las imágenes sin descripción se rechazan.
  • images es una imagen de referencia, por ejemplo [{"url":"https://example.com/ref.png"}]. Admite una sola imagen; para varias, vea «Varias imágenes de referencia» más abajo.
  • Cada elemento de images[] lleva exactamente uno de url (HTTP(S) absoluta y pública) o file_id, y no lleva usage.
  • Un quality no vacío devuelve 400; para 2K use --hd en el prompt.
  • Un objeto extra no vacío devuelve 400; este modelo no acepta parámetros adicionales.
Solo se aceptan los campos de arriba; cualquier otro devuelve 400.

El cuerpo se decodifica de forma estricta: cualquier campo que no esté en la tabla se rechaza con 400 en el envío, no se crea ninguna tarea y no se factura nada. Indique la relación de aspecto con --ar en el prompt y la calidad con --hd.

Los campos que suelen enviar los clientes de OpenAI Images, como size, response_format y style, están fuera de la tabla; la lista completa está en «Más detalles», dentro de Advertencias.

Tamaño y relación de aspecto

El tamaño de la imagen viene de --ar (o su alias --aspect) en el prompt. --hd genera de forma nativa aproximadamente al doble de longitud de lado.

Sirve cualquier relación de números enteros, no solo las de la tabla, siempre que ninguna dirección supere 14:1 (4:1 con --hd). La tabla recoge las relaciones más habituales; todos los tamaños están medidos, no derivados: --hd no es una duplicación exacta.

--arPredeterminadoCon --hd
1:1 (predeterminado)1024 × 10242048 × 2048
1:2768 × 15361552 × 3104
9:16816 × 14561648 × 2944
2:3896 × 13441792 × 2688
3:4928 × 12321904 × 2544
5:6992 × 12002016 × 2416
6:51200 × 9922416 × 2016
4:31232 × 9282544 × 1904
3:21344 × 8962688 × 1792
16:91456 × 8162944 × 1648
2:11536 × 7683104 × 1552
21:91680 × 7203376 × 1440
14:14096 × 288Rechazado — vea más abajo
  • --ar lleva exactamente un valor ancho:alto formado por enteros positivos; --ar 1.5:1 se rechaza.
  • La relación no puede superar 14:1 en ninguna de las dos direcciones.
  • --hd baja ese techo a 4:1: --hd --ar 14:1 se rechaza, mientras que --hd --ar 4:1 se genera a 4096 × 1184.

Parámetros del prompt

Estos se aceptan y se transmiten:

ParámetroRangoPropósito
--ar / --aspectrelación enteraRelación de aspecto
--hdindicadorRender nativo en 2K
--s / --stylize0-1000Intensidad de la estilización
--c / --chaos0-100Variación entre las cuatro imágenes
--weird / --w0-3000Estética poco convencional
--iw0-3Peso de la imagen de referencia
--sref + --sw--sw 0-1000Referencia de estilo y su intensidad
--notextoExcluir elementos
--seedenteroReproducibilidad
--tile, --expindicador / 0-100Mosaico sin costuras; rango dinámico
  • Escriba todos los parámetros después de la descripción: el texto que sigue al primer parámetro -- se lee como valor de ese parámetro.
  • Un parámetro numérico con rango debe ir seguido de exactamente un número; si falta el valor, hay varios, no es un número o está fuera de rango, se devuelve 400.

Varias imágenes de referencia

images admite una sola imagen. Para usar varias, ponga sus URL al principio de prompt, separadas por espacios, y después la descripción; es la sintaxis estándar de Image Prompt de Midjourney:

"prompt": "https://example.com/a.png https://example.com/b.png a cat sitting in a vintage car --ar 1:1"

  • Cada URL debe ser una dirección HTTP(S) pública.
  • Las imágenes de referencia son inspiración, no un collage: su influencia no se reparte por igual, y un sujeto muy marcado en una imagen puede imponerse al resto.
  • Para asegurarse de que aparezca algo de una imagen concreta, nómbrelo en la descripción o suba --iw (0-3) para dar más peso a las imágenes de referencia.

Parámetros rechazados

Estos se rechazan con 400 en el envío. De lo contrario, el modelo los ignoraría en silencio —y usted pagaría por un efecto que nunca obtuvo— o haría fallar la tarea minutos después.

ParámetroPor qué
--q / --qualityNo tiene efecto en esta versión del modelo
--nijiNiji es una versión de modelo aparte, no un parámetro aquí
--repeatNo tiene efecto; el número de imágenes por tarea es fijo
--oref, --crefLa referencia omni y la de personaje no están disponibles en v8.x
--stealth, --stopNo se admiten en esta versión del modelo
--relax, --turboLas tareas siempre se ejecutan en modo Fast: Relax no se ofrece en esta API y Turbo no está disponible en v8.x
--draftDevuelve 24 imágenes de baja resolución por tarea; no se ofrece
--profile / --pLos perfiles de personalización no se admiten aquí
::La ponderación multi-prompt no se admite en esta versión del modelo

Respuesta

Respuesta del envío

Un envío exitoso devuelve HTTP 202:

CampoTipoDescripción
idstringID de tarea de HopBase para consultar
objectstringSiempre image.generation.task
modelstringmidjourney-v8-2
statusstringEmpieza en queued
createdintegerHora de creación (segundos Unix)
billing_bucketstringNivel predeterminado o nivel 2K de --hd
requested_imagesintegerSiempre 4
images_per_taskintegerSiempre 4
noticestringAviso: cuatro imágenes, todas facturadas
{
  "id": "ktEXAMPLE",
  "object": "image.generation.task",
  "model": "midjourney-v8-2",
  "status": "queued",
  "created": 1790000000,
  "billing_bucket": "img_1k",
  "requested_images": 4,
  "images_per_task": 4,
  "notice": "this model always returns 4 images per task and bills every returned image"
}

Resultado de la consulta

status pasa por queued → processing → completed o failed. Solo estos dos últimos son terminales, así que trate cualquier otro valor como en curso.

CampoTipoDescripción
idstringID de tarea
objectstringSiempre video.generation.task, también en imágenes
statusstringqueued / processing / completed / failed
outputsstring[]Cuatro URL de imagen al completar, válidas 24 horas
usageobjectMedición al completarse: bucket (el nivel del envío) y billed_images (siempre 4)
usage.costnumberEl cargo de esta tarea en CNY (el mismo cargo que usage.cost_usd)
usage.cost_usdnumberEl importe en USD realmente descontado de su saldo por esta tarea, el mismo que su registro de consumo
usage.currencystringLa moneda de usage.cost, siempre CNY
error.codestringCódigo de error estable si falla
error.messagestringExplicación del fallo en inglés

Extracto de una tarea completada; el ID y las URL son de ejemplo:

{
  "id": "ktEXAMPLE",
  "object": "video.generation.task",
  "model": "midjourney-v8-2",
  "status": "completed",
  "created": 1790000000,
  "outputs": [
    "https://api.hop-base.com/example-signed-image-1.png",
    "https://api.hop-base.com/example-signed-image-2.png",
    "https://api.hop-base.com/example-signed-image-3.png",
    "https://api.hop-base.com/example-signed-image-4.png"
  ],
  "usage": { "bucket": "img_1k", "billed_images": 4, "cost": 0.1496, "cost_usd": 0.022, "currency": "CNY" }
}

Las URL de salida se sirven desde api.hop-base.com como enlaces firmados válidos por 24 horas desde que la tarea se completa. Consultar de nuevo devuelve la misma URL sin extenderla, y un enlace vencido devuelve 410, así que descargue las imágenes a tiempo.

Cuando la tarea termina, el objeto usage de la raíz de la consulta también incluye cost_usd —el importe en USD realmente descontado de su saldo por esta tarea, 0 si falló sin cargo—, cost (el mismo cargo en CNY) y currency (siempre CNY); consulte Generación de video. En la lista de tareas (GET /v1/video/tasks), cada tarea finalizada lleva los mismos cost, cost_usd y currency en su usage.

Ejemplos

Envíe una tarea 16:9 y consúltela hasta un estado terminal:

curl https://api.hop-base.com/v1/images/generations \
  -H "Authorization: Bearer sk-su-clave" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "midjourney-v8-2",
    "prompt": "a red apple on a wooden table, studio light --ar 16:9"
  }'

# Consulte con el id devuelto; sin encabezado de facturación
curl https://api.hop-base.com/v1/video/tasks/YOUR_TASK_ID \
  -H "Authorization: Bearer sk-su-clave"

Advertencias

  • Cada tarea devuelve cuatro imágenes y todas se facturan, así que presupueste cuatro imágenes por envío.
  • n solo acepta 4 o nada en absoluto.
  • Indique la relación con --ar y el 2K con --hd; size o quality en el cuerpo devuelven 400.
  • Con --hd, el techo de la relación de aspecto baja de 14:1 a 4:1.
  • Escriba todos los parámetros -- después de la descripción.
  • La concurrencia es limitada: enviar un lote grande en paralelo hace fallar la mayoría en lugar de ponerlo en cola.
  • Una tarea que sigue sin terminar 2 horas después de crearse se marca como fallida y no se factura.
La moderación de contenido es estricta.

Incluso en retratos de moda o comerciales, las descripciones detalladas de la silueta, el tipo de cuerpo o partes del cuerpo como las piernas, o el énfasis en ropa ceñida o translúcida, pueden rechazarse cuando se acumulan. Describa el estilismo general, el estilo, la escena y la iluminación, y vuelva a enviarla.

Errores comunes

Todos los errores del envío son HTTP 400; no se crea ninguna tarea y no se factura nada. Las comprobaciones se hacen en orden y se devuelve el primer fallo, con este cuerpo:

{
  "error": {
    "message": "request body does not match the JSON contract: json: unknown field \"size\"",
    "type": "invalid_request_error"
  }
}
ErrorSolución
json: unknown field "size"Quite el campo sobrante; indique la relación con --ar
the quality field has no effect on this modelQuite quality; use --hd para 2K
the n field cannot change thatOmita n o use 4
prompt must contain a descriptionAñada una descripción antes de los parámetros
parameter --draft is not acceptedQuite el parámetro rechazado
may not exceed 4:1 when --hd is usedReduzca la relación o quite --hd

Tareas fallidas

Una tarea fallida sigue respondiendo a la consulta con HTTP 200 y status failed. Decida el éxito o el fallo por status, ramifique su lógica por error.code y muestre error.message.

Causaerror.codeQué hacer
La moderación rechazó el promptinput_sensitiveReformule el prompt y vuelva a enviarlo
La moderación rechazó la imagen de referenciainput_sensitiveCambie la imagen de referencia y vuelva a enviarla
Moderación sin indicar el origeninput_sensitiveReformule; cambie la imagen de referencia si la envió
Techo de concurrencia alcanzadorate_limitedReintente en breve; ejecute menos tareas a la vez
Falta la descripciónprompt_requiredAñada una descripción
Parámetro no admitidoinvalid_requestQuite el parámetro que no está en la lista admitida
Relación de aspecto no válidainvalid_requestUse una relación entera dentro del techo
Prompt mal formadoinvalid_requestRevise los parámetros finales y sus valores
Fallo de generación (otros)generation_failedReintente una vez; luego contacte con soporte con el ID de tarea
No se pudo seguir la tareageneration_failedContacte con soporte indicando el ID de tarea
Tiempo agotadotimeoutVuelva a enviarla
Terminó sin salidano_outputVuelva a enviarla

Facturación

Midjourney factura por imagen devuelta, así que una tarea cuesta cuatro imágenes a la tarifa de su nivel; el render predeterminado y el render 2K con --hd tienen precios distintos. Solo se factura una tarea completada correctamente; los envíos rechazados, los rechazos de moderación y las tareas fallidas no se facturan.

Los precios de lista oficiales están en la página de precios. Su tarifa es la que aparece en el catálogo de modelos con la sesión iniciada, y el cargo real de cada solicitud está en su registro de uso.

Las especificaciones y los precios oficiales del modelo también están en su ficha del modelo.

Próximos pasos