Darktable es una excelente herramienta para revelar nuestras fotografías, sin embargo, pese a tener un desarrollo muy rápido, algunas cuestiones aún están por pulir: como es el caso de la gestión de nuestra colección de imágenes. Para este fin el programa utiliza una base de datos sqlite a la cual tenemos que importar las ubicaciones de nuestras imágenes y en ella se gestionan cuestiones como las etiquetas, ajustes de la imagen y un largo etc.

Un problema de los más frecuentes es que borremos totalmente las imágenes de una sesión, o que tengamos una importación de un dispositivo fallida y se nos quede una sesión vacía que no hay forma de borrar. Por ahora no existe una solución desde el programa, aunque se está trabajando en ello (sí sabes como hacerlo te invito a que colabores en el desarrollo de Darktable). Para limpiar nuestra base de datos de todas aquellas sesiones vacías tendremos que ejecutar un script desde una consola SIEMPRE CON DARKTABLE CERRADO, os dejo el script:

#!/bin/sh

DBFILE=~/.config/darktable/library.db
TMPFILE=`mktemp -t tmp.XXXXXXXXXX`
QUERY="select A.id,B.folder,A.filename from images as A join film_rolls as B on A.film_id = B.id"
sqlite3 $DBFILE "$QUERY" > $TMPFILE
cat $TMPFILE | while read result
do
ID=$(echo "$result" | cut -f1 -d"|")
FD=$(echo "$result" | cut -f2 -d"|")
FL=$(echo "$result" | cut -f3 -d"|")
if ! [ -f "$FD/$FL" ];
then
echo "removing non existent file $FD/$FL with ID = $ID"

for table in images meta_data; do
sqlite3 "$DBFILE" "delete from $table where id=$ID"
done

for table in color_labels history mask selected_images tagged_images; do
sqlite3 "$DBFILE" "delete from $table where imgid=$ID"
done

fi
done
rm $TMPFILE

# delete now-empty filmrolls
sqlite3 "$DBFILE" "DELETE FROM film_rolls WHERE (SELECT COUNT(A.id) FROM images AS A WHERE A.film_id=film_rolls.id)=0"

Ten paciencia porque si tienes muchas imágenes tardará en encontrar todas tus sesiones vacías.

La fuente de donde he conseguido este script es del mismo proyecto darktable.org