Un proceso automatizado de 3D a concept art en ComfyUI: bloqueos, listas de prompts y ordenación automática

Convierte una carpeta de capturas de bloqueos 3D en concept art con Flux: ControlNet de profundidad, listas de prompts, apilado de prompts, un prompt por objeto y ordenación automática vertical/horizontal, construido desde flujos sencillos hasta un proceso completo para toda la noche.

Anton Tenitsky13 de octubre de 202610 min de lecturaVersión en vídeo más abajo

Esta guía se tradujo del inglés con IA y puede contener errores. Leer el original.

Cuatro objetos bloqueados en 3D, grises (un rifle, un escudo, una nave de desembarco y una caja), sobre los mismos objetos renderizados como concept art detallado

Este es el proceso que uso para convertir bloqueos 3D sencillos de Blender en concept art: decenas de objetos y personajes, cada uno con su propia descripción, en muchos estilos, durante la noche. También es el paso intermedio de un proceso mayor, de bloqueo a concept art y a modelo 3D.

Son muchos nodos, así que lo construí por etapas, desde un flujo de profundidad sencillo hasta la versión automatizada completa. Cada etapa es útil por sí sola, y esa es la mejor forma de entender el conjunto.

Un conjunto de bloqueos 3D grises: armas, un escudo, una nave de desembarco, un tanque, cajas, robots y figuras de soldados
La entrada: un conjunto de objetos y personajes bloqueados, capturados desde Blender.

En resumen

  • GPU: 12 GB de VRAM como mínimo para Flux, o usa una versión GGUF o una GPU en la nube.
  • Profundidad: Depth Anything crea el mapa de profundidad; ControlNet de profundidad de Flux a unos 0,7.
  • Flux: guidance 3–3,5, 25 steps, prompt negativo vacío.
  • Automatización: listas de prompts (Inspire Pack), apilado de prompts y contadores de bucle que asocian cada captura con su propio prompt.
  • Ordenación: una comprobación de relación de aspecto cambia el lienzo entre horizontal y vertical automáticamente.

Puedes probar el flujo terminado sin instalar nada en RunComfy, ya preparado, con unos 15 minutos gratis: suficiente para una o dos imágenes. Todos los flujos, las listas de prompts y los modelos 3D están en mi Patreon, pero no hay nada oculto: todo se explica a continuación.

Etapa 1: de imagen a profundidad a imagen

El flujo más sencillo. Carga una captura, redimensiónala si no coincide con el tamaño objetivo y pásala por Depth Anything. Fijé su resolución en 1088, que se aplica al lado corto de la imagen, así que una captura vertical no necesita cambios ahí.

Flujo de ComfyUI con una captura de dos soldados bloqueados y su mapa de profundidad
Entra una captura, sale un mapa de profundidad.

Puedes renderizar un mapa de profundidad en Blender y saltarte el nodo Depth Anything (Ctrl+B). Yo no me molesto: Depth Anything es suficientemente bueno, la precisión aquí no es crítica y ahorra tiempo.

ControlNet. El mapa de profundidad va a Apply Flux ControlNet con un ControlNet de profundidad de Flux cargado. La fuerza es el ajuste clave. La mantengo en 0,7; de 0,6 a 0,8 funciona. Más baja deja el resultado borroso y demasiado suelto; con 1,0 la imagen se llena de fallos. Con SDXL bajo a unos 0,5.

Sampler. Va al XLabs Sampler, no al KSampler estándar, que no tiene entrada para el condicionamiento del ControlNet.

Modelo. Uso el modelo Flux dev completo. Con poca VRAM, usa una versión GGUF: la misma configuración con un Unet Loader (GGUF) y un modelo Flux GGUF Q4. La calidad no sufre mucho y va más rápido.

Prompt. El DualCLIPLoader con los dos codificadores de texto de Flux, y luego el prompt. Flux Guidance de 3 a 3,5: más alto empuja más el prompt y empieza a quemar la imagen. Flux no resta un prompt negativo como SDXL, así que normalmente lo dejo vacío.

Ajustes del sampler. Seed en increment (las imágenes se numeran 2265, 2266 y así, lo que facilita saber qué se ejecutó durante la noche), 25 steps. Más steps son rendimientos decrecientes, y pasados los 50 solo pierdes tiempo.

Escribe mejores prompts con un chatbot

Mi primer prompt de prueba era solo «sci-fi soldier», y el resultado fue feo. Dos arreglos rápidos lo mejoraron mucho:

  • Pon «cartoony, stylized illustration» en el prompt negativo. Tiene un efecto pequeño en Flux.
  • Pídele a ChatGPT (o a cualquier chatbot) que amplíe el prompt. Le pedí un prompt positivo para un soldado cyberpunk de ciencia ficción y lo pegué. Léelo primero y recorta lo que resulte raro.
Dos soldados de ciencia ficción con armadura amarilla de pie en un desierto, generados a partir del bloqueo
Con un mejor prompt, los soldados del bloqueo resultaron mucho más convincentes.
Un soldado gris de bloqueo junto al mismo soldado renderizado con armadura amarilla
Bloqueo y resultado, lado a lado.

Una nota sobre ese texto de «copyright» que Flux a veces añade en una esquina: no es el copyright real de nadie. Flux imita imágenes que a menudo tenían texto ahí.

Las imágenes cuadradas dan los mejores resultados. En este proceso quería horizontal y vertical porque muchos objetos son largos o altos. Las imágenes muy anchas a veces dan al objeto un contorno o marco fino. Lo verás en mis resultados; las imágenes cuadradas tienen mucho menos.

Etapa 2: listas de prompts

La misma configuración de profundidad, más un nodo Load Single Prompt From File del Inspire Pack, que lee prompts de un archivo de texto.

El nodo Load Single Prompt From File del Inspire Pack, con una nota que muestra el formato de la lista de prompts
El cargador de prompts del Inspire Pack y el formato que espera.

El formato es estricto:

positive: item one, properties, colours, weather, etc
negative: blurry, low quality, jpeg artefacts, etc
---
positive: item two, properties, colours, weather, etc
negative: blurry, low quality, jpeg artefacts, etc
  • Mantén positive: y negative: en minúsculas. Una mayúscula en el sitio equivocado hace que el nodo no lea nada. Yo lo mantengo todo en minúsculas por si acaso.
  • El archivo tiene que estar en ComfyUI/custom_nodes/comfyui-inspire-pack/prompts/ (yo uso la subcarpeta example). No se puede apuntar a otro sitio.
  • Lleva la cuenta de tus entradas, porque el nodo no te la dará. Pídele a ChatGPT exactamente 10 entradas con este formato y te dará una lista así.
  • Después de editar una lista, recarga ComfyUI (Ctrl+R). Si sigue usando el texto antiguo, cambia a otra lista, ejecuta una vez y vuelve a cambiar.

Mi primera lista se llamaba variable-styles-10-prompts: solo estilos, sin describir ningún objeto, así que la misma lista sirve para cualquier objeto.

Conexiones. El prompt pasa por un nodo Unzip Prompt (tiene que descomprimirse). Ese nodo también necesita alguna imagen conectada para funcionar, aunque no la use. Sus propios campos de texto positivo y negativo no aportan nada, así que déjalos en paz.

Hacer que avance. Por sí sola la lista solo ejecuta el primer prompt. Un contador de bucle del WAS Node Suite alimenta el índice: incremento 1, máximo = el número de prompts. Un nodo de visualización muestra el índice, que cuenta de 0 (prompt 1) a 9 (prompt 10). Para empezar de nuevo, pon reset en true, ejecuta una vez, vuelve a ponerlo en false y ejecuta de nuevo. Un nodo de vista previa de texto muestra qué prompt se está ejecutando.

Etapa 3: apilado de prompts

El apilado de prompts construye un prompt largo con varias piezas mediante un nodo text concatenate: cada entrada se suma a la cadena. En mi prueba:

  • Text B: el estilo, de la lista de prompts (por ejemplo, un estilo «ork» de ciencia ficción).
  • Text A: el sujeto, una larga descripción de un robot humanoide militar escrita por ChatGPT.
  • Text C: el fondo, un bosque.

Pon primero lo más importante. Los codificadores de texto dan más peso a las primeras palabras, así que el sujeto (un robot de combate) va antes que el estilo. Dicho esto, Flux sigue bastante bien el prompt en conjunto.

Dos robots de combate blancos de pie en un bosque con niebla, generados con un prompt apilado
Un prompt apilado: descripción del robot, estilo y luego fondo de bosque.

No es mi mejor generación, pero sigue el prompt. Ejecutaría cinco o seis más y elegiría la mejor, o bajaría la fuerza del ControlNet para dar más libertad. Cuando encuentres un estilo que te guste, refina el prompt añadiendo y quitando palabras.

Etapa 4: una carpeta de capturas, cada una con su propio prompt

Ahora las capturas también salen de una carpeta, mediante Load Image Batch, y el mismo contador de bucle controla tanto el índice de la imagen como el del prompt. El prompt 3 siempre va con la captura 3.

El nodo Load Image Batch con una vista previa de la captura de un cuchillo bloqueado
Load Image Batch, con una vista previa de la captura actual.

Tenía 18 capturas y una lista de prompts de objetos de ciencia ficción con 18 descripciones a juego: el lanzacohetes es la entrada 1, el rifle automático la entrada 2, y así. Pon el máximo del contador en el número de capturas (lo había dejado en 10 por error; debería ser 18). Usa la vista previa de la imagen y la del texto para comprobar que la descripción coincide con la captura.

Un subfusil de ciencia ficción blanco y negro apoyado contra un árbol en un bosque
La captura 3 con su descripción correspondiente: un subfusil.

El subfusil salió bastante bien. No llena el encuadre, pero las empuñaduras y muchas de las piezas son de alta calidad. Esta etapa no ordena entre vertical y horizontal, así que las capturas verticales salen estiradas. Si todas tus imágenes son horizontales, o todas cuadradas, este flujo más sencillo basta. Yo uso flujos más simples para muchos trabajos.

Etapa 5: ordenar automáticamente horizontal y vertical

Para mezclar objetos altos y anchos, el flujo tiene que detectar la orientación de cada imagen y ajustar el lienzo a ella. Construí dos versiones.

El interruptor de imagen (más fácil de leer). Cada imagen se redimensiona de las dos formas, a horizontal y a vertical. Un nodo de relación de aspecto de imagen del WAS Node Suite da 1 para horizontal y 0 para vertical, un pequeño nodo convierte ese número en verdadero/falso y un interruptor de entrada de imagen elige la imagen redimensionada correcta. El tamaño pasa entonces al Empty Latent Image. La pega: redimensionas cada imagen dos veces y mantienes ambas en memoria.

El interruptor de números (el que uso). En lugar de cambiar imágenes, cambia los números: dos interruptores de entrada de número, uno para el ancho y otro para el alto, controlados por el mismo valor verdadero/falso. Horizontal elige 1920 × 1088; vertical elige 1088 × 1920. Es más rápido y muy robusto, aunque más difícil de seguir. Incluso a mí me cuesta leerlo después de unos días sin tocarlo, y esa es en parte la razón de que grabara este vídeo.

Nodos de número constante y dos nodos Number Input Switch que eligen el ancho y el alto según la orientación de la imagen
El interruptor de números: la orientación de la imagen elige el ancho y el alto.

Hay una guía aparte que explica este truco de ordenación por sí solo: ordenar imágenes por relación de aspecto en ComfyUI.

El proceso completo

El flujo completo lo combina todo: mapeado de profundidad, la ordenación con el interruptor de números, la carpeta de capturas con su lista de prompts y una segunda lista de prompts para estilos. Cada parte es sencilla; juntas son difíciles de seguir, por eso las construí por separado.

Con dos contadores de bucle puedes multiplicar las variaciones. Mi bucle de objetos recorría 18 capturas, y una lista de colores con 54 entradas (18 azules, 18 verdes, 18 blancas) corría a su lado, así que cada objeto se renderizó en cada color. Otros materiales también funcionan: acero inoxidable, fibra de carbono, «3D printed» (que salió con aspecto de plástico). Para cambiar una lista, pégala en ChatGPT y pídele, por ejemplo, que cambie blanco por negro. Mantiene el formato.

Encima de eso van un campo de estilo de texto libre (camuflaje, patrones de cuadros, lo que sea) y un campo de fondo.

Un lanzacohetes de ciencia ficción azul sobre rocas grises islandesas
El resultado final: el lanzacohetes en azul, con un fondo de Islandia.
Una cuadrícula del mismo soldado renderizado en muchas variaciones de color y material, en desiertos y nieve
Un bloqueo, muchos colores y materiales, todo a partir de las listas.

Usarlo en el día a día:

  • Cambia la ruta de la carpeta a tus capturas y la lista de prompts para que coincida.
  • Ajusta los contadores: con 10 capturas y 3 colores, el contador de estilo llega a 30. Ejecútalo durante la noche con diez colores y materiales y tendrás 100 ideas por la mañana.
  • Fija los valores de ancho y alto, también en el nodo de profundidad, para imágenes cuadradas o más pequeñas. El flujo tiene notas con tamaños buenos.
  • Para reiniciar todo, pon el reset de ambos contadores de bucle en true, ejecuta y luego ponlos en false y ejecuta de nuevo. Saltar a un prompt concreto a mitad de la lista es complicado; para trabajar en un objeto, uso un flujo más sencillo con solo esa imagen y la lista de prompts.

Velocidad: en mi RTX A5000 con 24 GB de VRAM, una imagen tarda unos 160 segundos (300 cuando antes había que cargar otros modelos). Es bastante tiempo, y por eso buscaba actualizarme.

Dónde ejecutarlo

Necesitas al menos 12 GB de VRAM para Flux. En una tarjeta más pequeña, usa el modelo GGUF o ejecútalo en una GPU alquilada; más tarde pasé este tipo de trabajo a RunPod, como describo en mi introducción a RunPod.

El enlace de RunComfy de arriba es un enlace de referido, igual que mi enlace de referido de RunPod: las cuentas nuevas de RunPod que se registran con Google reciben entre 5 y 500 $ de crédito después de su primer gasto de 10 $, y yo recibo una pequeña comisión.

Ver la versión en vídeo (29:54)

Todo lo anterior también está en el vídeo, si prefieres seguirlo en pantalla. El vídeo está en inglés.

Preguntas frecuentes

¿Qué GPU necesito para este proceso?

Al menos 12 GB de VRAM para Flux. Con menos VRAM, usa la versión GGUF de Flux con un cargador GGUF: la calidad no sufre mucho. En mi RTX A5000 de 24 GB, una imagen tardó unos 160 segundos.

¿Qué fuerza de ControlNet debo usar para bloqueos 3D?

Unos 0,7 con Flux; entre 0,6 y 0,8 funciona. Con 1,0 la imagen se llena de fallos. Con SDXL bajo más, a unos 0,5.

¿Por qué mi lista de prompts solo ejecuta el primer prompt, o no se actualiza?

Una lista de prompts necesita un índice de un contador de bucle para avanzar. Si editas el archivo de texto, recarga ComfyUI; si sigue usando el texto antiguo, cambia a otra lista, ejecuta y vuelve a cambiar.

¿Por qué mis imágenes anchas tienen un contorno o marco fino alrededor del objeto?

Viene del formato muy ancho, no cuadrado. Las imágenes cuadradas dan los resultados más predecibles, pero objetos largos como los lanzacohetes necesitan imágenes anchas. Para concept art rara vez importa.

Anton Tenitsky es artista 3D con más de 15 años en gráficos por ordenador, que ha trabajado con Nickelodeon, Gameloft, Marvel Rivals y muchos otros clientes. Más sobre mí

Guías relacionadas