Ir al contenido principal

Flujo de generación de imágenes NSFW con n8n: crea y guarda una serie de personajes

Crea un flujo NSFW de imágenes con n8n. Prepara seis escenas, limita costos, guarda archivos y recupera tareas existentes sin pagar dos veces.

Autor
Lydia
Publicado
Lectura
33 min de lectura
Actualizado
Mujer adulta ficticia con vestido de noche de satén verde, enmarcada por luz cálida burdeos del apartamento y un contorno nocturno frío.

Para crear un flujo de generación de imágenes NSFW con n8n, conecta una lista de escenas a un modelo de texto a imagen orientado a adultos y guarda cada imagen terminada antes de comenzar la siguiente. En n8n autohospedado, el nodo comunitario de SpicyAPI se encarga de la cotización, el envío, la espera y la descarga. En n8n Cloud, utiliza la plantilla con HTTP Request integrado: actualmente el paquete no está verificado para instalarse directamente en Cloud.

Para una primera serie de un personaje adulto ficticio, usa Z-Image Spicy a 1024 × 1536 con la expansión del prompt desactivada. Su precio base es $0.01235 por imagen, por lo que seis solicitudes exitosas cuestan $0.07410 en generación de imágenes. Establece un límite de costo por elemento, mantén manual la primera ejecución y guarda los archivos reales en una carpeta del proyecto. El alojamiento de n8n y el almacenamiento de archivos tienen costos separados.

El flujo siguiente crea una serie de retratos nocturnos de un personaje adulto ficticio. Tú proporcionas la descripción y seis escenas; n8n repite la preparación y la entrega. Mantendrá consistente el encargo escrito del personaje, pero texto a imagen por sí solo no garantiza un rostro idéntico. Además, n8n no cambia la política de contenido del modelo: añadir un nodo de automatización a una API restringida no la vuelve libre de censura.

Este tutorial de configuración se basa en el código actual del plugin, el catálogo de modelos y la documentación de n8n. El ejemplo es un flujo propuesto, no el informe de una nueva prueba de seis imágenes. Las ilustraciones públicas explican la configuración; no son muestras que demuestren el rendimiento de los modelos.

Qué vas a construir

La secuencia es:

Manual Trigger → Build scene list → Split Out → Build prompts → Loop Over Items → SpicyAPI Generate → Google Drive Upload → regreso al bucle.

El bucle procesa una escena a la vez. El nodo de generación termina y descarga su imagen, el nodo de Drive la guarda y solo después empieza la siguiente escena. La salida Done del bucle marca el final de la serie terminada.

Este orden importa cuando creas un conjunto y no una sola imagen. Si falla la escena cuatro, las escenas uno a tres deberían estar ya en la carpeta. Puedes recuperar la cuarta y continuar con las restantes en vez de reiniciar toda la serie. También permite dar un nombre reconocible a cada imagen mientras todavía tienes la información de su escena.

El nodo de SpicyAPI ya puede procesar múltiples elementos de entrada. Aquí añadimos un bucle específicamente para guardar cada resultado antes de avanzar; no es necesario solo para enviar varios prompts. Más adelante puede ser útil un nodo de generación con varios elementos, pero trabajar imagen por imagen facilita entender qué es una ejecución, una tarea y un archivo descargado.

No necesitas un AI Agent, una interfaz, Telegram ni un modelo de lenguaje que redacte prompts para esta primera versión. Puedes añadirlos cuando resuelvan un problema real. Por ahora, prescindir de ellos deja un lugar claro para editar el personaje, otro para cambiar la escena y una carpeta clara con los resultados.

Elige el modelo de imagen antes que la plantilla

En el trabajo de personajes para adultos, la elección del modelo precede a la automatización. Una plantilla puede tener un formulario útil o una demostración pulida y usar un endpoint que rechace tu material. Algunos ejemplos genéricos de generadores con n8n añaden deliberadamente su propia lista de bloqueo NSFW. Importarlos sin cambios conserva ese comportamiento.

Estas son las opciones relevantes de texto a imagen de SpicyAPI para esta guía:

ModeloPrecio de generación sin expansiónControles de tamañoCuándo encaja en este flujo
Z-Image Spicy$0.01235 por imagenAnchura y altura de 256–1536 píxeles cada una; valor predeterminado 1024 × 1536Empezar una serie de retratos con un endpoint para adultos y un costo modesto
Z-Image Spicy Pro$0.019 por imagenAnchura y altura de 256–2560 píxeles cada una; valor predeterminado 1024 × 1024La imagen final necesita un lado mayor de 1536 píxeles
Z-Image Turbo$0.010 por imagenSelección entre relaciones de aspecto admitidas; valor predeterminado 1:1Prueba económica del flujo o exploración conceptual con su propio conjunto de parámetros

Las dos familias Spicy figuran como endpoints orientados a adultos y sin restricciones. Ese es el alcance del producto proporcionado, no una nueva tasa medida de aceptación para todos los prompts posibles. Selecciona el endpoint que admite la tarea que quieres automatizar y haz una prueba pequeña con tu encargo creativo real antes de ampliar la serie.

Pro tiene sentido para un lienzo de entrega mayor; su nombre no demuestra que conserve mejor el rostro. Si el retrato final solo necesita 1024 × 1536, Spicy estándar ya admite ese tamaño. Pagar Pro debería responder a un requisito concreto, no a la suposición de que un nombre más caro resuelve la deriva del personaje.

No copies ajustes entre las filas como si fueran la misma API. Spicy y Spicy Pro utilizan width y height. Turbo usa aspect_ratio y limita el prompt a 1,000 caracteres. Los prompts de Spicy no tienen un límite de caracteres aplicado. Estos endpoints reciben texto, no referencias; añadir una imagen al flujo no les otorga una capacidad de referencia que no exponen.

Deja apagada la expansión del prompt en la primera serie. Vas a escribir una descripción deliberada y una escena concreta. Un expansor introduce otra transformación entre esas instrucciones y la solicitud de imagen, por lo que cuesta más identificar qué texto produjo el resultado. También modifica el precio de Spicy estándar y Turbo: con expansión cuestan $0.0133 y $0.016 por imagen, respectivamente. Pro tiene un único precio indicado por imagen.

En la primera ejecución, elige Spicy estándar, fija explícitamente 1024 × 1536 y usa la expansión desactivada predeterminada. Así el ejemplo siguiente tiene un tamaño de encuadre constante y un cálculo sencillo. Después de abrir las imágenes guardadas, puedes decidir si necesitas una composición más ancha, un lienzo mayor o un modelo de edición con más control de identidad.

Instala el nodo y conecta tu cuenta

Para el paquete, la configuración de la API Key y las plantillas HTTP de n8n Cloud, abre la guía oficial del nodo n8n de SpicyAPI. Luego sigue la configuración de escenas o referencias de este flujo concreto.

La opción directa con nodo comunitario requiere una instancia autohospedada de n8n que permita paquetes comunitarios. Abre Settings, busca Community Nodes e instala @spicyapi/n8n-nodes-spicyapi. La versión publicada es 0.1.1. Si el administrador desactivó la instalación de nodos comunitarios, pídele que la habilite o instale el paquete; buscar repetidamente en el selector no lo añadirá.

Que el paquete esté publicado no significa que esté verificado por n8n. n8n Cloud permite nodos comunitarios verificados y actualmente este paquete no pertenece a esa categoría. Los usuarios de Cloud deben pasar a la sección de plantilla HTTP. La distinción sigue la documentación de instalación de nodos comunitarios de n8n, no una limitación de la API de imágenes.

Después de instalar, añade un nodo SpicyAPI y crea su credencial. Obtén la clave en la consola de claves de SpicyAPI, pégala en API Key y conserva la Base URL predeterminada, https://api.spicyapi.ai. Guarda la credencial y usa su prueba de conexión. La clave pertenece a esa credencial, no a un prompt, un nodo Edit Fields o una exportación compartida del flujo.

Una prueba de credencial exitosa demuestra que se puede acceder a la cuenta. No significa que ya hayas generado una imagen, que el modelo elegido esté disponible para cualquier entrada ni que tengas saldo para un lote grande. Comprueba el saldo antes de la prueba y deja inactivo cualquier activador programado hasta que funcione el camino manual.

Si aparece el nodo pero no carga el selector de modelos, comienza revisando credencial y conexión en vez de reescribir el prompt. Una solicitud fallida de lista de modelos es un problema de configuración. También puedes elegir el modo ID del campo Model e introducir el identificador público exacto, pero un ID no repara una clave inválida ni evita las reglas de parámetros.

En este ejemplo, el identificador es alibaba/z-image-spicy/text-to-image. El nombre de la página de familia y el identificador de API cumplen funciones distintas: la página explica el producto y el identificador completo selecciona la tarea exacta. Usa el identificador completo en el nodo; no lo sustituyas por el slug breve de la web.

Genera y guarda primero una imagen

Antes de montar la lista de seis escenas, conecta Manual Trigger a un nodo SpicyAPI. Selecciona Resource Image y Operation Generate. Elige Z-Image Spicy o usa el modo ID con el identificador anterior. Deja Media Inputs vacío porque la solicitud es de texto a imagen.

Usa este prompt inicial completo:

Fotografía editorial de Mara, una mujer ficticia de 34 años con rizos oscuros hasta los hombros, ojos marrones, rostro suavemente angular y un pequeño colgante dorado. Lleva un vestido de noche de satén verde oscuro opaco con tirantes finos. Está junto a una ventana alta de apartamento al anochecer, con una mano apoyada suavemente en la cortina, mirando hacia la cámara con serena confianza. Retrato de cintura hacia arriba, luz interior cálida mezclada con luz azul fría del anochecer, textura de piel natural, pliegues realistas en la tela, ambiente romántico discreto, ninguna otra persona en el encuadre.

El prompt describe un personaje adulto específico y un momento visible. Da una posición a la cámara, señala la ropa importante y separa la luz interior cálida de la ventana fría. No exige reconstruir una historia elaborada en una sola imagen fija.

En Model Parameters, establece anchura 1024, altura 1536 y expansión del prompt false. Deja la semilla sin establecer en esta prueba. En Additional Parameters, conserva el objeto vacío {}. Ese campo puede sobrescribir el prompt y los ajustes visibles, por lo que un valor olvidado podría hacer que el nodo envíe algo distinto de lo mostrado en el formulario.

Establece Max Cost per Item (USD) en 0.015. Supera el precio actual de $0.01235, pero queda muy por debajo de los $2 por elemento predeterminados del nodo. En las opciones de generación, activa Wait for Completion y Download Output. Usa data como nombre de la propiedad binaria. Mantén el tiempo máximo de espera predeterminado en la primera imagen; el nodo usa el plazo de la tarea en lugar de esperar indefinidamente.

Ejecuta una vez. El nodo obtiene una cotización antes de crear la tarea y la compara con el límite de costo. Cuando la tarea termina correctamente y la salida está lista, descarga la imagen como datos binarios. Abre la vista Binary de la salida para previsualizar o descargar data.

Ahora deberían coincidir tres cosas: la tarea terminó correctamente, la imagen binaria abre y la imagen sigue razonablemente el encargo. Una tarea exitosa con ropa incorrecta es un problema creativo. Una credencial fallida es configuración. Una tarea exitosa cuyo archivo todavía no se guarda es entrega. Separarlos evita pagar otra generación cuando la imagen original simplemente no ha llegado al destino.

Observa la imagen al tamaño de uso. Para una tarjeta de perfil de compañía, el rostro debe distinguirse en un recorte pequeño. Para una ilustración de capítulo, quizá importen más la pose y la habitación. Si el colgante distrae del rostro, simplifícalo antes de ampliar la serie. Si la expresión es demasiado neutra, modifica la mirada o la pose en vez de añadir una docena de adjetivos generales de calidad.

Añade ahora un nodo Google Drive después de Generate. Selecciona Resource File, Operation Upload e Input Data Field Name data. Elige la credencial de Drive y una carpeta del proyecto, y ejecuta la carga con la salida exitosa. Abre el archivo guardado en Drive. Completa esta primera carga antes del lote; de lo contrario, seis generaciones exitosas pueden obligarte a depurar seis veces el mismo problema de archivo ausente.

Prepara una descripción del personaje y seis escenas distintas

Para un conjunto coherente, mantén la apariencia del personaje y el estilo fotográfico en dos campos reutilizables. Cambia por separado la descripción de escena. Ofrece más control que pedir a un modelo de lenguaje un prompt nuevo para cada imagen, porque puedes ver qué partes quedan fijas y cuáles varían.

Añade un nodo Edit Fields después de Manual Trigger y llámalo Build scene list. En Manual Mapping, crea estos campos:

CampoTipoValor de ejemplo
seriesIdStringmara-evening-v1
characterBaseStringEdad, rostro, cabello, colgante y vestido opaco de satén verde del personaje adulto ficticio
styleBaseStringFotografía editorial, textura natural, tela realista, ambiente romántico discreto
scenesArrayLos seis objetos de escena siguientes

Para characterBase, usa una oración completa: «Mara es una mujer ficticia de 34 años con rizos oscuros hasta los hombros, ojos marrones, rostro suavemente angular y un pequeño colgante dorado, que lleva un vestido de noche opaco de satén verde oscuro con tirantes finos». Para styleBase, usa «Fotografía editorial, textura de piel natural, pliegues realistas de tela, ambiente romántico discreto, un único personaje adulto».

Evita meter todas las preferencias en el campo del personaje. «Sonriendo», «sentada», «junto a una ventana» e «iluminación azul» son decisiones de escena. Si quedan fijas en la base, pueden contradecir un retrato posterior de pie con luz cálida. La base debe describir quién aparece; la escena debe describir qué ve el público que sucede allí.

Pega lo siguiente como valor del campo Array scenes:

json
[
  {"sceneId":"01","scene":"Waist-up beside an apartment window at dusk, hand on the curtain, cool evening light and warm interior light, looking toward the camera."},
  {"sceneId":"02","scene":"Seated sideways on a velvet armchair in the same apartment, relaxed shoulders, hands resting separately, warm floor-lamp light, medium portrait."},
  {"sceneId":"03","scene":"Standing in the apartment doorway, one hand on the doorframe, softly playful expression, three-quarter portrait, warm light behind her."},
  {"sceneId":"04","scene":"Close portrait beside the window, curls tucked behind one ear, pendant visible, steady direct gaze, soft side light."},
  {"sceneId":"05","scene":"Standing on a quiet balcony at blue hour, dress moving slightly in the breeze, looking back toward the apartment, medium portrait."},
  {"sceneId":"06","scene":"Seated on the armchair near the window, looking down with a small smile, hands resting in her lap, gentle mixed evening light, waist-up portrait."}
]

Estos seis prompts forman una sesión pequeña, no seis solicitudes desconectadas. Habitación, vestuario y personaje permanecen estables mientras cambian distancia, pose y dirección de la atención. Obtienes variación suficiente para una historia o perfil sin pedir que cambie todo a la vez.

El ejemplo público permanece completamente vestido. Para un proyecto adulto, puedes adaptar el vestuario y el ambiente permitidos a tu propio encargo de adultos ficticios. Mantén instrucciones visuales concretas. Una etiqueta de categoría adulta no indica por sí sola si buscas un primer plano íntimo, moda nocturna dramática o una escena relajada de habitación.

No empieces con seis poses difíciles de cuerpo completo. Las composiciones amplias añaden elementos que organizar y dificultan evaluar diferencias faciales. El primer plano de la escena cuatro sirve precisamente para comparar rasgos definitorios sin que la habitación ocupe casi todo el encuadre.

Ilustración cercana junto a un espejo que muestra los rizos oscuros, ojos marrones, colgante dorado y vestido de satén verde de Mara.

Ilustración: el retrato cercano destaca los detalles de apariencia conservados en la descripción reutilizable del personaje.

Divide las escenas y construye los prompts finales

Después de Build scene list, añade Split Out. Establece Field to Split Out en scenes, selecciona Include All Other Fields y Destination Field Name en scene. La salida debería contener seis elementos. Cada uno conserva seriesId, characterBase y styleBase, junto con su objeto scene individual. Estos ajustes siguen la documentación de Split Out.

Abre la salida antes de continuar. El primer elemento debe tener scene.sceneId igual a 01; el segundo, 02. Si todavía hay un solo elemento con las seis escenas, el campo de división es incorrecto. Si desapareció la descripción del personaje, el ajuste Include es incorrecto. Arreglar cualquiera aquí no cuesta generación.

Añade otro Edit Fields y llámalo Build prompts. Conserva los campos entrantes. Añade sceneId como String en modo Expression con {{ $json.scene.sceneId }}. Añade prompt como String con {{ $json.characterBase + '. ' + $json.styleBase + '. ' + $json.scene.scene }}. La documentación de Edit Fields describe sus controles de campos y expresiones.

Esta pequeña expresión une tres fragmentos de texto normal. No pide a un modelo de lenguaje que parafrasee al personaje o reinterprete la escena. Revisa los seis prompts finales: la base del personaje debe ser idéntica, la del estilo también, y solo cambia el final de escena.

Asegúrate de evaluar la expresión en vez de guardarla como texto literal. La vista previa debe mostrar la descripción fotográfica completa, no llaves y $json. Si aparece undefined, un nombre de campo difiere del creado. Importa la escritura exacta de characterBase, styleBase y scene.

Si después quieres usar una hoja de cálculo, conserva esta estructura. Una fila puede contener seriesId, sceneId y la escena variable, mientras se adjuntan los campos fijos de personaje y estilo antes de Build prompts. No necesitas una hoja para las primeras seis imágenes, pero mantener estables los ID facilita ese cambio posterior.

Evita añadir un AI Agent entre estos nodos solo para que parezca más sofisticado. Puede introducir costos de modelo de texto, latencia adicional y rechazos en otra etapa. Un endpoint de imagen puede admitir tu encargo adulto mientras el modelo opcional que redacta prompts se niega a escribirlo. En ese caso, el rechazo ocurre antes de generar la imagen. Conserva tu prompt preparado y envíalo directamente a la tarea de imagen elegida.

Guarda cada imagen antes de empezar la siguiente escena

Añade Loop Over Items después de Build prompts, con Batch Size 1. Conecta su salida Loop a SpicyAPI Generate, Generate a Google Drive Upload y Upload de regreso a Loop Over Items. La salida Done termina la serie completada. Mantén Reset desactivado: es una lista finita de seis elementos, no un bucle que deba recrear indefinidamente su entrada. Consulta la documentación de Loop Over Items.

Sustituye el prompt fijo de prueba de Generate por {{ $json.prompt }}. Conserva el modelo, dimensiones, límite de costo y ajustes de descarga de la prueba exitosa. El bucle presenta un elemento a Generate, así que el nodo debe mostrar un prompt completo de escena en cada pasada.

La conexión importante es el regreso desde Upload al bucle. Regresar directamente desde Generate inicia la siguiente escena antes de terminar el almacenamiento. Conectar a través de Done en vez de Loop omite el recorrido por escena previsto. Sigue el grafo con el dedo: una escena entra en Generate, su archivo entra en Upload y la carga terminada regresa para la siguiente escena.

En Google Drive Upload, conserva Input Data Field Name data. En File Name, usa {{ $('Build prompts').item.json.seriesId + '-' + $('Build prompts').item.json.sceneId + '-' + $binary.data.fileName }}. Antepones los ID de serie y escena al nombre real descargado, conservando su extensión. Elige la carpeta utilizada en la prueba. Los campos relevantes están documentados en la operación de carga de Google Drive.

¿Por qué referirse a Build prompts? El nodo de generación devuelve el registro de tarea y el binario descargado; no copia automáticamente los campos personalizados de escena a su JSON. El enlace entre elementos de n8n permite recuperar los seriesId y sceneId anteriores correspondientes. Usar el $json.sceneId actual después de Generate puede dejar un nombre vacío porque el JSON actual describe la tarea.

En esta receta de una imagen de salida, data es el único campo binario que necesita la carga. Si otra tarea devuelve varios recursos, el nodo llama a los binarios adicionales data_1, data_2 y así sucesivamente. Una carga de Drive configurada para data no sube automáticamente todos los campos adicionales. Recuerda la diferencia si cambias de tarea; no supongas que el primer archivo guardado constituye toda la respuesta.

Ejecuta de nuevo el flujo con solo la escena 01 en el arreglo. Confirma que el nombre incluye serie y escena y que abre desde la carpeta elegida. Luego recupera los seis objetos y ejecuta la serie completa. Esta pasada adicional de una escena verifica el bucle y las expresiones de nombres antes de depender de ellos para seis solicitudes pagadas.

La carpeta final debería contener una secuencia reconocible, no seis descargas anónimas. Una imagen guardada es el final útil del flujo. La URL de salida de la API y la vista previa de ejecución de n8n ayudan durante la generación, pero ninguna es la carpeta permanente que quieres construir.

Diagrama de flujo que procesa una escena mediante generación y almacenamiento antes de avanzar a la siguiente.

Ilustración: guarda la imagen actual antes de que el bucle inicie la siguiente escena.

Establece un presupuesto real para la serie

La tarifa de imagen es el número de solicitudes exitosas facturables multiplicado por el precio aplicable por imagen. El flujo no cobra por una escena que solo existe en la lista. Sí cobra otra generación exitosa solicitada deliberadamente para sustituir una imagen que no te gusta.

Para el ejemplo de seis escenas, con expansión desactivada:

PlanSpicy estándar a $0.01235Spicy Pro a $0.019Turbo a $0.010
Una pasada completa de seis escenas$0.07410$0.11400$0.06000
Primera pasada y seis solicitudes de reemplazo$0.14820$0.22800$0.12000
Tres candidatos por cada una de seis escenas$0.22230$0.34200$0.18000

Son tarifas de generación, no una afirmación de que todos los resultados sean útiles. Si produces dieciocho candidatos y conservas seis, pagaste dieciocho imágenes exitosas. Una descarga confiable evita desperdiciar tareas completadas; no vuelve gratuitos los candidatos creativos descartados.

Max Cost tiene otro propósito. El plugin lo compara con la cotización de cada elemento antes de crear su tarea. No es el presupuesto de todo el flujo de seis escenas. El valor predeterminado es $2 por elemento, muy superior al precio de ejemplo. Establecer cero desactiva el límite; cero no significa generación gratuita.

Con seis elementos y un máximo de $0.015 por elemento, la suma de los seis límites es $0.09. Es un límite superior útil para esos seis envíos siempre que el flujo no añada elementos, repita el bucle, cambie de tarea o inicie ejecuciones adicionales. A la tarifa base actual de Spicy estándar, el costo esperado es menor: $0.07410.

Para Pro, un límite de $0.015 detendría la solicitud antes de crearla porque su cotización de $0.019 lo supera. Aumenta deliberadamente el límite si eliges Pro; por ejemplo, $0.025 permite su cotización actual. Los seis máximos sumarían $0.15. Has cambiado tanto el modelo como el gasto permitido, en vez de permitir un cambio silencioso de costo.

El plugin también maneja un conflicto por cambio de precio obteniendo otra cotización y revisando el límite otra vez. No necesitas un nodo de cotización independiente para esa protección con el nodo comunitario. La alternativa HTTP importada descrita después es una implementación distinta; no asumas que incluye cada parte de ese comportamiento automático.

Antes de programar, multiplica el costo del lote por las ejecuciones previstas. Una pasada diaria de seis escenas de Spicy estándar cuesta $2.223 en generación durante treinta días a la tarifa base indicada. Tres candidatos diarios por escena cuestan $6.669. Duplicar la frecuencia duplica esas cantidades. Añade aparte tu suscripción o servidor n8n, almacenamiento y cualquier modelo de texto opcional.

Mantén manual el flujo hasta conocer cuántos candidatos necesitas realmente. Una programación diaria que reproduce una serie ya terminada es una orden recurrente de generación. Da a las ejecuciones programadas un proyecto o lista nueva, o incluye solo escenas que todavía necesiten imagen. Una solicitud barata puede encarecerse si el activador la repite sin motivo.

Un timeout no es permiso para generar de nuevo

Esperar y generar son actividades distintas. Max Wait Time del plugin controla cuánto espera el nodo por el resultado. Alcanzar ese límite no cancela la tarea de imagen subyacente. La tarea puede terminar después y una generación exitosa puede cobrarse.

Supongamos que la escena 04 muestra un timeout en n8n. No pulses inmediatamente Execute Workflow con las seis escenas. Abre la ejecución fallida, busca el ID creado en la salida o el mensaje de error y recupera primero esa tarea. No todos los errores contienen un campo JSON taskId específico; lee también el mensaje, no solo la tabla de salida.

Con el nodo comunitario, crea un pequeño flujo de recuperación: Manual Trigger → SpicyAPI con Resource Task, Operation Get → nodo de almacenamiento. Introduce el ID existente. Si sigue en cola o ejecutándose, activa Wait for Completion. Task Get no espera por defecto. Conserva Download Output activado y el nombre binario data para que la imagen recuperada siga el mismo recorrido de carga.

En este flujo independiente, asigna a la carga de Drive un nombre con serie y escena conocidas: para la cuarta, usa {{ 'mara-evening-v1-04-' + $binary.data.fileName }}. No copies la expresión anterior que refiere a Build prompts; ese nodo no existe en la recuperación. Mantén Input Data Field Name en data y elige la misma carpeta.

Comprueba el estado real. Una tarea en ejecución necesita tiempo. Una exitosa necesita guardar el archivo. Una fallida o expirada necesita resolver el error indicado antes de que una solicitud nueva resulte útil. Un rechazo del modelo no es un timeout de red, así que esperar más o reenviar en un bucle rápido no lo soluciona.

Las tareas fallidas o expiradas normalmente liberan su retención. Las solicitudes rechazadas por contenido normalmente no se facturan salvo que la página del modelo indique otra cosa. Para la solicitud real, revisa la liquidación y el costo de la tarea en lugar de decidir solo por un nodo rojo. Un nodo que deja de esperar y una generación fallida no representan el mismo resultado de facturación.

Después de recuperar y guardar 04, elimina de la lista las escenas 01 a 04 y ejecuta 05 y 06. Si la escena 04 realmente falló y quieres generar otra imagen, conserva 04 en la lista restante después de corregir su entrada. Los ID permanecen estables aunque el arreglo se acorte, por lo que los nombres siguen indicando dónde pertenece cada imagen.

Por eso ayuda el bucle de un elemento. Guarda las escenas completadas antes de que otra posterior interrumpa la serie. No hace desaparecer la tarea externa cuando n8n se detiene, pero reduce el trabajo que debes reconstruir después.

Entiende qué pueden deduplicar los reintentos

El plugin añade una clave interna de idempotencia al crear tareas. Dentro de la misma ejecución, pasada del nodo y elemento, usar la misma entrada puede recuperar la misma solicitud de creación en lugar de generar un duplicado a ciegas. Sirve cuando se pierde una respuesta de red después de que la API acepta la tarea.

Esa protección no comprueba permanentemente si «este prompt ya se generó». Una nueva ejecución del flujo tiene otro ámbito. Una pasada posterior del bucle también tiene otro índice. Cambiar el prompt o parámetros cambia la solicitud. Esas situaciones pueden crear una tarea nueva de pago aunque la escena visible te resulte familiar.

Por eso, aplica respuestas distintas a tres problemas diferentes. Si no sabes si el envío llegó, recupera la tarea existente antes de pedir otra. Si una imagen terminada no se cargó, repite la carga o recupera la salida de su tarea. Si se guardó pero la pose es incorrecta, modifica la escena y pide deliberadamente un reemplazo.

Cuando añadas reintentos automáticos, mantenlos moderados. Ayudan con errores temporales de transporte; no son un motor de selección creativa. Una dimensión inválida, un campo binario incorrecto o una entrada incompatible seguirán mal en el siguiente intento. Corrige primero el ajuste. Un reintento de nodo dentro de su ámbito existente también difiere de una persona iniciando otro flujo.

Para una serie programada, usa una pequeña hoja o tabla de estados cuando la recuperación manual resulte incómoda. Los campos útiles son seriesId, sceneId, estado, ID de tarea y enlace al archivo guardado. Antes de generar, incluye solo filas listas; después de cargar, marca la escena guardada. Así un reintento tiene un ID que recuperar, no una suposición sobre si la solicitud anterior llegó.

No añadas esa contabilidad a la primera prueba si no la necesitas. Puedes gestionar seis escenas revisadas manualmente editando el arreglo. La tabla vale la pena cuando un activador recurrente funciona sin supervisión o varias personas editan el proyecto. Evita tratar la misma escena completada como una orden nueva; no tiene valor por crear más papeleo.

Conserva archivos, no enlaces temporales de salida

Los enlaces firmados de salida de la API duran unos veinte minutos. Es la ventana de acceso de un enlace concreto, no una promesa de que la tarea y el recurso almacenado desaparezcan al mismo tiempo. Recupera la tarea existente para obtener acceso actual mientras el recurso se conserve y después descarga y guarda la imagen.

Si pegas una URL de salida en una hoja y regresas mañana, un enlace expirado puede parecer una generación perdida. No pagues por recrearla solo porque falle la URL antigua. Consulta primero la tarea. En un flujo recurrente, guarda el enlace duradero al archivo de Drive después de la carga, en vez de tratar el enlace temporal de API como el recurso terminado.

Con Download Output activado, el plugin proporciona datos binarios al nodo siguiente. Si está desactivado, tienes un registro y enlaces, pero ningún binario data para subir a Drive. Una cadena URL no es el archivo. Si la carga dice que no encuentra datos binarios, revisa que Download Output esté activado y que el campo coincida con la propiedad binaria del nodo de generación.

La diferencia importa también al añadir una interfaz. En el tutorial de generador sin código de Leon van Zyl, la transcripción muestra una ejecución exitosa de n8n seguida de un error de interfaz porque el manejo de respuesta esperaba algo distinto del binario devuelto. La lección útil es revisar al consumidor de la imagen antes de culpar a la generación.

Drive espera un campo binario. Para una página web, quizá prefieras una URL de almacenamiento permanente. Para una carpeta local, la escritura ocurre en la máquina que ejecuta n8n, que puede ser un servidor y no tu laptop. Elige el destino deliberadamente y abre allí un resultado guardado antes de añadir escenas.

Si falla la carga después de generar, guarda el ID y reintenta el almacenamiento. Revisa la credencial de Drive, el acceso a la carpeta y data. Si el archivo ya está en la carpeta, evita otra copia solo porque la confirmación final sea confusa. La idempotencia protege la creación de tareas dentro de su ámbito; no deduplica automáticamente todas las cargas posteriores.

Usa la plantilla HTTP en n8n Cloud

Los usuarios de Cloud pueden usar la API con nodos integrados sin instalar el paquete no verificado. Descarga el ejemplo del repositorio oficial de n8n de SpicyAPI e impórtalo. Comienza con su estructura de una imagen en lugar de reconstruir de golpe todas las funciones del nodo comunitario.

La plantilla contiene Settings, una solicitud de cotización, comprobación de presupuesto, creación de tarea, consultas de estado con un bucle Wait y descarga final. Settings comienza con Z-Image Turbo y una relación de aspecto. Cambia el prompt por la prueba de tu personaje adulto ficticio conservando los campos admitidos por el modelo.

Crea la credencial HTTP Bearer Auth que solicitan los nodos de API y selecciónala en GetQuote, CreateTask y GetTask. Pon la clave en la credencial. La solicitud final DownloadImage obtiene la URL firmada del recurso y no necesita añadir tu credencial de SpicyAPI a esa solicitud de almacenamiento.

Las respuestas HTTP sin procesar utilizan un contenedor data, por lo que las expresiones de la plantilla pueden referir a data.taskId o data.output. El nodo comunitario devuelve el registro de tarea sin ese contenedor. Copiar su expresión a un nodo HTTP sin tenerlo en cuenta puede hacer que una respuesta válida parezca vacía.

El nodo de descarga debe tratar la respuesta como archivo. La documentación de HTTP Request describe Response Format File y el campo de salida. Revisa el campo binario real de descarga y apunta a él Google Drive Upload. La plantilla descarga el primer recurso de salida; no descarga automáticamente varios recursos.

Si cambias de Turbo a Spicy estándar, modifica tanto la entrada como el identificador del modelo. Usa anchura y altura en lugar de aspect_ratio. Actualiza la solicitud de cotización y la de creación para que describan la misma imagen. Cambiar solo Settings.model y conservar el cuerpo anterior no constituye una migración correcta entre esquemas.

En la primera ejecución de Cloud, conserva una imagen por ejecución. La clave de creación de la plantilla se basa en ejecución e índice de elemento; no es la clave más completa de entrada y pasada de bucle del plugin. No envuelvas la plantilla intacta en un bucle suponiendo que conserva el comportamiento de reintentos comunitario. Un lote Cloud correcto necesita identidades distintas para las solicitudes de escenas y entradas coincidentes de cotización y creación.

El sondeo también necesita un punto de parada deliberado para uso sin supervisión. El ejemplo repite espera y consulta hasta que la tarea sea terminal; no proporciona Max Wait Time del nodo comunitario. Configura un timeout adecuado de ejecución antes de programarlo. Detener el flujo sigue sin cancelar la tarea de API. Recupera la existente con GetTask antes de iniciar otra generación.

Si el precio cambia entre cotización y creación, resuelve el conflicto devuelto y pide otra cotización. El plugin comunitario automatiza ese paso, mientras el ejemplo HTTP no debe considerarse idéntico en todo. Los nodos integrados ofrecen un punto de partida viable en Cloud, pero la receta autohospedada resulta más sencilla para el bucle de seis escenas enseñado aquí.

Mejora la serie sin pagar cambios equivocados

Cuando guardes los seis archivos, compáralos como conjunto. Primero, comprueba si cuentan la historia visual prevista: la misma noche, vestuario y personaje adulto desde distintos ángulos. Después decide qué fotogramas necesitan reemplazo. No repitas escenas buenas porque una sea débil.

Si deriva el rostro, reduce los cambios entre escenas. Conserva descripción de cabello, estructura facial y colgante, y elimina un maquillaje nuevo o una señal de edad dramática que aparezca en una sola. Un nuevo ángulo aún puede modificar la apariencia; la consistencia del encargo escrito controla entradas, pero no bloquea la identidad facial.

Si la identidad exacta es esencial, deja de intentar resolverla con otro párrafo de adjetivos. Estos endpoints solo textuales no pueden recibir el retrato aceptado como referencia. Pasa la imagen elegida a un modelo con una tarea real de referencia o edición. La guía de conservación del rostro explica ese otro flujo. Usa texto a imagen para establecer personaje y sesión; recurre a edición cuando conservar el rostro aceptado sea el requisito principal.

Ilustración de novela gráfica de Mara adulta mirando hacia atrás desde un balcón en la hora azul, con vestido verde de satén y luz cálida del apartamento detrás.

Ilustración: cambia pose, ángulo y lugar conservando apariencia distintiva y vestuario del personaje.

Si el ambiente resulta demasiado simple, modifica una característica visible: mirada, dirección de la luz, distancia de cámara o tela del vestido. «Más NSFW» no especifica la imagen deseada. Un adulto ficticio mirando hacia atrás en un balcón suavemente iluminado tiene una composición distinta de un primer plano con contacto visual directo, aunque ambos pertenezcan a un proyecto para adultos.

Si la pose resulta confusa, simplifica las instrucciones físicas. La escena dos separa deliberadamente las manos en reposo en vez de pedir una interacción compleja con varios objetos. Añade una interacción después de que funcione la pose sencilla. La automatización envía consistentemente una serie preparada; no elimina la necesidad de dar al modelo un momento que pueda dibujar.

Si el encuadre corta algo importante, cambia el encuadre o las dimensiones antes de pedir más detalle. El formato vertical de Spicy estándar puede mostrar cómodamente un personaje de cintura hacia arriba, pero un cuerpo completo puede necesitar una distancia de cámara más explícita. Pro añade píxeles; no amplía automáticamente el campo de visión ni repara una instrucción de composición.

Conserva semilla, prompt y dimensiones de un fotograma aceptado si quieres repetirlo de forma controlada. Una semilla ayuda a estabilizar la variación con los mismos ajustes; cambiar escena o tamaño cambia el problema dibujado. En los endpoints Spicy, una semilla cero solicita una aleatoria. Una semilla fija distinta de cero sirve para comparar, no garantiza el mismo rostro en todas las escenas.

Finalmente, distingue una imagen técnicamente exitosa de una útil. La tabla de tarifas debe contar todos los candidatos exitosos facturables. La serie terminada debe contar los que conservas. Si seis imágenes finales requieren doce candidatos, presupuesta doce y mejora las instrucciones débiles para necesitar menos reemplazos en la siguiente serie.

Preguntas antes de activar una programación

¿n8n es un generador de imágenes NSFW?

No. Conecta entradas, solicitudes de API y destinos de archivos. El endpoint de imagen seleccionado determina capacidad y alcance de contenido. Un agente opcional de redacción de prompts o una plantilla importada pueden imponer restricciones antes de llamar a la tarea de imagen.

¿Se puede hacer sin escribir un script?

La receta autohospedada usa nodos visuales, un arreglo breve de escenas y dos pequeñas expresiones. Aun debes elegir modelo, crear credenciales y conectar bien el bucle. La opción HTTP en Cloud requiere más atención al JSON y las respuestas; evita instalar un paquete, no toda configuración de API.

¿Una plantilla gratuita de n8n hace gratuitas las imágenes?

No. Importar un flujo y pagar una solicitud de imagen son cosas separadas. El ejemplo utiliza solicitudes de API con precio, y el alojamiento o la suscripción de n8n puede añadir otro costo. La cifra útil es el precio de generación multiplicado por los candidatos exitosos que solicitas.

¿Debería automatizar la publicación después de generar?

Para una serie nueva, termina en archivos guardados y revisa primero las imágenes. Puedes añadir pasos de entrega cuando estén definidos el destino y los requisitos creativos. Un flujo que guarda confiablemente seis escenas ya es útil; publicar automáticamente es otra acción con requisitos diferentes.

Comienza con una imagen generada manualmente y una carga exitosa. Amplía después a seis escenas con límite de costo y un bucle que guarde antes de avanzar. Cuando algo falle, recupera la tarea existente antes de pedir otra imagen. Así obtienes un flujo práctico de n8n para personajes adultos: entradas comprensibles, costos de solicitud previsibles y archivos que puedes encontrar después.

También en English · 日本語 · 한국어 · Deutsch · Français · Português (Brasil) · Русский · Italiano · Polski

Pon esta guía en práctica

Obtener el flujo de trabajo

Planifica tu galería NSFW en Google Sheets.

Convierte una hoja de ideas de creadores NSFW en una cola de imágenes organizada. Genera hasta cuatro conceptos con Z-Image Turbo por ejecución y después revisa cada imagen junto a su prompt, estado y enlace de resultado.