Probé 13 Modelos de IA para Generar Imágenes con Consistencia de Personajes. La Mayoría Falló de la Misma Manera.
Generas una imagen para la portada de tu artículo. Se ve genial. Siguiente artículo, mismo personaje, mismo estilo, prácticamente el mismo prompt. Cara completamente diferente. No una variación. Una persona distinta. El modelo simplemente decidió que tu personaje necesitaba una nueva identidad, como un programa de protección de testigos pero para píxeles.
En un artículo suelto, da igual. En una publicación donde los mismos personajes aparecen en docenas de posts, es un problema de marca que no notas hasta que un lector pregunta "espera, ¿se supone que es el mismo tipo?" Pixar no puede lanzar a Woody con una cara diferente en cada escena. Un cómic tampoco. Tu blog tampoco, si realmente quieres que la gente reconozca tus portadas mientras hace scroll.
TLDR: Probé 13 modelos de IA para consistencia de personajes. Dos sobrevivieron. El más barato ganó. Y la razón no tiene nada que ver con prompts.

El Problema Que Nadie Menciona Cuando Lanzan Visuales Generados por IA
Cada demo de modelo te muestra una imagen impresionante. Nadie te muestra el mismo personaje generado diez veces seguidas. Porque ahí es donde se desmorona todo.
Mi configuración: dos personajes recurrentes en cada portada de artículo, generados a través de un pipeline automatizado vía fal.ai. Un oficinista con corbata y expresión permanentemente inexpresiva, y un héroe con capa. Mismos personajes, mismo universo, misma identidad visual en cada pieza de contenido. Los primeros artículos, bien. Luego las caras empezaron a derivar. Sutilmente al principio (mandíbula ligeramente desviada, raya del pelo en el lado equivocado), luego nada sutilmente (un ser humano completamente diferente mirándome de vuelta).
Podría seguir ajustando prompts a mano cada vez, como una especie de susurrador de prompts esperando que la siguiente generación funcionara. O podría simplemente probar cada modelo disponible en la plataforma y averiguar cuáles realmente mantienen la consistencia.
Así que probé los trece. Una plantilla de prompt compartida. Las mismas dos referencias de personajes inyectadas cada vez. Sistemático, no por intuición.
Sin consistencia, cada imagen es un tiro único. Con un pipeline, es una fuga que no ves hasta que tus lectores la ven.
La Consistencia de Personajes No Es un Problema de Prompts. Es un Problema de Endpoints.
La mayoría de la gente soluciona la consistencia de personajes reescribiendo prompts. Añadiendo más detalle, ajustando la descripción del estilo, jugando con seeds. Hice lo mismo durante tres semanas. Era como afinar una guitarra que no tiene cuerdas.
El mecanismo real es más simple y más brutal: inyección de referencias posicionales vía endpoints /edit con múltiples image_urls. No un truco de prompt. No un parámetro. Un endpoint.
Tus imágenes de referencia de personajes se envían como data URIs en el campo image_urls. El modelo mapea placeholders como @image1 y @image2 a esas referencias. El prompt dice "pon @image1 a la izquierda", el modelo sabe exactamente qué cara usar. Dos referencias entran, dos personajes consistentes salen.
¿Los modelos que fallan? Todos por la misma razón arquitectónica: no soportan dos referencias de imagen simultáneas. Kontext Pro toma máximo una referencia. Ideogram Character, misma historia. Ideogram V3 toma cero referencias (solo descripción de texto). Cuando el pipeline llega a un modelo que no puede tomar dos refs, recurre a adaptPromptForModel(), que reemplaza @image2 con algo como "un personaje oficinista con corbata y expresión inexpresiva."
Puedes describir una cara en cuarenta palabras. El modelo seguirá generando una cara diferente cada vez. Esa parte está clara.
El modelo no falla en calidad. Falla antes de siquiera leer tu prompt.
El Benchmark: 13 Modelos, 3 Niveles, Un Ganador a $0.012
Dos modelos obtuvieron cinco estrellas. Siete obtuvieron cero.
Nivel S (5 estrellas, en producción): Flux 2 Dev a $0.012/MP y Nano Banana 2 a aproximadamente $0.01/MP. Ambos soportan múltiples image_urls en modo /edit, ambos mantienen personajes a través de generaciones consecutivas.
Nivel A (4 estrellas, usables): Flux 2 Pro, GPT Image 1.5, Flux 2 Turbo, Flux 2 Flash. Manejan el mecanismo de referencia dual pero con deriva menor entre ejecuciones.
Nivel F (0-1 estrella, rechazados): Flux 2 Max, Flux 2 Flex, Kontext Pro/Multi/Max, Ideogram V3/Character. Todos fallan por la razón arquitectónica mencionada arriba.
Dos resultados que merecen una mirada más cercana.
Flux 2 Max: 1 estrella a $0.07/MP. Casi 6x el precio de Dev. Y era peor. Añadió guantes a un personaje que nunca los tuvo. Efectos de rayos detrás de un héroe que se suponía estaba parado quieto. El modelo premium alucina elementos de vestuario mientras el económico simplemente hace lo que pediste. (Karen de Contabilidad tendría algo que decir sobre ese ROI.)
Kontext e Ideogram: ambos puntuaron cero a pesar de estar comercializados específicamente para referencia de personajes. Su endpoint simplemente no acepta dos image_urls simultáneas. Una ref, claro. ¿Dos refs para dos personajes en la misma escena? La arquitectura dice no. La página de marketing discrepa con la documentación de la API, y sé en cuál confío más.

Este benchmark cubre un caso específico: dos personajes recurrentes, estilo cómic de los 90s, pipeline automatizado. Midjourney no fue probado (sin API de fal.ai). Los resultados pueden diferir en otros estilos. Pero el /edit con múltiples image_urls es la condición necesaria independientemente.
Pagar 6x más me dio guantes de superhéroe que nunca pedí.
Cuatro Trampas Que Rompen la Consistencia de Personajes Incluso Con el Modelo Correcto
Modelo correcto, configuración incorrecta. Caí en cada una de estas, y cada una me costó más tiempo que encontrar el modelo correcto en primer lugar.
El intercambio @image1/@image2. Un lunes noté que todas las portadas generadas tenían los personajes en el lado equivocado. El oficinista tenía la capa. El héroe llevaba corbata. Como una película de policías donde vestuario confundió a los actores. Mismo prompt, mismas refs, pero @image1 y @image2 estaban invertidos en la plantilla. Encontré el commit (6c70e20), me di cuenta de que el mapeo se intercambió silenciosamente durante un refactor. Ningún test lo detectó porque nadie prueba "¿está el personaje correcto usando el atuendo correcto?" Ahora sí lo hago.
Dimensiones en el prompt. Cuando el LLM genera el prompt de imagen, a veces escribe "escena cinemática de 1536x1024px." El modelo de imagen entonces trata de renderizar "1536x1024px" como texto literal dentro de la imagen. Hermoso. Solución: sanitizePrompt() elimina patrones de dimensiones vía regex. Las dimensiones reales van solo a través del parámetro API image_size.
Data URI vs HTTP URL. Algunos modelos (Kontext, Ideogram) fallan silenciosamente con data URIs base64. Necesitan URLs HTTP que apunten a archivos públicamente accesibles. Solución: ensureHttpUrl() sube la referencia al almacenamiento en la nube antes de la llamada API. Dos líneas de código que tomaron tres días de debugging descubrir que eran necesarias.
Caro significa sobre-interpretación. Flux 2 Max no solo genera lo que pides. Mejora tu solicitud añadiendo elementos que cree que deberían pertenecer a una escena de cómic. Eso no es un bug, es una filosofía de diseño. Y esa filosofía de diseño es incompatible con uso de pipeline donde necesitas exactamente el mismo estilo de salida cada vez. El mismo razonamiento spec-first que uso a través de contratos de prompt aplica: prueba suposiciones antes de construir alrededor de un modelo, no después.
Cuatro líneas de código cuestan menos que tres semanas de ajustar por intuición.
Seis Reglas de Prompting Que Realmente Mueven la Aguja
Una vez que el modelo y el pipeline están bien, estas seis reglas hicieron una diferencia visible. Todas descubiertas probando.
1. Sujeto primero.
"Ilustración estilo cómic de los 90s de dos personajes
parados en una sala de servidores"
"Dos personajes parados en una sala de servidores, @image1
a la izquierda señalando una pantalla, estilo cómic"
Los modelos Flux pesan más el inicio del prompt. Lo que viene primero recibe más atención. Pon la escena y acción antes del estilo.
2. Nombra los personajes además de las refs. @image1 inyecta la cara, pero añadir un nombre ("Phil el desarrollador", "Capitán Cumplimiento") ancla la pose y expresión. El modelo trata entidades nombradas diferente que referencias anónimas. No esperaba que esto importara, pero sí importa.
3. Limita la complejidad. Máximo tres paneles, dos globos de diálogo, ocho palabras por globo. Más allá de eso el modelo sacrifica consistencia de personajes para respetar la composición. No puede hacer todo así que deja caer la parte más difícil primero. La parte más difícil siempre son las caras.
4. Cero dimensiones en el texto del prompt. Ya mencionado en las trampas. Vale la pena repetir: nunca escribas dimensiones de píxeles en el prompt. Usa el parámetro API image_size. Siempre.
5. Branding en el mundo, no superpuesto.
"marca de agua @rentierdigital abajo derecha"
"@rentierdigital grabado en el bisel de un monitor
en el fondo"
Haz la marca parte de la escena, no una instrucción de post-procesamiento. El modelo no entiende "superponer." Entiende objetos en una escena.
6. guidance_scale en 3.5 para Flux 2 Dev. Por debajo de 2, el modelo ignora la mitad de tu prompt. Por encima de 5, artefactos y sobre-saturación. Para variantes de velocidad (Turbo, Flash), 2.5 con 8 pasos es suficiente. Encontré esto generando el mismo prompt en cada valor de 1 a 7. No glamoroso, pero funciona.
Un prompt que trata de especificar todo le da al modelo permiso para elegir qué partes ignorar. Elige tus batallas.
La Conclusión
Dos modelos de trece. Esa es la proporción. No porque sean "mejores" en ningún sentido general, sino porque soportan nativamente /edit con múltiples image_urls. Todo el ranking se deriva de ese detalle de API. No de la calidad de imagen, no del precio, no de la reputación del modelo.
Antes de elegir un modelo de imagen para cualquier pipeline de contenido, una pregunta: ¿acepta el endpoint múltiples image_urls en modo /edit? Si no, todo lo demás es tiempo quemado. Prueba con el mismo prompt, las mismas referencias, tres generaciones consecutivas. No una.
La única forma de obtener personajes consistentes es alimentar al modelo con una imagen de referencia. De lo contrario puedes pasar dos días escribiendo el prompt perfecto. No cambiará nada. La respuesta estaba en los docs de la API, página 2, parámetro image_urls. La consistencia de personajes no es un problema de prompting. Es un problema de leer documentación.
Fuentes: documentación de modelos fal.ai para especificaciones de endpoints y precios.
(*) La portada es generada por IA. Lo cual, dado el artículo, probablemente ya adivinaste. La ironía es que tomó tres intentos conseguir los personajes correctos en esta también.