Ajout d'un champ W×H dans la carte resize, contraint à la résolution
source. Option "carré" synchronise les deux valeurs. Le bouton Générer
s'active si au moins un format est sélectionné et une taille valide
(prédéfinie ou libre) est renseignée.
Supprime le code mort dans la route /resize (errors_pre).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Route POST /check-resize : pre-check des fichiers cibles avant génération
(utilise déjà le strip _NxN sur le stem)
- Route /resize : strip du suffixe _NxN dans le stem source
(logo_1024x1024.png → 500x500 = logo_500x500.png)
- preview_image.html : bloc conflit masqué par défaut
Au clic Générer → pre-check AJAX → si conflit : panneau jaune identique
à l'upload avec Backup/Écraser/Renommer/Ignorer puis Confirmer
Sans conflit → génération directe sans interruption
Ferme #10.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Ajoute une carte de propriétés au-dessus de l'image :
- Dimensions (largeur × hauteur), format, mode couleur, résolution DPI
- Données EXIF complètes si présentes (appareil, exposition, ISO, focale,
balance des blancs, auteur, copyright…)
- Coordonnées GPS avec lien OpenStreetMap si le champ est renseigné
Nouvelle fonction _image_meta() et _parse_gps() dans app.py (Pillow).
Grille CSS responsive, n'apparaît pas si aucune métadonnée disponible.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Route POST /rename : renomme un fichier CDN avec validation sécurité,
retourne JSON (name, path, browse_url)
- Route /resize : accepte param `conflict` (backup | overwrite | rename | skip)
backup → renomme l'existant en {stem}_bak_{timestamp}{ext} avant création
rename → auto-incrémente le nom de la copie ({stem}_1, _2…)
overwrite → écrase silencieusement
skip → ignore (signalé dans les erreurs)
- browse.html : bouton ✏️ par fichier, renommage inline avec Entrée/Échap
- preview_image.html : bouton ✏️ dans l'en-tête, champ inline + redirect
après validation ; radio segmenté pour la stratégie de conflit
- app.css : styles btn-rename, rename-inline, radio-chips segmentés
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Ajoute une carte interactive sous chaque aperçu d'image permettant de
générer des copies redimensionnées directement dans le même dossier CDN.
- Route POST /resize avec Pillow (PNG, JPG, ICO) et cairosvg optionnel (SVG)
- Tailles disponibles : 32, 64, 100, 128, 200, 300, 500, 600, 1024 px (carré)
- Formats : png, jpg, ico (svg uniquement si la source est déjà SVG)
- Nommage automatique : {nom}_{taille}x{taille}.{ext}
- UI chips cliquables, soumission AJAX, retour avec liens directs
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Ajoute la route POST /upload (admin uniquement) et la zone de dépôt
dans browse.html — glisser-déposer ou sélection multiple, destination
= dossier courant du navigateur.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>