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>
This commit is contained in:
79
memoire.md
79
memoire.md
@@ -3,49 +3,90 @@
|
|||||||
## Description
|
## 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.
|
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
|
## Stack technique
|
||||||
- **Interface** : PyQt6 / QGraphicsScene (natif, léger, tactile)
|
- **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)
|
- **Traitement image** : Pillow (effets, redimensionnement, export)
|
||||||
- **Impression** : CUPS via pycups
|
- **Impression** : CUPS via pycups
|
||||||
- **Hotspot WiFi** : hostapd + dnsmasq + Flask (mini serveur upload)
|
- **Hotspot WiFi** : hostapd + dnsmasq + Flask (mini serveur upload)
|
||||||
- **QR** : qrcode (Python)
|
- **QR** : qrcode (Python)
|
||||||
|
|
||||||
## Matériel
|
## Matériel
|
||||||
- **Prototype** : Raspberry Pi 3B+ (1GB RAM) — portable vers RPi 4/5
|
- **Prototype** : Raspberry Pi 3B+ (1GB RAM) — en stock chez Jules
|
||||||
- **Écran tactile** : à déterminer (en stock chez Jules)
|
- **Cible** : Portable vers RPi 4 ou 5 sans aucun changement de code
|
||||||
- **Imprimante sublimation** : à acheter (DNP DS620A ou Mitsubishi CP-D90DW)
|
- **É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
|
- **Pas de capture photo** — les utilisateurs apportent leurs propres photos
|
||||||
|
|
||||||
## Architecture
|
## Architecture
|
||||||
```
|
```
|
||||||
src/
|
src/
|
||||||
main.py — Point d'entrée
|
main.py — Point d'entrée (--kiosk pour plein écran)
|
||||||
|
services/
|
||||||
|
usb_watcher.py — Détection USB par polling (findmnt + scan récursif)
|
||||||
ui/
|
ui/
|
||||||
main_window.py — Navigation QStackedWidget
|
main_window.py — Navigation QStackedWidget (4 écrans)
|
||||||
screens/
|
screens/
|
||||||
home_screen.py — Accueil, choix du mode d'import
|
home_screen.py — Accueil, 4 boutons import, status USB live
|
||||||
import_screen.py — Galerie de photos importées
|
import_screen.py — Galerie de photos (grille scrollable)
|
||||||
editor_screen.py — Éditeur (crop, rotation, effets, goodies, multi-pose, texte)
|
editor_screen.py — Éditeur complet (voir fonctionnalités ci-dessous)
|
||||||
print_screen.py — Prévisualisation + impression
|
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/
|
assets/
|
||||||
goodies/ — Stickers PNG
|
goodies/ — Stickers PNG (à peupler)
|
||||||
frames/ — Cadres photo
|
frames/ — Cadres photo PNG (à peupler)
|
||||||
fonts/ — Polices custom
|
fonts/ — Polices custom
|
||||||
templates/ — Templates multi-pose
|
data/
|
||||||
|
photos/ — Photos importées (gitignored)
|
||||||
|
exports/ — Exports PNG (gitignored)
|
||||||
config/ — Configuration (imprimante, WiFi, etc.)
|
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
|
## Dev
|
||||||
- **Repo Gitea** : https://git.copydev.fr/jules/photostation
|
- **Repo Gitea** : https://git.copydev.fr/jules/photostation
|
||||||
- **Dev sur** : LXC Proxmox (x86) ou PC local, déploiement sur RPi
|
- **Token Gitea** : `4bc923c47cf363a866daa1e1a6cf22bc44a78bc5` (claude-photostation)
|
||||||
- **Lancement** : `python3 src/main.py` (fenêtré) ou `python3 src/main.py --kiosk` (plein écran)
|
- **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`
|
||||||
|
|
||||||
## Statut
|
## TODO
|
||||||
- Projet initialisé le 2026-03-21
|
- [ ] Peupler assets/goodies/ et assets/frames/ avec des stickers et cadres
|
||||||
- Structure de base créée (4 écrans, navigation)
|
- [ ] Impression CUPS réelle (pycups, détection imprimante, envoi job)
|
||||||
- TODO : import USB, éditeur complet, impression CUPS, modes WiFi/QR/email
|
- [ ] 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
|
## Formats d'impression
|
||||||
- 10x15 cm
|
- 10x15 cm
|
||||||
- 13x18 cm
|
- 13x18 cm
|
||||||
- 15x20 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
|
||||||
|
|||||||
Reference in New Issue
Block a user