
Postal IA: la primera postal, con un fondo que no pinta ninguna IA
Esta entrada nace de un principio que este proyecto lleva escrito desde el primer día: que algo hecho con IA se vea bonito no tiene por qué significar depender de un generador de imágenes de pago. Postal IA es la comprobación práctica de esa idea. Es un proyecto pequeño y deliberadamente independiente de IA Monterroso/PINSAPIA y de Prompt Lab —aunque comparte con ellos la misma pieza de infraestructura, el modelo local que corre en ROCKY vía LM Studio— construido para hacer una sola cosa: a partir de una palabra o un tema, pedirle un micropoema a ese modelo y mostrarlo sobre un fondo que no ha dibujado ninguna IA, sino unas reglas de composición bastante simples escritas en JavaScript.
El reparto de tareas: quién escribe y quién dibuja
El principio de MODULARIDAD del proyecto pedía que el generador de texto y el generador visual fueran dos piezas independientes que se juntan al final, no una sola cosa mezclada, y así ha quedado. El backend (main.py, FastAPI) solo sabe pedirle un micropoema a LM Studio y devolverlo; todo lo visual —paleta, formas, disposición del texto— vive en el navegador, en static/index.html, sin tocar el servidor para nada. Cambiar el modelo de texto en el futuro no obliga a tocar ni una línea del generador visual, y al revés.
Qué se ha reutilizado de PINSAPIA, y qué se ha dejado fuera a propósito
De ia-monterroso-api/main.py se ha tomado prestado lo que ya está probado en ROCKY: el patrón de conexión a LM Studio con su timeout y su manejo explícito de errores (si LM Studio está cerrado o tarda demasiado, la API responde con un mensaje claro en vez de romperse), servir la interfaz desde el mismo FastAPI para no tener que lidiar con CORS, y el mismo esquema de código de acceso opcional por variable de entorno (POSTALIA_TOKEN en vez de MONTEIA_TOKEN, pero mismo mecanismo).
Se ha dejado fuera, también a propósito, todo lo que PINSAPIA necesita y Postal IA no: el RAG sobre el corpus de documentos del centro, la calculadora segura, el sistema de progreso y repaso en SQLite, el historial de chat con streaming, las personalidades. Nada de eso tiene sentido para un generador de un solo micropoema por petición, y arrastrarlo solo habría añadido complejidad sin ningún beneficio real.
Cómo se dibuja el fondo, sin ninguna IA de por medio
En vez de elegir colores completamente al azar en cada postal —lo que a menudo choca o deja el texto ilegible—, el generador visual elige al azar entre un pequeño número de paletas ya pensadas para que el poema, en blanco o en un tono claro, se lea bien encima. Sobre ese degradado se dibujan unas cuantas manchas suaves y desenfocadas, también con posición y tamaño al azar, y por último una tarjeta translúcida detrás del texto que garantiza contraste pase lo que pase debajo. Conviene decirlo tal cual es: esto es composición visual con reglas simples —formas, color, disposición—, no un modelo de difusión, y así hay que presentárselo también al alumnado si esto llega a usarse en clase.
Cómo se usa
pip install -r requirements.txt
uvicorn main:app --reload --port 8002
y abrir http://127.0.0.1:8002 con LM Studio abierto y su servidor activado. Se escribe un tema, se pulsa «Crear postal», y aparece el micropoema sobre su fondo. Dos botones más: «Otro fondo, mismo poema» redibuja solo la parte visual sin volver a llamar al modelo, y «Descargar imagen» guarda la postal como PNG.
Un fallo real: la postal se descargaba minúscula
Nada más probarlo, la imagen descargada salía muchísimo más pequeña de lo esperado. La causa: el <svg> de la postal solo llevaba definido su viewBox, no un width/height propios —en pantalla no se notaba, porque el tamaño lo fijaba el CSS de la página—, pero al descargar, el código serializa ese SVG suelto, fuera de la página, para dibujarlo en un lienzo de 800×1000. Sin un tamaño propio, el navegador le asignaba uno pequeño por defecto, y solo se pintaba esa esquina diminuta del lienzo entero. La solución fue añadir width="800" height="1000" como atributos del propio <svg>, que no cambia nada en pantalla pero fija el tamaño real para la exportación. Se comprobó con un LM Studio de mentira y un navegador sin cabeza que completó el proceso entero —escribir el tema, generar la postal, pulsar descargar— y midió el PNG resultante: 800×1000 píxeles reales.
Qué no hace todavía (límites honestos)
- No se ha probado aún con un LM Studio real en ROCKY, solo con un servidor de mentira que siempre devuelve el mismo poema de prueba: falta la prueba de fuego con el modelo de verdad.
- El código de acceso (
POSTALIA_TOKEN) existe pero está desactivado por defecto: en local no pide nada; hay que definir la variable antes de abrir esto en la red del centro. - No hay límite de peticiones por minuto ni filtro de mensajes sospechosos, a diferencia de PINSAPIA. No hacen falta mientras esto corra solo en local, pero sí el día que salga de ahí.
- No hay galería ni forma de compartir la postal más allá de descargar la imagen: ese reparto quedó fuera del MVP a propósito.
Siguiente paso
Que José Luis pruebe Postal IA con LM Studio real en ROCKY, con varios temas seguidos, y valore si el tono de los micropoemas y el aspecto de los fondos convencen para llevarlo a clase. Si el resultado gusta, el siguiente paso natural es decidir si activar el código de acceso para sacarlo a la red del centro; si no, ajustar aquí —system prompt, paletas de color— es mucho más barato que rehacer nada.


Etiqueta:AIDARAC, diseño generativo, haiku, ies monterroso, lm studio, micropoemas, montesteam, postal ia, ROCKY, svg


