LXC 164, token Gitea, fonctionnalités implémentées, TODO, notes dev. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
4.8 KiB
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, IP192.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é) oupython3 src/main.py --kiosk - Git config : user
Jules, emailcontact@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/etfrontend/dans le repo = version alternative (probablement générée par un autre onglet Claude). Notre approche est danssrc/(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