diff --git a/README b/README
index 0623efb..e8895bf 100644
--- a/README
+++ b/README
@@ -2,7 +2,7 @@ FITS/XISF image viewer with multithreaded image loading
To get all dependencies install these packages
- sudo apt install qt6-base-dev libqt6opengl6-dev libraw-dev libexif-dev libcfitsio-dev libgsl-dev wcslib-dev cmake
+ sudo apt install qt6-base-dev qt6-declarative-dev libqt6opengl6-dev libraw-dev libexif-dev libcfitsio-dev libgsl-dev wcslib-dev cmake
on OpenSUSE
diff --git a/about/help_fr b/about/help_fr
index b35e412..8913b39 100644
--- a/about/help_fr
+++ b/about/help_fr
@@ -101,6 +101,114 @@ En appuyant sur la touche Enter ou en cliquant sur le bouton Filtre, les

Cet exemple filtre les fichiers où : "Bias" figure dans le nom de fichier, la propriété OBJECT est "M_42" (où le trait de soulignement peut être n'importe quel caractère) et la propriété DATE commence par "2022".
+
+Traitement par lot
+
+Ce module permet d'écrire des scripts en JavaScript qui traitent des fichiers images. La fenêtre de traitement par lots se compose de trois parties principales. En haut se trouve la liste des fichiers et répertoires d'entrée.
+Vous pouvez ajouter des répertoires ou des fichiers individuels à cette liste. Les répertoires sont analysés de manière récursive pour trouver tous les fichiers, même les fichiers non image. Cette liste de fichiers est ensuite transmise au script dans un tableau nommé files.
+Dans le script, vous pouvez ensuite parcourir les fichiers comme ici.
+for(file in files)
+{
+ if(file.suffix() == "fits")
+ {
+ core.log(file.fileName());
+ file.convert(file.relativeFilePath(), "XISF");
+ }
+}
+
+
+core
+Il existe un objet global appelé core qui possède ces méthodes.
+
+- log(message) afficher le message dans la fenêtre du journal.
+- mark(file) marquer le fichier de la même manière que dans l'interface graphique. Prend un objet de type File comme argument.
+- unmark(file) décoche le fichier de la même manière que dans l'interface graphique. Prend un objet de type File comme argument.
+- isMarked(file) vérifie si le fichier a été marqué. Prend un objet de type File comme argument.
+- setMaxThread(maxthread) définir le nombre maximal de threads simultanés lors de l'exécution d'une tâche asynchrone.
+- sync() attendre que toutes les tâches asynchrones soient terminées.
+- getString(label = "", text = "") affiche la boîte de dialogue pour obtenir un text de l'utilisateur. La valeur text passée dans le premier argument est utilisée comme label de description. Le texte du deuxième argument est la valeur par défaut dans la zone de texte.
+ Les deux paramètres sont facultatifs, donc l'appel à getString() est valide. Lorsque vous appuyez sur Annuler, il renvoie Undefined
+- getInt(label = "", value = 0) affiche une boîte de dialogue avec une zone de saisie pour récupérer une valeur entière. Le texte passé dans le premier argument est utilisé comme label de description.
+Le deuxième paramètre est la valeur par défaut dans la zone de saisie. Les deux paramètres sont facultatifs. Lorsque vous appuyez sur Annuler, il renvoie Undefined.
+- getFloat(label = "", value = 0, decimals = 3) affiche une boîte de dialogue avec une zone de saisie pour récupérer une valeur décimale. Le texte passé dans le premier argument est utilisé comme label de description.
+Le deuxième paramètre est la valeur par défaut dans la zone de saisie. Les trois paramètres sont facultatifs. Lorsque vous appuyez sur Annuler, il renvoie Undefined.
+- getItem(items) affiche une boîte de dialogue de sélection qui permet de sélectionner un élément dans un tableau d'éléments. Lorsque vous appuyez sur Annuler, il renvoie Undefined.
+
+
+File
+Dans le tableau files, il y a des instances d'objets de type File qui ont ces méthodes.
+
+- fileName() renvoie le nom du fichier, à l'exclusion du chemin.
+- absoluteFilePath() renvoie un chemin absolu incluant le nom du fichier.
+- absolutePath() renvoie un chemin absolu sans le nom du fichier
+- relativeFilePath() renvoie le chemin relatif incluant le nom du fichier par rapport au répertoire qui était dans la liste des répertoires à analyser. Par exemple, vous ajoutez C:/images comme répertoire d'entrée. Dans ce répertoire, il y a
+le fichier C:/images/lights/red/M42_001.fits, alors cette méthode renverra lights/red/M42_001.fits
+- relativePath() renvoie le même chemin que la méthode précédente, mais sans le nom de fichier. lights/red
+- baseName() renvoie le nom du fichier jusqu'au premier point. Par exemple, pour some.file.name.fits, il renverra some
+- completeBaseName() renvoie le nom du fichier jusqu'au dernier point. Par exemple, pour some.file.name.fits, il renverra some.file.name
+- suffix() renvoie la chaîne après le dernier point du nom de fichier. Par exemple fits
+- size() renvoie la taille du fichier en octets.
+- fitsKeywords() renvoie un tableau de chaînes avec chaque mot-clé présent dans l'en-tête. SIMPLE,BITPIX,NAXIS,NAXIS1,NAXIS2,EXTEND,COMMENT
+- fitsValue(key) renvoie la valeur pour le mot-clé. En cas d'occurrences multiples, la dernière est renvoyée.
+- fitsValues(key) renvoie un tableau de valeurs pour le mot clé.
+- fitsRecords() renvoie un tableau d'objets avec des propriétés key, value et comment
+- modifyFITSRecords(FITSRecordModify) modifier l'en-tête FITS en ajoutant, supprimant ou mettant à jour l'enregistrement FITS. Renvoie true en cas de succès. Reportez-vous à FITSRecordModify
+- isMarked() renvoie true si le fichier est marqué.
+- copy(newpath) Copie le fichier vers un nouvel emplacement. Il renvoie une instance du nouvel objet File qui représente ce fichier copié. Ce chemin peut être relatif ou absolu. Dans le cas où le paramètre newpath est un chemin relatif, le "Répertoire de sortie" des fenêtres de l'interface graphique est utilisé comme répertoire de base. Le paramètre newpath peut être un chemin absolu. Le fichier est ensuite copié vers ce chemin. En cas d'échec de la copie, il renvoie null.
+- move(newpath) déplacer le fichier vers un nouvel emplacement. Il renvoie false si le déplacement a échoué. Cela peut se produire si la destination n'est pas accessible en écriture mais aussi si le fichier de destination existe déjà. Cette fonction n'écrase pas le fichier existant.
+Ce chemin peut être relatif ou absolu. Dans le cas où le paramètre newpath est un chemin relatif, le "répertoire de sortie" des fenêtres de l'interface graphique est utilisé comme répertoire de base. Le paramètre newpath peut être un chemin absolu.
+Le fichier est ensuite déplacé vers ce chemin.
+- convert(outpath, format, params) Convertir un fichier image à partir de n'importe quel format que le programme peut ouvrir en FITS, XISF, JPEG, PNG, BMP.
+Les paramètres sont : outputpath chemin où l'image convertie sera enregistrée. Il remplace automatiquement le suffixe en fonction du format. format l'un des éléments suivants : "FITS", "XISF", "JPG", "PNG" ou "BMP". params objet avec les attributs "compressionType" et "compressionLevel".
+Les valeurs valides pour compressionType sont "gzip" ou "rice" lors de la conversion en FITS. Lors de la conversion en XISF, compressionType peut être "zlib", "lz4", "lz4hc", "zstd", "zlib+sh", "lz4+sh", "lz4hc+sh", "zstd+sh".
+Il est recommandé d'utiliser les variantes de compression "+sh".
+Le format XISF accepte également les "compressionLevel" dans la plage 0-100, où zéro est la compression la plus rapide et 100 la plus lente. Si vous omettez cet attribut ou le définissez sur -1, le niveau de compression par défaut sera utilisé.
+Il renvoie une nouvelle instance de File qui pointe vers le fichier converti.
+
file.convert("converted_file.xisf", "xisf", {"compressionType": "zstd+sh", "compressionLevel": 70});
+file.convert("converted_file.fits", "fits", {"compressionType": "rice"});
+file.convert("converted_file.jpg", "png");
+
+- convertAsync(outpath, format, params) même méthode que la précédente, mais effectue la conversion dans un thread séparé de manière asynchrone et en parallèle. Avant d'appeler une méthode sur un objet renvoyé par cette méthode, vous devez appeler
+
core.sync(); pour s'assurer que la conversion est effectuée et que le fichier de destination existe.
+ let compression = {"compressionType": "zstd+sh"};
+let convertedFiles = [];
+for(file of files)
+{
+ if(file.suffix() == "fits")
+ convertedFiles.push(file.convertAsync("xisf/" + file.fileName(), "XISF", compression));
+}
+core.sync(); // ensure that files exist
+for(file of convertedFiles)// now we can iterate over the files
+{
+ core.log(file.fileName() + " " + file.size()); // let print compressed file sizes
+}
+- stats() calculer les statistiques d'images de base et les renvoyer sous forme d'objet avec des attributs "mean", "stddev", "median", "min", "max" et "mad".
+
let s = file.stats();
+core.log("Median value is " + s.median);
+
+
+FITSRecordModify
+Cette classe est utilisée pour définir l'en-tête FITS des opérations de modification dans les fichiers FITS et XISF. Elle peut supprimer, mettre à jour et ajouter des enregistrements. L'ordre des opérations est également le suivant : suppression, puis mise à jour et enfin ajout.
+Les noms des mots-clés peuvent comporter jusqu'à 8 caractères et ne peuvent contenir que des lettres majuscules, les chiffres de 0 à 9, le trait d'union et le caractère de soulignement.
+let modify = new FITSRecordModify();
+modify.updateKeyword("OBJECT", "M42");
+modify.updateKeyword("MYTILE", "PART1", "adding custom keyword so WBPP can group it");
+modify.removeKeyword("OBJECT");
+// Peu importe qu'il soit spécifié comme dernier. Cela supprimera d'abord
+// l'enregistrement OBJECT existant, puis ajoutera à nouveau OBJECT=M42
+for(file in files)
+{
+ file.modifyFITSRecords(modify);
+}
+
+
+- new FITSRecordModify() créer une nouvelle instance de l'objet.
+- removeKeyword(key); spécifier la suppression de l'enregistrement avec key comme mot-clé.
+- updateKeyword(key, value, comment = "") spécifiez la mise à jour du mot-clé existant avec la valeur et le commentaire. Le commentaire est un paramètre facultatif. Si l'enregistrement avec le mot-clé n'existe pas, il en ajoutera un nouveau.
+À moins que vous ne souhaitiez avoir plusieurs enregistrements avec le même mot-clé (par exemple HISTORY), utilisez toujours cette méthode et non addKeyword.
+- addKeyword(key, value, comment = "") spécifier l'ajout d'un nouveau mot-clé
+
+
PS: Le Kanji de icône (tenmon) signifie astronomie en japonais