Forker darktable ? // darktable next-generation ?

Ça fait deux mois que je dissèque l’intérieur de darktable. Deux mois que je découvre un héritage de décisions plus que discutables sur la gestion de la couleur, qui expliquent tout un lot de problèmes et de frustrations depuis plusieurs années. Deux mois que, à chaque fois que je signale ce qui ne devrait pas arriver, on (les 3 principaux développeurs historiques) me répond qu’il ne faut pas casser la compatibilité des fichiers XMP créés avec les versions précédentes. Au prix de maintenir du code cassé dans le logiciel, pour ne pas casser la compatibilité (un comble).

Liste non exhaustive de tout ce qui ne va pas:

  • un workflow entièrement basé sur l’utilisation des normes ICC (profils de couleur d’entrée et de sortie), datant de 1976 et pensées pour les écrans CRT (cathodiques), portées à la va-comme-je-te-pousse pour les écrans LCD/DEL, qui devient extrêmement limitant avec les écrans « Wide-Gamut », HDR, 10 bits etc.

  • conséquence du workflow ICC, on retouche dans un espace de couleur relatif à l’écran (RGB de sortie), et non relatif à la scène réelle (RGB d’entrée). Il y a 20 ans, les écrans utilisaient tous un espace de couleur (physique) sRGB et n’avaient pas forcément de gestion de la couleur intégrée. On utilisait sRGB en sortie, qui s’affichait alors tel quel sur les écrans/systèmes en couleur non gérée (native).
    Or, aujourd’hui, avec la multiplication des supports d’affichage et des espaces de couleurs (sRGB pour les écrans d’ordi, REC 709 pour les TV HD, REC 2020 pour les TV HDR), la sortie n’arrête pas de changer, et se corrige elle-même (via des profils internes). Du coup, ça n’est plus au photographe de gérer la sortie (pourvu qu’il y ait des méta-données dans le fichier image qui disent quel espace de couleur et quelle courbe de réponse sont utilisés), et la seule chose qui ne change pas est l’espace RGB d’entrée. L’académie des Oscars a développé un workflow couleur basé sur une chaîne de travail linéaire relative à la scène et produit du code libre (les ACES) pour aider les développeurs. Ce workflow est notamment utilisé dans des logiciels comme Da Vinci Resolve, et massivement utilisé à Hollywood.

  • un ordre des modules immuable (à la limite, ce n’est pas le pire) mais surtout incohérent avec la science de la couleur : les modules de filtrage fréquentiel (passe-haut, passe-bas, ondelettes, netteté, flou, effet Orton) devraient être en début de pipeline, au niveau où il est encore linéaire, pour respecter le théorème de Parseval et la conservation de l’énergie dans les opérations spectrales. De plus, certains modules sont situés après le profil de sortie, donc à réglage identique, leur effet change quand vous changez d’espace de couleur ou d’écran.

  • entre le profil d’entrée et le profil de sortie, le pipe est en Lab. AUCUN logiciel de retouche ne travaille en Lab par défaut, mais dans des espaces RGB de référence (Adobe RGB, Prophoto RGB, sRGB, REC 709) car cet espace, en dépit de son apparente facilité d’utilisation (luminosité et couleur entièrement séparés) et de son caractère absolu (indépendant du medium), créée plein d’artifices quand on l’utilise pour manipuler les pixels : désaturation, virage des couleurs, etc. Ces artifices restent modestes tant qu’on ne pousse pas trop les pixels, mais les capteurs HDR récents (Nikon D8xx, Sony A7xx, Phase One, Hasselblad, etc.) imposent des corrections dramatiques qui ne pardonnent plus ces erreurs et imposent des corrections fastidieuses de la couleur pour compenser les dé/sur-saturations qui se produisent après avoir poussé la luminosité. Alors qu’en travaillant directement en RGB, on évite un grand nombre de problèmes (cf mon module filmique).

Liste non exhaustive de tout ce que je voudrais corriger:

  • laisser à l’utilisateur la possibilité de travailler dans l’espace de couleur de son choix (Lab, Adobe RGB, Prophoto RGB, ACES P0, REC 2020)

  • réécrire tous les modules Lab pour les rendre compatibles avec RGB.

  • virer du code toutes les constantes RGB et les corrections gamma codées en dur.

  • rendre le workflow basé sur ICC et sur le RGB destination optionnel (display-referred) et intégrer de workflow ACES basé sur l’entrée (scene-referred), plus robuste et reproductible, et surtout 100 % évolutif

  • remettre les modules dans un ordre mathématiquement justifié

  • éventuellement, ouvrir la possibilité de réarranger l’ordre des modules selon le choix de l’utilisateur.

MAIS

1.Tout ça impose de casser la compatibilité (même si, au pire, les versions antérieures de darktable sont téléchargeables à vie), pas dans le sens où les anciens fichiers de retouche ne pourront plus être ouverts, mais dans le sens où les mêmes réglages n’auront plus les mêmes effets. Et vue l’inertie et la résistance au changement chez les développeurs historiques de dt (heureusement qu’il y a Pascal pour prendre des risques), ces changements sont à peu près garantis de ne jamais passer dans le version officielle.

  1. C’est un boulot de dingue qui vise plutôt les pros et les experts en intégrant des outils issus de l’industrie cinéma qui donnent une meilleure reproductibilité et une meilleure pérennité, en autorisant des changements de worflow ultérieur sans avoir à changer (encore) tout le logiciel. Ceci étant, c’est un boulot encore plus massif de maintenir la compatibilité arrière avec du code cassé.

  2. Maintenir coûte que coûte la compatibilité arrière aboutit à des paradoxes et mène lentement vers une impasse où le poids de l’héritage ne permet plus de s’adapter au nouveau matériel (appareils photos, écrans, imprimantes) et nouveaux protocoles.

  3. Je perds une énergie considérable à essayer de convaincre Roman Lebedev, Tobias Ellinghaus, et dans une moindre mesure Johannes Hannika, qu’il faut faire des changements. Je me fais envoyer promener sèchement quand je propose des changements, et même quand je propose du code pour les réaliser (sans Pascal, mes PR seraient encore en train de pourrir sur Github, sous les commentaires assassins de Lebedev).

DONC

Est-ce que vous pensez qu’on (je) devrait forker darktable ?

Bonjour
Je n’ai absolument aucune compétence pour évaluer le bien fondé ou non de tes remarques.
J’ai, en revanche, une assez bonne expérience de l’action associative, syndicale et politique.
Je suis persuadé qu’il est totalement vain de croire que l’on peut changer les choses de l’intérieur, quand on arrive à des situations de blocage.
Il faut toutefois être bien conscient que ce genre de décision entraîne des haines de grande envergure.

Merci de ces longues explications sur le fonctionnement interne de dt et des soucis que cela provoque et des conséquences à lonq terme, forker me parait indispensable mais cela veut dire qu’il faut aussi gérer le fork et le maintenir ? en auras-tu le temps et les capacités ? (pas de jugement sur ta qualité de ton travail, juste une question :wink:

Moi qui réfléchissait à passer sous dt pour mon processus photo cela me fait tout d’un coup fortement hésiter :frowning:

Personnellement, je pense que nous n’en sommes pas là… Vous avez porté une bonne partie des dernières avancées. Je trouve que ça avance très bien comme ça. Après une version de dev parallèle pour "demontrer " que tout fonctionne bien histoire de donner plus de poids à vos derniers développements serait un bon compromis :smiley:

De là à envisager un fork… :s

Bienvenue dans le monde cruel des développeurs. Je te comprend sur ce point mais faut que tu sois patient. Eux ils sont là depuis un moment et toi tu débarques en voulant tout chambouler (même avec de bonnes intentions). Sois patient et résiste, avec le temps ils changeront sûrement d’avis en voyant à quel point tu contribues au projet et avec le soutien de pascal :slight_smile:

@Aurélien, je suis assez d’accord avec ton raisonnement. Note que quelques messages passés sur IRC m’ont été remonté et par exemple Hanatos n’est pas content du tout avec le changement de la position du module de recadrage. Je vais devoir m’expliquer… Bon c’est jamais simple.

Sinon je suis aussi d’accord pour dire qu’un fork c’est une guerre terrible, on a déjà vu cela dans l’Open Source :frowning: Je ne sais pas si j’aurais l’énergie pour cela!

Je comprend que l’intérieur de dt devrait changer, maintenant ne peux t’on pas reprendre les modules un à un. Les nommer avec un suffix « -ng » et les passer progressivement vers du RGB? C’est une première étape. Ensuite dans les préférences on pourrait avoir un mode « legacy » ou « next-gen ».

Ça marche pour les iop… Maintenant pour le cœur de dt, je ne sais pas trop…

En gros nous sommes 4 devs cette année, Mathieu, Nicolas, toi et moi. Tous ici, voyons l’avis de chacun.

Même avis !

Perdre la compatibilité avec les versions antérieures est tout de même un gros inconvénient : il faut que pouvoir voir que le jeu en vaut la chandelle et rien de mieux que tester pour ça, (c’ est bien plus parlant que de longues heures d’ argumentations :wink: )

Courage à toi en tout cas ! :slight_smile:

Il vient d’avoir plusieurs avis et je suis aussi d’accord avec @CaraFife pour faire tourner une version dev à côté de celle officielle. Je pensais aussi à un programme qui pourrait mettre à jour les .xmp anciens pour la nouvelle version.
Je suis aussi d’accord avec toi Aurélien pour une nouvelle approche de la chaîne de traitement de darktable au vu d’un certain nombre de photos que je n’arrive pas à traiter de façon satisfaisante.
L’idée de Pascal d’avoir 2 versions différentes d’un module est très séduisante mais certains vont encore dire que darktable est trop complexe.

L’idée de Pascal d’avoir 2 versions différentes d’un module est très séduisante mais certains vont encore dire que darktable est trop complexe.

L’idée c’est d’avoir une pref pour passer 100% aux modules NG. Par défaut on ne les voit pas. Les conservateurs seront contents et les autres aussi.

Ca, si c’est possible ce serait un vrai plus !!!

Salut à tous !

Le problème d’avoir deux versions c’est que c’est plus ou moins deux fois plus de boulot de dev non ? C’est à vous de voir Pascal et Aurélien mais si ça doit durer longtemps ce serai dommage que vous lâchiez le projet.

Tout à fait d’accord Pascal et le découpage des modules de darktable en sous ensembles indépendants doit se prêter très bien à développer et à maintenir. AMHA

Les xmp étant des fichiers texte, il doit être possible d’interpréter l’ancien format pour le mettre dans la coque du nouveau en appliquant les modifications. Mais es ce vraiment viable ou/et faisable ???

Le problème d’avoir des modules legacy and ng, c’est quand on veut refactoriser les libs : ça fait (une version C + une version SSE + une version OpenCL) × (une version legacy + une version NG) à mettre à jour, tester etc. Là je suis en train de refactoriser les profils de couleur d’entrée/sortie pour que les modules puissent les utiliser sous forme d’API unifiée, typiquement c’est ça qui va poser problème.

À la limite, ça serait plus simple de garder une version 2 avec des mises à jour de maintenance, de lancer une version 3 non compatible, et de faire des backports ponctuels. Comme Python l’a fait.

Tu as vu le problème de la pipette globale… Pour régler ça proprement, c’est tout le pipe couleur qu’il faut assainir.

Ensuite, 1 module = 1 I/O. En C/SSE, c’est pas très grave, mais en OpenCL, 25 % à 66 % du temps de calcul, c’est des I/O entre la RAM et la vRAM. On gagnerait à combiner les « mini-modules » ensemble (genre {saturation + contraste de couleur + vevia + vibrance}, puis {contraste + niveaux + courbes}, puis {colorisation + virage partiel}). Parce qu’encore une fois, cette architecture modulaire n’a du sens que si les modules peuvent être ré-arrangés. Dans le contexte actuel, ça fait juste des I/O pour rien.

Le format de fichier ne va pas changer, et les réglages seront toujours lisibles. Ce n’est pas là que la non-compatibilité se situe. Si on change l’ordre des opérations, et la nature des opérations (fonctions de tranfert, espace de couleur), les même réglages sous darktable 2 ou next-gen n’auront plus exactement les mêmes effets.

C’est pas seulement ça. Les 3 mousquetaires du début n’ont plus le temps/plus l’envie de s’investir dans le projet, ce qui fait qu’à chaque fois qu’on les voit intervenir, c’est pour dire non, et je les soupçonne de prendre le moins de risques possibles sur les nouvelles fonctionnalités pour ne pas se créer du travail en maintenance et correction de bugs derrière. On ne peut pas leur en vouloir, mais à un moment donné, un logiciel qui ne casse jamais est un logiciel qui meurt à petit feu. Je leur ai proposé un financement participatif pour qu’ils prennent quelques heures de congé par mois pour régler les bugs et examiner les contributions de code, je n’ai pas eu de retour.

Ensuite, il n’y a pas de design dans darktable : chacun amène son code, on intègre ou pas, mais il n’y a pas de souci de cohérence, de réflexion sur la méthode de retouche, etc. Ellinghaus avoue lui-même qu’il n’a pas le temps de regarder ce que font les autres logiciels ni comment ils travaillent. Règle de base : on ne peut pas être brillant tout seul dans son coin. Il y a des recherches qui sont faites sur les bonnes pratiques d’édition d’images, le service R&D de l’académie des Oscars est un très gros contributeur opensource, les ignorer c’est rester coincé en 2010 tout en étant convaincu d’être à la pointe.

Ce qui m’inquiète aussi, c’est que les devs historiques développent darktable « pour le fun ». Moi, je n’ai aucun fun à programmer, je déteste C, je programme pour faire de meilleures photos, et avoir un outil plus robuste, fiable et performant pour y arriver. En ce moment, Hanatos s’est lancé dans une interface simplifiée pour darktable. Considérant que le pipe couleur n’est pas cohérent, c’est une drôle de priorité. Les besoins des photographes sont relégués au second plan. Mais darktable, bien que libre, appartient à Hanatos plus qu’à Pascal, même si la liste des commits depuis un an suggère le contraire.

C’est vrai que mettre rotation/recadrage juste derrière la correction de perspective, c’est une idée bizarre :dodgy:

Dans l’absolu, j’ai juste envie d’avoir un logiciel opensource de traitement photo de niveau commercial. Je commence à comprendre à peu près ce qui se passe dedans. S’il faut qui j’y bosse à temps plein et qu’il y a des gens prêts à payer mon loyer pendant ce temps là, je réfléchis même pas, je fonce… Le problème, c’est que je ne peux pas assurer la maintenance pour Windows, Mac, et les architectures ARM.

C’est sûr que forker, c’est pas forcément sympa, mais en même temps c’est ça aussi l’OpenSource : quand on n’a plus les mêmes priorités, on divorce (Krita/Gimp, Gnome/Cinnamon/Budgie/Mate, Debian/Ubuntu/Mint).

darktable marche bien tant qu’on ne le pousse pas trop fort, le problème c’est les retouches « extrêmes ». Et avec les derniers ajouts de Heiko Bauke et Edgardo, on a des fonctionnalités de haut niveau empilées sur une base bancale. Et juste pour ça, ça vaut la peine de nettoyer, avec ou sans l’accord des 3 mousquetaires, et quitte à perdre la compatibilité arrière.

Comme alwa je n’ai aucune compétence pour juger de la situation. En fait vous êtes devant un choix :

  • Rester à l’intérieur du système sans possibilité de changer vraiment les choses « quand on arrive à des situations de blocage »
  • Faire un fork et subir « des haines de grande envergure »
    Cool …
    A-t-on déjà vu qu’un fork dépassait l’original en qualité ?
  1. définis « qualité » ? (la définition ISO 9001 c’est « aptitude d’un produit à satisfaire les besoins du client »)
  2. Libre Office vs. Open Office, Budgie vs. Gnome Shell, Owncloud vs. Nextcloud, Krita vs. Gimp, TeXstudio vs. TeXmaker…

Mais, en fait, l’objectif n’est pas nécessairement de faire mieux, simplement de résoudre des problèmes posés par l’architecture actuelle, qu’on pourra contourner pendant encore un certain temps, mais pas indéfiniment. Et plus on attend, plus le boulot va être difficile parce qu’on accumule le code et les solutions de contournement/spaghetti dans le code.

Comme je l’ai souvent dit ici, le principe de la retouche locale pourrait être amélioré en choisissant l’approche classique « sélection d’une zone » puis « application d’un ou plusieurs modules sur la zone » et non l’inverse. Je sais qu’on peut rappeler les masques dessinés, etc. mais ce n’est pas du tout intuitif…

Inkscape est un très bon exemple de fork réussi…

Après, il ne faut pas se leurrer, un tel fork nécessiterait un énorme boulot avec un noyau dur de développeurs ouverts aux idées et critiques des utilisateurs. Et capables de gérer l’aspect multiplateforme (Windows, Mac, Linux, par ordre de nombre d’utilisateurs)…

Bon courage à toi si tu te lances…

Un modèle économique (j’en vois qui s’étranglent au fond de la salle) pourrait être de maintenir le logiciel libre et gratuit et de faire payer les profils des appareils nouveaux pendant une certaine durée de temps. Par exemple, le profil du dernier Fuji moyen format serait payant pendant 3 ou 5 ans, puis deviendrait gratuit.

Il pourrait y avoir des modules payants, etc.

Les développeurs ne vivent pas tous d’eau fraîche (pour l’amour, c’est râpé depuis longtemps) et un logiciel de retouche photo RAW n’est pas un logiciel comme les autres : il nécessite du matériel et des mises à jours constantes, sinon il devient obsolète en quelques mois…

@Aurélien, comme Pascal je suis d’accord avec ton raisonnement.
Avoir une « cassure » de compatibilité me parait aussi inévitable pour que darktable puisse continuer à progresser, à la vue de tes explications.
S’il est possible d’éviter le fork en ayant une option « next-gen » qui aurait ses propres modules, avec un ordre différent que la version ancienne, cette solution me parait intéressante.
Si tu penses que les changements à faire sont trop profonds pour cela, alors un fork est nécessaire. Sur ce point, je me fie entièrement à toi, mes connaissances en retouche photo et dans l’architecture du code de darktable sont encore limitées.
Dans tous les cas, je pourrai t’aider pour du test/debuggage, mais si je ne pourrai pas y consacrer un trop gros volume horaire. Je crois qu’il faut que tu évalues si tu as l’énergie et le temps pour faire ça (tout en ayant en tête qu’il faut aussi prendre du temps pour tes autres loisirs, tes amis, dormir, faire des photos, tes études etc), mais je me doute que tu y as déjà réfléchi.
Vu l’ampleur du travail à faire dans les 2 cas, peut être faire un appel aux dons ?

Pour résumer/clarifier ma position : je ne me sens pas compétent pour savoir s’il faut forker ou non. Par contre, je te sens compétent pour le décider, et je compte bien t’encourager pour le gros boulot qui s’annonce ! :wink:

Je suis aussi prêt à faire des tests comme je l’ai toujours fait depuis que je compile darktable, sauf qu’avant je ne remontais pas mes observations car devait être en anglais.

De mon côté, je très frileux a l’idée d’un fork.

Déjà, parce que je pense qu’il ne faut pas sous-estimer l’importance de la compatibilité entre versions. On parle d’un éditeur non-destructif : avec darktable, on ne sauvegarde pas le résultat de la retouche, mais le moyen d’y arriver. Donc, sans un darktable qui sache le lire et l’appliquer à un raw, un .xmp n’est pas exploitable. Si darktable fait des changements incompatibles, ce sont les centaines d’images traitées avec les vielles versions qui sont à mettre à la poubelle. Alors OK, je pourrais toujours installer un vieux darktable pour reprendre ces traitements, mais combien de temps le vieux darktable sera-t-il installable et utilisable ? Vu la quantité de dépendances de darktable, il ne faut pas s’attendre à ce que les versions d’aujourd’hui continuent à marcher dans plusieurs années sans effort de maintenance.

Python 3 a été cité dans ce thread, et j’ai l’impression que c’était cité comme modèle de ce qu’il faut faire. Python 3 est sorti en 2008, et dix ans plus tard on n’est toujours pas sorti du merdier que le cassage de compatibilité a entraîné. Je ne connais pas grand monde qui ait subi cette transition et qui considère ça comme un exemple à donner.

Après, forker au sens « écrire du nouveau code », c’est la partie la plus facile. Non pas que ce soit facile d’écrire du nouveau code, mais ça reste la partie émergée de l’iceberg comparé à la maintenance de ce nouveau code à long terme (n’importe quelle étude sur la répartition des coûts dans le développement d’un logiciel vous confirmera que le développement initial est petit devant tout le reste), la construction d’une nouvelle communauté de développeurs, l’animation d’une communauté d’utilisateurs, …

C’est facile de trouver quelques exemples de forks qui ont réussi et plus difficile de lister les forks qui ont échoué pour une raison très simple : les forks qui ont raté, vous n’en avez jamais entendu parler. Mais moi, les fois où j’ai vu un développeur se plaindre du développement d’un soft et commencer son fork, ça n’a en général pas donné des LibreOffice et des NextCloud, mais plutôt un développeur qui part dans son coin, qui fait un truc pas mal pendant quelques mois puis qui jette l’éponge parce qu’il se démotive.

Par exemple, dans la liste de ce que le « darktable next generation » devrait faire, PhotoFlow coche la plupart des cases : http://aferrero2707.github.io/PhotoFlow/. Sur le papier, ça a l’air à peu près parfait. Mais si on regarde les indicateurs de bonne santé de la communauté : https://github.com/aferrero2707/PhotoFlow/graphs/contributors Vs https://github.com/darktable-org/darktable/graphs/contributors par exemple, ça ne donne pas envie de miser sur PhotoFlow pour l’avenir.