Contexte et contraintes
Le processus initial consistait à développer le film, découper les négatifs, les placer dans un porte‑film, scanner chaque image avec un scanner dédié, puis inverser manuellement chaque fichier dans darktable. Chaque rouleau de 36 cadres demandait environ quatre heures, avec un risque élevé de poussière et de rayures.
Le matériel utilisé était un scanner compatible SANE, piloté par le backend genesys. Lors d’une première tentative d’automatisation, le moteur a reçu une instruction de déplacement inverse de
7010 steps at 900 dpi, suivi d’un second passage à 3600 dpi, ce qui a entraîné un blocage mécanique et la nécessité d’une réparation d’urgence.Automatisation du pilotage du scanner
Claude, l’agent automatisé, a été configuré pour appeler SANE avec les axes X/Y inversés afin de contourner la disposition du lit de numérisation. Le script détecte la fin de chaque scan grâce à la réponse du backend genesys, qui indique que le chariot a été renvoyé à son point d’arrêt sans mouvement réel, évitant ainsi le clic audible précédemment observé.
Pour garantir la stabilité, le flux inclut une vérification de la position du chariot après chaque commande
scan --mode=negative --resolution=3600. Si la position ne correspond pas à la valeur attendue, le processus déclenche une pause et un diagnostic matériel avant de reprendre.Conversion des négatifs et correction des couleurs
La conversion des négatifs en positifs repose sur une routine numpy qui calcule la densité de chaque pixel, applique une inversion linéaire et ajuste la balance couleur en fonction d’un cadre de référence choisi parmi les rangées vierges du rouleau. Le test initial a validé 28 sur 29 cadres, confirmant la cohérence chromatique sur l’ensemble du film.
Le même script intègre des paramètres d’exposition, de contraste et de température, appliqués uniformément à chaque image afin de préserver la continuité visuelle entre les cadres tout en évitant les corrections excessives qui pourraient altérer l’intention artistique.
Détection de poussière et inpainting
La détection de poussière utilise une analyse d’image basée sur la variance locale : les zones à forte variation sont marquées comme possibles défauts. Sur une scène de plage, l’algorithme a initialement identifié environ 2 000 reflets solaires comme poussière, nécessitant l’ajout d’un filtre de contexte qui ne cible que les régions à texture homogène.
Les défauts confirmés sont réparés par le modèle d’inpainting LaMa, qui reconstruit les pixels manquants à partir du voisinage immédiat. Un seuil personnalisable permet de retenir les grains de film pour révision manuelle, offrant ainsi un contrôle qualitatif sans recourir à darktable.