Sin imagen por las reglas de contenido: qué hacer
Qué significa que una solicitud termine sin imagen: cómo llega a la API el rechazo por las reglas de contenido, qué pasa con el cargo y cómo reformular un prompt inofensivo. Con ejemplos de imágenes de Nano Banana 2.1 y código para leer el campo failure.
Redacción de RendergridSobre la redacción
En resumen
Cuando se rechaza una solicitud, la tarea pasa a failed con failure.type igual a declined, y no hay imagen. Dos de sus códigos son content_policy (las reglas de contenido rechazan el prompt) y no_image_output (el modelo responde sin imagen). El rechazo no llega como un error HTTP, sino después del 202. Es una solicitud fallida: el importe vuelve al saldo por sí solo. Para intentarlo otra vez, cambia el prompt y usa una clave de idempotencia nueva; nada garantiza que el siguiente intento pase.
¿Por qué a veces no llega ninguna imagen?
La API acepta la solicitud con 202 antes de saber si habrá imagen: 202 significa «solicitud aceptada», no «imagen lista». Por eso el rechazo no llega como un error HTTP (ERR_CONTENT_POLICY es un código reservado), sino como una tarea en estado failed.
En failure, el campo type dice de dónde viene la causa: declined si está en la propia solicitud (el prompt, la imagen de referencia o los datos de entrada) y error si está en el servicio. Repetir igual una solicitud declined da el mismo resultado: hay que cambiarla. Toda tarea declined acaba en failed, sin imagen. Estos son tres de sus cinco códigos:
content_policy: las reglas de contenido rechazaron el prompt o la imagen de referencia.source_image_rejected: se rechazó la imagen de referencia.no_image_output: el modelo respondió con texto en lugar de una imagen, o el prompt se refiere a una imagen que no se adjuntó.
¿Cómo se ve en la respuesta de la API?
Primero llega el 202 de crear una imagen, con el cost ya cargado. Después, GET /creations/{id} responde 200 con status: "failed": es el resultado de la tarea, no un error de la solicitud de estado.
{
"id": "5b0214ae-9e39-460a-820a-f6ae3e24400b",
"status": "queued",
"task_id": "5b0214ae-9e39-460a-820a-f6ae3e24400b",
"cost": 0.02
}
{
"id": "5b0214ae-9e39-460a-820a-f6ae3e24400b",
"status": "failed",
"error": "The image or prompt was rejected by the safety filter. Try a different image or rephrase the prompt.",
"failure": {
"type": "declined",
"code": "content_policy",
"retryable": false
}
}
Para leer failure en tu código:
CREATION_ID="5b0214ae-9e39-460a-820a-f6ae3e24400b" curl --fail-with-body --max-time 20 \ "https://api.rendergrid.io/ api/ public/ v1/ creations/ $CREATION_ID" \ -H "Authorization: Bearer $RENDERGRID_API_KEY"
import os import requests API = "https://api.rendergrid.io/ api/ public/ v1" KEY = os.environ["RENDERGRID_API_KEY"] creation_id = "5b0214ae-9e39-460a-820a-f6ae3e24400b" response = requests.get( f"{API}/creations/{creation_id}", headers={"Authorization": f"Bearer {KEY}"}, timeout=(5, 20), ) response.raise_for_status() creation = response.json() if creation["status"] == "failed": # failure solo llega con status failed: trátalo como opcional failure = creation.get("failure") or {} print(failure.get("type"), failure.get("code"), failure.get("retryable"))
// Node.js 22+, archivo .mjs const API = "https://api.rendergrid.io/ api/ public/ v1"; const id = "5b0214ae-9e39-460a-820a-f6ae3e24400b"; const response = await fetch(`${API}/creations/${id}`, { headers: { Authorization: `Bearer ${process.env.RENDERGRID_API_KEY}` }, signal: AbortSignal.timeout(20_000), }); if (!response.ok) throw new Error(`HTTP ${response.status}`); const creation = await response.json(); if (creation.status === "failed") { // failure solo llega con status failed: trátalo como opcional const { type, code, retryable } = creation.failure ?? {}; console.log(type, code, retryable); }
error es un texto para mostrar, en inglés y con una redacción que puede cambiar. Basa la lógica en failure.type y failure.code.
¿Se cobra una solicitud rechazada?
El cargo se hace al aceptar la solicitud y llega en el cost del 202. Una solicitud rechazada acaba en failed, y una solicitud fallida es gratis: el importe vuelve al saldo por sí solo, sin que lo pidas. La respuesta failed no incluye el reembolso: míralo en el saldo y en el historial de operaciones del portal. Más sobre el cargo: Una solicitud fallida es gratis.
¿Cómo reformular el prompt?
Empieza por failure.code:
- Con
content_policy, cambia el prompt o usa otra imagen. - Con
no_image_output, describe la imagen que necesitas o adjunta la imagen a la que se refiere el prompt. - Con
source_image_rejected, usa otra imagen.
Si estás seguro de que tu prompt es inofensivo, describe en el prompt lo que quieres ver: qué objetos hay y cuántos, sobre qué están, con qué luz y con qué encuadre. Los tres prompts de abajo lo hacen, cierran excluyendo texto, logotipos, personas y marcas de agua, y se completaron en un intento cada uno. Son ejemplos de redacción, no una garantía de que un prompt parecido pase; ninguna imagen cumple el prompt al pie de la letra, y su texto dice dónde se desvía. Reformular no es una forma de saltarse las reglas de contenido.
Prompt: naranjas en un cuenco
Tres naranjas dentro de un cuenco blanco sencillo sobre una mesa clara; una queda algo más alta que las otras dos. Fondo neutro y luz natural suave desde la izquierda para mostrar la cáscara. Cuenco completo al centro, sin objetos extra y con margen libre. Sin texto, logotipos, personas ni marcas de agua.
Nano Banana 2.1
nano-banana-2.1 · 1K · 1:1 · $0,02
Nano Banana 2.1, 1K, 1:1, un intento. Es un resultado completado: la imagen no ilustra ningún rechazo. El prompt pedía tres naranjas en un cuenco blanco, una más alta que las otras dos, con luz suave desde la izquierda y el cuenco completo al centro. Se ven tres naranjas bien definidas, una encima y dos más abajo, a los lados. Entre las dos de abajo, por detrás, asoma una zona anaranjada en sombra que podría ser una cuarta naranja; a este tamaño no podemos confirmarlo, así que el conteo del prompt queda sin comprobar. El cuenco está centrado en horizontal, pero queda por debajo del centro del encuadre: es una desviación respecto a «al centro». El lado izquierdo del cuenco y de las naranjas está más iluminado que el derecho, como pedía la luz desde la izquierda. No se ve texto, logotipos ni personas.
Prompt: margaritas en una vasija
Tres margaritas en una pequeña vasija transparente sobre fondo crema. Los tallos se ven a través del agua y los pétalos no se confunden entre sí. Luz difusa y sombra leve a la derecha. Incluye la vasija y todas las flores en un cuadro amplio. Sin texto, logotipos, personas ni marcas de agua.
Nano Banana 2.1
nano-banana-2.1 · 1K · 1:1 · $0,02
Nano Banana 2.1, 1K, 1:1, un intento. Es un resultado completado: la imagen no ilustra ningún rechazo. El prompt pedía tres margaritas en una vasija pequeña y transparente, con los tallos visibles a través del agua, pétalos que no se confundan entre sí, luz difusa con sombra leve a la derecha y un encuadre amplio que incluyera la vasija y todas las flores. La imagen muestra las tres flores y la vasija completas, con margen alrededor, y los tallos se ven bajo el agua. Los pétalos no quedan separados: los de la flor central están en contacto con los de las dos laterales y en parte se solapan, así que esa parte del prompt no se cumple del todo. La sombra suave cae a la derecha de la vasija, como pedía el prompt. No se ve texto, logotipos ni personas.
Prompt: libros y una esfera de madera
Dos libros cerrados de tela lisa, sin texto en tapas ni lomos, apilados sobre gris claro junto a una esfera de madera. Vista ligeramente elevada y luz suave para distinguir tejido y veta. Centra los objetos sin recortar ninguno. Sin texto, logotipos, personas ni marcas de agua.
Nano Banana 2.1
nano-banana-2.1 · 1K · 1:1 · $0,02
Nano Banana 2.1, 1K, 1:1, un intento. Es un resultado completado: la imagen no ilustra ningún rechazo. El prompt pedía dos libros cerrados de tela lisa, sin texto en tapas ni lomos, apilados sobre gris claro junto a una esfera de madera, con vista ligeramente elevada, luz suave y todos los objetos centrados y sin recortar. La imagen muestra los dos libros apilados, el verde encima del azul grisáceo, y la esfera de madera delante, a la derecha; se distinguen la trama de la tela y la veta de la madera. La vista es desde un ángulo alto, más pronunciado que «ligeramente elevada»: es una desviación respecto al prompt. El conjunto queda centrado y ningún objeto se corta. No se ve texto en tapas ni lomos, ni logotipos ni personas.
Envía el prompt nuevo con una clave nueva
El prompt reformulado es otra solicitud y lleva una clave de idempotencia nueva: la clave no comprueba el cuerpo, así que con la anterior recibirías la respuesta anterior, y tampoco reinicia una tarea que ya pasó a failed. Un intento nuevo se paga como de costumbre y se reembolsa si falla. Más sobre las claves: Reintentos sin doble cargo.
¿Qué no cubre este artículo?
- Tres imágenes no son una prueba. Se completaron en un intento cada una: no miden con qué frecuencia se rechaza un prompt.
- Ninguna imagen es un rechazo. No enviamos solicitudes para provocar uno: son resultados completados de prompts inofensivos.
- Las reglas de contenido no se explican aquí. El artículo cuenta lo que devuelve la API de Rendergrid, no qué rechazan las reglas ni cómo esquivarlas.
- Reformular puede no bastar. Si el rechazo se repite, escribe a soporte con el
idde la tarea o la hora de la solicitud.
Una solicitud fallida es gratis
Escribe tu prompt en Nano Banana 2.1
Describe lo que quieres ver y mira el resultado. Si la solicitud falla, el importe vuelve al saldo.
Probar Nano Banana 2.1Preguntas frecuentes
¿Se cobra una solicitud rechazada por las reglas de contenido?
failed, y una solicitud fallida es gratis: el importe vuelve al saldo por sí solo, sin que tengas que pedirlo.¿Puedo repetir la solicitud con la misma clave de idempotencia?
failed, no: la clave anterior no la reinicia. Un intento nuevo necesita una clave nueva y es una operación nueva de pago; el cargo anterior se devuelve por sí solo.¿Qué hago si el rechazo se repite con el prompt reformulado?
id de la tarea.Fuentes
- Códigos de errorLos tipos y códigos de
failure. - Tareas y estadosLos estados de una tarea,
failedincluido. - Reintentos sin doble cargoQué hacer con la clave tras un
failed. - SaldoCuándo se hace el cargo y cuándo se devuelve.
- Crear una imagenLa solicitud y el
202.





