Image Label IA is a high-performance desktop application designed specifically for photographers. It automates image tagging and metadata generation using state-of-the-art machine learning models (ConvNeXt and DETR), run directly on your local device via Tauri, Angular, and Rust/Python.
- About the Project
- Key Features
- Tech Stack
- Prerequisites
- Installation & Setup
- Configuration
- Usage
- Developer Guides
- Contributing
- Security
- License
Photographers often spend hours manually keywording, organizing, and tagging photos. Image Label IA solves this by performing locally run AI-assisted classification and object detection. By leveraging ONNX Runtime in Rust (ort), the application analyzes images instantly and updates metadata using standard EXIF/IPTC/XMP headers, without sending your private photographs to third-party cloud services.
| Main Dashboard | Image Details & AI Tags |
|---|---|
![]() |
![]() |
| Batch Processing | Run Completion Report |
|---|---|
![]() |
![]() |
- 🚀 Hybrid Desktop Architecture: Powered by Tauri v2 and Angular 20 for a lightweight, secure, and beautiful user interface.
- 🤖 Offline Local AI Inference: Runs
ConvNeXtfor image classification andDETRfor object detection offline via ONNX Runtime (ortin Rust). - ⚡ Advanced Gallery UX: Smooth progressive thumbnail rendering with lazy loading and a thread-concurrency decoder cache to prevent interface lag.
- 📁 Workspace Persistence: Remembers your last-viewed directory and restores the navigation path seamlessly on relaunch.
- 🗂️ Collapsible Panels: Toggleable left and right sidebars (Folder Tree and Metadata details) to maximize photo viewing estate.
- 🏷 Metadata Synchronization: Automatically writes confirmed AI keyword labels back to image standard IPTC headers.
- ⚙️ Configurable AI Confidence: Adjust confidence thresholds in the batch config modal to fine-tune auto-tag matching.
- Frontend: Angular 20, TypeScript, Vanilla CSS
- App Wrapper & Core: Tauri v2 (Rust)
- AI Inference Backend: Rust
ort(ONNX Runtime wrapper) - Model Processing Scripts: Python 3 (using
torch,transformers,huggingface-hub) - Metadata Management:
rexiv2(GExiv2 wrapper)
Before you begin, ensure you have the following installed on your developer machine:
- Rust Toolchain: Install
rustupto manage Rust compiler versions.curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
- Node.js: Long-Term Support (LTS) version (v18 or higher recommended).
- pnpm: Fast, disk-efficient package manager.
npm install -g pnpm
- Python 3.9+: For running model conversion/download scripts.
- System Dependencies (Linux only):
Tauri and
rexiv2(exiv2) require system packages. On Debian/Ubuntu:sudo apt-get update sudo apt-get install -y libglib2.0-dev libgexiv2-dev libwebkit2gtk-4.1-dev build-essential curl wget file libxdo-dev libssl-dev libayatana-appindicator3-dev librsvg2-dev
Follow these steps to clone the repository and set up your local development environment:
git clone https://github.com/lakescorp/ImageLabelIA.git
cd ImageLabelIAUse pnpm to install frontend packages:
pnpm installCreate a virtual environment and install dependencies to fetch/convert the ONNX models:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt # Or manually: pip install huggingface-hub torch transformersRun the download script to retrieve the pre-converted ConvNeXt model and label set from HuggingFace Hub:
python download_model.pyThis saves:
src-tauri/resources/convnext.onnxsrc-tauri/resources/convnext_labels.json
Start the Angular dev server and launch the Tauri window:
pnpm tauri devThe application reads configurations from environment variables.
- Copy the environment template:
cp .env.example .env
- Customize the settings inside
.envto suit your system requirements (e.g. changing inference execution providers fromcputocuda). Refer to .env.example for detailed comments.
Once the application is running:
- Select Folder: Click "Process Folder" to open a native directory picker and select your photo directory.
- Configure Settings: Select the desired confidence thresholds and tag processing options in the sidebar.
- Run AI Engine: Click "Start Tagging". The UI will display a real-time progress bar.
- Accept / Reject Tags: Click thumbnails to inspect labels. Confirm or modify tags before applying them to IPTC metadata.
- Save to Disk: Apply suggestions to write metadata tags directly into image files.
├── .github/ # GitHub CI/CD workflows, Pull Request & Issue Templates
├── .vscode/ # IDE Configuration
├── src/ # Angular Single Page App (Frontend)
│ ├── app/ # Components and routing
│ └── assets/ # App static files
├── src-tauri/ # Rust Tauri Core (Backend)
│ ├── resources/ # Pre-compiled ONNX models and category tags
│ ├── src/ # Main Tauri entry point, file system, and inference logic
│ └── Cargo.toml # Rust Cargo dependencies
├── download_model.py # Helper script to pull models from HF Hub
├── package.json # NPM package definitions
└── README.md # This file
Contributions make the open-source community an amazing place to learn, inspire, and create. Please check out CONTRIBUTING.md to understand our branching strategy, linting guidelines, and code submission protocols.
For reporting security vulnerabilities or issues regarding data leaks, please consult our SECURITY.md. Please do not open public GitHub issues for security reports.
Distributed under the MIT License. See LICENSE for more details.



