Sigal pour générer une galerie photo statique et minimaliste

Dans l’article Un bref retour sur le Raspberry Pi 3 Modèle B j’avais dit que j’allais me servir du Pi notamment pour une galerie photo.

Mon fils a maintenant plus de deux ans et très régulièrement mes proches demandent des photos. Je n’avais pas de solution satisfaisante. En général soit les gens mettent leurs photos dans Drive/Dropbox/iCloud etc. bref dans le cloud puis partagent le dossier soit ils font une grosse archive compressée de nombreuses photos, l’uploade sur un service comme WeTransfer et font tourner le lien.

D’un côté je n’ai aucun service cloud et ça me gêne de mettre ces photos en ligne, de l’autre l’archive compressée j’ai toujours eu la flemme d’en faire et vous pouvez être sûr que les vieux n’arriveront pas à décompresser l’archive. C’est aussi un des rares besoins que j’estime ne pas pouvoir traiter en dehors de chez moi. Je me vois mal stocker plusieurs Go de photos personnelles et familiales sur un hébergement web chez OVH par exemple, l’idée me dérange.

Cahier des charges et Piwigo

Voici mon cahier des charges :

  • Une application minimaliste et simple car je veux avoir le moins d’énergie à dépenser pour entretenir ce service
  • Une application qui fasse la part belle aux photos, ça peut paraître cocasse mais la plupart des applications sont alourdies par tout le système de gestion des photos, upload, possibilité de commenter, identification…
  • Idéalement pas de base de données donc exit MariaDB/MySQL
  • Simple également pour la personne qui va consulter les photos de cette galerie, beaucoup d’applications sont disponibles mais niveau utilisabilité…

Après une recherche chez Sebsauvage (gallery, photo gallery, galerie), un lien fort pertinent, j’ai retenu Sigal. Avant d’en parler, je m’arrête sur Piwigo qui pourrait vous intéresser. Piwigo est activement maintenu, GPLv2, relativement simple à installer mais… base de données, interface lourde et je trouve mal pensée avec des icônes petites, peu compréhensibles. Voici la démo Piwigo et une photo. Voici la démo Sigal et une photo.

Piwigo est une application PHP, c’est ce que vous trouverez comme galerie photo 95% du temps. Sigal est un générateur de galerie photo. Sigal va générer une galerie photo avec vos photos/vidéos dedans, c’est vers ce site que devra pointer votre configuration apache ou nginx.

Installation et utilisation

# Je me connecte sur mon Raspberry Pi
apt install libjpeg-dev libopenjp2-7-dev python3-dev python3-pip
pip3 install pillow
pip3 install sigal
sigal --help
mkdir -p /var/www/galerie/bestiole/{2015,2016,2017,2018} # Je crée les dossiers
cd /var/www/galerie
sigal init

Voici les principales modifications que j’ai apporté au fichier de configuration sigal.conf.py qui se trouvera dans /var/www/galerie après le sigal init.

title = "Une belle bestiole" # Le titre de la galerie photo
source = 'bestiole' # Là où sigal va chercher les photos/vidéos
destination = 'site' # Là où sigal génère la galerie photo donc dans le dossier courant, il va créer un dossier 'site'
theme = 'photoswipe' # Le thème utilisé : colorbox (default), galleria, photoswipe
use_orig = True # Use originals in gallery (default: False). If True, this will bypass all processing steps (resize, auto-orient, recompress, and any plugin-specific step)
orig_link = True # Originals will be symlinked if orig_link = True, else they will be copied

Maintenant on va naturellement mettre des photos dans le dossier bestiole. Je le fais avec scp -r 'MAI 2017' pi@192.168.3.10:/var/www/galerie/bestiole/2017/ mais vous faites comme vous voulez : clé USB, FTP (il faut installer un serveur FTP bien sûr), SSHFS…

sigal build # Pour générer la galerie 
sigal serve # Pour faire tourner un serveur web basique, c'est UNIQUEMENT pour tester le rendu, allez contempler votre œuvre sur http://adresseipdelaraspberrypi:8000/

Voici le rendu (thème photoswipe). Je sais mon fils est magnifique, normal il ressemble à son père hi hi hi.

Le minimalisme c’est bien mais il faut protéger un minimum htpasswd -c /var/www/galerie/site/.htpasswd bestiole. Si vous utilisez apache, la configuration donnera ceci en gros.

	DocumentRoot /var/www/galerie/site
	Alias /photos /var/www/galerie/site
	<Directory /var/www/galerie/site>
    	AuthUserFile /var/www/galerie/site/.htpasswd
    	AuthName "Merci de taper les identifiants"
    	AuthType Basic
    	Require valid-user
    	Allowoverride All
	</Directory>

La prochaine fois que vous voudrez ajouter des photos.

scp -r 'MARS 2018' pi@192.168.3.10:/var/www/galerie/bestiole/2018/
cd /var/www/galerie && sigal build /# Sur votre Raspberry Pi

Pour modifier les informations sur les albums voir Album information (avec markdown), ça va donner /var/www/galerie/bestiole/2017/MAI 2017/index.md par exemple. Pour modifier les informations sur les images voir Image information, ça va donner /var/www/galerie/bestiole/2017/MAI 2017/20170513_085643.md par exemple. Personnellement je ne fais rien.

Avantages et inconvénients

Avantages :

  • Aucune maintenance à effectuer puisque c’est un site statique (il génère juste html, css, javascript, pas de code exécutable côté serveur) au contraire d’une application php qu’il faut mettre à jour, à la limite pip3 install sigal --upgrade tous les 6 mois
  • Statique ne veut pas dire sans animation, JavaScript est là pour charger les photos suivantes quand on scrolle vers le bas par exemple
  • Il ne génère que ce qui est nécessaire. Si vous ajoutez un nouveau dossier, il ne va pas regénérer les dossiers déjà présents. Si vous voulez forcer une regénération complète, sigal build -f
  • Ça rend très bien sur smartphone/tablette (responsive)
  • Possibilité de désactiver tout traitement des photos/vidéos, c’est ce que j’ai fait (use_orig = True et orig_link = True) ainsi 1/ La génération du site est plus rapide 2/ Vous évitez une duplication de vos photos stockées dans /var/www/galerie/bestiole dans /var/www/galerie/site. Par exemple moi le dossier bestiole pèse 1,3 Go (vidéos…) et le dossier site pèse 5,1 Mo (il fait des liens symboliques vers les photos/vidéos du dossier bestiole)
  • Il y a un vrai plaisir à avoir ses photos disponibles en ligne, on y retourne souvent (quand on a un petit coup de mou par exemple). Plus les photos sont aisément accessibles, plus on en profite en fait

Inconvénients :

  • Gère les vidéos mais les présente de la même manière que les photos, on ne peut donc pas les reconnaître entre elles
  • J’ai un bug très pénible qui ressemble à ça, dès que je sigal build, plus rien n’apparaît sur le prompt de mon terminal. J’ai compris le truc donc après chaque sigal build, je me déconnecte (Ctrl + d) puis je me reconnecte. Je ne sais pas si ça vient de ma config. Si vous avez le même souci, laissez un commentaire et je m’occuperai de creuser l’issue

Un besoin traité grâce au Libre, au suivant !

Déjà 16 avis pertinents dans Sigal pour générer une galerie photo statique et minimaliste

  • Balistic
    Bonjour,
    C’est du Php mais il existe également SFPG : http://sye.dk/sfpg
    Pas de base de données, un unique fichier php qui gère tout, qui permet de mettre un mot de passe d’accès et qui permet également l’upload.
  • gringotux
    bonjour,
    J’ai trouvé sympa votre article sur SIGAL. J’ai en effet testé pendant 2 ans Piwigo mais j’ai laissé tomber avec le temps, un peu trop lourd pour le besoin que j’en avais.Moi c’est pour mon petit fils , le partage de photos ;-)
    J’ai actuellement un Rpi 2 en NAS avec OpenmediaVault et un cloud perso sur un BanaPi ( SOC dual-core 2ghz, Ram 1Go) et surtout une interface SATA.
    J’ai aussi un Odroid C2 qui me sert d’ android TV.
    Sigal m’intéresse mais si je peux me permettre dans l’article parlant du Rpi 3 et celui ci il manque, pour les débutants ou le autres les pré-requis. Je suppose qu’il ne faut pas un LAMP complet, seul un serveur apache2, php, et quoi d’autre, svp ?
    Merci en tout cas pour ce bel article, je pense que je vais tester.

    Cordialement

  • Yax
    Ton article tombe à point nommé ! Je viens juste de me remettre sur un problème que je laisse traîner depuis quelques années : comment libérer mes 70 Go de photos familiales stockées dans iPhoto sur l’iMac 2007 ? J’ai passé la 1ère étape aujourd’hui en les exportant grâce à cet outil : https://github.com/BMorearty/exportiphoto. J’ai une structure de dossiers par année et des dossiers avec des noms d’évènements. C’est en cours de synchro vers mon Nextcloud, une bonne 1ère étape, inimaginable avant que j’ai la fibre.

    2ème étape : la bibliothèque est un peu vrac (j’ai perdu de la metada iPhoto) je devrais probablement fusionner des dossiers, en renommer d’autres… il faudrait que j’ai une vue d’ensemble. Est-ce que tu connais un gestionnaire de bibliothèque style Shotwell qui travaille en physique pas avec des metadatas c’est à dire qu’il considère chaque évènement comme un dossier et qu’il répercute les modifs sur l’organisation des fichiers et des répertoires : on déplace une image d’un évènement, elle est déplacé d’un répertoire à un autre ; on renomme un évènement, on renomme un répertoire. Je voudrais avoir un résultat agnostique du logiciel qui sera utilisé ensuite

    Et dans une 3ème étape je pense générer un site Web statique du résultat avec un outil comme SIGAL pour partager les photos :-)

  • Salut,
    Merci pour la petite pub pour Sigal ;), tu présentes bien les avantages de ce genre de solution.

    > Gère les vidéos mais les présente de la même manière que les photos

    Oui c’est vrai qu’on pourrait ajouter une petite icône vidéo sur la miniature, un petit détail qui serait utile. Si tu es amateur de css, c’est une bonne idée de contribution ;). https://github.com/saimn/sigal/issues/317

    > J’ai un bug très pénible qui ressemble à ça, dès que je sigal build, plus rien n’apparaît sur le prompt de mon terminal

    Tu ne vois même pas la progress bar ? Et avec les options -v ou -d est-ce que tu vois les infos de build ? Je n’ai jamais réussi à ce reproduire ce bug, donc si tu as plus d’infos ce serait utile.

  • Celedhrim
    Tout depend du besoin , moi au contraire , je suis parti sur piwigo car :
    * Gestion des ACL ( photo famille et amis , les amis vois pas la famille et la famille vois pas les amis)
    * upload par les utilisateurs , on centralise les photo car tout le monde upload dedans , du coup on ne se demande plus qui a pris la photo de tel truc :)

    Bref tout dépend du besoin

  • Tranche
    Salut Cascador,
    Super ton article tombe à pic je cherchais ça la semaine dernière et j’avais pas vu Sigal.
    Après quelque année de piwigo j’ai arrêter parceque l’interface la lourdeur tous ça… et puis surtout j’ai cassé mon install :( (mais il faut lui reconnaître que niveau fonctionnalité y a ce qu’il faut)
    Ça correspond pas à ton exactement besoin mais niveau belle interface j’avais sélectionné 2 projets, et comme ils sont pas dans le lien :
    – leechy, nécessite php+mysql : https://lychee.electerious.com/
    – photoshow, nécessite php : http://www.photoshow-gallery.com/
  • Yax
    « Purée 70 Go de photos ! T’as une grande famille, t’es un maniaque de la gâchette ou tu as 70 ans d’existence derrière toi ? lol »

    Tu as 2 bonnes réponses sur 3 :-) Bon j’ai testé gThumb, ça correspond à peu près à mon besoin pour faire le ménage et réorganiser ma photothèque. Quand ce sera propre, je verrais pour la génération avec Sigal.

  • Matt
    Bonjour,

    Sigal me plait bien, cependant, j’ai quelques soucis avec, notamment, en ce qui concerne les images au format .tif
    « sigal build » les traite correctement en faisant le traitement qui va bien (option use_orig = False et orig_link = True), mais « sigal serve » échoue pour les visualiser.
    J’obtiens ce message dans la console:
    —————————————-
    192.168.1.11 – – [22/Apr/2018 18:39:24] « GET /1978/1978.tif HTTP/1.1 » 200 –
    —————————————-
    Exception happened during processing of request from (‘192.168.1.11’, 64785)
    Traceback (most recent call last):
    File « /usr/lib/python2.7/SocketServer.py », line 295, in _handle_request_noblock
    self.process_request(request, client_address)
    File « /usr/lib/python2.7/SocketServer.py », line 321, in process_request
    self.finish_request(request, client_address)
    File « /usr/lib/python2.7/SocketServer.py », line 334, in finish_request
    self.RequestHandlerClass(request, client_address, self)
    File « /usr/lib/python2.7/SocketServer.py », line 657, in __init__
    self.finish()
    File « /usr/lib/python2.7/SocketServer.py », line 716, in finish
    self.wfile.close()
    File « /usr/lib/python2.7/socket.py », line 279, in close
    self.flush()
    File « /usr/lib/python2.7/socket.py », line 303, in flush
    self._sock.sendall(view[write_offset:write_offset+buffer_size])
    error: [Errno 32] Broken pipe

    Et dans le navigateur:
    Image not found: 1978/1978.tif

    Question: est-ce que Sigal gère les formats .tif ?

Les commentaires sont fermés.