L'apercu live montrait le plein cadre camera (ratio ~3:2) alors que le
recadrage final de chaque case (creer_strip/creer_collage) est plus carre
(~1.11:1 pour 3 photos en pellicule) : le cadrage visualise pendant le
compte a rebours ne correspondait pas au resultat imprime.
Ajoute un cadre pointille superpose au live preview, dimensionne en
reproduisant cote JS la meme formule de recadrage que backend/collage.py,
visible uniquement en mode multi-shot (strip ou collage).
Le bloc partage (photo + boutons + form impression) pouvait depasser la
hauteur de l'ecran quand le choix du nombre d'exemplaires s'affichait.
La miniature absorbe maintenant l'espace restant (flex + min-height:0)
au lieu d'une hauteur fixe en vh, les autres elements gardent leur taille.
- Flash integre Canon activable/desactivable depuis l'admin (configurer_flash)
- Popup de choix de cadre juste avant impression, layout sans defilement (flex nowrap + aspect-ratio)
- Capture : ignore camera_erreur pendant une capture en cours (laisse l'API trancher)
- surveiller_dslr : grace period preview augmentee a 2s, reapplique la config camera apres reconnexion
- start.sh simplifie (Chromium gere par kiosk-session.sh), remote debugging port 9222 active
- camera.py : désactiver LiveView avant capture (viewfinder=0) → miroir abaissé →
AF phase-détection Canon actif. Remplace _declencher_af_liveview (autofocusdrive=1
pouvait bloquer sur certains corps Canon). activer_viewfinder() après la prise.
- main.py : fix bug global _preview_actif dans api_capturer (était variable locale,
le global restait True). Timeout asyncio 20s sur run_in_executor pour éviter freeze
permanent si capture bloque. Logs INFO avant/après capture.
- camera.js + index.html + style.css : spinner "Capture en cours..." entre le flash
et l'affichage du résultat. Cacher le spinner dans afficherErreurCapture aussi.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
backend:
- surveiller_dslr : fix condition qui court-circuitait le check santé
quand mode==gphoto2 — watchdog surveille maintenant via preview_dslr_ok
et reconnecte automatiquement après 15s d'échec (3x5s)
- _pusher_preview : ne pas envoyer camera_erreur pendant capture_en_cours
(race condition HTTP/WS : le POST /capturer peut arriver avant preview_stop)
- api_capturer : force _preview_actif=False dès le début de la capture
- _capture_gphoto2 : déclenche autofocusdrive avant la prise en LiveView
frontend:
- websocket.js : support multi-callbacks par type (wsOnMessage ne remplace
plus le callback précédent, tous s'exécutent)
- app.js : camera_erreur affiche bannière + reload dernier recours à 2min
(plus 10s), camera_ok cache la bannière automatiquement
- camera.js : camera_erreur abort capture + arreterPreview(); camera_ok
reset captureAbortee
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- camera_erreur pendant la capture : abort immédiat + afficherErreurCapture()
→ retour accueil en 4s (au lieu de rester bloqué sur "Reconnexion en cours...")
- camera_ok : cache l'erreur et reset le flag captureAbortee
- captureAbortee flag : permet à lancerCapture() de sortir proprement
sans déclencher de capture fantôme après une déconnexion
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
La balise <img> avec height:100% ne se propage pas quand le parent est un
flex item positionné avec align-self:center au lieu de stretch. Le fix :
position:absolute top:0 left:0 width/height 100% sur .preview-live img.
Retiré aussi --remote-debugging-port=9222 (diagnostic temporaire).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Strip 10x15 :
- Envoie la strip simple avec format 10x15-2up (w288h432-div2)
le K60 duplique et coupe automatiquement → plus de papier non coupé
- Supprime creer_impression_strip et le 2-up manuel avec marges blanches
- api/imprimer accepte format_papier depuis le frontend
- Frontend stocke formatImpression et le passe à l'impression
Diagnostic preview :
- GET /api/camera/debug : teste capture_preview(), liste les widgets
config gphoto2, état du thread → permet de voir l'erreur exacte
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- activer_viewfinder() à la connexion DSLR (miroir levé dès le démarrage)
- activer_viewfinder() après chaque capture (certains Canon le désactivent)
- Suppression desactiver_viewfinder() — miroir ne redescend plus jamais
- lancerPreview() au début du compte à rebours, arreterPreview() juste avant la capture
- Preview live fonctionnel : l'utilisateur se voit pendant tout le compte à rebours
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Icône discrète coin bas-gauche, visible seulement si photostation installée
- Popup PIN (4 chiffres) avant lancement
- Backend : /api/photostation/disponible + /api/photostation/lancer
- kiosk-session.sh : Chromium attend le flag /tmp/photostation_running avant redémarrage
- Script install-photostation.sh pour déploiement sur la Surface
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Intégration selphy_print (backend CUPS dyesub Mitsubishi CP-K60DW-S)
- Formats impression : 15x20, 10x15, 10x15 2-strips avec cadre et orientation portrait/paysage
- Cadres d'impression par format (strip/10x15/15x20) : upload, sélection, aperçu live
- Cadres démo générés : pellicule noir/vintage/couleurs + bordures classique/doré/rose gold
- Écran de choix de cadre avant capture (clic direct, aperçu grand format)
- Filtres réduits à 3 (Couleur, N&B, Sépia) et appliqués sur tous les strips
- Port 80 via authbind, route /admin avec redirection auto depuis poste distant
- Autologin LightDM corrigé (pam-autologin-service)
- Bouton évacuer bourrage papier dans admin
- Fix : _gp_lock manquant dans Camera.__init__
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Avant : frontend poll WS toutes les 100ms -> gphoto2 bloquant -> lag
Apres : thread dedie capture en continu a 30fps, pusher asyncio
diffuse a 20fps a tous les clients, frontend dit juste
preview_start / preview_stop
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Endpoint /api/systeme/info : IPs par interface, hostname, uptime,
disque, RAM, temperature CPU, version Python, statut camera
- Onglet Infos dans le backoffice avec affichage visuel (barres, couleurs)
- Bouton Actualiser pour rafraichir les donnees en temps reel
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Verification etat camera AVANT le lancement (pas de DSLR = erreur immediate)
- Detection erreur camera PENDANT le compte a rebours (pas de capture aveugle)
- Capture : erreur reseau catchee, retry x3, message explicite si echec
- Limite de photos : message + detail au lieu de retour accueil silencieux
- Strip/collage : verification resultat, message si generation echoue
- traiterCapture : try/catch global, plus de retour accueil silencieux
- Overlay erreur : titre + detail lisible, 4s avant retour accueil
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Backend: detecte quand le preview DSLR echoue (fallback silencieux)
et envoie camera_erreur au frontend (debounce 5s)
- Frontend: overlay d'erreur avec message si preview DSLR indisponible
- Frontend: si capture echoue, affiche le motif 3s avant retour accueil
au lieu de retourner silencieusement
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Overlay semi-transparent sur le preview quand camera_erreur recue
- Timeout 3s : si aucune frame recue, affiche l'erreur automatiquement
- Disparait des que les frames reprennent (camera_ok ou nouvelle frame)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Preview relancee avant chaque countdown (l'utilisateur se voit)
- Countdown 3-2-1 entre chaque photo de la serie
- Apercu precedent vide au debut d'une nouvelle session
- Surveillance DSLR pausee pendant les captures
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Frontend: arrete le preview 300ms avant la capture
- Backend: 3 tentatives avec 500ms entre chaque si DSLR occupe
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Logo SikaPics servi localement (/assets/logos/sikapics.png)
- QR code accueil agrandi a 180px
- Clavier AZERTY virtuel integre pour saisie email (tactile)
- Raccourcis @gmail, @hotmail, .com, .fr
- QR partage: affiche seulement si booth actif, lien vers galerie live
- Bouton QR visible si booth OU qr_code active
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>