Files
imagod-web/ROADMAP.md
T

9.2 KiB
Raw Blame History

Roadmap — imagod-web

Planification des évolutions de imagod-web. Les phases sont ordonnées par priorité et dépendances.


🟢 Phase 1–2 — Fondations ✅ Complété

  • Structure du projet Rust (Cargo, modules)
  • CLI avec clap (commands serve, watcher, install, uninstall)
  • Configuration TOML + variables d'environnement
  • Client HTTP Imago v2 (reqwest + rustls)
  • Dédoublonnage SHA-256 + SQLite
  • Compilation Linux x86_64

🟢 Phase 7–9 — Dashboard Web ✅ Complété

  • Serveur axum avec frontend embarqué (rust-embed)
  • API REST proxy vers Imago v2 (CRUD images, recherche, stats)
  • Authentification par clé API (login/logout, localStorage)
  • Galerie responsive desktop + mobile
  • Upload drag & drop + raccourcis clavier
  • Modale détail image (EXIF, OCR, AI, métadonnées)
  • Suppression avec confirmation
  • Gestion des tags inline (ajout, suppression, édition)
  • Notifications toast
  • WebSocket temps réel (hub broadcast)
  • Pagination + recherche plein texte

🟢 Phase 3 — Clipboard Watcher (Windows) ✅ Complété

Objectif : Capture automatique des screenshots depuis le presse-papier Windows.

Fichier Action Détail
src/clipboard.rs ✅ Implémenté Capture d'image via arboard (BGRA→PNG)
✅ has_image() Détecte si le clipboard contient une image
✅ get_image_bytes() Extrait l'image en Vec<u8> (PNG)
✅ SHA-256 Hachage pour dédoublonnage
⚠️ À tester Test Windows réel (compilation OK, logique validée)

Notes techniques :

  • ✅ Utiliser arboard::Clipboard::new() → get_image()
  • ✅ Convertir ImageData en bytes PNG via le crate image
  • ✅ Gérer le cas où le clipboard est vide ou contient du texte
  • ⚠️ Testé uniquement sous Linux (headless) — validation Windows à faire

Dépendances estimées : crate image (si pas déjà présent)


🟢 Phase 6 — Boucle principale du Watcher ✅ Complété

Objectif : Assembler clipboard + dédoublonnage + upload dans une boucle de polling.

Fichier Action Détail
src/watcher.rs ✅ Implémenté Boucle polling unifiée (clipboard + dossier)
✅ Polling Intervalle configurable (watcher.poll_interval_ms)
✅ Pipeline Détection → hash → dédoublonnage → upload → nettoyage
✅ Windows Appeler clipboard::has_image() + clipboard::get_image_bytes()
✅ Linux Polling dossier configurable (watch_dir)
✅ SQLite Dédoublonnage persistant
✅ Testé Linux Upload réussi vers Imago (ID=13)
⚠️ Test Windows Validation clipboard réel à faire

Pipeline détaillé :

┌──────────┐    ┌──────────┐    ┌──────────┐    ┌──────────┐    ┌──────────┐
│ Poll     │───▶│ Hash     │───▶│ Dedup    │───▶│ Upload   │───▶│ Notify   │
│ Clipboard│    │ SHA-256  │    │ Check    │    │ Imago    │    │ WS Hub   │
└──────────┘    └──────────┘    └──────────┘    └──────────┘    └──────────┘

Dépendances : Phase 3 (clipboard)


🟡 Correctifs Backend Imago

Ces tâches dépendent du backend Imago, pas d'imagod-web directement :

Problème Action Priorité
Clé API sans images:delete Ajouter le scope dans l'admin Imago 🔴 Haute
Endpoint PUT /api/v1/images/{id}/tags absent Déployer la route dans Imago 🔴 Haute
Upload retourne 500 / file_size=0 Débugger le stockage (S3/MinIO ?) 🔴 Haute
Route GET /api/v1/auth/me absente Ajouter endpoint infos clé API 🟡 Moyenne

🟢 Phase 10 — Service Windows (NSSM) ✅ Complété

Objectif : Installation de imagod-web comme service Windows natif.

Fichier Action Détail
src/service.rs Implémenter Remplacer les todo!()
install() Intégration NSSM (Non-Sucking Service Manager)
uninstall() Désinstallation propre du service
Configuration Démarrage automatique, redémarrage sur crash

Approches possibles :

  1. NSSM (recommandé) — wrapper externe, simple et robuste
  2. windows-service crate — pure Rust, plus complexe
  3. sc.exe — commandes Windows natives

🟠 Phase 11 — Intégration Ditto Clipboard Manager

Objectif : Plugin/addon Ditto qui envoie automatiquement les screenshots vers imagod-web.

Contexte : Bruno utilise Ditto, un gestionnaire de presse-papier avancé pour Windows.

Deux approches envisageables :

Option A : Script externe Ditto

  • Ditto peut exécuter un script/exe quand un nouvel élément est copié
  • Un petit binaire Rust qui appelle POST /api/upload de imagod-web
  • Avantage : simple, découplé

Option B : Plugin Ditto natif

  • Ditto supporte des plugins/addons (C++ ou COM)
  • Plugin qui intercepte les images et les envoie directement à Imago
  • Avantage : plus intégré, pas de polling nécessaire

⚠️ Nécessite une investigation sur l'API plugin Ditto (peu documentée)


🟢 Phase 12 — Cross-Compilation & CI/CD ✅ Complété

Objectif : Binaires natifs pour Windows x86_64, Linux ARM64.

Cible Action Détail
x86_64-pc-windows-msvc Cross-compile Nécessite linker MSVC ou MinGW
aarch64-unknown-linux-gnu Cross-compile Pour Raspberry Pi / serveurs ARM
CI/CD Gitea Actions Configurer Build + release automatique

Blocage potentiel : arboard et windows-sys sont Windows-only, il faut du conditional compilation.


🔵 Phase 13 — Application Système (Tray Icon)

Objectif : Icône dans la zone de notification Windows avec menu contextuel.

Fichier Action Détail
src/tray.rs Implémenter Remplacer le stub
Menu Démarrer/Arrêter le watcher, Ouvrir dashboard, Quitter
Notifications Bulles Windows pour nouveaux uploads

Crate : tray-icon (déjà dans Cargo.toml)


🔵 Phase 14 — Dashboard Avancé

14a — Galerie avec Filtres Avancés

  • Filtrer par plage de dates (date picker)
  • Filtrer par tags (multi-sélection)
  • Filtrer par statut de processing (pending/done/error)
  • Trier par date, taille, nom

14b — Vue Timeline

  • Frise chronologique des captures
  • Regroupement par jour/semaine/mois
  • Navigation par scroll infini

14c — Batch Operations

  • Sélection multiple d'images (checkboxes)
  • Suppression en masse
  • Tag en masse
  • Export ZIP

14d — Intégration Hermes Agent

  • Endpoint pour qu'Hermes puisse requêter les images
  • Webhook de notification (nouvelle image → message Telegram)
  • Skill Hermes imagod-web pour interroger la bibliothèque en langage naturel

🔵 Phase 15 — Client Mobile

15a — PWA (Progressive Web App)

  • Service worker pour cache offline
  • Manifest JSON pour installation
  • Notifications push (nouvelles images)

15b — Share Intent Android/iOS

  • Endpoint API pour recevoir des images depuis le menu "Partager"
  • Deep link imagod:// pour ouverture directe

⚫ Idées Futures (Backlog)

  • OCR Search — Recherche dans le texte OCR extrait par Imago
  • AI Semantic Search — « trouve les photos de chats dans mon salon »
  • Export — ZIP, galerie HTML statique, PDF contact sheet
  • Multi-tenant — Support de plusieurs clés API / espaces Imago
  • Thèmes — Clair, contrasté, personnalisable
  • Deduplication cross-tenant — Éviter les doublons entre utilisateurs
  • Statistiques avancées — Graphiques (appareils, résolutions, heures de capture)
  • Mode hors-ligne — File d'attente locale quand Imago est inaccessible

📊 Résumé des phases

Phase Statut Priorité Effort estimé
1–2 Fondations ✅ Complété — —
7–9 Dashboard ✅ Complété — —
3 Clipboard 🟢 ✅ Complété Haute —
6 Watcher 🟢 ✅ Complété Haute —
Correctifs Imago 🟡 Bloquant Critique Variable
10 Service NSSM 🟢 ✅ Complété Haute —
11 Intégration Ditto ⚫ Abandonné — —
12 Cross-compile 🟢 ✅ Complété Haute —
13 Tray Icon 🔵 À faire Basse 3–4h
14 Dashboard Avancé 🔵 À faire Basse 8–16h
15 Client Mobile 🔵 À faire Basse 6–10h
Backlog ⚫ Idées Variable ∞

🎯 Prochaines actions immédiates (recommandées)

  1. Corriger le scope images:delete dans l'admin Imago → débloque la suppression
  2. Corriger le stockage Imago (upload 500) → débloque les tests
  3. Implémenter Phase 3 (clipboard watcher) ✅ — 25 juin 2026
  4. Implémenter Phase 6 (watcher loop) ✅ — 25 juin 2026
  5. Corriger le backend Imago (thumbnails, upload, stockage)