- Reorganisation menu admin en 2 rubriques (General / Evenement) - Destinations deplace dans Evenement - Nouveau panneau Videos : upload par situation (montage, depannage, bourrage, rechargement) - Nouveau panneau Surprise : photo/video affichee ~1s avant capture pour provoquer sourire - Toggle rembobinage ruban Mitsubishi (StpiDecklist) pour economiser le ruban sur petits formats - Historique email cloisonne par evenement - Memoire projet consolidee dans memoire.md Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
7.2 KiB
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.shlancé au login LightDM autologin : boucle relance backend + boucle Chromium kiosk. Pour déployer :git pushdepuis dev, puiskill <pid backend.main>+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.10puispct exec 111 -- <cmd> - 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)
sudo systemctl status wg-quick@wg0 && sudo wg show && cat /etc/wireguard/wg0.conf- Vérifier Endpoint =
<IP_PUBLIQUE>:51820(pas 192.168.111.x). IP publique :curl -s ifconfig.me sudo systemctl enable wg-quick@wg0 && sudo systemctl restart wg-quick@wg0- 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éservationbackend/booth_admin.py(808 lignes) — admin panel API + ZIP streamingfrontend/landing.html(900 lignes) — page vitrine complètefrontend/admin.html(930 lignes) — panel admin avec validation résafrontend/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, messagePOST /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}aveccredentials: '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ètrecopieset 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