惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

宝玉的分享
宝玉的分享
Security Latest
Security Latest
S
Secure Thoughts
H
Heimdal Security Blog
The Last Watchdog
The Last Watchdog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
S
Security Affairs
PCI Perspectives
PCI Perspectives
C
CERT Recently Published Vulnerability Notes
C
CXSECURITY Database RSS Feed - CXSecurity.com
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
有赞技术团队
有赞技术团队
爱范儿
爱范儿
腾讯CDC
P
Privacy & Cybersecurity Law Blog
量子位
T
Threat Research - Cisco Blogs
V
V2EX
S
Schneier on Security
P
Proofpoint News Feed
美团技术团队
Apple Machine Learning Research
Apple Machine Learning Research
Forbes - Security
Forbes - Security
The Hacker News
The Hacker News
月光博客
月光博客
C
Cybersecurity and Infrastructure Security Agency CISA
Schneier on Security
Schneier on Security
L
LINUX DO - 最新话题
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
V
Visual Studio Blog
S
SegmentFault 最新的问题
G
GRAHAM CLULEY
人人都是产品经理
人人都是产品经理
Hacker News - Newest:
Hacker News - Newest: "LLM"
博客园 - 叶小钗
罗磊的独立博客
WordPress大学
WordPress大学
www.infosecurity-magazine.com
www.infosecurity-magazine.com
C
Cisco Blogs
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
T
Tenable Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
W
WeLiveSecurity
V
Vulnerabilities – Threatpost
Last Week in AI
Last Week in AI
Google DeepMind News
Google DeepMind News
博客园 - 聂微东
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant Common SOC 2 Failures (Real World) Stop Vibe-Checking Your AI App: A Practical Guide to Evals How to Use SonarQube and SonarScanner Locally to Level Up Your Code Quality Your Next To-Do App Is Dead — I Replaced Mine with an OpenClaw AI Sign a Nostr event in 60 lines of Python using coincurve — no nostr-sdk, no nbxplorer, no rust toolchain ITGC Audit Explained Like You’re in Big 4 Patch Tuesday abril 2026: Microsoft parcha 163 vulnerabilidades y un zero-day en SharePoint Stop scraping everything: a better way to track competitor price changes Listing on MCPize + the Official MCP Registry while routing payments OUTSIDE the marketplace — how I kept 100% of my x402 revenue Building an AI-Powered Risk Intelligence System Using Serverless Architecture Why We Ripped Function Overloading Out of Our AI Toolchain Testing AI-Generated Code: How to Actually Know If It Works SaaS Churn Is Killing Your Business. Here Is What to Do About It (Without a Support Team) The Speed of AI Is No Longer Linear - And Self-Improving Models Are Why How to Implement RBAC for MCP Tools: A Practical Guide for Engineering Teams From Standard Quote to Persuasive Proposal: AI Automation for Arborists I built a CLI that scaffolds complete multi-tenant SaaS apps Axios CVE-2025–62718: The Silent SSRF Bug That Could Be Hiding in Your Node.js App Right Now The dashboard that ended our friendship Data Pipelines Explained Simply (and How to Build Them with Python) The Hidden Cost of AI Systems Nobody Talks About. undefined vs undeclared, and how typeof behaves Switching from file-based jobs to NATS/Kafka in Rust without changing code io_uring Adventures: Rust Servers That Love Syscalls Why Agentic AI is Killing the Traditional Database The POUR principles of web accessibility for developers and designers Quantum Neural Network 3D — A Deep Dive into Interactive WebGL Visualization How To Install Caveman In Codex On macOS And Windows Automation Pipeline Reliability: Why Your Workflow Breaks When Nobody Is Watching I Built an 'Open World' AI Coding Agent — It Works From ANY Folder From Freelancing to Product: A Tech Service Company's SaaS Transformation China's AI Giants: Adding Tencent Hunyuan & ByteDance Doubao to AI University (74 Providers) On the Vibe Coders and Their Lies clerk: Auto-Summarize Your Claude Code Sessions AI Weekly — 2026/04/10–04/17 | The Model Lockdown Is Here, but the Toolchain Is the Real Battleground AI 週報 — 2026/04/10–2026/04/17 模型封鎖潮來了,但工具鏈才是真戰場 Maybe this is how Open-Source apps are born... 🚀 Fine-Tune LLMs with LoRA and QLoRA: 2026 Guide tRPC v11 + Next.js App Router: End-to-End Type Safety Without the Boilerplate ShadCN UI in 2026: Why I Stopped Installing Component Libraries and Started Owning My Components SaaS Billing in React Server Components: Stripe + Supabase Without a Single `useEffect` Join our DEV Weekend Challenge — $1,000 in Prizes Across TEN winners! Submissions Due April 20 at 6:59 AM UTC. Implementing FSRS Spaced Repetition in Flutter + Supabase — Adding Memory Science to an AI Learning App "I Texted My Localhost From the Train — Claude Code Fixed the Bug Before I Got Home" I Built a Sales Prep AI and It Went Deeper Than Expected Design to Code #2: One JSON, Eleven Outputs Solving the 100M-Row Problem: A Summary Table Pattern for High-Volume Push Notification Logs Flutter Web With Wasm: What Actually Changes For Developers I Built 50 Royalty-Free Soundtracks for My Side Project in a Weekend Using AI Music Generation The Vibe Coding Security Checklist: 7 Things to Check Before You Ship Stop Letting Googlebot Guess Fix Your React App's SEO Right Desconstruindo o Streaming do LinkedIn: Como Criar um Engine de Extração de Vídeo de Alta Performance com HLS e FFmpeg (EDA Part-1) EDA (Exploratory Data Analysis) Explained With Real Life — Why Looking at Your Data Is the Most Important Step in Machine Learning Brand Relationship Management at Scale: Our 4-Touch Outreach System for 200+ Brands Why String.fromEnvironment() Might Return an Empty String in Dart JGuardrails 1.0.0 — Hardening Java LLM Apps Against Jailbreaks, Toxicity, and Prompt Injection Plan and Schedule a Full Week of Threads Content From One Claude Conversation Coding Cat Oran Ep3, Five Tables Changed Everything Updated: BFF Pattern I'm done watching freelancers get buried by 200 proposals. So I'm building the alternative. This is my first post BFS Algorithm in Java Step by Step Tutorial with Examples Tracking LLM Pricing Monthly: An Open Dataset for 22 AI Models How We Measure Content ROI on a Comparison Site: Revenue Attribution Without Perfect Data Introducing Nova AI Ops: The AI-Native Operating System for SRE Teams I built a free desktop video downloader for Windows — Grabbit How Talkie OCR Helps Vision-Impaired & Dyslexic Users Read the World Around Them VRCFaceTracking安装和iPhone面捕配置教程,有bug Even CrowdStrike Can't See Your Agents The Automation Gold Rush: What n8n Workflows and Claude Are Opening Up for Developers Right Now
500 portadas distintas de un solo modelo de $0.04: arte de portada con IA, consistente con la marca, en un generador económico
Franchesco Romero · 2026-06-15 · via DEV Community

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, logo, x, y))  # respaldo de contraste
    base.alpha_composite(logo, (x, y))
    return _to_png(base.convert("RGB"))

Wordmark nítido, legible sobre cualquier arte, cero tipografía generada. Este es el principio general para modelos económicos: cualquier cosa que tenga que ser exacta al píxel, texto, logos, layout, lo haces en código determinista, no en el prompt.

Fase 3, Core fusiona sujetos; diseña alrededor de eso

Pedimos "un grifo de frente a un dragón". Core regresó una sola criatura con partes de grifo y de dragón fusionadas. Este es un modo de falla conocido de los modelos chicos: dos sujetos independientes en un mismo cuadro se mezclan.

Dos mitigaciones, las dos baratas:

Prompt negativo: fused creature, merged animals, two-headed, hybrid,
extra limbs, extra heads
.

Componer alrededor de arquetipos conocidos. Un consejo alrededor de una mesa redonda, un grupo de cuatro aventureros, figuras frente a un portal esas son composiciones que el modelo ha visto miles de veces y monta correctamente, multitud y todo. Un duelo libre de dos bestias distintas no lo es. Convertimos las cosas que queríamos retratar (comunidad, colaboración) en arquetipos que el modelo de verdad puede renderizar.

La regla general: no pelees contra los ajustes composicionales del modelo elige sujetos o temas que se adecuen a ellos.

El callejón sin salida que vale la pena documentar: fusión cálido + frío

Intentamos reproducir una referencia que fusionaba una taberna medieval acogedora con interfaces holográficas cian, cálido y frío, fantasía y tecnología, en un mismo cuadro. Catorce generaciones a través de cuatro estrategias de prompt después, el veredicto fue concluyente:

La tecnología enterrada en una descripción cálida → Core soltaba la
tecnología por completo (taberna pura).

La tecnología al frente → Core inundaba el cuadro de pantallas cian (sala de servidores pura).

Equilibrado, con cuentas explícitas ("dos o tres hologramas") → revertía a uno o al otro, dependiendo de la semilla.

Core no puede sostener dos estéticas fuertes y opuestas en tensión. Un modelo más fuerte (la referencia salió de uno) sí puede; Core no. Anotamos el hallazgo y seguimos adelante en lugar de quemar más generaciones contra un techo del modelo. El movimiento de ingeniería honesto en una gama económica es saber cuándo pegaste contra el muro y dejar de pagar por darle de topes, la alternativa (componer los hologramas nosotros mismos de manera procedural) era real pero no valía la pena para el valor.

Fases 4–6, diseñar la variedad, porque la semilla no lo va a hacer

Este era el problema de producto de verdad. Con el envoltorio "épico"
pesado puesto, prompts distintos producían imágenes casi idénticas. Dos
temas opuestos, "trabajo remoto asíncrono entre zonas horarias" y
"depurar una caída de producción a las 3am", los dos renderizaban al
mismo guerrero dorado con una espada en llamas. El andamio de estilo
(elementos de héroe en dorado bruñido, ambiente heroico ceremonial,
heráldica de gremio) era tan dominante que el modelo se aferraba a él e ignoraba el tema. La semilla aleatoria no ayudaba: el prompt restringe la salida mucho más de lo que la semilla la perturba.

Tres palancas, cada una medida contra la anterior:

4a. Encabeza con el tema; degrada el estilo a un tratamiento. Pon el sujeto primero, aplica el look como un acabado en lugar de como palabras clave que dictan el sujeto. De repente "trabajo remoto" renderizaba a un desarrollador frente a un mapamundi brillante y "depurar a las 3am" renderizaba a un ingeniero en un cuarto de control oscuro. Fidelidad al tema: arreglada. Pero cada portada seguía siendo dorado cálido sobre fondo oscuro.

4b. Rota la paleta. La paleta fija única era el mayor motor de
mismidad. Un conjunto rotatorio, teal/brasa/azul-acero/violeta/esmeralda/carmesí,
cada uno conservando el dorado como hilo conductor, rompió el monocromo.
El color y el ambiente ahora variaban por generación.

4c. Rota el escenario. Los temas de nuestro blog son casi sinónimos
(carreras, empleos, mentoría, comunidad), así que aun con la rotación de
paleta, "avanza en tu carrera" y "sube de nivel tus habilidades" todavía
se montaban igual. La solución que funcionó: meter el sujeto en un
escenario distinto y fiel a la marca cada vez, biblioteca, fragua, pico
de montaña, observatorio, mercado. Tres temas sinónimos de carrera luego
renderizaron como una biblioteca, una fragua, y un observatorio.

def _epic_cover_prompt(raw, motif="champion", composition=None, palette=None, setting=None):
    scene = MOTIFS.get(motif, "")
    if scene:                                  # un motivo ES el sujeto
        subject = f"{scene}, evoking {raw.strip()}"
    else:                                      # si no: el tema encabeza, metido en un escenario
        subject = f"{raw.strip()}, {setting or random.choice(SETTINGS)}"
    comp = composition or random.choice(COMPOSITIONS)
    pal  = palette or random.choice(PALETTES)
    return f"{subject}. {comp}. Rendered as painterly key-art, ... a rich {pal} palette ..."

La variedad es combinatoria y del lado del servidor: 10 escenarios × 7
paletas × 8 composiciones ≈ 560 encuadres distintos, elegidos al azar por
llamada, antes de que la semilla siquiera entre. La variedad dejó de ser
algo que esperábamos que el modelo proveyera y se volvió un espacio de
parámetros que poseemos.

Límite honesto: para exactamente el mismo tema, Core todavía tiende a
montar el sujeto igual, los modificadores de composición son débiles
contra una escena fuertemente implicada. La variedad de verdad viene de
temas distintos + paleta + escenario + semilla, no de volver a tirar un
mismo prompt.

Fase 6, un lente de campaña. Como la plataforma es gamificada (roles,
niveles, misiones), un encuadre de campaña tipo RPG se mapea sobre cada
tema: aprender = misiones, roles = clases, crecimiento = subir de nivel,
comunidad = el grupo. Es un tercer estilo junto a los otros (no
reemplazamos los que funcionan), reutilizando la misma maquinaria de
rotación con escenas de RPG, un tablero de misiones, un grupo de clases,
un árbol de habilidades. Mismo motor, narrativa más rica, más variedad
gratis.

La economía

A bajo volumen editorial, el modelo de API por imagen gana de manera
decisiva. Las cifras son precio de lista al momento de escribir (us-west-2)
y se van a mover, trátalas como proporciones, no como cotizaciones.

Opción Costo unitario Costo fijo Operación
Bedrock Stable Image Core ~$0.04 / imagen $0 ninguna
Bedrock Stable Image Ultra ~$0.14 / imagen $0 ninguna
SDXL autoalojado (g5.xlarge) ~$0 marginal ~$1.00 / hora-GPU siempre encendido o dolor de arranque en frío AMI, escalado, parchado
Google Imagen (Vertex) ~$0.04 / imagen $0 ninguna, pero una segunda nube
Midjourney n/a (suscripción) $10–60 / mes sin API sancionada

Un blog que genera un puñado de portadas al día cuesta centavos al mes en
Core. Para llegar al punto de equilibrio contra una sola g5.xlarge siempre
encendida (~$720/mes) tendrías que generar ~18,000 portadas al mes.
Nosotros generamos quizás 100. La cuenta del autoalojado solo se voltea a
una escala que nunca vamos a alcanzar para arte editorial, e incluso
entonces te apuntaste a AMIs, fijado de drivers, y un autoescalador. El
modelo más barato que pasa la barra de calidad, llamado por imagen, es la
respuesta correcta aquí, y reconocer eso temprano nos ahorró un flujo de
trabajo completo de operación de GPU.

La elección de gama dentro de Bedrock también importa: Ultra es ~3.5× el
precio de Core por una mejora de calidad que un logo post-superpuesto y la
rotación de paleta volvieron innecesaria para las miniaturas. Gastamos el
dinero donde aterriza el ojo humano (el sujeto y el color), no en un número
de gama.

La trampa de región

Los modelos de imágenes de Bedrock no están en cada región, y el modelo
que quieres acota la región que llamas. Nuestro backend corre en
us-east-1; Stable Image Core se aprovisionó en us-west-2. Así que el
cliente está fijado a otra región a propósito:

client = boto3.client("bedrock-runtime", region_name="us-west-2")  # NO la región de la app

Tres consecuencias que vale la pena saber antes de armar la arquitectura
alrededor de esto:

La disponibilidad es por modelo, por región. "Bedrock está en mi región"
no es "este modelo está en mi región". Revisa el modelo, no el servicio.

Las llamadas a otra región agregan latencia y cruzan una frontera de
datos. Para arte de portada de dispara-y-olvida eso está bien; para
cualquier cosa sensible a la latencia o a la residencia no lo está, y
puede que necesites aprovisionar el modelo en la región de tu app o elegir
otro.

El acceso al modelo es una concesión explícita. Habilitar un modelo de
Bedrock es un paso de consola por cuenta/región, y el IAM tiene que
permitir bedrock:InvokeModel sobre ese ARN del modelo. Un ARN con
comodín sobre el modelo base nos ahorró re-editar la política en cada
cambio de modelo.

Lo que un modelo económico no puede hacer (medido, no adivinado)

Tipografía. Nunca. Superpón el texto y los logos tú mismo.

Dos estéticas opuestas en un cuadro (cálido/frío, fantasía/tecnología). Se
colapsa a una. Elige un carril o superpón.

Escenas libres de varios sujetos. Dos sujetos distintos se fusionan. Usa
arquetipos que el modelo ya monta (mesas, grupos, portales).

Variedad composicional por tema bajo demanda. Una escena fuertemente
implicada se monta igual sin importar las pistas de cámara. Diseña la
variedad a través de paleta/escenario/semilla en lugar de esperarla de un
solo prompt.

Ninguno de estos fue un motivo de descarte. Cada uno se volvió una
restricción de diseño que empujó el trabajo fuera del modelo y hacia
código que controlamos, que es justo donde quieres que vivan las partes
deterministas de una marca de todos modos.

Lo que te diría

Decide el trabajo del modelo, luego recupera el resto. El texto, los
logos, el layout, y la variedad exacta de marca son deterministas; hazlos
en código. Deja que el modelo pinte.

Un estilo de la casa es un envoltorio de prompt + un prompt negativo, no
un ajuste fino. Para bajo volumen, ese es todo el presupuesto de
consistencia de marca que necesitas.

La variedad es un espacio de parámetros que posees, no una semilla a la
que le cruzas los dedos. Rota los ejes que no definen la marca (paleta,
escenario, cámara); fija el que sí (aquí, el dorado).

Pon precio a la API por imagen contra una GPU con honestidad. Por debajo
de decenas de miles de imágenes al mes, la API gana en costo y en
operación, no construyas la flota.

Revisa modelo-por-región antes de armar la arquitectura. El modelo acota
la región, y la concesión es explícita.

Conoce el techo y detente ahí. Catorce generaciones nos dijeron que Core
no puede fusionar cálido y frío. Anotar eso y seguir adelante fue más
barato que un prompt ingenioso que nunca iba a llegar.

Si te llevas una sola cosa: en un modelo de imágenes económico, la calidad
y la variedad no son cosas que pides en un prompt, son cosas que diseñas
alrededor de los límites conocidos del modelo. El prompt es la parte más
chica.