La lección de cabecera: en un modelo económico, la calidad no la consigues escribiendo un mejor prompt único, la consigues decidiendo en qué es bueno el modelo, haciendo el resto tú mismo, y diseñando la variedad como una característica del producto en lugar de esperar que la semilla la entregue. Arquitectura Admin (SPA) ──POST /blog/generate-image──▶ FastAPI (Fargate, us-east-1) │ boto3 bedrock-runtime (us-west-2) │ Stable Image Core ──▶ PNG en base64 (2016×1152) │ Pillow: composición opcional del lockup de marca │ redimensionar → WebP (1200×630) → S3 → CloudFront Una sola petición sincrónica. Sin cola, sin GPU, sin hospedar el modelo. El endpoint es un orquestador delgado: construye un prompt, llama a Bedrock, opcionalmente superpone el logo, y le entrega los bytes a la pipeline de imágenes que ya existía (que quita los metadatos, redimensiona, y convierte a WebP). La decisión arquitectónica más importante de todas es lo que no está aquí: sin modelo con ajuste fino, sin LoRA, sin grupo de autoescalado de GPU. La consistencia de marca se compra por completo con un envoltorio de prompt y un post-proceso. Eso mantiene el costo marginal de una portada en unos centavos y el costo operativo en cero, que es justo el punto para arte editorial de bajo volumen. Fase 0, el bug del paso directo La primera versión hizo lo obvio: tomar el texto y mandarlo al modelo. # NO LO HAGAS, el punto de partida fuera de marca body = { " prompt " : admin_text , " mode " : " text-to-image " } El agente interno de autoría, mientras tanto, envolvía cada prompt en unestilo de la casa fijo. Así que las portadas hechas por el agente eran fieles a la marca y las tecleadas a mano eran un terreno sin reglas misma plataforma, dos identidades visuales. La solución es un envoltorio. Fase 1, un estilo de la casa es un envoltorio de prompt más un prompt negativo def _styled_cover_prompt ( raw : str ) -> str : return ( " Wide editorial illustration for a community blog post. " f " Theme: { raw . strip () } . " " Modern flat-vector art style with subtle gradients, a warm " " purple and teal palette, optimistic mood. Abstract metaphor, " " no people in close-up, no readable text anywhere. " " Clean 16:9 hero composition. " ) NEGATIVE = " text, words, watermark, logo, signature, low quality, blurry, frame, border " El prompt negativo importa tanto como el positivo. text, words está haciendo trabajo de verdad: es la forma más barata de impedir que el modelo garabatee letras falsas por todo el arte. Nos vamos a apoyar fuerte en eso en un momento. Este es el estilo de la casa "plano". Luego quisimos un segundo pictórico, dorado y oscuro, para contenido gamificado / de torneo. Ahí fue donde el modelo económico empezó a mostrar sus limites. Fase 2, nunca dejes que el modelo escriba texto; superpón el logo tú mismo Todo modelo de difusión de esta gama renderiza el texto como pseudo glifos garabateados. El arte de referencia que perseguíamos tenía un wordmark; el nuestro salió como MYBRAND → MYBARND. Dos opciones: pelear con el modelo, o dejar de pedirle que haga tipografía. Dejamos de pedírselo. El prompt positivo dice no readable text anywhere , el prompt negativo prohíbe text, logo , y el lockup de marca real y transparente, wordmark incluido, se superpone encima con Pillow después de generar. El pegado ingenuo falla: un logo dorado sobre una pintura cargada de dorado se desvanece. La solución es un respaldo oscuro difuminado detrás del lockup, luego el lockup, abajo a la derecha: def overlay_brand ( image_bytes : bytes ) -> bytes : base = Image . open ( io . BytesIO ( image_bytes )). convert ( " RGBA " ) logo = Image . open ( LOGO_PATH ). convert ( " RGBA " ) target_w = int ( base . width * 0.22 ) logo = logo . resize (( target_w , int ( logo . height * target_w / logo . width ))) x = base . width - logo . width - int ( base . width * 0.035 ) y = base . height - logo . height - int ( base . height * 0.035 ) base . alpha_composite ( _soft_dark_ellipse ( base . size
← WSZYSTKIE NEWSY
500 portadas distintas de un solo modelo de $0.04: arte de portada con IA, consistente con la marca, en un generador económico
AUTHOR · Franchesco Romero
La lección de cabecera: en un modelo económico, la calidad no la consigues escribiendo un mejor prompt único, la consigues decidiendo en qué es bueno el modelo, haciendo el resto tú mismo, y diseñando la variedad como una característica del producto en lugar de esperar que la semilla la entregue. Admin (SPA) ──POST /blog/generate-image──▶ FastAPI (Fargate, us-east-1) │ boto3 bedrock-runtime (us-west-2) │ Stable Image Core ──▶ PNG en base64 (2016×1152) │ Pillow: composición opcional del lockup de marca │ redimensionar → WebP (1200×630) → S3 → CloudFront Una sola petición sincrónica. Sin cola, s