Pourquoi un photographe finit par écrire son propre logiciel
Tu insères une carte mémoire dans ton ordinateur. Tu ne cliques nulle part.
Quelques minutes plus tard, un dossier apparaît sur le bureau. Dedans : vingt-quatre photos. Pas les quatre mille de la fin de semaine — les vingt-quatre meilleures, choisies, développées, avec un rendu de film déjà appliqué.
C’est exactement ce que c’était d’aller chercher ses pochettes au labo.
On ne voyait pas ses quatre mille photos. On en voyait vingt-quatre, tirées, dans une enveloppe qu’on ouvrait sur le comptoir de la cuisine. Le tri avait déjà eu lieu — dans l’appareil, dans le prix de la pellicule, dans le fait qu’on n’avait que trente-six chances.
Le numérique m’a donné une latitude infinie et m’a enlevé ça. Reveal est ma tentative de le récupérer sans renoncer au reste.
Ce qu’il faut pour mériter ce dossier
L’image est simple. Ce qu’elle demande ne l’est pas.
Il faut détecter la carte et lancer l’importation sans qu’on le demande. Il faut ranger les fichiers au bon endroit — YYYY/YY-MM-DD/, d’après la date de prise de vue, noms d’origine conservés. Il faut trier automatiquement pour dégager les meilleures d’une session. Il faut développer chacune avec un rendu cohérent. Et il faut déposer le résultat sur le bureau, là où quelqu’un le verra en passant, plutôt que dans une bibliothèque qu’il faut ouvrir.
Chacune de ces étapes existe dans d’autres logiciels. Ce qui n’existe pas, c’est leur enchaînement sans intervention. La plupart des outils photo sont conçus pour qu’on les ouvre. Celui-là est conçu pour qu’on n’ait pas à le faire.
La règle qui rend tout ça possible
Reveal tient sur une phrase, écrite dans son README avant la première ligne de code :
The folder on disk is the source of truth, not app-internal state.
Le dossier sur le disque est la vérité. Pas la base de données de l’application.
C’est l’inversion exacte du modèle habituel. Dans un logiciel à catalogue, la base de données est la réalité et les fichiers sont des pièces jointes. Chez moi, les fichiers sont la réalité et l’index de l’application est jetable — je peux le supprimer, il se reconstruit, rien n’est perdu.
C’est aussi pour ça qu’un dossier sur le bureau peut être le produit fini. Ce n’est pas un export, ni une vue, ni une collection intelligente. C’est un vrai dossier, avec de vrais fichiers, que je peux glisser dans un courriel sans ouvrir quoi que ce soit.
Trois conséquences suivent. Les originaux ne sont jamais touchés. Les métadonnées vivent dans des sidecars .xmp au format standard — lisibles par Lightroom, Capture One, darktable, immich, et par n’importe qui dans quinze ans. Et si Reveal disparaît demain, mon archive reste navigable dans le Finder.
J’ai construit le logiciel de façon à ce qu’on puisse s’en passer.
Ce qui manquait vraiment
La portabilité, c’était le problème rationnel. Il y en avait un autre, moins avouable.
Un tirage argentique n’est pas un curseur. C’est un papier qui a une réponse, un agrandisseur avec ses filtres, une lumière qui traverse un négatif. Les décisions ne sont pas continues — elles sont matérielles, et elles interagissent.
Alors le moteur de développement de Reveal ne simule pas un curseur de contraste. Il simule la chaîne : un film, un papier, un agrandisseur avec ses décalages de filtres jaune et magenta, un illuminant de tirage.
Ce sont les mots de la chambre noire, écrits en Rust.
Ça a l’air d’un caprice nostalgique. Ce n’en est pas un. Un modèle physique ne fait pas ce qu’on lui demande — il fait ce qu’il fait, et on apprend à le connaître. C’est précisément ce que quinze ans d’usage m’ont appris à vouloir.
Deux moteurs, parce que deux vocabulaires
Il y a un piège que j’ai failli ne pas voir : vouloir un seul moteur pour tout.
Une photo argentique et une photo numérique ne se développent pas dans le même vocabulaire. L’une parle de film, de papier, d’agrandisseur. L’autre parle d’exposition, de balance des blancs, de courbes. Les forcer dans la même interface produit un outil qui ment aux deux.
Reveal a donc des moteurs séparés, et chacun est une tranche verticale : un module Rust qui déclare son identité, son nom et ses groupes de contrôles. L’interface appelle list_engines et affiche exactement ce que Rust lui déclare. Aucun contrôle n’est codé en dur côté écran.
Ajouter un moteur, c’est écrire un module Rust. L’interface s’adapte sans qu’on la touche.
C’est le même principe que dans mon framework web — ajoute un dossier, tout marche — et que dans ma maison, où une humeur nommée Soirée vit dans un script nommé pareil. Je ne l’ai pas fait exprès. C’est en écrivant ces articles que j’ai vu que je résolvais trois fois le même problème.
Les détails qu’un photographe ne pardonne pas
Certaines décisions n’ont l’air de rien et ne viennent que du métier.
Le thème de l’application suit le clair, le sombre, ou le système. Ce n’est pas une préférence esthétique : l’entourage d’une image change la façon dont on la juge. Retoucher une photo sombre sur une interface blanche fausse la perception du contraste et de la densité. Le photographe le sait depuis toujours — un tirage se regarde sur un mur neutre, pas sur une nappe rouge.
Un mode focus efface tout le reste — flou, désaturation complète, voile noir uniforme sur tous les écrans. Pas pour l’effet. Parce qu’à la deux-centième photo d’un tri, ce qui reste dans le champ de vision décide de ce qu’on voit encore.
Ce sont des détails invisibles dans une liste de fonctionnalités. Ce sont exactement ceux qui décident si un outil est utilisable une soirée entière.
Le jardin comme musée
Il y a une dernière étape, et c’est celle qui referme la boucle.
Reveal a un mode storytelling : on compose une note à même les photos d’un dossier, on décide lesquelles entrent, et on publie directement dans Standard Garden.
Ce n’est pas un exportateur vers un blogue. C’est ce qui transforme le jardin en galerie d’art, où chaque note est une pièce accrochée dans un musée. Le travail ne finit pas dans une bibliothèque privée qu’il faut ouvrir pour voir — il finit sur un mur, avec un texte, dans une pièce où quelqu’un peut entrer.
Et comme chaque note peut porter sa propre typographie et sa propre palette, la salle change avec l’œuvre. Une série d’escalade sur glace n’est pas accrochée dans le même éclairage qu’un portrait corporatif.
Ingest, develop, print. Le troisième mot n’était pas décoratif.
Écrire un logiciel pour soi change les règles
Il y a des choses qu’on n’apprend qu’en étant à la fois le développeur et l’utilisateur.
On ne peut pas se mentir sur les priorités. Le tri après un mariage, c’est deux mille photos en une soirée. Tout ce qui ralentit ce moment-là est un vrai problème ; tout le reste est décoratif.
Les bogues ont un coût immédiat. Quand la sélection ne se comporte pas comme partout ailleurs dans macOS, ce n’est pas un ticket — c’est moi qui perds le fil de mon tri à 23 h.
Et on n’a pas le droit de se casser son propre outil. Je réécris actuellement Reveal en Rust, avec Tauri et wgpu, après des mois passés sur une version Swift. Mais la version Swift reste mon outil quotidien jusqu’à la parité. Je ne touche pas à son code. Pas de grand ménage pendant que je m’en sers.
C’est frustrant tous les jours. C’est aussi la seule raison pour laquelle j’ai encore un logiciel qui fonctionne.
Ce que ça dit du métier
Le meilleur logiciel que j’aie écrit, je l’ai écrit pour quelqu’un dont je connaissais chaque frustration par cœur.
C’est un avantage énorme, et c’est un piège que je ne veux pas romancer : construire pour soi enseigne l’exigence, pas l’empathie. Je n’ai jamais eu à deviner ce que voulait l’utilisateur, puisque c’était moi. Ce que ça m’a appris, en revanche, c’est ce que ça fait quand un outil ne respecte pas votre travail — et ça, ça se transpose.
Quinze ans de photo m’ont appris que la personne devant l’objectif n’a pas demandé à être là. Reveal m’a appris le pendant : celle devant le logiciel non plus. Elle a deux mille photos à trier et un enfant qui se réveille dans six heures.
Le meilleur outil est celui qui lui rend une enveloppe de vingt-quatre photos et la laisse aller se coucher.
Reveal est un projet personnel, en développement. Le code est public : github.com/ZeFish/Reveal.
Francis Fontaine est photographe et développeur à Québec. Il construit des systèmes modulaires pour le web (stnd.build) et pour le monde physique, et pense que la meilleure technologie est celle qui disparaît dans le quotidien.