ICRA
Interactive Color Range Analyzer (ICRA)
A fully-featured, PySide6-powered desktop application for precise color matching, image analysis, and statistics generation.
## Features - **High-Performance Image Processing:** Native, vectorized NumPy operations for lightning-fast HSV conversion and color matching. - **Batch Folder Processing:** Load a folder of images and instantly export an aggregated `icra_stats.csv` with localized formatting (dot or comma decimals depending on your language). - **Eyedropper Tool:** Quickly pick target matching colors directly from the image canvas. - **Advanced Selection:** Support for exclusion zones (rectangles and free-draw polygons) overlaid on the image, all dynamically rendered via `QGraphicsView`. - **Modern UI & UX:** - Drag-and-drop support for files and folders. - Custom dark and light themes with native-feeling borderless titlebars and a categorized menu bar. - Window size and position persistence between launches. - Keyboard shortcuts for rapid workflow. - **Configurable:** Uses `config.toml` to drive everything from overlay matching colors to default sliders and application language (`en`/`de`). ## Requirements - Python 3.11+ - [uv](https://github.com/astral-sh/uv) for dependency management - Works across Windows, macOS, and Linux (requires PySide6 and numpy) ## Setup with uv ```bash git clone https://git.lukasmahler.de/lm/ICRA.git cd ICRA uv venv source .venv/Scripts/activate # macOS/Linux: source .venv/bin/activate uv pip install . uv run icra ``` ## Running the Test Suite The core image processing logic and UI data models are rigorously tested using `pytest`. ```bash uv run pytest tests/ -v ``` ## Project Layout ``` app/ assets/ # Shared branding lang/ # Localization strings (TOML format) logic/ # Configuration loading and application constants qt/ # PySide6 implementation (main_window, custom UI widgets, vectorized image processing) tests/ # Pytest unit tests config.toml # Configurable overlay colors, slider defaults main.py # Entry point -> PySide6 launcher ``` ## Development Notes - The legacy `Tkinter` codebase has been completely removed in favor of `PySide6`. - Quick syntax check: `uv run python -m compileall app main.py` - Contributions welcome!