Skip to content

Conversation

Copy link

Copilot AI commented Dec 2, 2025

Replace dynamic code generation (filters_config_generator.py) with a JSON configuration system. Add UI tab for creating filters at runtime that persist to filters.json.

Architecture

  • filter_engine.py - 20 predefined OpenCV operations (blur, pixelate, glitch, etc.)
  • filter_manager.py - Load/save/validate filter configs from JSON
  • filters.json - Filter definitions with operation name + parameters only (no code)

JSON Structure

{
    "Color": {
        "matiz": {
            "operation": "hue_shift",
            "description": "Cambia el matiz de los colores",
            "parameters": {
                "hue_shift": {"min": -180, "max": 180, "init": 0, "interval": 1}
            }
        }
    }
}

UI Changes

  • Tabbed interface: "Editor de Fotos" + "Editor de Filtros"
  • Filter Editor: select operation, configure parameters, save to JSON
  • New filters appear immediately in photo editor

Removed

  • filters_config_generator.py
  • effects_settings.py
  • filters/ folder (all logic consolidated in filter_engine.py)

Tests

30 unit tests covering FilterManager and FilterEngine operations.

Original prompt

Objetivo general
Reestructurar MODT para que los filtros disponibles se almacenen en un archivo JSON en lugar de generarse dinámicamente mediante un script. Además, añadir en la interfaz gráfica una nueva pestaña desde la que el usuario pueda definir nuevos filtros, generarlos, guardar su configuración en el JSON y aplicarlos a imágenes. Finalmente, refactorizar el código para acomodar este nuevo enfoque.

Actualmente, el repositorio contiene filters_config_generator.py que crea effects_settings.py, recopilando efectos desde la carpeta effects.

La mejora propuesta implica reemplazar ese mecanismo por uno basado en un JSON persistente (por ejemplo filters.json) que contenga todos los filtros disponibles junto con su configuración (parámetros, nombre, metadatos, etc.).

La interfaz de usuario (PyQt5) debe tener una nueva pestaña / sección llamada “Editor de filtros” (o similar), con un campo de texto “prompt” (o formulario de parámetros), un botón “Generar/Guardar filtro” y lógica para:

leer los valores del formulario,

validar los parámetros,

añadir una nueva entrada en filters.json,

actualizar la vista de filtros disponibles para que se puedan aplicar inmediatamente.

Al iniciar la aplicación, los filtros definidos en filters.json deben cargarse automáticamente y mostrarse como opciones disponibles.

El flujo de generación dinámica (con filters_config_generator.py) debe eliminarse ya que su implementacion fue muy precaria.

Refactorizar el código para separar claramente las responsabilidades: carga de configuración, gestión de UI, aplicación de filtros, almacenamiento.

Criterios de aceptación (“Definition of Done”)

Criterio Qué significa que está cumplido
✅ Carga automática de filtros desde JSON Al iniciar, los filtros definidos en filters.json aparecen disponibles en la interfaz.
✅ Interfaz para crear nuevos filtros La nueva pestaña permite crear un filtro, asignarle parámetros, guardarlo, y el filtro aparece en la lista.
✅ Aplicación de filtros existente intacta Aplicar un filtro — ya sea antiguo o nuevo — debe funcionar igual que hasta ahora.
✅ Persistencia Los filtros creados se guardan en filters.json y persisten al cerrar y reabrir la aplicación.
✅ Validación de parámetros El UI rechaza configuraciones inválidas, con mensajes de error adecuados.
✅ Refactorización clara del código Separación lógica en módulos: configuración, UI, lógica de filtros. Código legible y mantenible.
✅ (Opcional pero recomendable) Pruebas automatizadas Tests unitarios o de integración para la carga de filtros JSON, creación de filtros, y aplicación de filtros.

debecs crear una Documentación actualizadaREADME reflejando los cambios y explicando cómo añadir filtros (manualmente o desde UI).

Archivos / áreas que necesitan cambios

. /filters_config_generator.py — eliminar

. /effects_settings.py — probablemente reemplazado por JSON;

Nuevo archivo (por ejemplo) . /filters.json — para almacenar definiciones de filtros.

Código de interfaz PyQt5 — añadir nueva pestaña / sección (por ejemplo en main.py, o donde esté la UI). y refactorizar su codigo para emplear buenas prácticas

Módulo de carga/configuración de filtros — crear o modificar para leer desde JSON, en lugar de código generado.

Lógica de aplicación de filtros — adaptar para usar configuración cargada dinámicamente.

(Opcional) Módulos de pruebas, por ejemplo tests/ — para asegurar carga y funcionamiento.

Documentación (README, comentarios) — explicar nuevo flujo: añadir filtros, formato JSON y todas las novedades. gracias


💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

Copilot AI and others added 2 commits December 2, 2025 17:22
- Create filters.json with all filter configurations
- Create filter_engine.py with all filter operations
- Create filter_manager.py to load/save filter configs
- Refactor main.py with tabs and Filter Editor UI
- Add tests for filter manager and engine
- Update README.md with new documentation
- Remove old filters_config_generator.py and effects_settings.py
- Remove filters/ folder (no longer needed)

Co-authored-by: CorsoCoder <45120484+CorsoCoder@users.noreply.github.com>
- Add .gitignore to exclude __pycache__ and other artifacts
- Optimize glitch effect to compute step outside loop
- Remove accidentally committed __pycache__ directories

Co-authored-by: CorsoCoder <45120484+CorsoCoder@users.noreply.github.com>
Copilot AI changed the title [WIP] Refactor MODT to use JSON for filter storage Restructure MODT to use JSON-based filter configuration Dec 2, 2025
Copilot AI requested a review from CorsoCoder December 2, 2025 17:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants