Saltar a contenido

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_JS y theme.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_actions y 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.