- CHANGELOG.md : historique complet des fonctionnalités, corrections, limitations - ROADMAP.md : planification des phases restantes (clipboard, watcher, service, Ditto, cross-compile, etc.)
5.2 KiB
5.2 KiB
Changelog — imagod-web
Toutes les modifications notables de imagod-web sont documentées ici.
Le format est basé sur Keep a Changelog, et ce projet adhère au Semantic Versioning.
[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+Upour upload,Ctrl+Vpour 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éeGET /api/v1/images/search— recherche plein texteGET /api/v1/images/{id}— détail complet (EXIF, OCR, AI, métadonnées)POST /api/v1/images/upload— upload multipartGET /api/v1/images/{id}/thumbnail-url— thumbnail signé → proxy binaireGET /api/v1/images/{id}/download-url— fichier original signé → proxy binaireDELETE /api/v1/images/{id}— suppressionPUT /api/v1/images/{id}/tags— mise à jour des tags
CLI
imagod-web serve— démarre le dashboard web sur0.0.0.0:9199imagod-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,AiDatacorrigé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/thumbnailet/filen'existent pas dans Imago - Fallback placeholder — remplacement du data URI SVG cassé par un placeholder DOM (emoji + texte)
- Erreur de décodage Rust — champ
tagsmanquant dans les structs, corrigé avecOption<Vec<String>>
⚠️ 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 [email protected]
- Licence : MIT