Files
imagod-web/CHANGELOG.md
T
bruno 9b06df737d docs: changelog et roadmap du projet imagod-web
- CHANGELOG.md : historique complet des fonctionnalités, corrections, limitations
- ROADMAP.md : planification des phases restantes (clipboard, watcher, service, Ditto, cross-compile, etc.)
2026-06-25 08:06:04 -04:00

5.2 KiB
Raw Blame History

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+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<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