# Changelog — imagod-web Toutes les modifications notables de imagod-web sont documentées ici. Le format est basé sur [Keep a Changelog](https://keepachangelog.com/fr/1.0.0/), et ce projet adhère au [Semantic Versioning](https://semver.org/spec/v2.0.0.html). --- ## [0.1.0] — 2026-06-23 ### 🎯 Vision imagod-web est un **daemon + dashboard web embarqué** pour Imago, le backend intelligent de gestion d'images. Il capture automatiquement les screenshots, les envoie à Imago pour analyse (OCR, AI vision, EXIF), et offre un dashboard responsive pour les consulter. --- ### 🏗️ Architecture | Composant | Technologie | Statut | |-----------|-------------|--------| | **Daemon** | Rust (tokio, clap, rusqlite) | ✅ Partiel | | **Serveur web** | axum 0.8 + tower-http | ✅ Complet | | **Frontend** | Vanilla JS (rust-embed) | ✅ Complet | | **Client API** | reqwest (rustls) → Imago v2 | ✅ Complet | | **Dédoublonnage** | SHA-256 + SQLite | ✅ Complet | | **Temps réel** | WebSocket (broadcast) | ✅ Complet | | **Cross-platform** | Windows (arboard, tray) + Linux (notify) | 🏗️ Partiel | --- ### ✨ Fonctionnalités #### Dashboard Web (`serve`) - **Authentification** par clé API Imago (login/logout, localStorage) - **Galerie responsive** — grille adaptative desktop/mobile, breakpoints 768px et 400px - **Upload par drag & drop** — zone de drop avec feedback visuel - **Raccourcis clavier** — `Ctrl+U` pour upload, `Ctrl+V` pour coller depuis le presse-papier - **Recherche** plein texte (nom, tags, description, texte OCR) - **Pagination** — navigation par pages de 24 images - **Modale détail** — aperçu pleine résolution, métadonnées EXIF, texte OCR, description AI - **Suppression** — bouton 🗑️ par carte + boîte de dialogue de confirmation - **Gestion des tags** — ajout (+), suppression (×), édition inline des tags - **Statistiques** — nombre d'images, stockage total, nombre de tags, statut en ligne - **Notifications toast** — succès/erreur avec code couleur - **FAB mobile** — bouton d'upload flottant en bas à droite sur mobile - **WebSocket** — mises à jour en temps réel quand de nouveaux screenshots sont uploadés - **Thème sombre** — design moderne, palette cohérente #### Client API Imago v2 - `GET /api/v1/images` — liste paginée - `GET /api/v1/images/search` — recherche plein texte - `GET /api/v1/images/{id}` — détail complet (EXIF, OCR, AI, métadonnées) - `POST /api/v1/images/upload` — upload multipart - `GET /api/v1/images/{id}/thumbnail-url` — thumbnail signé → proxy binaire - `GET /api/v1/images/{id}/download-url` — fichier original signé → proxy binaire - `DELETE /api/v1/images/{id}` — suppression - `PUT /api/v1/images/{id}/tags` — mise à jour des tags #### CLI - `imagod-web serve` — démarre le dashboard web sur `0.0.0.0:9199` - `imagod-web watcher` — lance le daemon de capture (stub) - `imagod-web install` — installation comme service Windows (stub) - `imagod-web uninstall` — désinstallation du service (stub) - Flags : `--host`, `--port`, `--api-key`, `--api-url` #### Dédoublonnage - Hash SHA-256 des images - Base SQLite locale (`imagod.db`) - Cache LRU configurable #### Configuration - Fichier TOML (`~/.config/imagod-web/imagod.toml`) - Sections : `[imago]`, `[watcher]`, `[dedup]`, `[server]` - Variables d'environnement supportées --- ### 🐛 Corrections - **Structs Imago v2** — `ExifData`, `OcrData`, `AiData` corrigés pour matcher l'API réelle (champs imbriqués camera/gps, `has_text`, nouveaux champs AI) - **Affichage des images** — passage aux URLs signées (`thumbnail-url`/`download-url`) car les endpoints directs `/thumbnail` et `/file` n'existent pas dans Imago - **Fallback placeholder** — remplacement du data URI SVG cassé par un placeholder DOM (emoji + texte) - **Erreur de décodage Rust** — champ `tags` manquant dans les structs, corrigé avec `Option>` --- ### ⚠️ Limitations connues | Problème | Impact | Solution | |----------|--------|----------| | Clé API sans scope `images:delete` | DELETE → 403 Forbidden | Ajouter le scope dans l'admin Imago | | Endpoint `PUT /tags` absent d'Imago | Tags non persistants | Déployer la v2.1 d'Imago | | Stockage Imago partiellement cassé | Upload 500, file_size=0 | Correction backend Imago | | Pas de support Linux desktop natif | Watcher clipboard inactif | Alternative `wl-clipboard` / `xclip` | | Pas de cross-compilation testée | Binaire Linux seulement | CI/CD + tests multi-plateformes | --- ### 📦 Dépendances clés | Crate | Version | Usage | |-------|---------|-------| | axum | 0.8 | Serveur HTTP + WebSocket | | reqwest | 0.12 | Client HTTP Imago (rustls) | | serde / serde_json | 1.x | Serialization JSON | | rusqlite | 0.32 | Base de dédoublonnage | | rust-embed | 8 | Frontend embarqué dans le binaire | | clap | 4 | CLI | | tokio | 1 | Runtime async | | sha2 | 0.10 | Hashing SHA-256 | | dashmap | 6 | État partagé thread-safe | | chrono | 0.4 | Formatage dates | --- ### 🔗 Liens - **Code source** : https://git.dracodev.net/Projets/imagod-web - **Backend Imago** : https://git.dracodev.net/Projets/Imago - **Auteur** : Bruno Charest - **Licence** : MIT