CoolFace
Apppublic

Javiai/radionicapp

sourceHugging Facecc-by-4.0updated 6d agoView on Hugging Face
0likes
App README

Radiónica — la app

Prototipo de etapa 1: una sola página donde se elige una imagen, se elige qué darle y se aplica. Sustituye a la idea anterior de "landing + app dentro": esto es lo único que hay.

Sin servidor. La imagen no sale nunca del dispositivo de quien la usa: se lee en el navegador y se descarga en el navegador. No hay cuenta, ni contraseña, ni pago.

Verlo en local

Hacen falta un par de cosas: son módulos de JavaScript, y el navegador no los carga si abres el archivo con doble clic. Hay que servirlo:

cd web python3 -m http.server 8000 # o: npm run servir

y abrir http://localhost:8000

Los tests

npm test # equivale a: node --test tests/*.test.js

No hace falta instalar nada: usa el ejecutor de tests que trae Node. Son la red de seguridad para cuando cambiemos cosas — sobre todo tokens.test.js, que falla si alguien escribe un color o una duración fuera de css/tokens.css, que es como se desmonta un sistema de diseño sin enterarse.

La prueba de navegador (el recorrido completo, y que en móvil no se salga nada) necesita Playwright y se salta sola si no está:

npm install -D playwright && npx playwright install chromium node --test tests/navegador.test.js

Dónde está cada cosa

Si quieres cambiar…Toca…
el proceso y el spelljs/proceso.js
el aspecto (todo)css/tokens.css
las palabras de la pantallajs/textos.js e index.html
los símbolos de las energíasel sprite SVG de index.html
las imágenes de ejemploassets/ejemplos/ + js/ejemplos.js
encender el registro de usojs/uso.js (una constante)
añadir un paso al procesoun archivo en js/pasos/ + la lista de js/proceso.js

El mapa completo

index.html estructura y símbolos. Sin un solo estilo en línea. css/tokens.css ← EL ARCHIVO DE DISEÑO. Dos capas: primitivos y semánticos. css/base.css reset y tipografía css/componentes/ cielo, umbral, carta, símbolos, controles js/proceso.js ← EL PROCESO. Entero, en un archivo, de arriba abajo. js/energias.js cómo se llaman las tres energías en la pantalla js/estado.js máquina de estados, sin DOM (por eso se puede probar sin navegador) js/vista.js pinta el estado; no decide nada js/main.js el cableado, nada más js/cielo.js estrellas generativas, leyendo tokens js/imagen.js cargar y entregar la imagen js/uso.js registro de uso, preparado y apagado js/textos.js los textos que cambian según el momento js/ejemplos.js las imágenes de ejemplo

Las reglas que sostienen esto: el CSS no sabe de JS, la vista no decide, el estado no toca el DOM, y ningún componente escribe un valor de diseño. Si algo de eso se rompe, los tests lo dicen.

Publicar en Hugging Face

Este directorio es la raíz del Space (sdk: static), no el repo de Gradio que hay un nivel más arriba. Hace falta un Space nuevo:

cd web git init && git add . && git commit -m "primera versión" git remote add origin https://huggingface.co/spaces/TU-USUARIO/EL-NOMBRE git push -u origin main

El proceso

Está entero en js/proceso.js y se lee de arriba abajo. La imagen se convierte en números, esos números entran en cada función y salen de ella.

En crearElSpell no les pasa nada físico: entran, el spell se crea con ellos dentro, y salen igual. Ese paso por dentro es el proceso. El spell no se muestra en ninguna parte.

Después, darContraste les aplica un aumento mínimo —uno o dos niveles en los extremos, nada en los medios tonos—.

Falta dejarLaHuella, que es donde el spell llegaría a la imagen.

En pantalla, una banda de luz difuminada recorre la imagen de arriba abajo y por su centro va pasando el revelado. La misma estructura servirá para el deslizador manual.

Decisiones abiertas

  • En qué formato se guarda. Hoy JPEG al 98%: la resolución es exacta, pero la compresión mueve valores por su cuenta. PNG no añadiría nada, a cambio de que el archivo pese entre cinco y diez veces más. Pendiente de probar el peso en un móvil real. El razonamiento completo está en js/imagen.js.
  • Imágenes muy grandes. Safari y iOS no permiten un lienzo de más de ~16,7 millones de píxeles: por encima de eso vuelve en blanco sin avisar. Hay que decidir qué se le dice a la persona cuando su foto pase de ahí.

Lo que está preparado y aún no encendido

  • Preparación neutra de la imagen antes de aplicar la energía elegida — js/conjuros.js, PREPARACION. Pendiente de pensar.
  • Marcar el metadato del archivo — js/pasos/metadato.js.
  • Huella en los píxelesjs/pasos/huella.js, con el procedimiento planteado el 13/09: del conjuro se saca un hash, y el hash decide qué píxeles se mueven y en qué dirección.
  • Registro de usojs/uso.js. El identificador anónimo ya se guarda desde el primer día aunque no se envíe nada, para que cuando haya servidor se pueda saber quién volvió, no solo cuántos clics hubo.