Files
photostation/memoire.md
Jules ca1e50e609 Mise à jour memoire.md avec toutes les infos projet
LXC 164, token Gitea, fonctionnalités implémentées, TODO, notes dev.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 19:34:03 +01:00

4.8 KiB

Photostation

Description

Borne d'impression photo tactile. Les utilisateurs importent leurs photos (USB, WiFi, QR code, email), les éditent (recadrage, rotation, effets, goodies, multi-pose, texte) et les impriment sur imprimante sublimation.

Concept

Ce n'est PAS un photobooth (pas de capture photo). C'est une station de transfert/impression : les utilisateurs arrivent avec leurs propres photos et la borne permet de les éditer et imprimer.

Stack technique

  • Interface : PyQt6 / QGraphicsScene (natif, léger, tactile — choisi au lieu de Chromium pour économiser la RAM sur RPi 3)
  • Traitement image : Pillow (effets, redimensionnement, export)
  • Impression : CUPS via pycups
  • Hotspot WiFi : hostapd + dnsmasq + Flask (mini serveur upload)
  • QR : qrcode (Python)

Matériel

  • Prototype : Raspberry Pi 3B+ (1GB RAM) — en stock chez Jules
  • Cible : Portable vers RPi 4 ou 5 sans aucun changement de code
  • Écran tactile : en stock chez Jules (modèle à déterminer)
  • Imprimante sublimation : à acheter (pistes : DNP DS620A, Mitsubishi CP-D90DW)
  • Pas de capture photo — les utilisateurs apportent leurs propres photos

Architecture

src/
  main.py                    — Point d'entrée (--kiosk pour plein écran)
  services/
    usb_watcher.py           — Détection USB par polling (findmnt + scan récursif)
  ui/
    main_window.py           — Navigation QStackedWidget (4 écrans)
    screens/
      home_screen.py         — Accueil, 4 boutons import, status USB live
      import_screen.py       — Galerie de photos (grille scrollable)
      editor_screen.py       — Éditeur complet (voir fonctionnalités ci-dessous)
      print_screen.py        — Prévisualisation + choix format + impression
    widgets/
      crop_overlay.py        — Rectangle de crop avec poignées tactiles + grille des tiers
      goodies_panel.py       — Panneau latéral stickers/cadres (charge depuis assets/)
      multipose_dialog.py    — 5 templates multi-pose avec prévisualisation
assets/
  goodies/                   — Stickers PNG (à peupler)
  frames/                    — Cadres photo PNG (à peupler)
  fonts/                     — Polices custom
data/
  photos/                    — Photos importées (gitignored)
  exports/                   — Exports PNG (gitignored)
config/                      — Configuration (imprimante, WiFi, etc.)

Fonctionnalités implémentées (2026-03-21)

  • Import USB : polling montages, scan récursif photos (jpg/png/bmp/tiff/webp/heic), bouton vert + compteur quand clé détectée
  • Galerie : grille 4 colonnes avec miniatures cliquables
  • Recadrage : overlay interactif, grille des tiers, poignées tactiles aux coins, zone assombrie
  • Rotation : 90° par clic (transformation réelle, pas juste visuelle)
  • Filtres Pillow : N&B, sépia, vintage (désaturation+contraste), contraste
  • Goodies : panneau latéral toggle, stickers draggable (20% taille scène), cadres overlay
  • Multi-pose : 5 templates (2h, 2v, 3 gauche, 4 grille, 3 bande), remplissage auto depuis galerie
  • Texte : éditable + draggable, police 32pt blanche
  • Annuler : reset à l'image originale
  • Export : scène complète → PNG haute résolution (fichier temporaire)
  • Impression : écran prévisualisation + sélection format (10x15, 13x18, 15x20 cm)

Dev

  • Repo Gitea : https://git.copydev.fr/jules/photostation
  • Token Gitea : 4bc923c47cf363a866daa1e1a6cf22bc44a78bc5 (claude-photostation)
  • LXC dev : ID 164, hostname photostation, IP 192.168.111.164
    • Debian 12, 2GB RAM, 2 cores
    • Python 3 + PyQt6 6.10.2 + Pillow 12.1.1 + venv dans /opt/photostation/venv/
    • Code dans /opt/photostation/
    • Xvfb :99 (1024x600) + VNC port 5900 (sans mot de passe)
    • Lancer l'app : source venv/bin/activate && DISPLAY=:99 PYTHONPATH=src python3 src/main.py
  • Lancement local : python3 src/main.py (fenêtré) ou python3 src/main.py --kiosk
  • Git config : user Jules, email contact@copydev.fr
  • Credentials git : stockés dans /tmp/.git-cred-photostation

TODO

  • Peupler assets/goodies/ et assets/frames/ avec des stickers et cadres
  • Impression CUPS réelle (pycups, détection imprimante, envoi job)
  • WiFi hotspot (hostapd + dnsmasq + Flask page upload)
  • QR code (génération lien vers page upload)
  • Email (réception SMTP)
  • Thème/style plus abouti
  • Tests sur RPi 3 réel

Formats d'impression

  • 10x15 cm
  • 13x18 cm
  • 15x20 cm

Notes

  • Fichiers backend/ et frontend/ dans le repo = version alternative (probablement générée par un autre onglet Claude). Notre approche est dans src/ (PyQt6).
  • Les libs xcb nécessaires sur le LXC : libxcb-cursor0, libxcb-xinerama0, libxcb-icccm4, libxcb-keysyms1, libxcb-render-util0, libxcb-shape0, libxcb-xfixes0, libxkbcommon-x11-0, libfontconfig1