Interfaz¶
La interfaz es una aplicación de Gradio 6
(frontend/ui/), en
español y con tema oscuro. No tiene credenciales: escribe siempre a través de la API y lee
las imágenes directamente del volumen data/, montado en solo lectura.
Pestañas¶
| Pestaña | Módulo | Qué hace |
|---|---|---|
| Proyectos | tabs/projects.py |
Galería con portadas, crear, editar, resumen del proyecto, llamadas de IA y papelera |
| Referencias | tabs/references.py |
Subir con notas, análisis inmediato, ficha de casillas por grupo, guardar, volver a analizar |
| Bocetos · Composición · Render Final | tabs/studio.py |
Las tres etapas del estudio, que se desbloquean en orden: cada una exige una imagen seleccionada en la anterior |
| Costes IA | tabs/costs.py |
Indicadores, gráficos por rol, día y proyecto, registro de llamadas (el detalle de una fila se oculta al hacer clic fuera), CSV y precios |
La lógica de presentación (textos, miniaturas, tablas) está separada en módulos de vistas
(views.py, studio_views.py, cost_views.py) que se prueban sin abrir la interfaz.
Comportamiento común¶
- Proyecto activo: se recuerda en el navegador (
gr.BrowserState); por defecto, el último actualizado. La cabecera muestra el proyecto, el estado del backend y el modo de la IA («Simulación · sin coste» o «Azure · con coste»). - Portada de cada proyecto: la imagen más avanzada que exista (render final seleccionado, composición, boceto o la primera referencia). En Proyectos se repite en grande sobre la ficha del proyecto activo (B-118), para no perder de vista cuál se está mirando.
- Estimación y confirmación: cada botón con coste muestra una estimación, que se recalcula al cambiar las variantes, la calidad o la resolución; en modo Azure, por encima de 0,20 € pide confirmarlo en un cuadro rojo, que se oculta al pulsar para no confirmar dos veces.
- Botones bloqueados y apagados (B-110): mientras se ve «procesando» en la pestaña a la
vista, sus botones y miniaturas se apagan y sus controles (casillas, opciones, deslizadores,
desplegables, texto y el lienzo del retoque) se atenúan; nada responde, ni con el ratón ni con
el teclado (B-113);
con una confirmación de coste abierta, solo responden «Confirmar (con coste)» y «Cancelar».
Las pestañas, los desplegables y los avisos siguen libres. Elegir, crear o mover a la papelera
un proyecto se bloquea mientras haya algo en marcha en cualquier pestaña (B-111). Todo botón
desactivado se ve gris oscuro, con el texto atenuado (
ui.locks.BUSY_LOCK_JSytheme.CSS). - Esquema 3D (B-116): bajo la imagen en grande, dos casillas muestran en una vista aparte
las aristas de la imagen base sobre la imagen (
ui/geometry.py, OpenCV), tal cual o corrigiendo el desplazamiento del encuadre. Son excluyentes y su medida va debajo de cada casilla, no escrita sobre la imagen (B-119). La fidelidad (aristas del esquema con una arista de la imagen a ±3 y ±8 px) va además en el título y en el pie de cada miniatura. - Descartes (B-109): en Bocetos, Composición y Render final, un aspa en cada candidata
(salvo la seleccionada) y «Descartar» junto a «Seleccionar» la apartan al desplegable
«Descartados (n)», al final de la pestaña, cerrado y solo con alguna; su ✓ la recupera.
Gradio no admite botones en las miniaturas: los añade
ui.thumb_actionsy pulsan un botón oculto por pestaña. - Cuadros de texto (B-115): las indicaciones, el cambio del retoque y las observaciones de
la auditoría se vacían al enviarse con éxito y quedan guardadas con la imagen
(
indications, en su trazabilidad) o con la auditoría; con error o cancelando, se conservan. Al cambiar de proyecto se vacían todos y se desmarcan «Usar la auditoría» y «Usar el retoque»; al cambiar de boceto, las observaciones. Las opciones (calidad, formato, variantes, proporción y resolución) se conservan. - Formularios bloqueados mientras trabajan: el de nuevo proyecto y el de subir una referencia se bloquean en el mismo clic (en el navegador, sin esperar al servidor) y se desbloquean al terminar, para no perder lo que se escriba entretanto al vaciarlos.
- Subidas temporales: la imagen elegida para una referencia se ve en grande antes de
subirla; su copia temporal (la de Gradio, nunca en
data/) se borra al cancelar, al cambiarla o al subirla, y Gradio borra cada hora las de más de un día. - Previsión de tiempo: mientras trabaja la IA se ve «procesando | transcurrido/previsto».
Gradio solo conoce la media de las ejecuciones anteriores; InteriorAI siembra la previsión
medida en pruebas reales para que se vea desde la primera vez (
forecast.py). - Trazabilidad de cada imagen: lo que ha entendido la IA, sus dudas, las entradas, el prompt enviado, las imágenes enviadas al modelo y el coste acumulado de la cadena.
Editor de máscara¶
El retoque de una composición usa el ImageEditor de Gradio con ajustes propios:
- Pincel rojo fijo (sin paleta), goma y tamaño; la herramienta activa se resalta en blanco.
- La rueda del ratón sobre el lienzo desplaza la página (el zoom queda en sus botones).
- El valor del editor solo se envía al generar (un botón puente oculto), y se crea un editor nuevo por cada composición seleccionada.
Tema y textos¶
- Tema oscuro forzado (zinc/slate) definido en
theme.py, con CSS propio para miniaturas, galerías, tablas y el editor. - Los textos internos de Gradio se fuerzan al español sea cual sea el idioma del navegador
(
launch(i18n=...)). - Escala única de imágenes: vistas a ancho completo, galerías de 2 o 4 por fila y miniaturas de 1/4 o 1/6 del ancho.