Présentation animée de quelques fonctions de MyPhotoShare

Publiez vos photos et vidéos sur un site web static performant et sécurisé.
MyPhotoShare est un générateur de galerie média statique. C'est-à-dire qu'un programme, l'indexeur (ou scanner), va parcourir des dossiers contenant des photos et des vidéos et va générer un index de tous ces fichiers afin de les rendre disponibles à partir d'une seule page Web statique. D'un point de vue de la sécurité, rien n'est modifiable. Et du côté de la performance, le serveur Web dédie ses ressources pour fournir les médias, pas pour redimensionner des images ou gérer une base de données...
Quels sont les avantages d'un site web static? À l'origine, le Web a été inventé pour partager des documents, puis il a évolué pour supporter des applications. Donc un site web static renoue avec la pureté initiale du Web. Surtout si le contenu des pages ne change pas, comme c'est souvent le cas dans une galerie média, pourquoi vouloir rendre plus complexe l'affichage de photos ou de vidéos? L'indexeur vient simplifier l'opération en générant automatiquement le contenu des pages à afficher. En fait, dans le cas de MyPhotoShare, il ne génère pas des pages HTML mais des fichiers d'index au format JSON, qui sont interprétés par la page HTML5 dans le navigateur de l'utilisateur. D'un point de vue de la sécurité, il devient dont plus difficile de hacker l'application pour prendre contrôle du serveur.
Sur le volet de la performance, le travail du serveur se réduit à l'envoi des fichiers d'images ou de vidéos, ou des fichiers JSON. En effet, quel que soit le visiteur, l'affichage d'une page de la galerie aura le même contenu média (l'apparence peut être différente en fonction des choix de présentation du visiteur). Donc on peut préparer le rendu des pages à l'avance, indépendamment des requêtes des différents visiteurs. C'est vrai qu'il est possible que certaines pages ne soient jamais affichées et que l'indexeur ait travaillé inutilement, mais si le site est populaire la probabilité de ce travail inutile diminue. Au contraire, un serveur dynamique recréerait à chaque fois le contenu d'une page pour tout nouveau visiteur. Le site web static optimise donc l'effort à court terme (répondre à une requête HTTP) et sur le long terme (préparer le travail et le garder dans un cache permanent).
Ces deux arguments sont particulièrement adaptés au contexte d'une galerie média, avec du contenu qui évolue incrémentalement. En contrepartie, comme le serveur ne peut plus réagir aux interactions des visiteurs, les fonctions dynamiques de l'application doivent s'exécuter du côté du client, dans son navigateur Web. On croit parfois que celà limite les possibilités, ce n'est pas le cas et MyPhotoShare peut prouver le contraire.
En fait, MyPhotoShare dispose de toutes les fonctions que vous pourriez attendre d'une galerie média. Un site Web static est plus performant et sécurisé qu'une galerie photo dynamique, mais nous n'avons pas voulu faire de compromis sur les fonctions offertes aux utilisateurs.
Voici quelques sites qui vous permettront d'essayer MyPhotoShare. La langue d'affichage proposée lors de votre visite dépend de la configuration de votre navigateur web.
La manière la plus simple d'installer MyPhotoShare est d'utiliser le paquet Debian/Ubuntu. Installez-le à l'aide de la commande sudo dpkg -i myphotoshare_VERSION.deb
après avoir remplacé par la VERSION
que vous avez téléchargée. Veuillez noter que toutes les versions ne donnent pas lieu à la création d'un paquet; peut-être désirez-vous utiliser la dernière version et il vous faudra suivre la procédure d'installation manuelle.
Ensuite, déposez vos médias, photos ou vidéos, dans le répertoire /usr/local/share/media
et attendez que la tâche d'indexation du scanner fasse son office durant la nuit.
Si vous êtes pressés, vous pouvez démarrer l'indexation des médias immédiatement à l'aide de la commande myphotoshare_scanner /etc/myphotoshare/myphotoshare.conf
, mais peut-être voudrez-vous configurer quelques options dans le fichier de configuration /etc/myphotoshare/myphotoshare.conf
?
L'installation manuelle n'est pas beaucoup plus compliquée et vous permettra de comprendre le fonctionnement de la galerie. Suivez les instructions détaillées. Nous y expliquons comment télécharger la dernière version depuis GitLab et nous vous guidons pas-à-pas sur comment monter un site web pour exposer vos photos.
Déroulez les sections pour afficher leur contenu...
☰
, en incluant éventuellement les sous-albums, avec le choix des types de médias: photos, vidéos ou les deux.[Shift]+clic
) ou retirées ([Ctrl]+clic
) de la fenêtre popup de la carte.Paolo Benvenuto qui maintient le projet l'a appelé MyPhotoShare car le but premier est le partage avec les amis et la famille. Vous pouvez télécharger un média, un album complet ou même le résultat de votre sélection. Vous pouvez aussi partager le contenu par courriel ou sur les principaux réseaux sociaux.
[PageHaut]
et [PageBas]
; [f]
passe en plein écran (full screen); [d]
télécharge le fichier original (download); [o]
affiche l'original; [s]
affiche la carte (show map); [m]
affiche les métadonnées; [e]
ouvre le menu; [+]
agrandit tandis que [-]
réduit; [Espace]
ou [RetourArrière]
(comme dans Darktable), [<]
ou [>]
effectuent une rotation des modes d'affichage: par album -> par date -> par GPS -> par carte -> par sélection; [/]
change l'ordre de tri des albums ou des médias.[Ctrl]
ou [Shift]
.album.ini
.Trouvez la réponse à vos question dans la Foire aux question ou dans la documentation.
MyPhotoShare est constitué de deux parties: un script Python et une application JavaScript.
Le script Python, l'indexeur ou scanner, parcourt un arbre de répertoires contenant des images et des vidéos (nous utilisons le terme général média). Chaque répertoire constitue un album. Ce script remplit un second répertoire, dénommé le cache, avec des fichiers statics JSON et des réductions des images et vidéos (les vignettes). Il écrit un fichier options.json
à la racine du site et contenant les options de configuration. Le scanner extrait les étiquettes de métadonnées EXIF depuis les photos JPEG ou des vidéos, ou bien les métadonnées spécifiées par le propriétaires dans les fichiers album.ini
, et crée des fichiers d'index JSON dans le cache. MyPhotoShare détecte les dates et heures de modification des fichiers pour évaluer si une réindexation est nécessaire. Le travail du scanner sera très rapide si aucun changement n'a eu lieu depuis la dernière exécution.
L'application JavaScript est constituée d'un seul fichier index.php
ou index.html
. Elle charge le fichier options.json
ainsi que les fichiers JSON statics générés, à la demande depuis le répertoire de cache, afin de créer une interface Web performante.
À titre de comparaison, sur un PC de bureau, avec les albums de médias sur une partition NAS:
L'indexation de 45000 médias nécessite 1,5 Go/2,1 Go de mémoire vive/virtuelle.
Le code JavaScript est optimisé et la galerie gère facilement 40000 médias.
Cependant, si un album contient plus de 1000 photos, il faut s'attendre à quelques lenteurs d'affichage. Malgré tout, la galerie reste utilisable.
Bien sûr, la performance se paie au prix de l'espace disque utilisé par le cache. Nous avons essayé de le garder dans des limites raisonnables. Le ratio de la taille du cache par rapport à la taille des albums originaux dépend de nombreux facteurs tels que le nombre de tailles d'images intermédiaires que vous désirez (voir l'option reduced_sizes
dans le fichier de configuration) et des options de transcodage vidéo (voir video_preset
par exemple), ou bien sûr de la durée des vidéos.
Site | Nombre de médias | Taille des albums | Taille du cache | Ratio cache/albums |
---|---|---|---|---|
Démo AlternaTV | 95 images | 675 Mo | 116 Mo | 17% |
Site de production #1 | 14k médias dont 20 vidéos | 95 Go | 25 Go | 26% |
Site de production #2 | 20k médias dont 439 vidéos | 92 Go | 66 Go | 77% |
Site de production #3 | 26k médias dont 430 vidéos | 232 Go | 82 Go | 35% |
MyPhotoShare a commencé sa vie sous le nom photofloat que lui a donné sont auteur Jason A. Donenfeld. Le code a été extrait en 2016 dans une nouvelle branche quand Jason a arrêté de le développer, puis enrichi par Jerome Charaoui pour supporter les vidéos, avec les contributions de Paolo Benvenuto et de Pierre Métras.
Actuellement, MyPhotoShare est principalement développé par Paolo Benvenuto qui a ajouté de nombreuses fonctions au programme original. Moi, Pierre Métras, j'y contribue de temps en temps quelques ajouts ou des corrections de bugs. D'ailleurs, la liste des tickets du projet répertorie de nombreuses idées d'améliorations. Mais nous manquons de bras pour les implémenter. Si vous connaissez Python or JavaScript, si vous maîtrisez HTML5 et les feuilles de style CSS, voire vous connaissez une langue différente de celles que nous parlons, ou tout simplement vous disposez de quelques heures pour tester l'application, n'hésitez pas à nous donner un coup de main pour améliorer l'application. Si vous avez une idée pour adapter MyPhotoShare à vos besoins, partagez-la sur Gitlab, même en français!
Par exemple, je voulais ajouter des fonctions de reconnaissance de scènes pour étiqueter automatiquement les dizaines de milliers de photos de ma collection. Pas question de mettre mes photos privées chez les GAFA de ce monde! J'ai donc décidé d'ajouter un module d'extension qui analyse les images à partir des banques d'images de Visual Genome et de MS COCO et les associe à des synsets de WordNet, ce qui permet de présenter les scènes reconnues dans toutes les langues supportées. Le module mps_autoscenes a ainsi vu le jour, mettant en œuvre des techniques d'apprentissage profond. Malheureusement, mon portable i5 ne dispose pas d'une puissance suffisante pour optimiser le réseau de neurones, même après 15 jours de calculs. Actuellement, mps_autoscenes reconnaît correctement les éléments d'une photo dans plus de 50% des cas, mais est encore loin de remplacer les humains ou les meilleurs logiciels. Si vous avez la capacité de l'améliorer, n'hésitez pas!
En revanche, l'autre module d'extention mps_autofaces, dont la tâche est d'identifier les personnes dans les photos a un taux de succès diabolique! À partir d'une liste de portraits identifiés qui lui sert de modèle d'apprentissage, il reconnaît ensuite toutes les apparitions de ces personnes dans les photos et met à jour les métadonnées de MyPhotoShare.
Ces deux exemples présentent mes contributions à ce projet. Vous aussi, vous pourriez y apporter les vôtres!