# Photobooth ## Description Photobooth professionnel pour location evenementielle. Surface 6 + ecran tactile + DSLR Canon (gphoto2) + imprimante sublimation Mitsubishi. ## Architecture - **Backend** : Python FastAPI + WebSocket - **Frontend** : HTML/CSS/JS vanilla dans Chromium kiosk - **Camera** : python-gphoto2 (mode simulation si absent) - **Impression** : CUPS (pycups) - **Email** : SMTP (smtplib) ## Fonctionnalites Toutes activables/desactivables dans le menu admin cache (appui long 3s coin bas-droit) : - Photo simple, multi-shot (strip/collage), GIF anime - Filtres (N&B, sepia, vintage, contraste, lumineux, chaud, froid, flou) - Overlays / cadres PNG personnalisables - Chroma key (fond vert via OpenCV) - Impression sublimation - Envoi email - QR code galerie - Compteur photos ## Repo Gitea https://git.copydev.fr/jules/photobooth ## Statut Phase 1-3 terminees (backend complet + frontend complet). Phase 4 : scripts production (install.sh, start.sh, systemd). ## Notes - Projet cree le 2026-03-21 - Mode simulation camera si gphoto2 non installe (dev sans DSLR) - Config persistante dans data/config.json --- ## Infra & réseau ### Surface (booth terrain) - IP LAN : 192.168.111.39 (DHCP, sujette à changement) - IP VPN : 10.10.0.2 - Accès SSH : `ssh surface` (alias ~/.ssh/config, clé ed25519) - User : `jules`, repo : `~/photobooth` - **Pas de clavier physique** — toute intervention SSH uniquement - Déploiement : pas de systemd (photobooth.service disabled, plante exec 203). Le run = `scripts/kiosk-session.sh` lancé au login LightDM autologin : boucle relance backend + boucle Chromium kiosk. Pour déployer : `git push` depuis dev, puis `kill ` + `pkill -f 'chromium '` → relance auto avec git pull. - Remote debugging Chromium : port 9222 - Kernel linux-surface avec iptsd (tactile), scale-factor=3 - `data/config.json` = état runtime (compteur, imprimante) — ne jamais écraser par commit/push depuis dev ### LXC 111 (booth-manager / galerie) - IP : 192.168.111.211 - Accès : `ssh root@192.168.111.10` puis `pct exec 111 -- ` - Code : `/opt/photobooth/backend/booth_admin.py` - Service : `systemctl restart photobooth` - Héberge : booth.copydev.fr (landing, galerie, admin) ### WireGuard tunnel - Serveur (LXC 111) : wg0, 10.10.0.1/24, port 51820/UDP, enabled - Client (Surface) : 10.10.0.2/24 - Clé publique serveur : `g3s7Gh1Er+LIEI/W91HAVDNIo+gsk/KiajdtoDUQRVo=` - Clé privée client : `uH9lesPtezigCDlB6cSCYy87QFxrtLFWcnwi93/YgXM=` - Clé publique client : `p+yIc+slDkKXnogvvuohbWlF8iapbI4LxJPH1RCaUig=` - Port forward routeur : UDP 51820 → 192.168.111.211 ### Proxmox PVE - IP : 192.168.111.10, accès `ssh root@192.168.111.10` ### NPM (Nginx Proxy Manager) - IP : 192.168.111.5, port 81 - Cert wildcard *.copydev.fr ID #2 --- ## Règles de conduite Claude - **Pas de clavier sur la borne** : ne jamais suggérer Ctrl+R, F5, ou actions clavier. Forcer reload via SSH (port 9222) ou restart lightdm/chromium. - **Pas de confirmation sur la Surface** : PC dédié, aucun risque, exécuter directement les commandes SSH. - **Pas de SSH sauvage** : ne jamais SSH sur des serveurs non demandés sans instruction explicite. --- ## Matériel ### Imprimante sublimation Mitsubishi - Reçue le 2026-05-28 - Erreur 03/01/01 sur K60 = papier mal chargé (pas fin de rouleau) ### Module relais USB HID - Commandé le 2026-06-23, livraison estimée ~2026-07-01 - Pour piloter alim secteur Canon (power-cycle PTP freeze) + éclairage booth - Intégration via /dev/hidraw* dans le backend Python --- ## UX dépannage novices Utilisateurs finaux = novices (événementiel). Erreurs imprimante : prévoir guides imagés (popup plein écran, étapes numérotées, icônes grandes, pas de codes techniques). Cas : cassette mal insérée, bourrage, fin consommable, câble USB. --- ## URGENT — VPN booth en panne (2026-07-04) Booth sur WiFi externe, tunnel WG ne connecte pas même après reboot. Dernier handshake : 6+ jours. Cause probable : wg-quick@wg0 pas enabled au boot, ou Endpoint pointe vers IP locale. ### Procédure fix (clavier USB temporaire) 1. `sudo systemctl status wg-quick@wg0 && sudo wg show && cat /etc/wireguard/wg0.conf` 2. Vérifier Endpoint = `:51820` (pas 192.168.111.x). IP publique : `curl -s ifconfig.me` 3. `sudo systemctl enable wg-quick@wg0 && sudo systemctl restart wg-quick@wg0` 4. Installer watchdog + reverse SSH — voir PROCEDURE_VPN_FIX.md ### Commits non déployés sur Surface - Flash blanc capture + printer toast CSS + admin galerie + compteur copies - Déployer : `cd ~/photobooth && git pull && kill $(pgrep -f 'python -m backend.main')` --- ## LXC 111 — booth.copydev.fr (état au 2026-07-04) Code sur le serveur : `/opt/photobooth/` (PAS dans le repo git local). Backup local des fichiers modifiés : `lxc111_backup/` dans ce dossier projet. ### Fichiers modifiés sur LXC 111 - `backend/main.py` (1126 lignes) — endpoints galerie + réservation - `backend/booth_admin.py` (808 lignes) — admin panel API + ZIP streaming - `frontend/landing.html` (900 lignes) — page vitrine complète - `frontend/admin.html` (930 lignes) — panel admin avec validation résa - `frontend/gallery.html` (414 lignes) — galerie publique + modal ZIP progress ### Endpoints ajoutés - `GET /api/disponibilites` → retourne dates réservées (statut "valide" ou "demande") - `POST /api/contact` → crée événement + envoie email admin (pas client). Champs : nom, email, telephone, nom_evenement, type, date, formule, theme, nb_invites, impressions, opt_livraison, message - `POST /api/contact/valider/{event_id}` → passe statut "valide" + envoie email confirmation au client avec URL galerie + code accès ### Landing page (frontend/landing.html) - Vitrine commerciale booth.copydev.fr, couleur indigo #5c6bc0 - 6 cartes prestations (Canon 18Mpx, Mitsubishi sublimation, galerie live, personnalisation, écran tactile, partage) - 3 tarifs : Pack 300 (300€), Pack 600 (450€), Livraison & installation (sur devis) - Formulaire réservation → crée événement auto → email admin - Calendrier dispo : WE = sam+dim (un bloc), semaine = lun→ven (un bloc), même prix. Dates réservées bloquées. - Modal accès galerie (code 4 digits) - Lien admin caché (coin bas-droit, opacity:0 → hover 0.3) ### Admin panel (frontend/admin.html) - Section "Demandes en attente" (orange) avec boutons Valider/Refuser - Section "Galeries en ligne" séparée - `validerReservation()` → `POST /api/contact/valider/{id}` avec `credentials: 'include'` ### ZIP galerie - Corrigé crash mémoire (648 Mo in-memory → temp file + streaming 1 Mo chunks) - Barre de progression dans modal (ReadableStream, affiche Mo reçus + %) - Restreint admin only (pas guest) ### SMTP - Corrigé pour port 587 : STARTTLS (pas SMTP_SSL qui est pour 465) - Config OVH : ssl0.ovh.net port 587 ### Compteur photos - `distribuer_photo()` accepte paramètre `copies` et incrémente par ce nombre (pas toujours +1) ## Tâches Trello du projet - [📋 À faire] faire essaie avec mon dslr et imprimante ricoh et installer sur ecran tactile terra (card_id: 69c1122fec1b558a76e207b0) Utilise `claude-trello` pour mettre à jour les cartes pendant le travail. Labels: green=fait, yellow=en cours, red=bloqué, (aucun)=à faire