Ré-écrire tous les fichiers XMP [RÉSOLU]

Bonjour à tous,

Je souhaiterais pouvoir ré-écrire tous les fichiers xmp à partir de la BdD. J’ai parcouru pas mal de ressources, mais je n’ai rien trouvé qui puisse faire cela. Avez vous une idée ?

Merci d’avance !

Je pense qu’il faudrait que tu fasses une requête Sql avec library.db.

Pourquoi? Normalement les XMP sont synchro avec la BD? Est-ce suite à une mauvaise manip?

Non, pas une mauvaise manip, une manip volontaire.

J’explique. Mes mots clés qui ont été créés avec DT, mais aussi auparavant avec Digikam, étaient écrits avec une majuscule. Malheureusement, je ne sais trop pourquoi, maintenant les mots clés importés de DK arrivent sans majuscule. Ce qui me crée régulièrement des doublons. Doublons qui sont indém..dables, car le filtre de collection ne tient pas compte de la casse. J’ai donc pris la décision de faire l’update dans la BdD. l’opération s’est passée sans problème et je suis très satisfait. Mais je n’ai pas réalisé que la syncho avec les XMP ne se ferai pas automatiquement. Au quotidien, ce n’est pas gênant, car la BdD est prioritaire. Ce qui m’inquiète, c’est le risque de devoir utiliser les XMP pour régénérer une BdD, et dans ce cas, de réimporter les anciennes versions des mots clé. >:frowning:

J’ai fait le tour des outils, des scripts lua, des options de lancement de darktable et de darktable-cli : rien.
J’ai fait un essai en supprimant les XMP d’un petit dossier (23 photos). Pour qu’ils soient recréés, il faut ouvrir chaque fichier en table noire. J’ai 23600 fichiers importés. je ne me vois vraiment pas faire ça.

Une idée ?

Tu veux refaire la base de données avec les .xmp ?

Non, ça c’est trivial, il suffit de réimporter. Je veux faire l’inverse ! mettre à jour les XMP à partir de la base de donnée.

Tu as une option de fonctionnement « vérifie les fichier xmp modifiées au démarrage ». Est-ce que cela fonctionnerait dans ton cas?

Je viens d’essayer de voir comment faire des commandes Sql pour exporter les données de library.db mais Db Browser For SSLite plante sur certains champs.

Oui, je connais, mais ça ne fonctionne pas nativement ; faut un peu bidouiller.

La solution c’est de faire au préalable de faire un ‹ touch › des fichiers XMP. En suite d’ouvrir DT. La fenêtre ‹ versions modifiées des fichiers trouvée › s’affiche. Ensuite c’est facile : cocher ‹ tout ›, et cliquer sur le bouton ‹ écraser les fichiers XMP sélectionnés ›. Roulez jeunesse !!!

J’avais pensé à cette option tout à l’heure, mais pas au touch… Merci Pascal !

Voilà, c’est fait. J’ai fait un petit script pour automatiser tout le processus. Le voici si ça peut aider quelqu’un

[code]#!/bin/bash

sqlite3 -separator ‹ / › ~jpv/.config/darktable/library.db
‹ select folder, filename from images, film_rolls where images.film_id = film_rolls.id ; › |
while read f
do
fichier=« ${f}.xmp »
# echo « fichier=‹ $fichier › »
if [ -f « ${fichier} » ] ; then
touch « ${fichier} »
else
echo " $0 : Fichier ‹ ${fichier} › introuvable."
fi
done
echo « fait »[/code]
Bonne soirée !

Si tous tes .xmp sont dans un même répertoire:

$ find /path/to/some/dir -name "*.xmp" -exec touch {} \;

Bravo Jean-Pierre. :shy:

Ben non, ce serait trop facile ! Ils sont dans plein de répertoires différents. En plus tous les fichiers n’étaient pas à traiter. J’ai plein de fichiers XMP qui viennent de Digikam qui n’ont pas encore été importés.

Envoyé de mon Nexus 10 en utilisant Tapatalk

Bonjour Jean-Pierre,

Je suis utilisateur de Darktable, et j’ai exactement le même besoin que toi à savoir réécrire tous mes XMP car je souhaite m’assurer qu’ils reflètent la nouvea hierarchie de mot clés que j’ai redéfini (et je ne vois pas comment faire autrement qu’en réécrivant les XMP)

Je suis sous window avec Darktable Version 4.2.0 et je suis pas autant versé dans l’informatique :slight_smile:
j’aurais voulu savoir:
1- est ce que le script que tu évoquait fonctionnerait pour ma configuration
2- ou faut-il le coller pour l’executer :slight_smile:

Pour rappel ton script:

#!/bin/bash

sqlite3 -separator ‹ / › ~jpv/.config/darktable/library.db
‹ select folder, filename from images, film_rolls where images.film_id = film_rolls.id ; › |
while read f
do
fichier=« ${f}.xmp »
# echo « fichier=‹ $fichier › »
if [ -f « ${fichier} » ] ; then
touch « ${fichier} »
else
echo " $0 : Fichier ‹ ${fichier} › introuvable."
fi
done
echo « fait »

Bonjour Sandre,

Hélas, non, ça ne fonctionnera pas, car ce script est écrit en langage Bash. Bash est disponible uniquement sous Unix / Linux, pas sous Windows*. L’équivalent de Bash sous Windows serait le PowerShell, mais ce dernier utilise un autre langage assez différent.

Cependant, il y a une autre solution utilisable directement dans darktable : Dans le module Développement, il y a un bouton « Sauver en XMP » qui fait exactement la même chose. Il suffit de sélectionner les fichiers concernés et de cliquer sur ce bouton. En plus, les fichiers XMP seront immédiatement réécrits, pas besoin de passer par "Vérifier les fichiers XMP modifiés au démarrage ! Si tu veux traiter l’intégralité de tes photos, il suffit de réinitialiser le module Collections avant de cliquer sur le bouton (attention, ça peut durer un bon moment !)

  • Si on excepte le sous-système WSL, mais c’est une tout autre histoire !

Merci Jean-Pierre,

J’ai tout compris et bien trouver sauver en XMP. Je n’ai pas compris juste 'il suffit de réintialiser le module collections and de cliquer sur le bouton :slight_smile:

Merci
Nicolas

Je veux dire qu’en faisant cela, tu vas charger la totalité des photos connues par darktable ; toutes les photos qui sont dans la base de données.
Comme ça, en les sélectionnant toutes (avec Ctrl+a, par exemple), tu pourras refaire tous les XMP d’un seul coup, au lieu de devoir les traiter pellicule par pellicule, par exemple. Mais attention, si tu as beaucoup de photos dans ta base de données, ça peut durer « un certain temps » :wink:

Ps, Dans ta signature l’URL de ton site ne fonctionne pas.

Je viens de voir que dans les préférences des collections (le hamburger à droite du ! pour réinitialiser le filtre des collections), il y a la possibilité de jouer sur la sensibilité à la casse, par défaut « insensible ».

Est-ce que ça n’aurait pas résolu ton problème ?

Sinon, merci pour la solution par « Sauver en XMP ».

Merci JPVerrue pour toutes ces info.

ça a bien fonctionné (à ceci pret que les toutes dernières modifications de mot clé apportées à mes photos n’ont pas été prise en compte). Mais sur boulot ça couvre en grande partie le besoin !

Bien à toi,