cada carácter representa un color. el 0 siempre es transparencia.
la paleta está distribuida en 26 minúsculas + 26 mayúsculas + 10 números + @ = 63 colores + transparente.
GatoPaint convierte imágenes en cadenas de texto comprimidas que cualquier programa puede leer, guardar o transmitir sin necesidad de binarios, formatos propietarios ni librerías de imagen.
guarda sprites, mapas o tilesets directamente en archivos de texto o código fuente. cero dependencias de imagen. un sprite de 16×16 cabe en una sola línea.
envía imágenes pequeñas por protocolos que solo admiten texto: IRC, SMS, señales MQTT, chats básicos. compresión sin pérdida en iconos, avatares y miniaturas.
genera imágenes con código o IA en formato texto, luego renderízalas. perfecto para bots de twitter/mastodon que crean pixel art algorítmico.
almacena avatares o iconos de usuario en una base de datos SQL normal como strings. no necesitas CDN ni bucket de almacenamiento para assets pequeños.
oculta mensajes dentro de imágenes reales: el código parece texto normal hasta que se decodifica. útil para watermarks visuales o ARGs.
incluye diagramas visuales directamente en README, wikis o comentarios de código. cualquiera con el decodificador puede ver la imagen sin salir del editor.
una imagen tiene millones de colores posibles. GatoPaint los reduce a 63 colores predefinidos + transparencia, usando distancia euclidiana en espacio RGB para elegir el más cercano a cada píxel. la paleta está diseñada para cubrir el espectro completo con representación uniforme. el carácter 0 siempre es transparencia (alpha = 0).
el método básico de compresión: en lugar de escribir aaaaa, se escribe a+. los operadores son multiplicadores: /=×2, *=×3, -=×4, +=×5. se pueden combinar: a/* = a repetida 2×3=6 veces. a++ = a×5×5 = 25 veces. esto es especialmente efectivo en imágenes con fondos sólidos o zonas de color uniforme.
# es un salto de línea virtual — repite el último carácter hasta el final de fila, útil cuando una línea entera es de un color. _ repite la línea anterior completa, ideal para imágenes con filas idénticas (patrones, degradados, zonas planas). combinando # y _, bloques grandes de transparencia como 0#___ se reducen a 4 caracteres en lugar de cientos.
el símbolo | indica simetría especular: todo lo que está antes del | se espeja y se añade al final. sdkjh| se convierte en sdkjhhjkds. perfecto para sprites simétricos (caras, escudos, iconos centrados) donde codificar solo la mitad izquierda ahorra hasta un 50% de caracteres.
cualquier secuencia entre paréntesis se trata como una unidad y puede recibir un operador de repetición. (ab)* = ababab. los grupos se anidan: ((ab)*c)+ = repite ab 3 veces, añade c, y repite todo ese bloque 5 veces. esto captura patrones geométricos repetitivos en muy pocos caracteres, eficaz en texturas, patrones de tiled o bordes decorativos.
la codificación recorre la imagen de izquierda a derecha, arriba a abajo, igual que se lee texto. cada carácter del código corresponde a un píxel (o más si hay operadores). el decodificador simplemente lee el string de izquierda a derecha, expandiendo operadores, y va colocando colores en el canvas en el mismo orden. para decodificar solo hacen falta las dimensiones de la imagen y el string.
los archivos .miau son texto plano con una cabecera mínima de comentarios. cualquier editor de texto puede abrirlos. son versionables con git, diff-eables, y comprimibles adicionalmente con gzip para máxima eficiencia.