Repository: qarmin/czkawka (language: rust)

Issue:
Could you please add the language "pt_BR" to the "Czkawka" project?
Hello, qarmin.

Could you please add the language "pt_BR" so I can translate the "Czkawka" and "Szyszka" programs into my language?

I appreciate you creating, maintaining and updating "Czkawka" and "Szyszka".

You can learn a little more about my volunteer work in GNU/Linux on these pages:

https://gitlab.com/marcelocripe
https://github.com/marcelocripe/
https://archive.org/details/@marcelocripe
https://archive.org/details/@antixlinuxemportugues
https://www.antixforum.com/forums/topic/associacao-mutirao-cca-jd-fontalis/
https://www.antixforum.com/forums/topic/antix-and-antix-application-program-translation-platforms/
https://www.antixforum.com/forums/topic/canal-do-youtube-antix-linux-em-portugues/
https://www.youtube.com/@antixlinuxemportugues

And because of your project, I now have the account at https://crowdin.com/profile/marcelocripe.

I have accounts on other translation platforms that I didn't mention above.

marcelocripe

(Original text in Brazilian Portuguese language)

- - - - -


Olá, qarmin.

Por favor, você poderia adicionar o idioma "pt_BR" para eu poder traduzir os programas "Czkawka"e "Szyszka" para o meu idioma?

Eu agradeço por você criar, manter e atualizar o "Czkawka" e o "Szyszka".

Você pode conhecer um pouco mais do meu trabalho voluntário no GNU/Linux nestas páginas:

https://gitlab.com/marcelocripe
https://github.com/marcelocripe/
https://archive.org/details/@marcelocripe
https://archive.org/details/@antixlinuxemportugues
https://www.antixforum.com/forums/topic/associacao-mutirao-cca-jd-fontalis/
https://www.antixforum.com/forums/topic/antix-and-antix-application-program-translation-platforms/
https://www.antixforum.com/forums/topic/canal-do-youtube-antix-linux-em-portugues/
https://www.youtube.com/@antixlinuxemportugues

E devido ao seu projeto, agora eu tenho a conta no https://crowdin.com/profile/marcelocripe.

Eu tenho conta em outras plataformas de tradução que eu não citei acima.

marcelocripe

(Texto original em idioma Português do Brasil)


Discussion / hints:

Fix patch:
diff --git a/Cargo.lock b/Cargo.lock
index 4ad3752fe..94ed42abf 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -4,9 +4,9 @@ version = 3
 
 [[package]]
 name = "ab_glyph"
-version = "0.2.28"
+version = "0.2.29"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "79faae4620f45232f599d9bc7b290f88247a0834162c4495ab2f02d60004adfb"
+checksum = "ec3672c180e71eeaaac3a541fbbc5f5ad4def8b747c595ad30d674e43049f7b0"
 dependencies = [
  "ab_glyph_rasterizer",
  "owned_ttf_parser",
@@ -233,9 +233,9 @@ dependencies = [
 
 [[package]]
 name = "ashpd"
-version = "0.9.1"
+version = "0.9.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bfe7e0dd0ac5a401dc116ed9f9119cf9decc625600474cb41f0fc0a0050abc9a"
+checksum = "4d43c03d9e36dd40cab48435be0b09646da362c278223ca535493877b2c1dee9"
 dependencies = [
  "async-fs",
  "async-net",
@@ -503,9 +503,9 @@ dependencies = [
 
 [[package]]
 name = "bindgen"
-version = "0.69.4"
+version = "0.69.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a00dc851838a2120612785d195287475a3ac45514741da670b735818822129a0"
+checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088"
 dependencies = [
  "bitflags 2.6.0",
  "cexpr",
@@ -544,9 +544,9 @@ checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de"
 
 [[package]]
 name = "bitreader"
-version = "0.3.8"
+version = "0.3.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bdd859c9d97f7c468252795b35aeccc412bdbb1e90ee6969c4fa6328272eaeff"
+checksum = "b1123451be0f8ada15415fbb4e0fe50775be531f61a432c18168a4f96e470ce1"
 dependencies = [
  "cfg-if",
 ]
@@ -670,9 +670,9 @@ dependencies = [
 
 [[package]]
 name = "bytemuck_derive"
-version = "1.7.1"
+version = "1.8.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0cc8b54b395f2fcfbb3d90c47b01c7f444d94d05bdeb775811dec868ac3bbc26"
+checksum = "bcfcc3cd946cb52f0bbfdbbcfa2f4e24f75ebb6c0e1002f7c25904fada18b9ec"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -791,9 +791,9 @@ dependencies = [
 
 [[package]]
 name = "cc"
-version = "1.1.24"
+version = "1.1.28"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "812acba72f0a070b003d3697490d2b55b837230ae7c6c6497f05cc2ddbb8d938"
+checksum = "2e80e3b6a3ab07840e1cae9b0666a63970dc28e8ed5ffbcdacbfc760c281bfc1"
 dependencies = [
  "jobserver",
  "libc",
@@ -904,9 +904,9 @@ dependencies = [
 
 [[package]]
 name = "clap"
-version = "4.5.19"
+version = "4.5.20"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7be5744db7978a28d9df86a214130d106a89ce49644cbc4e3f0c22c3fba30615"
+checksum = "b97f376d85a664d5837dbae44bf546e6477a679ff6610010f17276f686d867e8"
 dependencies = [
  "clap_builder",
  "clap_derive",
@@ -914,9 +914,9 @@ dependencies = [
 
 [[package]]
 name = "clap_builder"
-version = "4.5.19"
+version = "4.5.20"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a5fbc17d3ef8278f55b282b2a2e75ae6f6c7d4bb70ed3d0382375104bfafdb4b"
+checksum = "19bc80abd44e4bed93ca373a0704ccbd1b710dc5749406201bb018272808dc54"
 dependencies = [
  "anstream",
  "anstyle",
@@ -1692,9 +1692,9 @@ dependencies = [
 
 [[package]]
 name = "dwrote"
-version = "0.11.1"
+version = "0.11.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2da3498378ed373237bdef1eddcc64e7be2d3ba4841f4c22a998e81cadeea83c"
+checksum = "70182709525a3632b2ba96b6569225467b18ecb4a77f46d255f713a6bebf05fd"
 dependencies = [
  "lazy_static",
  "libc",
@@ -2133,24 +2133,24 @@ dependencies = [
 
 [[package]]
 name = "futures-channel"
-version = "0.3.30"
+version = "0.3.31"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78"
+checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10"
 dependencies = [
  "futures-core",
 ]
 
 [[package]]
 name = "futures-core"
-version = "0.3.30"
+version = "0.3.31"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d"
+checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e"
 
 [[package]]
 name = "futures-executor"
-version = "0.3.30"
+version = "0.3.31"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d"
+checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f"
 dependencies = [
  "futures-core",
  "futures-task",
@@ -2159,9 +2159,9 @@ dependencies = [
 
 [[package]]
 name = "futures-io"
-version = "0.3.30"
+version = "0.3.31"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1"
+checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6"
 
 [[package]]
 name = "futures-lite"
@@ -2178,9 +2178,9 @@ dependencies = [
 
 [[package]]
 name = "futures-macro"
-version = "0.3.30"
+version = "0.3.31"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
+checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -2189,21 +2189,21 @@ dependencies = [
 
 [[package]]
 name = "futures-sink"
-version = "0.3.30"
+version = "0.3.31"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5"
+checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7"
 
 [[package]]
 name = "futures-task"
-version = "0.3.30"
+version = "0.3.31"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004"
+checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988"
 
 [[package]]
 name = "futures-util"
-version = "0.3.30"
+version = "0.3.31"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48"
+checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81"
 dependencies = [
  "futures-core",
  "futures-io",
@@ -3916,9 +3916,9 @@ dependencies = [
 
 [[package]]
 name = "lru"
-version = "0.12.4"
+version = "0.12.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "37ee39891760e7d94734f6f63fedc29a2e4a152f836120753a72503f09fcf904"
+checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38"
 
 [[package]]
 name = "lyon_algorithms"
@@ -4536,9 +4536,9 @@ dependencies = [
 
 [[package]]
 name = "once_cell"
-version = "1.20.1"
+version = "1.20.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "82881c4be219ab5faaf2ad5e5e5ecdff8c66bd7402ca3160975c93b24961afd1"
+checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775"
 dependencies = [
  "critical-section",
  "portable-atomic",
@@ -4592,11 +4592,11 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
 
 [[package]]
 name = "owned_ttf_parser"
-version = "0.24.0"
+version = "0.25.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "490d3a563d3122bf7c911a59b0add9389e5ec0f5f0c3ac6b91ff235a0e6a7f90"
+checksum = "22ec719bbf3b2a81c109a4e20b1f129b5566b7dce654bc3872f6a05abf82b2c4"
 dependencies = [
- "ttf-parser 0.24.1",
+ "ttf-parser 0.25.0",
 ]
 
 [[package]]
@@ -4727,18 +4727,18 @@ checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315"
 
 [[package]]
 name = "pin-project"
-version = "1.1.5"
+version = "1.1.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3"
+checksum = "baf123a161dde1e524adf36f90bc5d8d3462824a9c43553ad07a8183161189ec"
 dependencies = [
  "pin-project-internal",
 ]
 
 [[package]]
 name = "pin-project-internal"
-version = "1.1.5"
+version = "1.1.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965"
+checksum = "a4502d8515ca9f32f1fb543d987f63d95a14934883db45bdb48060b6b69257f8"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -4892,9 +4892,9 @@ dependencies = [
 
 [[package]]
 name = "proc-macro2"
-version = "1.0.86"
+version = "1.0.87"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77"
+checksum = "b3e4daa0dcf6feba26f985457cdf104d4b4256fc5a09547140f3631bb076b19a"
 dependencies = [
  "unicode-ident",
 ]
@@ -6488,9 +6488,9 @@ checksum = "2c591d83f69777866b9126b24c6dd9a18351f177e49d625920d19f989fd31cf8"
 
 [[package]]
 name = "ttf-parser"
-version = "0.24.1"
+version = "0.25.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5be21190ff5d38e8b4a2d3b6a3ae57f612cc39c96e83cedeaf7abc338a8bac4a"
+checksum = "5902c5d130972a0000f60860bfbf46f7ca3db5391eddfedd1b8728bd9dc96c0e"
 
 [[package]]
 name = "tuple"
diff --git a/czkawka_core/Cargo.toml b/czkawka_core/Cargo.toml
index e5ca18007..2706b8162 100644
--- a/czkawka_core/Cargo.toml
+++ b/czkawka_core/Cargo.toml
@@ -60,6 +60,8 @@ rust-embed = { version = "8.5", features = ["debug-embed"] }
 once_cell = "1.20"
 
 # Raw image files
+#rawler = "0.6"
+#imagepipe = { path = "/home/rafal/test/imagepipe" }
 rawloader = "0.37"
 imagepipe = "0.5"
 libraw-rs = { version = "0.0.4", optional = true }
diff --git a/czkawka_core/i18n/pt-BR/czkawka_core.ftl b/czkawka_core/i18n/pt-BR/czkawka_core.ftl
new file mode 100644
index 000000000..53b34ffb1
--- /dev/null
+++ b/czkawka_core/i18n/pt-BR/czkawka_core.ftl
@@ -0,0 +1,29 @@
+# Core
+core_similarity_original = Original
+core_similarity_very_high = Muito alto
+core_similarity_high = alta
+core_similarity_medium = Média
+core_similarity_small = Pequeno
+core_similarity_very_small = Muito Pequeno
+core_similarity_minimal = Mínimo
+core_cannot_open_dir = Não é possível abrir o dir { $dir }, razão { $reason }
+core_cannot_read_entry_dir = Não é possível ler a entrada no diretório { $dir }, razão { $reason }
+core_cannot_read_metadata_dir = Não é possível ler os metadados no diretório { $dir }, razão { $reason }
+core_file_not_utf8_name = O arquivo { $name } não possui um nome UTF-8 válido (alguns caracteres não podem ser exibidos)
+core_file_modified_before_epoch = O arquivo { $name } parece ser modificado antes do Epoch Unix
+core_folder_modified_before_epoch = Pasta { $name } parece ser modificada antes do Epoch Unix
+core_file_no_modification_date = Não é possível obter a data de modificação do arquivo { $name }, motivo { $reason }
+core_folder_no_modification_date = Não é possível obter a data de modificação da pasta { $name }, motivo { $reason }
+core_missing_no_chosen_included_directory = Pelo menos um diretório deve ser fornecido
+core_directory_wildcard_no_supported = Directorias: Caracteres curinga no caminho não são suportados, ignorando { $path }
+core_directory_must_exists = Diretórios: Caminho da pasta fornecida deve existir, ignorando { $path }
+core_directory_must_be_directory = Directorias: Caminho fornecido deve apontar para o diretório, ignorando { $path }
+core_included_directory_zero_valid_directories = ERRO do Diretório incluído: Não foi encontrado nenhum caminho correto que é necessário incluir
+core_excluded_directory_pointless_slash = Directorias: Excluir / não faz sentido, porque significa que nenhum arquivo será escaneado
+core_directory_overlap = Diretórios: Todos os diretórios para pesquisar sobreposições com diretórios excluídos
+core_directory_unable_to_get_device_id = Directorias: Não foi possível obter o dispositivo de ajuda da pasta { $path }
+core_ffmpeg_not_found = Instalação adequada do FFmpeg não encontrada
+core_ffmpeg_not_found_windows = Certifique-se de que o ffmpeg.exe e ffprobe.exe estão disponíveis no PATH ou são colocados diretamente na mesma pasta onde o aplicativo é executável
+core_ffmpeg_missing_in_snap = Vídeos similares não funcionam atualmente com o snap, se você quiser ajudar a olhar - { $url }
+core_saving_to_cache = Salvo no arquivo { $number } entradas de cache
+core_loading_from_cache = Carregado do cache { $number } entradas
diff --git a/czkawka_core/src/bad_extensions.rs b/czkawka_core/src/bad_extensions.rs
index cbef33aac..307825329 100644
--- a/czkawka_core/src/bad_extensions.rs
+++ b/czkawka_core/src/bad_extensions.rs
@@ -73,10 +73,14 @@ const WORKAROUNDS: &[(&str, &str)] = &[
     // Games specific extensions - cannot be used here common extensions like zip
     ("gz", "h3m"),     // Heroes 3
     ("zip", "hashdb"), // Gog
-    ("zip", "c2"),     // King of the Dark Age
-    ("bmp", "c2"),     // King of the Dark Age
-    ("avi", "c2"),     // King of the Dark Age
-    ("exe", "c2"),     // King of the Dark Age
+    ("c2", "zip"),     // King of the Dark Age
+    ("c2", "bmp"),     // King of the Dark Age
+    ("c2", "avi"),     // King of the Dark Age
+    ("c2", "exe"),     // King of the Dark Age
+    // Raw images
+    ("tif", "nef"),
+    ("tif", "dng"),
+    ("tif", "arw"),
     // Other
     ("der", "keystore"),  // Godot/Android keystore
     ("exe", "pyd"),       // Python/Mingw
diff --git a/czkawka_core/src/common_traits.rs b/czkawka_core/src/common_traits.rs
index fccc6dde8..85afd7f0a 100644
--- a/czkawka_core/src/common_traits.rs
+++ b/czkawka_core/src/common_traits.rs
@@ -61,10 +61,13 @@ pub trait PrintResults {
         Ok(())
     }
 
-    fn save_all_in_one(&self, file_name: &str) -> std::io::Result<()> {
-        self.save_results_to_file_as_json(&format!("{file_name}_pretty.json"), true)?;
-        self.save_results_to_file_as_json(&format!("{file_name}_compact.json"), false)?;
-        self.print_results_to_file(&format!("{file_name}.txt"))?;
+    fn save_all_in_one(&self, folder: &str, base_file_name: &str) -> std::io::Result<()> {
+        let pretty_name = format!("{folder}/{base_file_name}_pretty.json");
+        self.save_results_to_file_as_json(&pretty_name, true)?;
+        let compact_name = format!("{folder}/{base_file_name}_compact.json");
+        self.save_results_to_file_as_json(&compact_name, false)?;
+        let txt_name = format!("{folder}/{base_file_name}.txt");
+        self.print_results_to_file(&txt_name)?;
         Ok(())
     }
 }
diff --git a/czkawka_gui/i18n/ar/czkawka_gui.ftl b/czkawka_gui/i18n/ar/czkawka_gui.ftl
index 89646183b..61756a99f 100644
--- a/czkawka_gui/i18n/ar/czkawka_gui.ftl
+++ b/czkawka_gui/i18n/ar/czkawka_gui.ftl
@@ -18,6 +18,11 @@ music_checking_by_tags = الوسوم
 music_checking_by_content = محتوى
 same_music_seconds_label = الحد الأدنى من مدة التجزئة الثانية
 same_music_similarity_label = الفرق الأقصى
+music_compare_only_in_title_group = قارن فقط في العنوان
+music_compare_only_in_title_group_tooltip =
+    When enabled, files are grouped by title and then compared to each other.
+    
+    With 10000 files, instead almost 100 million comparisons usually there will be around 20000 comparisons.
 same_music_tooltip =
     يمكن تكوين البحث عن ملفات موسيقية مشابهة بواسطة محتواها عن طريق الإعداد:
     
@@ -288,6 +293,13 @@ header_about_button_tooltip = فتح مربع الحوار مع معلومات 
 
 settings_number_of_threads = عدد المواضيع المستخدمة
 settings_number_of_threads_tooltip = عدد المواضيع المستخدمة، 0 يعني أن جميع المواضيع المتاحة سيتم استخدامها.
+settings_use_rust_preview = استخدام المكتبات الخارجية بدلاً من gtk لتحميل المعاينات
+settings_use_rust_preview_tooltip =
+    وفي بعض الأحيان سيكون استخدام معاينات gtk أسرع ويدعم صيغا أكثر، ولكن في بعض الأحيان قد يكون الأمر على العكس تماما.
+    
+    إذا كان لديك مشاكل في تحميل المعاينات، فيمكنك محاولة تغيير هذا الإعداد.
+    
+    على أنظمة غير لينوكس، يوصى باستخدام هذا الخيار، لأن gtk-pixbuf غير متوفر دائمًا هناك لذلك فإن تعطيل هذا الخيار لن يقوم بتحميل المعاينات لبعض الصور.
 settings_label_restart = تحتاج إلى إعادة تشغيل التطبيق لتطبيق الإعدادات!
 settings_ignore_other_filesystems = تجاهل نظم الملفات الأخرى (Linux)
 settings_ignore_other_filesystems_tooltip =
diff --git a/czkawka_gui/i18n/bg/czkawka_gui.ftl b/czkawka_gui/i18n/bg/czkawka_gui.ftl
index 23a439fa2..e0e6932ed 100644
--- a/czkawka_gui/i18n/bg/czkawka_gui.ftl
+++ b/czkawka_gui/i18n/bg/czkawka_gui.ftl
@@ -18,6 +18,11 @@ music_checking_by_tags = Етикети
 music_checking_by_content = Съдържание
 same_music_seconds_label = Минимална продължителност на фрагмента в секунди
 same_music_similarity_label = Максимална разлика
+music_compare_only_in_title_group = Compare only in title
+music_compare_only_in_title_group_tooltip =
+    When enabled, files are grouped by title and then compared to each other.
+    
+    With 10000 files, instead almost 100 million comparisons usually there will be around 20000 comparisons.
 same_music_tooltip =
     Търсенето на подобни музикални файлове по съдържание може да се конфигурира чрез настройка:
     
@@ -288,6 +293,13 @@ header_about_button_tooltip = Отваря диалогов прозорец с
 
 settings_number_of_threads = Брой използвани нишки
 settings_number_of_threads_tooltip = Брой използвани нишки, 0 означава, че ще бъдат използвани всички налични нишки.
+settings_use_rust_preview = Use external libraries instead gtk to load previews
+settings_use_rust_preview_tooltip =
+    Using gtk previews will sometimes be faster and support more formats, but sometimes this could be exactly the opposite.
+    
+    If you have problems with loading previews, you may can to try to change this setting.
+    
+    On non-linux systems, it is recommended to use this option, because gtk-pixbuf are not always available there so disabling this option will not load previews of some images.
 settings_label_restart = Трябва да рестартирате приложението, за да приложите настройките!
 settings_ignore_other_filesystems = Игнориране на други файлови системи (само за Linux)
 settings_ignore_other_filesystems_tooltip =
diff --git a/czkawka_gui/i18n/cs/czkawka_gui.ftl b/czkawka_gui/i18n/cs/czkawka_gui.ftl
index 4db41ba90..1d070ae34 100644
--- a/czkawka_gui/i18n/cs/czkawka_gui.ftl
+++ b/czkawka_gui/i18n/cs/czkawka_gui.ftl
@@ -18,6 +18,11 @@ music_checking_by_tags = Štítky
 music_checking_by_content = Obsah
 same_music_seconds_label = Minimální délka trvání druhého fragmentu
 same_music_similarity_label = Maximální rozdíl
+music_compare_only_in_title_group = Porovnat pouze v názvu
+music_compare_only_in_title_group_tooltip =
+    Pokud je povoleno, soubory jsou seskupeny podle názvu a poté vzájemně porovnávány.
+    
+    S 10000 soubory, místo toho se obvykle uskuteční téměř 100 milionů srovnání kolem 20000 srovnání.
 same_music_tooltip =
     Vyhledávání podobných hudebních souborů podle jejich obsahu může být nakonfigurováno nastavením:
     
@@ -288,6 +293,13 @@ header_about_button_tooltip = Otevře dialog s informacemi o aplikaci.
 
 settings_number_of_threads = Počet použitých vláken
 settings_number_of_threads_tooltip = Počet použitých vláken, 0 znamená, že budou použita všechna dostupná vlákna.
+settings_use_rust_preview = Místo toho použít externí knihovny gtk k načtení náhledů
+settings_use_rust_preview_tooltip =
+    Použití gtk náhledů bude někdy rychlejší a bude podporovat více formátů, ale někdy to může být pravý opak.
+    
+    Pokud máte problémy s načítáním náhledů, můžete zkusit toto nastavení změnit.
+    
+    Na jiných než linuxových systémech je doporučeno použít tuto možnost, protože gtk-pixbuf není vždy k dispozici, takže vypnutí této možnosti nebude načíst náhledy některých obrázků.
 settings_label_restart = Pro použití nastavení je třeba restartovat aplikaci!
 settings_ignore_other_filesystems = Ignorovat ostatní souborové systémy (pouze Linux)
 settings_ignore_other_filesystems_tooltip =
diff --git a/czkawka_gui/i18n/de/czkawka_gui.ftl b/czkawka_gui/i18n/de/czkawka_gui.ftl
index 65a3e5c9e..844990de1 100644
--- a/czkawka_gui/i18n/de/czkawka_gui.ftl
+++ b/czkawka_gui/i18n/de/czkawka_gui.ftl
@@ -18,6 +18,11 @@ music_checking_by_tags = Tags
 music_checking_by_content = Inhalt
 same_music_seconds_label = Minimale Dauer des Fragments, in Sekunden
 same_music_similarity_label = Maximaler Unterschied
+music_compare_only_in_title_group = Nur im Titel vergleichen
+music_compare_only_in_title_group_tooltip =
+    Wenn aktiviert, werden Dateien nach Titel gruppiert und dann miteinander verglichen.
+    
+    Mit 10000 Dateien, statt fast 100 Millionen Vergleiche wird es in der Regel rund 20000 Vergleiche geben.
 same_music_tooltip =
     Die Suche nach ähnlichen Musikdateien nach dem Inhalt kann über die Einstellung konfiguriert werden:
     
@@ -287,6 +292,13 @@ header_about_button_tooltip = Öffnet den Dialog mit Informationen über die App
 
 settings_number_of_threads = Anzahl der verwendeten Threads
 settings_number_of_threads_tooltip = Anzahl der verwendeten Threads, 0 bedeutet, dass alle verfügbaren Threads verwendet werden.
+settings_use_rust_preview = Verwenden Sie stattdessen externe Bibliotheken gtk, um Vorschaubilder zu laden
+settings_use_rust_preview_tooltip =
+    Die Verwendung von gtk-Vorschauen ist manchmal schneller und unterstützt mehr Formate, aber manchmal kann dies genau das Gegenteil sein.
+    
+    Wenn Sie Probleme mit dem Laden von Vorschauen haben, können Sie versuchen, diese Einstellung zu ändern.
+    
+    Auf Nicht-Linux-Systemen wird empfohlen, diese Option zu verwenden, da gtk-pixbuf dort nicht immer verfügbar ist, so dass die Deaktivierung dieser Option keine Vorschau einiger Bilder laden wird.
 settings_label_restart = Sie müssen die App neu starten, um die Einstellungen anzuwenden!
 settings_ignore_other_filesystems = Andere Dateisysteme ignorieren (nur Linux)
 settings_ignore_other_filesystems_tooltip =
diff --git a/czkawka_gui/i18n/el/czkawka_gui.ftl b/czkawka_gui/i18n/el/czkawka_gui.ftl
index 98a7ac36c..05cadbe48 100644
--- a/czkawka_gui/i18n/el/czkawka_gui.ftl
+++ b/czkawka_gui/i18n/el/czkawka_gui.ftl
@@ -18,6 +18,11 @@ music_checking_by_tags = Ετικέτες
 music_checking_by_content = Περιεχόμενο
 same_music_seconds_label = Ελάχιστη δεύτερη διάρκεια θραύσματος
 same_music_similarity_label = Μέγιστη διαφορά
+music_compare_only_in_title_group = Σύγκριση μόνο στον τίτλο
+music_compare_only_in_title_group_tooltip =
+    Όταν ενεργοποιηθεί, τα αρχεία ομαδοποιούνται κατά τίτλο και στη συνέχεια συγκρίνονται μεταξύ τους.
+    
+    Με 10000 αρχεία, αντ' αυτού σχεδόν 100 εκατομμύρια συγκρίσεις συνήθως θα υπάρχουν περίπου 20000 συγκρίσεις.
 same_music_tooltip =
     Η αναζήτηση παρόμοιων αρχείων μουσικής με βάση το περιεχόμενό του μπορεί να ρυθμιστεί με τη ρύθμιση:
     
@@ -288,6 +293,13 @@ header_about_button_tooltip = Άνοιγμα διαλόγου με πληροφ
 
 settings_number_of_threads = Αριθμός χρησιμοποιημένων νημάτων
 settings_number_of_threads_tooltip = Αριθμός χρησιμοποιημένων νημάτων, 0 σημαίνει ότι θα χρησιμοποιηθούν όλα τα διαθέσιμα νήματα.
+settings_use_rust_preview = Χρήση εξωτερικών βιβλιοθηκών αντ' αυτού gtk για φόρτωση προεπισκοπήσεων
+settings_use_rust_preview_tooltip =
+    Χρησιμοποιώντας gtk προεπισκοπήσεις θα είναι μερικές φορές πιο γρήγορα και να υποστηρίξει περισσότερες μορφές, αλλά μερικές φορές αυτό θα μπορούσε να είναι ακριβώς το αντίθετο.
+    
+    Αν έχετε προβλήματα με τη φόρτωση προεπισκόπησης, μπορείτε να προσπαθήσετε να αλλάξετε αυτή τη ρύθμιση.
+    
+    Σε συστήματα χωρίς linux, συνιστάται να χρησιμοποιήσετε αυτήν την επιλογή, επειδή το gtk-pixbuf δεν είναι πάντα διαθέσιμο εκεί, οπότε η απενεργοποίηση αυτής της επιλογής δεν θα φορτώσει προεπισκοπήσεις ορισμένων εικόνων.
 settings_label_restart = Πρέπει να επανεκκινήσετε την εφαρμογή για να εφαρμόσετε τις ρυθμίσεις!
 settings_ignore_other_filesystems = Αγνόηση άλλων συστημάτων αρχείων (μόνο Linux)
 settings_ignore_other_filesystems_tooltip =
diff --git a/czkawka_gui/i18n/es/czkawka_gui.ftl b/czkawka_gui/i18n/es/czkawka_gui.ftl
index 631cf61d4..383c6c126 100644
--- a/czkawka_gui/i18n/es/czkawka_gui.ftl
+++ b/czkawka_gui/i18n/es/czkawka_gui.ftl
@@ -18,27 +18,36 @@ music_checking_by_tags = Etiquetas
 music_checking_by_content = Contenido
 same_music_seconds_label = Duración mínima del segundo fragmento
 same_music_similarity_label = Diferencia máxima
+music_compare_only_in_title_group = Comparar sólo en el título
+music_compare_only_in_title_group_tooltip =
+    When enabled, files are grouped by title and then compared to each other.
+    
+    With 10000 files, instead almost 100 million comparisons usually there will be around 20000 comparisons.
 same_music_tooltip =
-    Buscando archivos de música similares por su contenido se puede configurar configurando:
+    Al buscar archivos de música, por su contenido, podemos usar las siguientes opciones:
     
     - El tiempo mínimo de fragmento después del cual los archivos de música pueden ser identificados como similares
     - La diferencia máxima entre dos fragmentos probados
     
-    La clave para los buenos resultados es encontrar combinaciones sensatas de estos parámetros, para proporcionar.
+    La clave, para lograr los mejores resultados al buscar. Es proporcionando las mejores combinaciones de estos parámetros:
     
-    Establecer el tiempo mínimo a 5 s y la diferencia máxima a 1.0, buscará fragmentos casi idénticos en los archivos.
-    Un tiempo de 20 años y una diferencia máxima de 6.0, por otro lado, funciona bien para encontrar remixes/versiones en vivo, etc.
+    - Establecer el tiempo mínimo a 5 s y la diferencia máxima a 1.0, buscará fragmentos casi idénticos en los archivos.
+    - Un tiempo de 20 años y una diferencia máxima de 6.0, por otro lado, funciona bien para encontrar remixes/versiones en vivo, etc.
     
-    Por defecto, cada archivo de música se compara entre sí y esto puede tomar mucho tiempo al probar muchos archivos, por lo que normalmente es mejor usar carpetas de referencia y especificar qué archivos deben compararse entre sí (con la misma cantidad de archivos, comparar las huellas dactilares será más rápido al menos 4x que sin carpetas de referencia).
+    Por defecto, cada archivo de música se compara entre sí y esto puede llevar mucho tiempo al probar muchos archivos, por lo que normalmente es mejor usar carpetas de referencia y especificar qué archivos deben compararse entre sí (con la misma cantidad de archivos, comparar las huellas dactilares será más rápido al menos 4x que sin carpetas de referencia).
 music_comparison_checkbox_tooltip =
     Busca archivos de música similares usando IA, que usa el aprendizaje automático para eliminar paréntesis de una frase. Por ejemplo, con esta opción activada, los archivos en cuestión se considerarán duplicados:
     
     Świędziżłób     ---     Świędziżłób (Remix Lato 2021)
 duplicate_case_sensitive_name = Sensible a mayúsculas
 duplicate_case_sensitive_name_tooltip =
-    Cuando está habilitado, agrupa registros sólo cuando tienen exactamente el mismo nombre p.ej. Żołd <-> Żołd
+    Cuando está habilitado, agrupa registros solo cuando tienen exactamente el mismo nombre. P. ej.
+    
+     Żołd ↔ Żołd
+    
+    En cambio, si deshabilitamos dicha opción, agrupará nombres sin comprobar si cada letra tiene el mismo tamaño. P. ej. 
     
-    Deshabilitar tal opción agrupará nombres sin comprobar si cada letra tiene el mismo tamaño, p. ej. żoŁD <-> Żołd
+    żoŁD ↔ Żołd
 duplicate_mode_size_name_combo_box = Tamaño y nombre
 duplicate_mode_name_combo_box = Nombre
 duplicate_mode_size_combo_box = Tamaño
@@ -68,20 +77,20 @@ image_hash_size_tooltip =
     
     32 y 64 hashes sólo encuentran imágenes muy similares, pero no deberían tener casi falsos positivos (tal vez excepto algunas imágenes con canal alfa).
 image_resize_filter_tooltip =
-    To compute hash of image, the library must first resize it.
+    Al calcular el hash de una imagen, lo primero que hace la librería es redimensionar esta.
     
-    Depend on chosen algorithm, the resulting image used to calculate hash will looks a little different.
+    Dependiendo del algoritmo que elijamos, la imagen resultante usada para calcular el hash puede ser demasiado parecida.
     
-    The fastest algorithm to use, but also the one which gives the worst results, is Nearest. It is enabled by default, because with 16x16 hash size lower quality it is not really visible.
+    El algoritmo más rápido, es también uno de los que da los peores es el de aproximación cercana o Nearest. Ya que de forma predeterminada, usa un tamaño de hash de 16x16, insuficiente para poder verse.
     
-    With 8x8 hash size it is recommended to use a different algorithm than Nearest, to have better groups of images.
+    Con el tamaño hash de 8x8 se recomienda usar un algoritmo diferente al tipo Nearest, para tener mejores grupos de imágenes.
 image_hash_alg_tooltip =
     Los usuarios pueden elegir uno de los muchos algoritmos de cálculo del hash.
     
     Cada uno tiene puntos fuertes y débiles y a veces dará mejores y a veces peores resultados para diferentes imágenes.
     
     Así que, para determinar la mejor para ti, se requiere una prueba manual.
-big_files_mode_combobox_tooltip = Permite buscar archivos más pequeños/mayores
+big_files_mode_combobox_tooltip = Permite buscar archivos de un menor/mayor tamaño
 big_files_mode_label = Archivos marcados
 big_files_mode_smallest_combo_box = El más pequeño
 big_files_mode_biggest_combo_box = El más grande
@@ -92,8 +101,8 @@ main_notebook_empty_files = Archivos vacíos
 main_notebook_temporary = Archivos temporales
 main_notebook_similar_images = Imágenes similares
 main_notebook_similar_videos = Videos similares
-main_notebook_same_music = Duplicados de música
-main_notebook_symlinks = Enlaces simbólicos inválidos
+main_notebook_same_music = Canciones duplicadas
+main_notebook_symlinks = Enlaces simbólicos rotos
 main_notebook_broken_files = Archivos rotos
 main_notebook_bad_extensions = Extensiones incorrectas
 main_tree_view_column_file_name = Nombre del archivo
@@ -115,14 +124,14 @@ main_tree_view_column_destination_path = Ruta de destino
 main_tree_view_column_type_of_error = Tipo de error
 main_tree_view_column_current_extension = Extensión actual
 main_tree_view_column_proper_extensions = Extensión adecuada
-main_label_check_method = Comprobar método
+main_label_check_method = Método de comprobación
 main_label_hash_type = Tipo de Hash
 main_label_hash_size = Tamaño hash
 main_label_size_bytes = Tamaño (bytes)
 main_label_min_size = Mínimo
 main_label_max_size = Máximo
 main_label_shown_files = Número de archivos mostrados
-main_label_resize_algorithm = Algoritmo de Redimensionar
+main_label_resize_algorithm = Algoritmo de Redimensionado
 main_label_similarity = Similitud{ "   " }
 main_check_box_broken_files_audio = Sonido
 main_check_box_broken_files_pdf = Pdf
@@ -135,8 +144,8 @@ main_label_size_bytes_tooltip = Tamaño de los archivos que se utilizarán en el
 upper_tree_view_included_folder_column_title = Carpetas a buscar
 upper_tree_view_included_reference_column_title = Carpetas de referencia
 upper_recursive_button = Recursivo
-upper_recursive_button_tooltip = Si se selecciona, busque también archivos que no se coloquen directamente bajo las carpetas seleccionadas.
-upper_manual_add_included_button = Añadir manual
+upper_recursive_button_tooltip = Si se selecciona, busca cualquier archivo, sin importar si está o no en una sub-carpeta.
+upper_manual_add_included_button = Añadir manualmente
 upper_add_included_button = Añadir
 upper_remove_included_button = Eliminar
 upper_manual_add_excluded_button = Añadir manual
@@ -145,7 +154,7 @@ upper_remove_excluded_button = Eliminar
 upper_manual_add_included_button_tooltip =
     Añade el nombre del directorio para buscar a mano.
     
-    Para agregar múltiples rutas a la vez, separalas por ;
+    Para agregar múltiples rutas a la vez, sepáralas con ;
     
     /home/roman;/home/rozkaz añadirá dos directorios /home/roman y /home/rozkaz
 upper_add_included_button_tooltip = Añadir nuevo directorio para buscar.
@@ -168,9 +177,9 @@ upper_allowed_extensions_tooltip =
     
     Ejemplo de uso ".exe, IMAGE, VIDEO, .rar, 7z" - esto significa que imágenes (e. . jpg, png), videos (ej: avi, mp4), archivos exe, rar, y 7z serán escaneados.
 upper_excluded_extensions_tooltip =
-    List of disabled files which will be ignored in scan.
+    Lista de archivos ignorados, durante el escaneo.
     
-    When using both allowed and disabled extensions, this one has higher priority, so file will not be checked.
+    Cuando desactivamos las extensiones permitidas, estas tienen mayor prioridad, haciendo que los archivos no sean comprobados.
 upper_excluded_items_tooltip =
     Los artículos excluidos deben contener * comodín y deben estar separados por comas.
     Esto es más lento que los Directorios Excluidos, así que úselo con cuidado.
@@ -288,6 +297,13 @@ header_about_button_tooltip = Abre el diálogo con información sobre la aplicac
 
 settings_number_of_threads = Número de hilos usados
 settings_number_of_threads_tooltip = Número de hilos usados, 0 significa que se utilizarán todos los hilos disponibles.
+settings_use_rust_preview = Usar librerías externas en su lugar gtk para cargar vistas previas
+settings_use_rust_preview_tooltip =
+    Using gtk previews will sometimes be faster and support more formats, but sometimes this could be exactly the opposite.
+    
+    If you have problems with loading previews, you may can to try to change this setting.
+    
+    On non-linux systems, it is recommended to use this option, because gtk-pixbuf are not always available there so disabling this option will not load previews of some images.
 settings_label_restart = ¡Necesitas reiniciar la aplicación para aplicar la configuración!
 settings_ignore_other_filesystems = Ignorar otros sistemas de ficheros (sólo Linux)
 settings_ignore_other_filesystems_tooltip =
diff --git a/czkawka_gui/i18n/fr/czkawka_gui.ftl b/czkawka_gui/i18n/fr/czkawka_gui.ftl
index 5f6178c9a..373c15b73 100644
--- a/czkawka_gui/i18n/fr/czkawka_gui.ftl
+++ b/czkawka_gui/i18n/fr/czkawka_gui.ftl
@@ -18,6 +18,11 @@ music_checking_by_tags = Tags
 music_checking_by_content = Contenu
 same_music_seconds_label = Durée minimale de seconde de fragment
 same_music_similarity_label = Différence maximale
+music_compare_only_in_title_group = Comparer seulement dans le titre
+music_compare_only_in_title_group_tooltip =
+    When enabled, files are grouped by title and then compared to each other.
+    
+    With 10000 files, instead almost 100 million comparisons usually there will be around 20000 comparisons.
 same_music_tooltip =
     La recherche de fichiers musicaux aux contenus similaires peut être configurée en définissant :
     
@@ -68,13 +73,13 @@ image_hash_size_tooltip =
     
     32 et 64 hachages ne trouvent que des images très similaires, mais devraient avoir presque pas de faux positifs (peut-être sauf certaines images avec canal alpha).
 image_resize_filter_tooltip =
-    To compute hash of image, the library must first resize it.
+    Pour calculer le hachage de l'image, la bibliothèque doit d'abord la redimensionner.
     
-    Depend on chosen algorithm, the resulting image used to calculate hash will looks a little different.
+    En fonction de l'algorithme choisi, l'image résultante utilisée pour calculer le hachage pourra sembler un peu différente.
     
-    The fastest algorithm to use, but also the one which gives the worst results, is Nearest. It is enabled by default, because with 16x16 hash size lower quality it is not really visible.
+    L'algorithme le plus rapide à utiliser, mais aussi celui qui donne les pires résultats, est PlusProche. Il est activé par défaut, car avec une taille de hachage d'une qualité inférieure à 16x16, cela ne sera que peu visible.
     
-    With 8x8 hash size it is recommended to use a different algorithm than Nearest, to have better groups of images.
+    Avec une taille de hachage de 8x8, il est recommandé d'utiliser un algorithme différent de PlusProche pour obtenir de meilleurs groupes d'images.
 image_hash_alg_tooltip =
     Les utilisateurs peuvent choisir parmi de nombreux algorithmes pour calculer le hash.
     
@@ -288,6 +293,13 @@ header_about_button_tooltip = Ouvre la boîte de dialogue contenant les informat
 
 settings_number_of_threads = Nombre de threads utilisés
 settings_number_of_threads_tooltip = Nombre de threads utilisés. « 0 » signifie que tous les threads disponibles seront utilisés.
+settings_use_rust_preview = Utiliser des bibliothèques externes à la place gtk pour charger les aperçus
+settings_use_rust_preview_tooltip =
+    Using gtk previews will sometimes be faster and support more formats, but sometimes this could be exactly the opposite.
+    
+    If you have problems with loading previews, you may can to try to change this setting.
+    
+    On non-linux systems, it is recommended to use this option, because gtk-pixbuf are not always available there so disabling this option will not load previews of some images.
 settings_label_restart = Vous devez redémarrer l’application pour appliquer les réglages !
 settings_ignore_other_filesystems = Ignorer les autres systèmes de fichiers (Linux uniquement)
 settings_ignore_other_filesystems_tooltip =
diff --git a/czkawka_gui/i18n/it/czkawka_gui.ftl b/czkawka_gui/i18n/it/czkawka_gui.ftl
index ea0d9b618..1dcf7f547 100644
--- a/czkawka_gui/i18n/it/czkawka_gui.ftl
+++ b/czkawka_gui/i18n/it/czkawka_gui.ftl
@@ -18,6 +18,11 @@ music_checking_by_tags = Etichette
 music_checking_by_content = Contenuto
 same_music_seconds_label = Durata minima del frammento
 same_music_similarity_label = Differenza massima
+music_compare_only_in_title_group = Confronta solo nel titolo
+music_compare_only_in_title_group_tooltip =
+    Se abilitato, i file vengono raggruppati per titolo e poi confrontati tra loro.
+    
+    Con 10000 file, invece quasi 100 milioni di confronti di solito ci saranno circa 20000 confronti.
 same_music_tooltip =
     La ricerca di file musicali simili dal suo contenuto può essere configurata impostando:
     
@@ -287,6 +292,13 @@ header_about_button_tooltip = Apre la finestra delle informazioni sul programma.
 
 settings_number_of_threads = Numero di thread usati
 settings_number_of_threads_tooltip = Numero di thread usati, 0 significa che tutti i thread disponibili saranno utilizzati.
+settings_use_rust_preview = Usa librerie esterne invece di gtk per caricare anteprime
+settings_use_rust_preview_tooltip =
+    Utilizzando le anteprime gtk a volte sarà più veloce e supporterà più formati, ma a volte questo potrebbe essere esattamente il contrario.
+    
+    Se hai problemi con il caricamento delle anteprime, puoi provare a modificare questa impostazione.
+    
+    Nei sistemi non-linux, si consiglia di utilizzare questa opzione, perché gtk-pixbuf non è sempre disponibile e quindi disabilitando questa opzione non caricherà le anteprime di alcune immagini.
 settings_label_restart = È necessario riavviare l'app per applicare le impostazioni!
 settings_ignore_other_filesystems = Ignora altri filesystem (solo Linux)
 settings_ignore_other_filesystems_tooltip =
diff --git a/czkawka_gui/i18n/ja/czkawka_gui.ftl b/czkawka_gui/i18n/ja/czkawka_gui.ftl
index 16e7b5aae..bc1689890 100644
--- a/czkawka_gui/i18n/ja/czkawka_gui.ftl
+++ b/czkawka_gui/i18n/ja/czkawka_gui.ftl
@@ -18,6 +18,11 @@ music_checking_by_tags = タグ
 music_checking_by_content = コンテンツ
 same_music_seconds_label = フラグメント最小秒の持続時間
 same_music_similarity_label = 最大差
+music_compare_only_in_title_group = タイトルのみ比較
+music_compare_only_in_title_group_tooltip =
+    有効にすると、ファイルはタイトルでグループ化され、それから比較されます。
+    
+    10000ファイルでは、その代わりに約100万比較が通常、約20000比較があります。
 same_music_tooltip =
     音楽ファイルの内容から類似ファイルを検索するように設定できます：
     
@@ -288,6 +293,13 @@ header_about_button_tooltip = アプリに関する情報を含むダイアロ
 
 settings_number_of_threads = 使用されるスレッドの数
 settings_number_of_threads_tooltip = 使用するスレッドの数、0 は、使用可能なすべてのスレッドが使用されることを意味します。
+settings_use_rust_preview = プレビューの読み込みにgtkの代わりに外部ライブラリを使用する
+settings_use_rust_preview_tooltip =
+    Using gtk previews will sometimes be faster and support more formats, but sometimes this could be exactly the opposite.
+    
+    If you have problems with loading previews, you may can to try to change this setting.
+    
+    On non-linux systems, it is recommended to use this option, because gtk-pixbuf are not always available there so disabling this option will not load previews of some images.
 settings_label_restart = 設定を適用するにはアプリを再起動する必要があります！
 settings_ignore_other_filesystems = 他のファイルシステムを無視(Linuxのみ)
 settings_ignore_other_filesystems_tooltip =
diff --git a/czkawka_gui/i18n/ko/czkawka_gui.ftl b/czkawka_gui/i18n/ko/czkawka_gui.ftl
index 1fc9896e9..4e158aa9d 100644
--- a/czkawka_gui/i18n/ko/czkawka_gui.ftl
+++ b/czkawka_gui/i18n/ko/czkawka_gui.ftl
@@ -18,6 +18,11 @@ music_checking_by_tags = Tags
 music_checking_by_content = Content
 same_music_seconds_label = Minimal fragment second duration
 same_music_similarity_label = Maximum difference
+music_compare_only_in_title_group = Compare only in title
+music_compare_only_in_title_group_tooltip =
+    When enabled, files are grouped by title and then compared to each other.
+    
+    With 10000 files, instead almost 100 million comparisons usually there will be around 20000 comparisons.
 same_music_tooltip =
     Searching for similar music files by its content can be configured by setting:
     
@@ -288,6 +293,13 @@ header_about_button_tooltip = 이 앱에 대한 정보창을 엽니다.
 
 settings_number_of_threads = 스레드 수
 settings_number_of_threads_tooltip = 사용할 스레드 수입니다. 0이면 가능한 최대 스레드를 사용합니다.
+settings_use_rust_preview = Use external libraries instead gtk to load previews
+settings_use_rust_preview_tooltip =
+    Using gtk previews will sometimes be faster and support more formats, but sometimes this could be exactly the opposite.
+    
+    If you have problems with loading previews, you may can to try to change this setting.
+    
+    On non-linux systems, it is recommended to use this option, because gtk-pixbuf are not always available there so disabling this option will not load previews of some images.
 settings_label_restart = 이 설정을 적용하려면 프로그램을 재시작해야 합니다!
 settings_ignore_other_filesystems = 다른 파일시스템 무시(Linux에서만)
 settings_ignore_other_filesystems_tooltip =
diff --git a/czkawka_gui/i18n/nl/czkawka_gui.ftl b/czkawka_gui/i18n/nl/czkawka_gui.ftl
index 5cdf7049f..bbb8e1d7a 100644
--- a/czkawka_gui/i18n/nl/czkawka_gui.ftl
+++ b/czkawka_gui/i18n/nl/czkawka_gui.ftl
@@ -18,6 +18,11 @@ music_checking_by_tags = Labels
 music_checking_by_content = Inhoud
 same_music_seconds_label = Minimale fragment tweede duur
 same_music_similarity_label = Maximum verschil
+music_compare_only_in_title_group = Vergelijk alleen in de titel
+music_compare_only_in_title_group_tooltip =
+    Wanneer ingeschakeld, worden bestanden gegroepeerd op titel en vervolgens vergeleken met elkaar.
+    
+    Met 10000 bestanden, in plaats van bijna 100 miljoen vergelijkingen zullen er meestal ongeveer 20000 vergelijkingen worden gemaakt.
 same_music_tooltip =
     Zoeken naar vergelijkbare muziekbestanden door de inhoud ervan kan worden geconfigureerd door instelling:
     
@@ -288,6 +293,13 @@ header_about_button_tooltip = Opent dialoogvenster met info over app.
 
 settings_number_of_threads = Aantal gebruikte threads
 settings_number_of_threads_tooltip = Aantal gebruikte threads, 0 betekent dat alle beschikbare threads zullen worden gebruikt.
+settings_use_rust_preview = Gebruik externe bibliotheken in plaats daarvan om previews te laden
+settings_use_rust_preview_tooltip =
+    Het gebruik van gtk previews zal soms sneller zijn en ondersteuning bieden voor meer formaten, maar soms kan het precies het tegenovergestelde zijn.
+    
+    Als je problemen hebt met het laden van previews, kan je proberen deze instelling te veranderen.
+    
+    Op niet-linux systemen is het aangeraden om deze optie te gebruiken, omdat gtk-pixbuf niet altijd beschikbaar is, dus het uitschakelen van deze optie zal geen voorvertoningen van sommige afbeeldingen laden.
 settings_label_restart = U moet de app herstarten om de instellingen toe te passen!
 settings_ignore_other_filesystems = Negeer andere bestandssystemen (alleen Linux)
 settings_ignore_other_filesystems_tooltip =
diff --git a/czkawka_gui/i18n/no/czkawka_gui.ftl b/czkawka_gui/i18n/no/czkawka_gui.ftl
index a9b4de94b..1981a8f66 100644
--- a/czkawka_gui/i18n/no/czkawka_gui.ftl
+++ b/czkawka_gui/i18n/no/czkawka_gui.ftl
@@ -18,6 +18,11 @@ music_checking_by_tags = Tagger
 music_checking_by_content = Innhold
 same_music_seconds_label = Minste fragment andre varighet
 same_music_similarity_label = Maksimal differanse
+music_compare_only_in_title_group = Sammenlign bare i tittel
+music_compare_only_in_title_group_tooltip =
+    Når aktivert, blir filer gruppert etter tittel og sammenlignes med hverandre.
+    
+    Med 10000 filer, vil det i stedet være nesten 100 millioner sammenligninger som regel være rundt 20000 sammenligninger.
 same_music_tooltip =
     Søker etter lignende musikkfiler av innholdet kan konfigureres ved å gå inn:
     
@@ -288,6 +293,13 @@ header_about_button_tooltip = Åpner dialog med info om app.
 
 settings_number_of_threads = Antall brukte tråder
 settings_number_of_threads_tooltip = Antall brukte tråder. 0 betyr at alle tilgjengelige tråder vil bli brukt.
+settings_use_rust_preview = Bruk eksterne biblioteker i stedet gtk for å laste forhåndsvisninger
+settings_use_rust_preview_tooltip =
+    Med gtk innledning vil noen ganger være raskere og støtte flere formater, men noen ganger kan dette være akkurat det motsatte.
+    
+    Hvis du har problemer med å laste forhåndsvisninger, kan du prøve å endre denne innstillingen.
+    
+    på ikke-linux-systemer anbefales det å bruke dette alternativet, fordi gtk-pixbuf ikke alltid finnes, slik at deaktivering av dette alternativet ikke vil laste forhåndsvisninger på noen bilder.
 settings_label_restart = Start programmet på nytt for å bruke innstillingene!
 settings_ignore_other_filesystems = Ignorer andre filsystemer (bare Linux)
 settings_ignore_other_filesystems_tooltip =
diff --git a/czkawka_gui/i18n/pl/czkawka_gui.ftl b/czkawka_gui/i18n/pl/czkawka_gui.ftl
index 8cf1ca3d9..09012d688 100644
--- a/czkawka_gui/i18n/pl/czkawka_gui.ftl
+++ b/czkawka_gui/i18n/pl/czkawka_gui.ftl
@@ -18,6 +18,11 @@ music_checking_by_tags = Tagi
 music_checking_by_content = Zawartość
 same_music_seconds_label = Minimalny fragment drugi czas trwania
 same_music_similarity_label = Maksymalna różnica
+music_compare_only_in_title_group = Porównaj tylko w tytule
+music_compare_only_in_title_group_tooltip =
+    Gdy włączone, pliki są pogrupowane według tytułu, a następnie porównywane do siebie.
+    
+    z 10000 plików, zamiast tego prawie 100 milionów porównań będzie około 20000 porównań.
 same_music_tooltip =
     Wyszukiwanie podobnych plików muzycznych przez jego zawartość można skonfigurować przez ustawienie:
     
@@ -288,6 +293,13 @@ header_about_button_tooltip = Otwórz okno z informacjami o programie.
 
 settings_number_of_threads = Liczba używanych wątków
 settings_number_of_threads_tooltip = Liczba używanych wątków, 0 oznacza, że zostaną użyte wszystkie dostępne wątki.
+settings_use_rust_preview = Użyj zewnętrznych bibliotek zamiast gtk, aby załadować podgląd
+settings_use_rust_preview_tooltip =
+    Korzystanie z podglądu gtk będzie czasem szybsze i obsługuje więcej formatów, ale czasami może to być dokładnie odwrotne.
+    
+    Jeśli masz problemy z ładowaniem podglądów, możesz spróbować zmienić to ustawienie.
+    
+    W systemach innych niż linux zaleca się użycie tej opcji, ponieważ gtk-pixbuf nie zawsze jest tam dostępny, więc wyłączenie tej opcji nie załaduje podglądu niektórych obrazów.
 settings_label_restart = Musisz ponownie uruchomić aplikację, aby aplikacja zaciągnęła nowe ustawienia!
 settings_ignore_other_filesystems = Ignoruj inne systemy plików (tylko Linux)
 settings_ignore_other_filesystems_tooltip =
diff --git a/czkawka_gui/i18n/pt-BR/czkawka_gui.ftl b/czkawka_gui/i18n/pt-BR/czkawka_gui.ftl
new file mode 100644
index 000000000..831ce69d8
--- /dev/null
+++ b/czkawka_gui/i18n/pt-BR/czkawka_gui.ftl
@@ -0,0 +1,512 @@
+# Window titles
+window_settings_title = Confirgurações
+window_main_title = Czkawka (Hiccup)
+window_progress_title = Verificando
+window_compare_images = Comparar imagens
+# General
+general_ok_button = OK
+general_close_button = FECHAR
+# Main window
+music_title_checkbox = Título
+music_artist_checkbox = Artista
+music_year_checkbox = ano
+music_bitrate_checkbox = Bitrate
+music_genre_checkbox = gênero
+music_length_checkbox = Comprimento
+music_comparison_checkbox = Comparação aproximada
+music_checking_by_tags = Etiquetas
+music_checking_by_content = Conteúdo
+same_music_seconds_label = Duração mínima do fragmento segundo tempo
+same_music_similarity_label = Diferença máxima
+music_compare_only_in_title_group = Comparar somente no título
+music_compare_only_in_title_group_tooltip =
+    When enabled, files are grouped by title and then compared to each other.
+    
+    With 10000 files, instead almost 100 million comparisons usually there will be around 20000 comparisons.
+same_music_tooltip =
+    Procurar por arquivos de música semelhantes por seu conteúdo pode ser configurado pela configuração:
+    
+    - Tempo mínimo de fragmento após o qual os arquivos de música podem ser identificados como similares
+    - A diferença máxima entre dois fragmentos testados
+    
+    A chave para bons resultados é encontrar combinações sensíveis desses parâmetros, para fornecido.
+    
+    Definir o tempo mínimo para 5s e a diferença máxima para 1.0, irá procurar fragmentos quase idênticos nos arquivos.
+    Um tempo de 20s e uma diferença máxima de 6.0, por outro lado, funciona bem para encontrar remixes/versões ao vivo, etc.
+    
+    Por padrão, cada arquivo de música é comparado entre si, e isso pode levar muito tempo para testar muitos arquivos, portanto, é geralmente melhor usar pastas de referência e especificar quais arquivos devem ser comparados (com a mesma quantidade de arquivos, A comparação de impressões digitais será mais rápida pelo menos 4 vezes do que nas pastas de referência).
+music_comparison_checkbox_tooltip =
+    Ele procura arquivos de música semelhantes usando AI, que usa aprendizado de máquina para remover parênteses de uma frase. Por exemplo, com essa opção habilitada, os arquivos em questão serão considerados duplicatas:
+    
+    S├wie^\\dziz├ło├b --- S├wieł dziz├ło├b (Remix Lato 2021)
+duplicate_case_sensitive_name = Caso sensível
+duplicate_case_sensitive_name_tooltip =
+    Quando ativado, grupo apenas registo quando têm exatamente o mesmo nome, por exemplo. Z├ołd - Z├ołd
+    
+    Desabilitar tal opção irá agrupar nomes de grupos sem verificar se cada letra tem o mesmo tamanho, por exemplo, zweb+graphie://ka-perseus-graphie.s3.amazonaws.com/oŁD - Z³ołd
+duplicate_mode_size_name_combo_box = Tamanho e Nome
+duplicate_mode_name_combo_box = Nome:
+duplicate_mode_size_combo_box = Tamanho
+duplicate_mode_hash_combo_box = Hash
+duplicate_hash_type_tooltip =
+    Czkawka oferece 3 tipos de hashes:
+    
+    Blake3 - função hash criptográfica. Este é o padrão porque é muito rápido.
+    
+    CRC32 - função hash simples. Isto deveria ser mais rápido do que o Blake3, mas muito raramente pode ter algumas colisões.
+    
+    XXH3 - muito similar em desempenho e qualidade de hash do Blake3 (mas não criptográfico). Então, esses modos podem ser facilmente interalterados.
+duplicate_check_method_tooltip =
+    Por enquanto, Czkawka oferece três tipos de métodos para encontrar duplicados por:
+    
+    Nome - Localiza arquivos que têm o mesmo nome.
+    
+    Size - Localiza arquivos que têm o mesmo tamanho.
+    
+    Hash - Localiza arquivos que têm o mesmo conteúdo. Este modo de hashing o arquivo e, mais tarde, compara este hash para encontrar duplicatas. Este modo é a maneira mais segura de encontrar duplicatas. O app usa o cache pesado, então as verificações de segundo e mais longo dados devem ser muito mais rápidas do que o primeiro.
+image_hash_size_tooltip =
+    Cada imagem marcada produz um hash especial que pode ser comparado entre si. e uma pequena diferença entre eles significa que essas imagens são parecidas. O tamanho hash
+    
+    8 é muito bom para encontrar imagens que são apenas um pouco semelhantes ao original. Com um maior conjunto de imagens (>1000), isso irá produzir uma grande quantidade de falsos positivos, então eu recomendo usar um tamanho de hash maior neste caso.
+    
+    16 é o tamanho hash padrão que é um bom compromisso entre encontrar até mesmo algumas imagens semelhantes e ter apenas uma pequena quantidade de colisões hash.
+    
+    32 e 64 hashes só encontram imagens muito semelhantes, mas quase não devem ter falsos positivos (talvez, exceto algumas imagens com o canal alfa).
+image_resize_filter_tooltip =
+    To compute hash of image, the library must first resize it.
+    
+    Depend on chosen algorithm, the resulting image used to calculate hash will looks a little different.
+    
+    The fastest algorithm to use, but also the one which gives the worst results, is Nearest. It is enabled by default, because with 16x16 hash size lower quality it is not really visible.
+    
+    With 8x8 hash size it is recommended to use a different algorithm than Nearest, to have better groups of images.
+image_hash_alg_tooltip =
+    Users can choose from one of many algorithms of calculating the hash.
+    
+    Each has both strong and weaker points and will sometimes give better and sometimes worse results for different images.
+    
+    So, to determine the best one for you, manual testing is required.
+big_files_mode_combobox_tooltip = Permite a busca de arquivos menores/maiores
+big_files_mode_label = Arquivos verificados
+big_files_mode_smallest_combo_box = O Menor
+big_files_mode_biggest_combo_box = O Maior
+main_notebook_duplicates = Arquivos duplicados
+main_notebook_empty_directories = Diretórios Vazios
+main_notebook_big_files = Arquivos grandes
+main_notebook_empty_files = Arquivos vazios
+main_notebook_temporary = Arquivos Temporários
+main_notebook_similar_images = Imagens semelhantes
+main_notebook_similar_videos = Vídeos similares
+main_notebook_same_music = Músicas duplicadas
+main_notebook_symlinks = Links simbólicos inválidos
+main_notebook_broken_files = Arquivos quebrados
+main_notebook_bad_extensions = Extensões inválidas
+main_tree_view_column_file_name = Nome do arquivo
+main_tree_view_column_folder_name = Nome da pasta
+main_tree_view_column_path = Caminho
+main_tree_view_column_modification = Data de modificação
+main_tree_view_column_size = Tamanho
+main_tree_view_column_similarity = Similaridade
+main_tree_view_column_dimensions = cotas
+main_tree_view_column_title = Título
+main_tree_view_column_artist = Artista
+main_tree_view_column_year = ano
+main_tree_view_column_bitrate = Bitrate
+main_tree_view_column_length = Comprimento
+main_tree_view_column_genre = gênero
+main_tree_view_column_symlink_file_name = Nome do arquivo Symlink
+main_tree_view_column_symlink_folder = Pasta Symlink
+main_tree_view_column_destination_path = Caminho de Destino
+main_tree_view_column_type_of_error = Tipo de erro
+main_tree_view_column_current_extension = Extensão atual
+main_tree_view_column_proper_extensions = Extensão adequada
+main_label_check_method = Método de verificação
+main_label_hash_type = Tipo de hash
+main_label_hash_size = Tamanho do hash
+main_label_size_bytes = Tamanho (bytes)
+main_label_min_size = Mínimo
+main_label_max_size = Máximo
+main_label_shown_files = Número de arquivos exibidos
+main_label_resize_algorithm = Redimensionar algoritmo
+main_label_similarity = Similarity{ "   " }
+main_check_box_broken_files_audio = Áudio
+main_check_box_broken_files_pdf = PDF
+main_check_box_broken_files_archive = Arquivo
+main_check_box_broken_files_image = Imagem:
+check_button_general_same_size = Ignorar o mesmo tamanho
+check_button_general_same_size_tooltip = Ignorar arquivos com tamanho idêntico nos resultados - geralmente estes são duplicados 1:1
+main_label_size_bytes_tooltip = Tamanho dos arquivos que serão usados na verificação
+# Upper window
+upper_tree_view_included_folder_column_title = Pastas para Pesquisar
+upper_tree_view_included_reference_column_title = Pastas de referência
+upper_recursive_button = Recursiva
+upper_recursive_button_tooltip = Se selecionado, pesquisar também por arquivos que não são colocados diretamente nas pastas escolhidas.
+upper_manual_add_included_button = Adicionar Manual
+upper_add_included_button = Adicionar
+upper_remove_included_button = Excluir
+upper_manual_add_excluded_button = Adicionar Manual
+upper_add_excluded_button = Adicionar
+upper_remove_excluded_button = Excluir
+upper_manual_add_included_button_tooltip =
+    Adicione o nome do diretório à mão.
+    
+    Para adicionar vários caminhos de uma vez, separá-los por ;
+    
+    /home/roman;/home/rozkaz adicionará dois diretórios /home/roman e /home/rozkaz
+upper_add_included_button_tooltip = Adicionar novo diretório à pesquisa.
+upper_remove_included_button_tooltip = Excluir diretório da busca
+upper_manual_add_excluded_button_tooltip =
+    Adicione nome de diretório excluído à mão.
+    
+    Para adicionar vários caminhos de uma vez, separá-los por ;
+    
+    /home/roman;/home/krokiet irá adicionar dois diretórios /home/roman e /home/keokiet
+upper_add_excluded_button_tooltip = Adicionar diretório a ser excluído na pesquisa.
+upper_remove_excluded_button_tooltip = Diretório excluído para exclusão.
+upper_notebook_items_configuration = Configuração dos itens
+upper_notebook_excluded_directories = Diretórios excluídos
+upper_notebook_included_directories = Diretórios incluídos
+upper_allowed_extensions_tooltip =
+    Allowed extensions must be separated by commas (by default all are available).
+    
+    The following Macros, which add multiple extensions at once, are also available: IMAGE, VIDEO, MUSIC, TEXT.
+    
+    Usage example  ".exe, IMAGE, VIDEO, .rar, 7z" - this means that images (e.g. jpg, png), videos (e.g. avi, mp4), exe, rar, and 7z files will be scanned.
+upper_excluded_extensions_tooltip =
+    Lista de arquivos desabilitados que serão ignorados na verificação.
+    
+    Ao usar extensões permitidas e desativadas, este tem maior prioridade, então o arquivo não será marcado.
+upper_excluded_items_tooltip =
+    Excluded items must contain * wildcard and should be separated by commas.
+    This is slower than Excluded Directories, so use it carefully.
+upper_excluded_items = Itens Excluídos:
+upper_allowed_extensions = Extensões permitidas:
+upper_excluded_extensions = Extensões desabilitadas:
+# Popovers
+popover_select_all = Selecionar todos
+popover_unselect_all = Desmarcar todos
+popover_reverse = Seleção inversa
+popover_select_all_except_oldest = Selecionar todos, exceto os mais antigos
+popover_select_all_except_newest = Selecionar todos, exceto os mais recentes
+popover_select_one_oldest = Selecione um mais antigo
+popover_select_one_newest = Selecione um mais recente
+popover_select_custom = Selecionar um personalizado
+popover_unselect_custom = Desmarcar personalizado
+popover_select_all_images_except_biggest = Selecionar tudo, exceto o maior
+popover_select_all_images_except_smallest = Selecionar todos, exceto menor
+popover_custom_path_check_button_entry_tooltip =
+    Selecione registros por caminho.
+    
+    Exemplo de uso:
+    /home/pimpek/rzecz.txt pode ser encontrado com /home/pim*
+popover_custom_name_check_button_entry_tooltip =
+    Select records by file names.
+    
+    Example usage:
+    /usr/ping/pong.txt can be found with *ong*
+popover_custom_regex_check_button_entry_tooltip =
+    Selecione registros por Regex.
+    
+    Com este modo, texto pesquisado é o caminho com o nome.
+    
+    Exemplo de uso:
+    /usr/bin/ziemniak. xt pode ser encontrado com /ziem[a-z]+
+    
+    Isso usa a implementação regex Rust padrão. Você pode ler mais sobre isso aqui: https://docs.rs/regex.
+popover_custom_case_sensitive_check_button_tooltip =
+    Ativa a detecção diferenciada de maiúsculas de minúsculas.
+    
+    Quando desabilitado /home/* encontra ambos /HoMe/roman e /home/roman.
+popover_custom_not_all_check_button_tooltip =
+    Impede selecionar todos os registros no grupo.
+    
+    Isso é habilitado por padrão, porque na maioria das situações, você não quer apagar arquivos originais e duplicados, mas quer deixar pelo menos um arquivo.
+    
+    AVISO: Essa configuração não funciona se você já selecionou manualmente todos os resultados em um grupo.
+popover_custom_regex_path_label = Caminho
+popover_custom_regex_name_label = Nome:
+popover_custom_regex_regex_label = Caminho Regex + Nome
+popover_custom_case_sensitive_check_button = Sensível ao caso
+popover_custom_all_in_group_label = Não selecionar todos os registros no grupo
+popover_custom_mode_unselect = Desmarcar Personalizado
+popover_custom_mode_select = Selecionar personalizado
+popover_sort_file_name = Nome do arquivo
+popover_sort_folder_name = Nome Pasta
+popover_sort_full_name = Nome completo
+popover_sort_size = Tamanho
+popover_sort_selection = Seleção
+popover_invalid_regex = Regex inválido
+popover_valid_regex = Regex é válido
+# Bottom buttons
+bottom_search_button = Pesquisa
+bottom_select_button = Selecionar
+bottom_delete_button = excluir
+bottom_save_button = Guardar
+bottom_symlink_button = Symlink
+bottom_hardlink_button = Hardlink
+bottom_move_button = Mover-se
+bottom_sort_button = Ordenar
+bottom_search_button_tooltip = Iniciar busca
+bottom_select_button_tooltip = Selecione registros. Apenas arquivos/pastas selecionadas podem ser processados posteriormente.
+bottom_delete_button_tooltip = Excluir arquivos/pastas selecionadas.
+bottom_save_button_tooltip = Salvar dados sobre a pesquisa em arquivo
+bottom_symlink_button_tooltip =
+    Create symbolic links.
+    Only works when at least two results in a group are selected.
+    First is unchanged and second and later are symlinked to first.
+bottom_hardlink_button_tooltip =
+    Criar links hardlinks. U
+    Só funciona quando pelo menos dois resultados em um grupo são selecionados.
+    O primeiro é inalterado e segundo e depois são vinculados ao primeiro.
+bottom_hardlink_button_not_available_tooltip =
+    Criar links hardlinks.
+    O botão está desativado, porque links hardlinks não podem ser criados.
+    Hardlinks só funcionam com privilégios de administrador no Windows, então certifique-se de executar o app como administrador.
+    Se o aplicativo já funciona com tais privilégios, verifique se há questões semelhantes no Github.
+bottom_move_button_tooltip =
+    Moves files to chosen directory.
+    It copies all files to the directory without preserving the directory tree.
+    When trying to move two files with identical name to folder, second will fail and show error.
+bottom_sort_button_tooltip = Ordena arquivos/pastas de acordo com o método selecionado.
+bottom_show_errors_tooltip = Mostrar/ocultar painel de texto inferior.
+bottom_show_upper_notebook_tooltip = Mostrar/ocultar painel superior do caderno.
+# Progress Window
+progress_stop_button = Interromper
+progress_stop_additional_message = Parar pedido
+# About Window
+about_repository_button_tooltip = Link para a página do repositório com o código-fonte.
+about_donation_button_tooltip = Link para a página de doação.
+about_instruction_button_tooltip = Link para a página de instrução.
+about_translation_button_tooltip = Link para a página do Crowdin com traduções de aplicativo. Oficialmente polonês e inglês são suportados.
+about_repository_button = Repositório
+about_donation_button = Doação
+about_instruction_button = Instrução
+about_translation_button = Tradução
+# Header
+header_setting_button_tooltip = Abre diálogo de configurações.
+header_about_button_tooltip = Abre diálogo com informações sobre o aplicativo.
+
+# Settings
+
+
+## General
+
+settings_number_of_threads = Número de threads usados
+settings_number_of_threads_tooltip = Número de tópicos usados, 0 significa que todos os tópicos disponíveis serão usados.
+settings_use_rust_preview = Usar bibliotecas externas em vez de gtk para carregar pré-visualizações
+settings_use_rust_preview_tooltip =
+    Using gtk previews will sometimes be faster and support more formats, but sometimes this could be exactly the opposite.
+    
+    If you have problems with loading previews, you may can to try to change this setting.
+    
+    On non-linux systems, it is recommended to use this option, because gtk-pixbuf are not always available there so disabling this option will not load previews of some images.
+settings_label_restart = Você precisa reiniciar o aplicativo para aplicar as configurações!
+settings_ignore_other_filesystems = Ignorar outros sistemas de arquivos (somente Linux)
+settings_ignore_other_filesystems_tooltip =
+    ignora arquivos que não estão no mesmo sistema de arquivos que os diretórios pesquisados.
+    
+    Funciona a mesma como a opção -xdev no comando localizar no Linux
+settings_save_at_exit_button_tooltip = Salvar configuração em arquivo ao fechar o aplicativo.
+settings_load_at_start_button_tooltip =
+    Carregar configuração do arquivo ao abrir aplicativo.
+    
+    Se não estiver habilitado, configurações padrão serão usadas.
+settings_confirm_deletion_button_tooltip = Mostrar diálogo de confirmação ao clicar no botão excluir.
+settings_confirm_link_button_tooltip = Mostrar diálogo de confirmação ao clicar no botão hard/simbólica.
+settings_confirm_group_deletion_button_tooltip = Mostrar caixa de diálogo de aviso ao tentar excluir todos os registros do grupo.
+settings_show_text_view_button_tooltip = Exibir painel de texto na parte inferior da interface do usuário
+settings_use_cache_button_tooltip = Usar cache de arquivo.
+settings_save_also_as_json_button_tooltip = Salvar cache no formato JSON (legível humana). É possível modificar seu conteúdo. Cache deste arquivo será lido automaticamente pelo aplicativo se o cache de formato binário (com extensão bin) estiver faltando.
+settings_use_trash_button_tooltip = Move arquivos para a lixeira em vez de excluí-los permanentemente.
+settings_language_label_tooltip = Idioma para interface de usuário.
+settings_save_at_exit_button = Salvar configuração ao fechar o app
+settings_load_at_start_button = Carregar configuração ao abrir aplicativo
+settings_confirm_deletion_button = Mostrar diálogo de confirmação quando apagar qualquer arquivo
+settings_confirm_link_button = Mostrar a caixa de diálogo de confirmação quando vincular qualquer arquivo
+settings_confirm_group_deletion_button = Mostrar diálogo de confirmação quando apagar todos os arquivos no grupo
+settings_show_text_view_button = Mostrar painel de texto inferior
+settings_use_cache_button = Usar cache
+settings_save_also_as_json_button = Também salvar o cache como arquivo JSON
+settings_use_trash_button = Mover os arquivos apagados para a lixeira
+settings_language_label = IDIOMA
+settings_multiple_delete_outdated_cache_checkbutton = Excluir entradas de cache desatualizadas automaticamente
+settings_multiple_delete_outdated_cache_checkbutton_tooltip =
+    Delete outdated cache results which point to non-existent files.
+    
+    When enabled, app makes sure when loading records, that all records point to valid files (broken ones are ignored).
+    
+    Disabling this will help when scanning files on external drives, so cache entries about them will not be purged in the next scan.
+    
+    In the case of having hundred of thousands records in cache, it is suggested to enable this, which will speedup cache loading/saving at start/end of the scan.
+settings_notebook_general = Gerais
+settings_notebook_duplicates = Duplicados
+settings_notebook_images = Imagens semelhantes
+settings_notebook_videos = Vídeo similar
+
+## Multiple - settings used in multiple tabs
+
+settings_multiple_image_preview_checkbutton_tooltip = Exibe pré-visualização no lado direito (ao selecionar um arquivo de imagem).
+settings_multiple_image_preview_checkbutton = Mostrar pré-visualização da imagem
+settings_multiple_clear_cache_button_tooltip =
+    Manually clear the cache of outdated entries.
+    This should only be used if automatic clearing has been disabled.
+settings_multiple_clear_cache_button = Remover resultados desatualizados do cache.
+
+## Duplicates
+
+settings_duplicates_hide_hard_link_button_tooltip =
+    Oculta todos os arquivos, exceto um, se todos apontarem para os mesmos dados (são hardlinked).
+    
+    Exemplo: No caso de haver (em disco) sete arquivos que são vinculados a dados específicos e um arquivo diferente com os mesmos dados, mas um arquivo diferente, em seguida no localizador duplicado, somente um arquivo exclusivo e um arquivo de links físicos serão mostrados.
+settings_duplicates_minimal_size_entry_tooltip =
+    Set the minimal file size which will be cached.
+    
+    Choosing a smaller value will generate more records. This will speedup search, but slowdown cache loading/saving.
+settings_duplicates_prehash_checkbutton_tooltip =
+    Enables caching of prehash (a hash computed from a small part of the file) which allows earlier dismissal of non-duplicated results.
+    
+    It is disabled by default because it can cause slowdowns in some situations.
+    
+    It is highly recommended to use it when scanning hundred of thousands or million files, because it can speedup search by multiple times.
+settings_duplicates_prehash_minimal_entry_tooltip = Tamanho mínimo da entrada em cache.
+settings_duplicates_hide_hard_link_button = Ocultar links rígidos (somente Linux e macOS)
+settings_duplicates_prehash_checkbutton = Usar cache de pré-hash
+settings_duplicates_minimal_size_cache_label = Tamanho mínimo dos arquivos (em bytes) salvos no cache
+settings_duplicates_minimal_size_cache_prehash_label = Tamanho mínimo dos arquivos (em bytes) salvos no cache de pré-hash
+
+## Saving/Loading settings
+
+settings_saving_button_tooltip = Salve as configurações atuais no arquivo.
+settings_loading_button_tooltip = Carregar configurações de arquivo e substituir a configuração atual por elas.
+settings_reset_button_tooltip = Redefinir a configuração atual para a padrão.
+settings_saving_button = Salvar configuração
+settings_loading_button = Carregar configuração
+settings_reset_button = Redefinir configuração
+
+## Opening cache/config folders
+
+settings_folder_cache_open_tooltip =
+    Opens the folder where the cache txt files are stored.
+    
+    Modifying the cache files may cause invalid results to be shown. However, modifying path may save time when moving a big amount of files to a different location.
+    
+    You can copy these files between computers to save time on scanning again for files (of course if they have similar directory structure).
+    
+    In the case of problems with the cache, these files can be removed. The app will automatically regenerate them.
+settings_folder_settings_open_tooltip =
+    Abre a pasta onde a configuração do Czkawka está armazenada.
+    
+    AVISO: modificar a configuração manualmente pode danificar seu fluxo de trabalho.
+settings_folder_cache_open = Abrir pasta cache
+settings_folder_settings_open = Abrir pasta de configurações
+# Compute results
+compute_stopped_by_user = A pesquisa foi interrompida pelo usuário
+compute_found_duplicates_hash_size = Encontrada { $number_files } duplicações em { $number_groups } grupos que adotaram { $size }
+compute_found_duplicates_name = Encontrada { $number_files } duplicatas em grupos { $number_groups }
+compute_found_empty_folders = Encontradas pastas { $number_files } vazias
+compute_found_empty_files = Encontrados { $number_files } arquivos vazios
+compute_found_big_files = Encontrados { $number_files } arquivos grandes
+compute_found_temporary_files = Encontrados { $number_files } arquivos temporários
+compute_found_images = Encontradas { $number_files } imagens similares em grupos { $number_groups }
+compute_found_videos = Encontrados { $number_files } vídeos similares em grupos { $number_groups }
+compute_found_music = Encontrado { $number_files } arquivos de música similares em grupos { $number_groups }
+compute_found_invalid_symlinks = { $number_files } links simbólicos inválidos
+compute_found_broken_files = Encontrados { $number_files } arquivos quebrados
+compute_found_bad_extensions = Encontrados { $number_files } arquivos com extensões inválidas
+# Progress window
+progress_scanning_general_file = Escaneando arquivo { $file_number }
+progress_scanning_extension_of_files = Verificando extensão do arquivo { $file_checked }/{ $all_files }
+progress_scanning_broken_files = Checando { $file_checked }/{ $all_files } arquivo
+progress_scanning_video = Hashing de { $file_checked }/{ $all_files } vídeo
+progress_scanning_image = Hashing de { $file_checked }/{ $all_files } imagem
+progress_comparing_image_hashes = Comparando { $file_checked }/{ $all_files } hash de imagem
+progress_scanning_music_tags_end = Comparar etiquetas de { $file_checked }/{ $all_files } arquivo de música
+progress_scanning_music_tags = Lendo etiquetas de { $file_checked }/{ $all_files } arquivo de música
+progress_scanning_music_content_end = Comparação de impressão digital de { $file_checked }/{ $all_files } arquivo de música
+progress_scanning_music_content = Calculando impressão digital do arquivo { $file_checked }/{ $all_files } de música
+progress_scanning_empty_folders = Verificando pasta { $folder_number }
+progress_scanning_size = Verificando o tamanho do arquivo { $file_number }
+progress_scanning_size_name = Verificando nome e tamanho do arquivo { $file_number }
+progress_scanning_name = Verificando nome do arquivo { $file_number }
+progress_analyzed_partial_hash = Hash parcial analisado de arquivos { $file_checked }/{ $all_files }
+progress_analyzed_full_hash = Hash completo analisado de arquivos { $file_checked }/{ $all_files }
+progress_prehash_cache_loading = Carregando cache de pré-hash
+progress_prehash_cache_saving = Salvando cache pré-hash
+progress_hash_cache_loading = Carregando cache de hash
+progress_hash_cache_saving = Salvando cache de hash
+progress_cache_loading = Carregando cache
+progress_cache_saving = Salvando cache
+progress_current_stage = Estágio atual:{ " " }
+progress_all_stages = Todos os Stages:{ " " }
+# Saving loading 
+saving_loading_saving_success = Configuração salva no arquivo { $name }.
+saving_loading_saving_failure = Falha ao salvar os dados de configuração do arquivo { $name }.
+saving_loading_reset_configuration = A configuração atual foi limpa.
+saving_loading_loading_success = Configuração de aplicativo carregada adequadamente.
+saving_loading_invalid_string = Para a chave "{ $key }" encontrou um resultado inválido - "{ $result }" que não é uma string.
+saving_loading_invalid_int = Para a chave "{ $key }" encontrou um resultado inválido - "{ $result }" que não é um inteiro.
+saving_loading_invalid_bool = Para a chave "{ $key }" encontrou um resultado inválido - "{ $result }" que não é um bool.
+saving_loading_decode_problem_bool = Falha ao decodificar o bool da tecla "{ $key }" encontrado "{ $result }" mas os valores permitidos são 0, 1, verdadeiro ou falso.
+saving_loading_saving_same_keys = Tentando salvar a configuração com chave duplicada "{ $key }".
+saving_loading_failed_to_get_home_directory = Falha ao obter o diretório inicial para abrir/salvar o arquivo de configuração.
+saving_loading_folder_config_instead_file = Não é possível criar ou abrir o arquivo de configuração no caminho "{ $path }" porque já existe uma pasta.
+saving_loading_failed_to_create_configuration_folder = Falha ao criar a pasta de configuração "{ $path }", reason "{ $reason }".
+saving_loading_failed_to_create_config_file = Falha ao criar o arquivo de configuração "{ $path }", reason "{ $reason }".
+saving_loading_failed_to_read_config_file = Não foi possível carregar a configuração de "{ $path }" porque não existe ou não é um arquivo.
+saving_loading_failed_to_read_data_from_file = Não é possível ler dados do arquivo "{ $path }", reason "{ $reason }".
+saving_loading_orphan_data = Dados órfãos encontrados "{ $data }" na linha "{ $line }".
+saving_loading_not_valid = Definir "{ $data }" não existe na versão atual do aplicativo.
+# Invalid symlinks
+invalid_symlink_infinite_recursion = recursão infinita
+invalid_symlink_non_existent_destination = Arquivo de destino inexistente
+# Other
+selected_all_reference_folders = Não é possível iniciar a busca, quando todos os diretórios estão definidos como pastas de referência
+searching_for_data = Procurando dados, pode demorar um pouco, por favor, aguarde...
+text_view_messages = MENSAGEM
+text_view_warnings = ATENÇÕES
+text_view_errors = ERROS
+about_window_motto = Este programa é gratuito para o uso e sempre será.
+# Various dialog
+dialogs_ask_next_time = Perguntar da próxima vez
+delete_file_failed = Falha ao excluir o arquivo { $name }, razão { $reason }
+delete_title_dialog = Confirmação de exclusão
+delete_question_label = Tem certeza de que deseja excluir arquivos?
+delete_all_files_in_group_title = Confirmação de excluir todos os arquivos no grupo
+delete_all_files_in_group_label1 = Em alguns grupos todos os registros estão selecionados.
+delete_all_files_in_group_label2 = Tem certeza que deseja apagá-los?
+delete_folder_failed = Falha ao excluir a pasta { $dir } porque a pasta não existe, você não tem permissão ou a pasta não está vazia.
+delete_items_label = { $items } arquivos serão excluídos.
+delete_items_groups_label = { $items } arquivos de { $groups } grupos serão excluídos.
+hardlink_failed = Falha no hardlink
+hard_sym_invalid_selection_title_dialog = Seleção inválida com alguns grupos
+hard_sym_invalid_selection_label_1 = Em alguns grupos há apenas um registro selecionado e será ignorado.
+hard_sym_invalid_selection_label_2 = Para ser capaz de vincular estes arquivos, pelo menos dois resultados no grupo precisam ser selecionados.
+hard_sym_invalid_selection_label_3 = O primeiro no grupo é reconhecido como original e não é alterado, mas o segundo e mais tarde são modificados.
+hard_sym_link_title_dialog = Link de confirmação
+hard_sym_link_label = Tem certeza que deseja vincular esses arquivos?
+move_folder_failed = Falha ao mover a pasta { $name }, razão { $reason }
+move_file_failed = Falha ao mover o arquivo { $name }, razão { $reason }
+move_files_title_dialog = Escolha a pasta para a qual você deseja mover arquivos duplicados
+move_files_choose_more_than_1_path = Apenas um caminho pode ser selecionado para ser capaz de copiar os arquivos duplicados, selecionado { $path_number }.
+move_stats = Propriamente movido { $num_files }/{ $all_files } itens
+save_results_to_file = Resultados salvos tanto para arquivos txt quanto json na pasta { $name }.
+search_not_choosing_any_music = ERRO: Você deve selecionar pelo menos uma caixa de seleção com tipos de busca de música.
+search_not_choosing_any_broken_files = ERRO: Você deve selecionar pelo menos uma caixa de seleção com tipo de arquivos quebrados.
+include_folders_dialog_title = Pastas para incluir
+exclude_folders_dialog_title = Pastas para excluir
+include_manually_directories_dialog_title = Adicionar diretório manualmente
+cache_properly_cleared = Cache devidamente limpo
+cache_clear_duplicates_title = Limpando cache duplicados
+cache_clear_similar_images_title = Limpando cache de imagens similares
+cache_clear_similar_videos_title = Limpando cache de vídeos similares
+cache_clear_message_label_1 = Deseja limpar o cache de entradas desatualizadas?
+cache_clear_message_label_2 = Esta operação removerá todas as entradas de cache que apontam para arquivos inválidos.
+cache_clear_message_label_3 = Isto pode acelerar um pouco o carregamento/salvamento para o cache.
+cache_clear_message_label_4 = AVISO: Operação irá remover todos os dados em cache de unidades externas desconectadas. Então cada hash precisará ser regenerado.
+# Show preview
+preview_image_resize_failure = Falha ao redimensionar a imagem { $name }.
+preview_image_opening_failure = Falha ao abrir a imagem { $name }, razão { $reason }
+# Compare images (L is short Left, R is short Right - they can't take too much space)
+compare_groups_number = Grupo { $current_group }/{ $all_groups } ({ $images_in_group } imagens)
+compare_move_left_button = O
+compare_move_right_button = R
diff --git a/czkawka_gui/i18n/pt/czkawka_gui.ftl b/czkawka_gui/i18n/pt/czkawka_gui.ftl
index 70ee04370..7acd19112 100644
--- a/czkawka_gui/i18n/pt/czkawka_gui.ftl
+++ b/czkawka_gui/i18n/pt/czkawka_gui.ftl
@@ -1,8 +1,8 @@
 # Window titles
 window_settings_title = Configurações
 window_main_title = Czkawka (Soluço)
-window_progress_title = Verificando
-window_compare_images = Comparar imagens
+window_progress_title = Escaneando
+window_compare_images = Comparar Imagens
 # General
 general_ok_button = Ok
 general_close_button = Fechar
@@ -10,31 +10,36 @@ general_close_button = Fechar
 music_title_checkbox = Título
 music_artist_checkbox = Artista
 music_year_checkbox = Ano
-music_bitrate_checkbox = Taxa de bits
-music_genre_checkbox = Género
+music_bitrate_checkbox = Taxa de Bits
+music_genre_checkbox = Gênero
 music_length_checkbox = Comprimento
-music_comparison_checkbox = Comparação aproximada
+music_comparison_checkbox = Comparação Aproximada
 music_checking_by_tags = Etiquetas
 music_checking_by_content = Conteúdo
-same_music_seconds_label = Duração mínima do fragmento segundo tempo
+same_music_seconds_label = Duração mínima de segundos do fragmento
 same_music_similarity_label = Diferença máxima
+music_compare_only_in_title_group = Comparar somente no título
+music_compare_only_in_title_group_tooltip =
+    When enabled, files are grouped by title and then compared to each other.
+    
+    With 10000 files, instead almost 100 million comparisons usually there will be around 20000 comparisons.
 same_music_tooltip =
-    Procurar por arquivos de música semelhantes por seu conteúdo pode ser configurado pela configuração:
+    Buscar por arquivos de música semelhantes por seu conteúdo pode ser configurado definindo:
     
-    - Tempo mínimo de fragmento depois do qual os arquivos de música podem ser identificados como semelhantes
+    - O tempo mínimo de fragmento após o qual os arquivos de música podem ser identificados como semelhantes
     - A diferença máxima entre dois fragmentos testados
     
-    A chave para bons resultados é encontrar combinações sensíveis desses parâmetros, para fornecido.
+    A chave para bons resultados é achar combinações sensíveis desses parâmetros, para fornecido.
     
-    Definir o tempo mínimo para 5s e a diferença máxima para 1.0, irá procurar fragmentos quase idênticos nos arquivos.
-    Um tempo de 20s e uma diferença máxima de 6.0, por outro lado, funciona bem para encontrar versões remixes/ao vivo, etc.
+    Definir o tempo mínimo para 5s e a diferença máxima para 1.0 buscará fragmentos quase iguais nos arquivos.
+    Um tempo de 20s e uma diferença máxima de 6.0, por outro lado, funciona bem para achar versões remixes/ao vivo, etc.
     
-    Por padrão, cada arquivo de música é comparado entre si, e isso pode levar muito tempo para testar muitos arquivos, portanto, é geralmente melhor usar pastas de referência e especificar quais arquivos devem ser comparados (com a mesma quantidade de arquivos, A comparação de impressões digitais será mais rápida pelo menos 4 vezes do que nas pastas de referência).
+    Por padrão, cada arquivo de música é comparado entre si, e isso pode levar muito tempo para testar muitos arquivos, logo, é geralmente melhor usar pastas de referência e especificar quais arquivos devem ser comparados entre si (com a mesma quantidade de arquivos, comparar impressões digitais será pelo menos 4x mais rápido do que sem pastas de referência).
 music_comparison_checkbox_tooltip =
     Ele busca arquivos de música semelhantes usando IA, que usa aprendizado de máquina para remover parênteses duma frase. Por exemplo, com esta opção ativada, os arquivos em questão serão considerados duplicatas:
     
     Świędziżłób     ---     Świędziżłób (Remix Lato 2021)
-duplicate_case_sensitive_name = Sensível a maiúsculas e minúsculas
+duplicate_case_sensitive_name = Sensível a Maiúsculas e Minúsculas
 duplicate_case_sensitive_name_tooltip =
     Quando ativado, o grupo só registra quando eles têm o mesmo nome, por exemplo, Żołd <-> Żołd
     
@@ -44,7 +49,7 @@ duplicate_mode_name_combo_box = Nome
 duplicate_mode_size_combo_box = Tamanho
 duplicate_mode_hash_combo_box = Hash
 duplicate_hash_type_tooltip =
-    Blake3 - função de hash criptográfico. Este é o padrão, pois é muito rápido.
+    Blake3 - função de hash criptográfico. Este é o padrão, por ser muito rápido.
     
     CRC32 - função de hash simples. Isto deve ser mais rápido que Blake3, mas pode muito raramente ter algumas colisões.
     
@@ -56,23 +61,23 @@ duplicate_check_method_tooltip =
     
     Tamanho - Acha arquivos que têm o mesmo tamanho.
     
-    Hash - Acha arquivos que têm o mesmo conteúdo. Este modo faz o hash do arquivo e entção compara este hash para achar duplicatas. Este modo é o jeito mais seguro de achar duplicatas. O aplicativo usa muito cache, logo, a segunda e outras varreduras dos mesmos dados devem ser muito mais rápidas que a primeira.
+    Hash - Acha arquivos que têm o mesmo conteúdo. Este modo faz o hash do arquivo e então compara este hash para achar duplicatas. Este modo é o jeito mais seguro de achar duplicatas. O aplicativo usa muito cache, logo, a segunda e outras varreduras dos mesmos dados devem ser muito mais rápidas que a primeira.
 image_hash_size_tooltip =
-    Cada imagem marcada produz um hash especial que pode ser comparado entre si. e uma pequena diferença entre eles significa que essas imagens são parecidas. O tamanho hash
+    Cada imagem marcada produz um hash especial que podem ser comparados entre si, e uma pequena diferença entre eles significa que essas imagens são parecidas.
     
-    8 é muito bom para encontrar imagens que são apenas um pouco semelhantes ao original. Com um maior conjunto de imagens (>1000), isso irá produzir uma grande quantidade de falsos positivos, então eu recomendo usar um tamanho de hash maior neste caso.
+    O tamanho de hash 8 é ótimo para achar imagens que são só um pouco semelhantes ao original. Com um maior conjunto de imagens (>1000), isso produzirá muitos falsos positivos, então recomendo usar um tamanho de hash maior neste caso.
     
-    16 é o tamanho hash padrão que é um bom compromisso entre encontrar até mesmo algumas imagens semelhantes e ter apenas uma pequena quantidade de colisões hash.
+    16 é o tamanho de hash padrão e um bom compromisso entre achar até mesmo imagens pouco semelhantes e ter poucas colisões de hash.
     
-    32 e 64 hashes só encontram imagens muito semelhantes, mas quase não devem ter falsos positivos (talvez, exceto algumas imagens com o canal alfa).
+    Hashes 32 e 64 só acham imagens muito semelhantes, mas quase não devem ter falsos positivos (talvez, exceto algumas imagens com o canal alfa).
 image_resize_filter_tooltip =
-    To compute hash of image, the library must first resize it.
+    Para computar o hash da imagem, a biblioteca deve primeiro redimensioná-la.
     
-    Depend on chosen algorithm, the resulting image used to calculate hash will looks a little different.
+    Dependendo do algoritmo escolhido, a imagem resultante usada para calcular o hash parecerá um pouco diferente.
     
-    The fastest algorithm to use, but also the one which gives the worst results, is Nearest. It is enabled by default, because with 16x16 hash size lower quality it is not really visible.
+    O algoritmo mais rápido a ser usado, mas também o que dá os piores resultados, é o Mais Próximo. Ele é ativado por padrão, pois com o tamanho de hash 16x16, a qualidade menor não é realmente visível.
     
-    With 8x8 hash size it is recommended to use a different algorithm than Nearest, to have better groups of images.
+    Com o tamanho de hash 8x8, recomenda-se usar um algoritmo diferente do Mais Próximo para ter melhores grupos de imagens.
 image_hash_alg_tooltip =
     Os usuários podem escolher entre um dos muitos algoritmos de cálculo do hash.
     
@@ -81,38 +86,38 @@ image_hash_alg_tooltip =
     Logo, para determinar o melhor para você, são precisos testes manuais.
 big_files_mode_combobox_tooltip = Permite a busca de arquivos menores/maiores
 big_files_mode_label = Arquivos verificados
-big_files_mode_smallest_combo_box = O menor
-big_files_mode_biggest_combo_box = O maior
-main_notebook_duplicates = Arquivos duplicados
-main_notebook_empty_directories = Diretórios vazios
-main_notebook_big_files = Arquivos grandes
-main_notebook_empty_files = Arquivos vazios
-main_notebook_temporary = Arquivos temporários
-main_notebook_similar_images = Imagens semelhantes
-main_notebook_similar_videos = Vídeos semelhantes
-main_notebook_same_music = Músicas duplicadas
-main_notebook_symlinks = Ligação simbólica inválida
-main_notebook_broken_files = Arquivos quebrados
-main_notebook_bad_extensions = Extensões inválidas
+big_files_mode_smallest_combo_box = O Menor
+big_files_mode_biggest_combo_box = O Maior
+main_notebook_duplicates = Arquivos Duplicados
+main_notebook_empty_directories = Diretórios Vazios
+main_notebook_big_files = Arquivos Grandes
+main_notebook_empty_files = Arquivos Vazios
+main_notebook_temporary = Arquivos Temporários
+main_notebook_similar_images = Imagens Semelhantes
+main_notebook_similar_videos = Vídeos Similares
+main_notebook_same_music = Músicas Duplicadas
+main_notebook_symlinks = Ligações Simbólicas Inválidas
+main_notebook_broken_files = Arquivos Quebrados
+main_notebook_bad_extensions = Extensões Inválidas
 main_tree_view_column_file_name = Nome do arquivo
-main_tree_view_column_folder_name = Nome do diretório
+main_tree_view_column_folder_name = Nome da Pasta
 main_tree_view_column_path = Caminho
-main_tree_view_column_modification = Data de modificação
+main_tree_view_column_modification = Data de Modificação
 main_tree_view_column_size = Tamanho
 main_tree_view_column_similarity = Similaridade
 main_tree_view_column_dimensions = Tamanho
 main_tree_view_column_title = Título
 main_tree_view_column_artist = Artista
 main_tree_view_column_year = Ano
-main_tree_view_column_bitrate = Taxa de bits
+main_tree_view_column_bitrate = Taxa de Bits
 main_tree_view_column_length = Comprimento
 main_tree_view_column_genre = Género
-main_tree_view_column_symlink_file_name = Nome do arquivo de ligação simbólica
-main_tree_view_column_symlink_folder = Diretório da ligação simbólica
-main_tree_view_column_destination_path = Caminho de destino
-main_tree_view_column_type_of_error = Tipo de erro
-main_tree_view_column_current_extension = Extensão atual
-main_tree_view_column_proper_extensions = Extensão adequada
+main_tree_view_column_symlink_file_name = Nome do Arquivo de Ligação Simbólica
+main_tree_view_column_symlink_folder = Pasta da Ligação Simbólica
+main_tree_view_column_destination_path = Caminho de Destino
+main_tree_view_column_type_of_error = Tipo de Erro
+main_tree_view_column_current_extension = Extensão Atual
+main_tree_view_column_proper_extensions = Extensão Adequada
 main_label_check_method = Método de verificação
 main_label_hash_type = Tipo de hash
 main_label_hash_size = Tamanho do hash
@@ -123,21 +128,21 @@ main_label_shown_files = Número de arquivos exibidos
 main_label_resize_algorithm = Redimensionar algoritmo
 main_label_similarity = Similaridade{ " " }
 main_check_box_broken_files_audio = Áudio
-main_check_box_broken_files_pdf = Pdf
+main_check_box_broken_files_pdf = PDF
 main_check_box_broken_files_archive = Arquivar
 main_check_box_broken_files_image = Imagem
-check_button_general_same_size = Ignorar o mesmo tamanho
-check_button_general_same_size_tooltip = Ignorar arquivos com tamanho idêntico nos resultados - geralmente estes são duplicados 1:1
-main_label_size_bytes_tooltip = Tamanho dos arquivos que serão usados na verificação
+check_button_general_same_size = Ignorar do mesmo tamanho
+check_button_general_same_size_tooltip = Ignorar arquivos com tamanho idêntico nos resultados — geralmente estes são duplicatas 1:1
+main_label_size_bytes_tooltip = Tamanho dos arquivos usados na verificação
 # Upper window
-upper_tree_view_included_folder_column_title = Diretórios para buscar
-upper_tree_view_included_reference_column_title = Diretórios de referência
+upper_tree_view_included_folder_column_title = Pastas para Buscar
+upper_tree_view_included_reference_column_title = Pastas de Referência
 upper_recursive_button = Recursiva
 upper_recursive_button_tooltip = Se selecionado, buscar também arquivos que não são postos diretamente nas pastas escolhidas.
-upper_manual_add_included_button = Adição manual
+upper_manual_add_included_button = Adicionar Manual
 upper_add_included_button = Adicionar
 upper_remove_included_button = Excluir
-upper_manual_add_excluded_button = Adição manual
+upper_manual_add_excluded_button = Adicionar Manual
 upper_add_excluded_button = Adicionar
 upper_remove_excluded_button = Excluir
 upper_manual_add_included_button_tooltip =
@@ -156,15 +161,15 @@ upper_manual_add_excluded_button_tooltip =
     /home/roman;/home/krokiet adicionará dois diretórios /home/roman e /home/keokiet
 upper_add_excluded_button_tooltip = Adicionar diretório a ser excluído na busca.
 upper_remove_excluded_button_tooltip = Excluir diretório da exclusão.
-upper_notebook_items_configuration = Configuração dos itens
-upper_notebook_excluded_directories = Diretórios excluídos
-upper_notebook_included_directories = Diretórios incluídos
+upper_notebook_items_configuration = Configuração dos Itens
+upper_notebook_excluded_directories = Diretórios Excluídos
+upper_notebook_included_directories = Diretórios Incluídos
 upper_allowed_extensions_tooltip =
     Extensões permitidas devem ser separadas por vírgulas (por padrão todas estão disponíveis).
     
     Os seguintes Macros, que adicionam várias extensões de uma só vez, também estão disponíveis: IMAGE, VIDEO, MUSIC, TEXT.
     
-    Exemplo de uso ".exe, IMAGE, VIDEO, .rar, 7z" - isto significa que as imagens (e. . jpg, png), vídeos (por exemplo, avi, mp4), exe, rar e arquivos 7z serão escaneados.
+    Exemplo de uso ".exe, IMAGE, VIDEO, .rar, 7z" — isto significa que as imagens (ex., jpg, png), vídeos (ex., avi, mp4), exe, rar e arquivos 7z serão escaneados.
 upper_excluded_extensions_tooltip =
     Lista de arquivos desabilitados que serão ignorados na verificação.
     
@@ -223,13 +228,13 @@ popover_custom_case_sensitive_check_button = Sensível a maiúsculas e minúscul
 popover_custom_all_in_group_label = Não selecionar todo registro no grupo
 popover_custom_mode_unselect = Desmarcar customizado
 popover_custom_mode_select = Selecionar customizado
-popover_sort_file_name = Nome do ficheiro
+popover_sort_file_name = Nome do arquivo
 popover_sort_folder_name = Nome da pasta
-popover_sort_full_name = Nome Completo
+popover_sort_full_name = Nome completo
 popover_sort_size = Tamanho
 popover_sort_selection = Seleção
-popover_invalid_regex = Regex inválida
-popover_valid_regex = Regex é válida
+popover_invalid_regex = Regex inválido
+popover_valid_regex = Expressão regular é válida
 # Bottom buttons
 bottom_search_button = Buscar
 bottom_select_button = Selecionar
@@ -285,6 +290,13 @@ header_about_button_tooltip = Abre diálogo com informações sobre o aplicativo
 
 settings_number_of_threads = Número de threads usadas
 settings_number_of_threads_tooltip = Numero de thread usadas. Zero significa que toda thread disponível será usada.
+settings_use_rust_preview = Usar bibliotecas externas em vez de gtk para carregar pré-visualizações
+settings_use_rust_preview_tooltip =
+    Using gtk previews will sometimes be faster and support more formats, but sometimes this could be exactly the opposite.
+    
+    If you have problems with loading previews, you may can to try to change this setting.
+    
+    On non-linux systems, it is recommended to use this option, because gtk-pixbuf are not always available there so disabling this option will not load previews of some images.
 settings_label_restart = Você tem de reiniciar o aplicativo para aplicar as configurações!
 settings_ignore_other_filesystems = Ignorar outros sistemas de arquivos (só Linux)
 settings_ignore_other_filesystems_tooltip =
@@ -324,9 +336,9 @@ settings_multiple_delete_outdated_cache_checkbutton_tooltip =
     
     No caso de ter centenas de milhares de registros no cache, é sugerido ativar isto, o que acelerará o carregamento/armazenamento de cache/salvamento no início/fim do escaneamento.
 settings_notebook_general = Geral
-settings_notebook_duplicates = Duplicados
-settings_notebook_images = Imagens semelhantes
-settings_notebook_videos = Vídeo semelhante
+settings_notebook_duplicates = Duplicatas
+settings_notebook_images = Imagens Semelhantes
+settings_notebook_videos = Vídeo Semelhante
 
 ## Multiple - settings used in multiple tabs
 
@@ -445,7 +457,7 @@ saving_loading_not_valid = A configuração "{ $data }" não existe na versão a
 invalid_symlink_infinite_recursion = Recursão infinita
 invalid_symlink_non_existent_destination = Arquivo de destino não existe
 # Other
-selected_all_reference_folders = Não se pode iniciar a busca quando todo diretório está definido como pasta de referência
+selected_all_reference_folders = Não é possível iniciar a busca quando todo diretório está definido como pasta de referência
 searching_for_data = Buscando dados, pode demorar um pouco, aguarde...
 text_view_messages = MENSAGENS
 text_view_warnings = AVISOS
@@ -484,7 +496,7 @@ cache_properly_cleared = Cache devidamente limpo
 cache_clear_duplicates_title = Limpando o cache de duplicatas
 cache_clear_similar_images_title = Limpando o cache de imagens similares
 cache_clear_similar_videos_title = Limpando o cache de vídeos similares
-cache_clear_message_label_1 = Quer limpar o cache de entradas desatualizadas?
+cache_clear_message_label_1 = Deseja limpar o cache de entradas desatualizadas?
 cache_clear_message_label_2 = Esta operação removerá toda entrada de cache que aponta para arquivos inválidos.
 cache_clear_message_label_3 = Isto pode acelerar um pouco o carregamento/salvamento para o cache.
 cache_clear_message_label_4 = AVISO: A operação removerá todo dado em cache de unidades externas desconectadas. Logo, cada hash terá de ser regenerado.
diff --git a/czkawka_gui/i18n/ro/czkawka_gui.ftl b/czkawka_gui/i18n/ro/czkawka_gui.ftl
index 13e61806a..05e9c0bc7 100644
--- a/czkawka_gui/i18n/ro/czkawka_gui.ftl
+++ b/czkawka_gui/i18n/ro/czkawka_gui.ftl
@@ -18,6 +18,11 @@ music_checking_by_tags = Etichete
 music_checking_by_content = Conținut
 same_music_seconds_label = Fragment minim a doua durată
 same_music_similarity_label = Diferența maximă
+music_compare_only_in_title_group = Compară numai în titlu
+music_compare_only_in_title_group_tooltip =
+    Când este activat, fișierele sunt grupate după titlu și apoi comparate între ele.
+    
+    Cu 10000 de fişiere, în schimb aproape 100 de milioane de comparaţii vor fi de obicei aproximativ 20000 de comparaţii.
 same_music_tooltip =
     Căutarea fişierelor muzicale similare după conţinutul său poate fi configurată prin setarea:
     
@@ -288,6 +293,13 @@ header_about_button_tooltip = Deschide dialogul cu informații despre aplicație
 
 settings_number_of_threads = Numar discutii folosite
 settings_number_of_threads_tooltip = Numărul de teme folosite, 0 înseamnă că vor fi folosite toate temele disponibile.
+settings_use_rust_preview = Folosește în schimb gtk librării externe pentru a încărca previzualizările
+settings_use_rust_preview_tooltip =
+    Utilizarea de previzualizări gtk va fi uneori mai rapidă și va suporta mai multe formate, dar uneori aceasta ar putea fi exact opusul.
+    
+    Dacă aveţi probleme cu încărcarea previzualizărilor, puteţi încerca să schimbaţi această setare.
+    
+    Pe sistemele non-linux, se recomandă folosirea acestei optiuni, pentru că gtk-pixbuf nu sunt întotdeauna disponibile, astfel încât dezactivarea acestei opțiuni nu va încărca previzualizarea unor imagini.
 settings_label_restart = Trebuie să reporniți aplicația pentru a aplica setările!
 settings_ignore_other_filesystems = Ignorați alte sisteme de fișiere (doar Linux)
 settings_ignore_other_filesystems_tooltip =
diff --git a/czkawka_gui/i18n/ru/czkawka_gui.ftl b/czkawka_gui/i18n/ru/czkawka_gui.ftl
index 74ce1abde..eb720873f 100644
--- a/czkawka_gui/i18n/ru/czkawka_gui.ftl
+++ b/czkawka_gui/i18n/ru/czkawka_gui.ftl
@@ -18,6 +18,11 @@ music_checking_by_tags = Теги
 music_checking_by_content = Содержание
 same_music_seconds_label = Минимальная длительность второго фрагмента
 same_music_similarity_label = Максимальная разница
+music_compare_only_in_title_group = Сравнить только в заголовке
+music_compare_only_in_title_group_tooltip =
+    Когда включено, файлы сгруппируются по заголовку, а затем сравниваются друг с другом.
+    
+    С 10000 файлов, вместо этого почти 100 миллионов сравнений обычно будет около 20000 сравнений.
 same_music_tooltip =
     Поиск похожих музыкальных файлов по его содержимому может быть настроен с помощью настройки:
     
@@ -68,13 +73,13 @@ image_hash_size_tooltip =
     
     32 и 64 хэши находят только очень похожие изображения, но не должны иметь ложных срабатываний (может быть, за исключением некоторых изображений с альфа-каналом).
 image_resize_filter_tooltip =
-    Чтобы вычислить хэш изображения, библиотека должна в первую очередь изменить его размеры.
+    Чтобы вычислить хэш изображения, библиотека должна сначала его перемасштабировать.
     
-    В зависимости от выбранного алгоритма результирующее изображение, используемое для вычисления хэша, выглядит немного другое.
+    В зависимости от выбранного алгоритма полученное изображение, используемое при хэшировании, может выглядеть немного другим.
     
-    Самый быстрый алгоритм использования, но также тот алгоритм, который дает худший результат, это Nearest. Он включен по умолчанию, потому что с меньшим качеством в размере 16x16 хэш он не видим.
+    Самый быстрый алгоритм с низким качеством — это метод ближайших соседей, Nearest. Он включён по умолчанию, потому при размере хэша 16x16 плохое качество не замечается.
     
-    Если размер хэша 8x8, рекомендуется использовать другой алгоритм, чем Nearest, чтобы иметь лучшие группы изображений.
+    Если размер хэша 8x8, рекомендуется любой алгоритм, кроме Nearest, чтобы лучше отличать похожие изображения в группах.
 image_hash_alg_tooltip =
     Пользователи могут выбрать один из многих алгоритмов вычисления хэша.
     
@@ -286,8 +291,15 @@ header_about_button_tooltip = Открыть окно с информацией
 
 ## General
 
-settings_number_of_threads = Количество использованных тем
+settings_number_of_threads = Количество использованных потоков
 settings_number_of_threads_tooltip = Количество используемых потоков. Установите 0, чтобы использовать все доступные потоки.
+settings_use_rust_preview = Использовать внешние библиотеки вместо gtk для загрузки предпросмотра
+settings_use_rust_preview_tooltip =
+    Использование превью gtk иногда будет быстрее и поддерживать больше форматов, но иногда это может быть и наоборот.
+    
+    Если у вас возникли проблемы с загрузкой предпросмотра, вы можете попробовать изменить эту настройку.
+    
+    На не-linux системах рекомендуется использовать эту опцию, потому что gtk-pixbuf не всегда доступен там, поэтому отключение этой опции не будет загружать превью некоторых изображений.
 settings_label_restart = Вам нужно перезапустить приложение, чтобы применить настройки!
 settings_ignore_other_filesystems = Игнорировать другие файловые системы (только Linux)
 settings_ignore_other_filesystems_tooltip =
@@ -455,7 +467,7 @@ text_view_warnings = ПРЕДУПРЕЖДЕНИЯ
 text_view_errors = ОШИБКИ
 about_window_motto = Эта программа бесплатна для использования и всегда будет оставаться таковой.
 # Various dialog
-dialogs_ask_next_time = Спросить в следующий раз
+dialogs_ask_next_time = Всегда спрашивать
 delete_file_failed = Не удалось удалить файл { $name }. Причина: { $reason }
 delete_title_dialog = Подтверждение удаления
 delete_question_label = Вы уверены, что хотите удалить файлы?
diff --git a/czkawka_gui/i18n/sv/czkawka_gui.ftl b/czkawka_gui/i18n/sv/czkawka_gui.ftl
index 6944ec60b..69984159f 100644
--- a/czkawka_gui/i18n/sv/czkawka_gui.ftl
+++ b/czkawka_gui/i18n/sv/czkawka_gui.ftl
@@ -18,6 +18,11 @@ music_checking_by_tags = Taggar
 music_checking_by_content = Innehåll
 same_music_seconds_label = Minsta fragment sekund varaktighet
 same_music_similarity_label = Maximal skillnad
+music_compare_only_in_title_group = Jämför endast i titeln
+music_compare_only_in_title_group_tooltip =
+    När den är aktiverad grupperas filerna efter titel och jämförs sedan med varandra.
+    
+    Med 10000 filer, i stället nästan 100 miljoner jämförelser brukar det finnas runt 20000 jämförelser.
 same_music_tooltip =
     Sökning efter liknande musikfiler genom dess innehåll kan konfigureras genom att ställa in:
     
@@ -288,6 +293,13 @@ header_about_button_tooltip = Öppnar dialog med info om app.
 
 settings_number_of_threads = Antal använda trådar
 settings_number_of_threads_tooltip = Antal gängor, 0 betyder att alla gängor kommer att användas.
+settings_use_rust_preview = Använd externa bibliotek istället gtk för att ladda förhandsvisningar
+settings_use_rust_preview_tooltip =
+    Att använda gtk-förhandsvisningar kommer ibland att vara snabbare och stödja fler format, men ibland kan det vara precis tvärtom.
+    
+    Om du har problem med att ladda förhandsvisningar, kan du försöka ändra den här inställningen.
+    
+    På icke-Linux-system rekommenderas att använda detta alternativ, eftersom gtk-pixbuf inte alltid är tillgänglig där så inaktivera detta alternativ kommer inte att ladda förhandsvisningar av vissa bilder.
 settings_label_restart = Du måste starta om appen för att tillämpa inställningar!
 settings_ignore_other_filesystems = Ignorera andra filsystem (endast Linux)
 settings_ignore_other_filesystems_tooltip =
diff --git a/czkawka_gui/i18n/tr/czkawka_gui.ftl b/czkawka_gui/i18n/tr/czkawka_gui.ftl
index 70d3332bb..747093954 100644
--- a/czkawka_gui/i18n/tr/czkawka_gui.ftl
+++ b/czkawka_gui/i18n/tr/czkawka_gui.ftl
@@ -18,18 +18,23 @@ music_checking_by_tags = Etiketler
 music_checking_by_content = İçerik
 same_music_seconds_label = Minimal parça saniyesel süresi
 same_music_similarity_label = Maksimum fark
+music_compare_only_in_title_group = Compare only in title
+music_compare_only_in_title_group_tooltip =
+    When enabled, files are grouped by title and then compared to each other.
+    
+    With 10000 files, instead almost 100 million comparisons usually there will be around 20000 comparisons.
 same_music_tooltip =
-    Searching for similar music files by its content can be configured by setting:
+    İçeriğine göre benzer müzik dosyalarının aranması ayarlanarak yapılandırılabilir:
     
-    - The minimum fragment time after which music files can be identified as similar
-    - The maximum difference difference between two tested fragments
+    - Müzik dosyalarının benzer olarak tanımlanabileceği minimum parça süresi
+    - Test edilen iki parça arasındaki maksimum fark
     
-    The key to good results is to find sensible combinations of these parameters, for provided.
+    İyi sonuçlar elde etmenin anahtarı, bu parametrelerin mantıklı kombinasyonlarını bulmaktır.
     
-    Setting the minimum time to 5s and the maximum difference to 1.0, will look for almost identical fragments in the files.
-    A time of 20s and a maximum difference of 6.0, on the other hand, works well for finding remixes/live versions etc.
+    Minimum süreyi 5 saniye ve maksimum farkı 1.0 olarak ayarlamak, dosyalarda neredeyse aynı parçaları arayacaktır.
+    Öte yandan, 20 saniyelik bir süre ve 6.0'lık bir maksimum fark, remiksleri / canlı sürümleri vb. bulmak için iyi çalışır.
     
-    By default, each music file is compared to each other and this can take a lot of time when testing many files, so it is usually better to use reference folders and specifying which files are to be compared with each other(with same amount of files, comparing fingerprints will be faster at least 4x than without reference folders).
+    Varsayılan olarak, her müzik dosyası birbiriyle karşılaştırılır ve çok sayıda dosyayı test ederken bu çok zaman alabilir, bu nedenle genellikle referans klasörleri kullanmak ve hangi dosyaların birbiriyle karşılaştırılacağını belirtmek daha iyidir (aynı miktarda dosya ile, parmak izlerini karşılaştırmak referans klasörleri olmadan en az 4 kat daha hızlı olacaktır).
 music_comparison_checkbox_tooltip =
     Yapay zeka kullanarak benzer müzik dosyalarını arar. 
     Örneğin, bir tümcenin parantezlerini kaldırmak için makine öğrenimini kullanır. 
@@ -50,7 +55,7 @@ duplicate_case_sensitive_name_tooltip =
 duplicate_mode_size_name_combo_box = Boyut ve Ad Karşılaştırma
 duplicate_mode_name_combo_box = Ad Karşılaştırma
 duplicate_mode_size_combo_box = Boyut Karşılaştırma
-duplicate_mode_hash_combo_box = Özet Değeri
+duplicate_mode_hash_combo_box = Hash
 duplicate_hash_type_tooltip =
     Czkawka, 3 tür Sabit Uzunlukta Çıktı (SUÇ) üretimi sunar:
     
@@ -74,13 +79,13 @@ duplicate_check_method_tooltip =
     Czkawka, önbelleği yoğun olarak kullanır. Bu nedenle aynı verilerin ikinci ve sonraki taramaları 
     ilkinden çok daha hızlı olmalıdır.
 image_hash_size_tooltip =
-    Each checked image produces a special hash which can be compared with each other, and a small difference between them means that these images are similar.
+    Kontrol edilen her resim, birbiriyle karşılaştırılabilen özel bir hash üretir ve aralarındaki küçük bir fark, bu görüntülerin benzer olduğu anlamına gelir.
     
-    8 hash size is quite good to find images that are only a little similar to original. With a bigger set of images (>1000), this will produce a big amount of false positives, so I recommend to use  a bigger hash size in this case.
+    8 hash boyutu, orijinaline çok az benzeyen görüntüleri bulmak için oldukça iyidir. Daha büyük bir görüntü kümesinde (>1000), bu büyük miktarda yanlış pozitif üretecektir, bu nedenle bu durumda daha büyük bir karma boyutu kullanmanızı öneririm.
     
-    16 is the default hash size which is quite a good compromise between finding even a little similar images and having only a small amount of hash collisions.
+    16 varsayılan hash boyutudur ve az da olsa benzer resimler bulmakla az miktarda hash çakışması olması arasında oldukça iyi bir uzlaşmadır.
     
-    32 and 64 hashes find only very similar images, but should have almost no false positives (maybe except some images with alpha channel).
+    32 ve 64 hash'ler yalnızca çok benzer görüntüleri bulur, ancak neredeyse hiç piksel farkı olmamalıdır (belki alfa kanallı bazı görüntüler hariç).
 image_resize_filter_tooltip =
     To compute hash of image, the library must first resize it.
     
@@ -142,7 +147,7 @@ main_check_box_broken_files_pdf = Pdf
 main_check_box_broken_files_archive = Arşiv
 main_check_box_broken_files_image = Resim
 check_button_general_same_size = Aynı boyutu yok say
-check_button_general_same_size_tooltip = Ignore files with identical size in results - usually these are 1:1 duplicates
+check_button_general_same_size_tooltip = Sonuçlarda aynı boyutta olan dosyaları yoksay - genellikle bunlar bire bir kopyalardır
 main_label_size_bytes_tooltip = Taramada kullanılacak dosyaların boyutu
 # Upper window
 upper_tree_view_included_folder_column_title = Aranacak Klasörler
@@ -184,15 +189,15 @@ upper_allowed_extensions_tooltip =
     Kullanım örneği: ".exe, IMAGE, VIDEO, .rar, .7z" -- Bu girdi, resimlerin (ör. jpg, png ...), 
     videoların (ör. avi, mp4 ...), exe, rar ve 7z dosyalarının taranacağı anlamına gelir.
 upper_excluded_extensions_tooltip =
-    List of disabled files which will be ignored in scan.
+    Taramada göz ardı edilecek devre dışı bırakılmış dosyaların listesi.
     
-    When using both allowed and disabled extensions, this one has higher priority, so file will not be checked.
+    İzin verilen ve devre dışı bırakılan uzantılar kullanıldığında, bu daha yüksek önceliğe sahiptir, bu nedenle dosya kontrol edilmeyecektir.
 upper_excluded_items_tooltip =
     Hariç tutulan öğeler * joker karakterini içermeli ve virgülle ayrılmalıdır.
     Bu işlev, Hariç Tutulan Dizinlerden daha yavaştır, bu yüzden dikkatli kullanın.
 upper_excluded_items = Hariç Tutulan Öğeler:
 upper_allowed_extensions = İzin Verilen Uzantılar:
-upper_excluded_extensions = Disabled Extensions:
+upper_excluded_extensions = Devre Dışı Uzantılar:
 # Popovers
 popover_select_all = Tümünü seç
 popover_unselect_all = Tümünün seçimini kaldır
@@ -307,6 +312,13 @@ header_about_button_tooltip = Czkawka hakkında bilgi içeren iletişim kutusunu
 
 settings_number_of_threads = Kullanılan iş parçacığı sayısı
 settings_number_of_threads_tooltip = Kullanılan iş parçacığı sayısı, 0 tüm uygun iş parçacıklarının kullanılacağı anlamına gelir.
+settings_use_rust_preview = Use external libraries instead gtk to load previews
+settings_use_rust_preview_tooltip =
+    Using gtk previews will sometimes be faster and support more formats, but sometimes this could be exactly the opposite.
+    
+    If you have problems with loading previews, you may can to try to change this setting.
+    
+    On non-linux systems, it is recommended to use this option, because gtk-pixbuf are not always available there so disabling this option will not load previews of some images.
 settings_label_restart = Ayarları uygulamak için uygulamayı yeniden başlatmanız gerekir!
 settings_ignore_other_filesystems = Öteki dosya sistemlerini yoksay (sadece Linux)
 settings_ignore_other_filesystems_tooltip =
@@ -363,7 +375,7 @@ settings_multiple_image_preview_checkbutton = Resim önizlemesini göster
 settings_multiple_clear_cache_button_tooltip =
     Güncel olmayan girişlerin önbelleğini el ile temizleyin.
     Bu, yalnızca otomatik temizleme devre dışı bırakılmışsa kullanılmalıdır.
-settings_multiple_clear_cache_button = Remove outdated results from cache.
+settings_multiple_clear_cache_button = Güncel olmayan girdileri önbellekten kaldır.
 
 ## Duplicates
 
@@ -451,12 +463,12 @@ progress_scanning_size_name = { $file_number } dosyasının ismi ve boyutu aran
 progress_scanning_name = { $file_number } dosyanın adı tarandı.
 progress_analyzed_partial_hash = { $file_checked }/{ $all_files } dosyanın kısmi-SUÇ kaydı analiz edildi. ;-)
 progress_analyzed_full_hash = { $file_checked }/{ $all_files } dosyanın tam SUÇ kaydı analiz edildi. ;-)
-progress_prehash_cache_loading = Loading prehash cache
-progress_prehash_cache_saving = Saving prehash cache
-progress_hash_cache_loading = Loading hash cache
-progress_hash_cache_saving = Saving hash cache
-progress_cache_loading = Loading cache
-progress_cache_saving = Saving cache
+progress_prehash_cache_loading = Prehash önbelleği yükleniyor
+progress_prehash_cache_saving = Prehash önbelleği kaydediliyor
+progress_hash_cache_loading = Hash önbelleği yükleniyor
+progress_hash_cache_saving = Hash önbelleği kaydediliyor
+progress_cache_loading = Önbellek yükleniyor
+progress_cache_saving = Önbellek kaydediliyor
 progress_current_stage = Geçerli Aşama: { " " }
 progress_all_stages = Tüm Aşamalar: { " " }
 # Saving loading 
@@ -510,7 +522,7 @@ move_file_failed = { $name } dosyası taşınamadı, nedeni: { $reason }
 move_files_title_dialog = Eş dosyaları taşımak istediğiniz klasörü seçin
 move_files_choose_more_than_1_path = Eş dosyaları taşıyabilmek için yalnızca bir yol seçilebilir, { $path_number } seçildi.
 move_stats = { $num_files }/{ $all_files } öğe düzgün şekilde taşındı.
-save_results_to_file = Saved results both to txt and json files into { $name } folder.
+save_results_to_file = Sonuçları hem txt hem de json formatında { $name } klasörüne kaydeder.
 search_not_choosing_any_music = HATA: Müzik araması için en az bir onay kutusu seçmelisiniz.
 search_not_choosing_any_broken_files = HATA: Bozuk dosya araması için en az bir onay kutusu seçmelisiniz.
 include_folders_dialog_title = Aranacak Klasörler
@@ -523,7 +535,7 @@ cache_clear_similar_videos_title = Benzer videolar önbelleğini temizle
 cache_clear_message_label_1 = Güncel olmayan girişleri önbellekten temizlemek istiyor musunuz?
 cache_clear_message_label_2 = Bu işlem, geçersiz dosyalara işaret eden tüm önbellek girişlerini kaldıracak.
 cache_clear_message_label_3 = Bu, önbelleğe yükleme/kaydetme işlemini biraz hızlandırabilir.
-cache_clear_message_label_4 = UYARI: İşlem, takılı olmayan harici sürücülerden önbelleğe alınmış tüm verileri kaldıracaktır. Yani her SUÇ kaydının yeniden oluşturulması gerekecek. ;-)
+cache_clear_message_label_4 = UYARI: İşlem, takılı olmayan harici sürücülerden önbelleğe alınmış tüm verileri kaldıracaktır. Yani her hash kaydının yeniden oluşturulması gerekecek.
 # Show preview
 preview_image_resize_failure = { $name } adlı resim yeniden boyutlandırılamadı.
 preview_image_opening_failure = { $name } adlı resim dosyası açılamadı, nedeni: { $reason }
diff --git a/czkawka_gui/i18n/uk/czkawka_gui.ftl b/czkawka_gui/i18n/uk/czkawka_gui.ftl
index fbe60031b..31e209487 100644
--- a/czkawka_gui/i18n/uk/czkawka_gui.ftl
+++ b/czkawka_gui/i18n/uk/czkawka_gui.ftl
@@ -18,6 +18,11 @@ music_checking_by_tags = Мітки
 music_checking_by_content = Зміст
 same_music_seconds_label = Мінімальна тривалість фрагменту
 same_music_similarity_label = Максимальна різниця
+music_compare_only_in_title_group = Порівняти лише в заголовку
+music_compare_only_in_title_group_tooltip =
+    When enabled, files are grouped by title and then compared to each other.
+    
+    With 10000 files, instead almost 100 million comparisons usually there will be around 20000 comparisons.
 same_music_tooltip =
     Пошук подібних музичних файлів за його вмістом може бути налаштований за налаштуванням:
     
@@ -68,13 +73,13 @@ image_hash_size_tooltip =
     
     32 і 64 пеші знайдуть лише дуже схожі зображення, але не повинні мати практично неправильних позитивних результатів (можливо, окрім деяких зображень з альфа каналом).
 image_resize_filter_tooltip =
-    To compute hash of image, the library must first resize it.
+    Щоб обчислити хеш зображення, бібліотека має спочатку його перемасштабувати.
     
-    Depend on chosen algorithm, the resulting image used to calculate hash will looks a little different.
+    Залежно від обраного алгоритму отримане зображення, яке використовується при хешуванні, може виглядати трохи інакше.
     
-    The fastest algorithm to use, but also the one which gives the worst results, is Nearest. It is enabled by default, because with 16x16 hash size lower quality it is not really visible.
+    Найшвидший алгоритм з низькою якістю — це метод найближчого сусіда, Nearest. Він увімкнений за замовчуванням, тому при розмірі хешу 16×16 погана якість не помітна.
     
-    With 8x8 hash size it is recommended to use a different algorithm than Nearest, to have better groups of images.
+    Якщо розмір хешу 8×8, рекомендується будь-який алгоритм, крім Nearest, щоб краще відрізняти подібні зображення в групах.
 image_hash_alg_tooltip =
     Користувачі можуть вибирати з одного з багатьох алгоритмів обчислення хешу.
     
@@ -288,6 +293,13 @@ header_about_button_tooltip = Відкриває діалогове вікно 
 
 settings_number_of_threads = Кількість використаних тем
 settings_number_of_threads_tooltip = Кількість використаних потоків; встановіть 0, щоб використовувати всі доступні потоки.
+settings_use_rust_preview = Використовувати зовнішні бібліотеки gtk для завантаження прев'ю
+settings_use_rust_preview_tooltip =
+    Використання gtk прев'ю іноді може бути швидшим і підтримувати більше форматів, але іноді це може бути зовсім навпаки.
+    
+    Якщо у вас виникли проблеми з завантаженням превью, можна змінити цей параметр.
+    
+    У нелінійних системах рекомендується використовувати цей параметр, тому, що gtk-pixbuf не завжди доступні, тому вимкнення цього параметру не буде завантажувати попередній перегляд деяких зображень.
 settings_label_restart = Щоб застосувати параметри, необхідно перезапустити додаток!
 settings_ignore_other_filesystems = Ігнорувати інші файлові системи (лише Linux)
 settings_ignore_other_filesystems_tooltip =
@@ -455,7 +467,7 @@ text_view_warnings = ПОПЕРЕДЖЕННЯ
 text_view_errors = ПОМИЛКИ
 about_window_motto = Ця програма безкоштовна для використання і завжди буде такою.
 # Various dialog
-dialogs_ask_next_time = Запитати наступного разу
+dialogs_ask_next_time = Завжди запитувати
 delete_file_failed = Не вдалося видалити файл { $name }. Причина: { $reason }
 delete_title_dialog = Підтвердження видалення
 delete_question_label = Ви впевнені, що бажаєте видалити файли?
diff --git a/czkawka_gui/i18n/zh/czkawka_gui.ftl b/czkawka_gui/i18n/zh/czkawka_gui.ftl
index 22d297e21..18ca4a3e5 100644
--- a/czkawka_gui/i18n/zh/czkawka_gui.ftl
+++ b/czkawka_gui/i18n/zh/czkawka_gui.ftl
@@ -18,6 +18,11 @@ music_checking_by_tags = 标签
 music_checking_by_content = 内容
 same_music_seconds_label = 最小分片秒持续时间
 same_music_similarity_label = 最大差异
+music_compare_only_in_title_group = 仅在标题中比较
+music_compare_only_in_title_group_tooltip =
+    如果启用，文件按标题分类，然后相互比较。
+    
+    如果有一亿文件，而不是几乎1亿文件的比较，通常就会有大约2000万份比较。
 same_music_tooltip =
     通过设置以下内容，可以配置按其内容搜索类似的音乐文件：
     
@@ -288,6 +293,13 @@ header_about_button_tooltip = 打开包含应用程序信息的对话框。
 
 settings_number_of_threads = 使用的线程数
 settings_number_of_threads_tooltip = 使用的线程数，0表示所有可用线程都将被使用。
+settings_use_rust_preview = 使用外部库来加载预览
+settings_use_rust_preview_tooltip =
+    使用 gtk 预览有时会更快，支持更多格式，但有时恰恰相反。
+    
+    如果您在加载预览时遇到问题，您可以尝试更改此设置。
+    
+    关于非Linux系统，建议使用此选项。 因为gtk-pixbuf 并不总是可用的，所以禁用此选项不会加载某些图像的预览。
 settings_label_restart = 您需要重新启动应用才能应用设置！
 settings_ignore_other_filesystems = 忽略其它文件系统 (仅限Linux)
 settings_ignore_other_filesystems_tooltip =
diff --git a/czkawka_gui/src/connect_things/connect_button_save.rs b/czkawka_gui/src/connect_things/connect_button_save.rs
index 552d84b0a..6f61a9ea7 100644
--- a/czkawka_gui/src/connect_things/connect_button_save.rs
+++ b/czkawka_gui/src/connect_things/connect_button_save.rs
@@ -29,24 +29,45 @@ pub fn connect_button_save(gui_data: &GuiData) {
     let shared_buttons = gui_data.shared_buttons.clone();
     let entry_info = gui_data.entry_info.clone();
     let notebook_main = gui_data.main_notebook.notebook_main.clone();
-    buttons_save.connect_clicked(move |_| {
-        let result = match to_notebook_main_enum(notebook_main.current_page().expect("Current page not set")) {
-            NotebookMainEnum::Duplicate => shared_duplication_state.borrow().as_ref().map(|x| x.save_all_in_one("results_duplicates")),
-            NotebookMainEnum::EmptyDirectories => shared_empty_folders_state.borrow().as_ref().map(|x| x.save_all_in_one("results_empty_directories")),
-            NotebookMainEnum::EmptyFiles => shared_empty_files_state.borrow().as_ref().map(|x| x.save_all_in_one("results_empty_files")),
-            NotebookMainEnum::Temporary => shared_temporary_files_state.borrow().as_ref().map(|x| x.save_all_in_one("results_temporary_files")),
-            NotebookMainEnum::BigFiles => shared_big_files_state.borrow().as_ref().map(|x| x.save_all_in_one("results_big_files")),
-            NotebookMainEnum::SimilarImages => shared_similar_images_state.borrow().as_ref().map(|x| x.save_all_in_one("results_similar_images")),
-            NotebookMainEnum::SimilarVideos => shared_similar_videos_state.borrow().as_ref().map(|x| x.save_all_in_one("results_similar_videos")),
-            NotebookMainEnum::SameMusic => shared_same_music_state.borrow().as_ref().map(|x| x.save_all_in_one("results_same_music")),
-            NotebookMainEnum::Symlinks => shared_same_invalid_symlinks.borrow().as_ref().map(|x| x.save_all_in_one("results_invalid_symlinks")),
-            NotebookMainEnum::BrokenFiles => shared_broken_files_state.borrow().as_ref().map(|x| x.save_all_in_one("results_broken_files")),
-            NotebookMainEnum::BadExtensions => shared_bad_extensions_state.borrow().as_ref().map(|x| x.save_all_in_one("results_bad_extensions")),
-        };
 
+    buttons_save.connect_clicked(move |_| {
         let current_path = match env::current_dir() {
             Ok(t) => t.to_string_lossy().to_string(),
-            Err(_) => "<unknown>".to_string(),
+            Err(_) => "__unknown__".to_string(),
+        };
+        let result = match to_notebook_main_enum(notebook_main.current_page().expect("Current page not set")) {
+            NotebookMainEnum::Duplicate => shared_duplication_state.borrow().as_ref().map(|x| x.save_all_in_one(&current_path, "results_duplicates")),
+            NotebookMainEnum::EmptyDirectories => shared_empty_folders_state
+                .borrow()
+                .as_ref()
+                .map(|x| x.save_all_in_one(&current_path, "results_empty_directories")),
+            NotebookMainEnum::EmptyFiles => shared_empty_files_state.borrow().as_ref().map(|x| x.save_all_in_one(&current_path, "results_empty_files")),
+            NotebookMainEnum::Temporary => shared_temporary_files_state
+                .borrow()
+                .as_ref()
+                .map(|x| x.save_all_in_one(&current_path, "results_temporary_files")),
+            NotebookMainEnum::BigFiles => shared_big_files_state.borrow().as_ref().map(|x| x.save_all_in_one(&current_path, "results_big_files")),
+            NotebookMainEnum::SimilarImages => shared_similar_images_state
+                .borrow()
+                .as_ref()
+                .map(|x| x.save_all_in_one(&current_path, "results_similar_images")),
+            NotebookMainEnum::SimilarVideos => shared_similar_videos_state
+                .borrow()
+                .as_ref()
+                .map(|x| x.save_all_in_one(&current_path, "results_similar_videos")),
+            NotebookMainEnum::SameMusic => shared_same_music_state.borrow().as_ref().map(|x| x.save_all_in_one(&current_path, "results_same_music")),
+            NotebookMainEnum::Symlinks => shared_same_invalid_symlinks
+                .borrow()
+                .as_ref()
+                .map(|x| x.save_all_in_one(&current_path, "results_invalid_symlinks")),
+            NotebookMainEnum::BrokenFiles => shared_broken_files_state
+                .borrow()
+                .as_ref()
+                .map(|x| x.save_all_in_one(&current_path, "results_broken_files")),
+            NotebookMainEnum::BadExtensions => shared_bad_extensions_state
+                .borrow()
+                .as_ref()
+                .map(|x| x.save_all_in_one(&current_path, "results_bad_extensions")),
         };
 
         match result.expect("Tried to save results, without running scan(bug which needs to be fixed)") {
diff --git a/czkawka_gui/src/language_functions.rs b/czkawka_gui/src/language_functions.rs
index 685ede361..20b2ababf 100644
--- a/czkawka_gui/src/language_functions.rs
+++ b/czkawka_gui/src/language_functions.rs
@@ -49,6 +49,10 @@ pub const LANGUAGES_ALL: &[Language] = &[
         combo_box_text: "Português (Portuguese)",
         short_text: "pt",
     },
+    Language {
+        combo_box_text: "Português Brasileiro (Brazilian Portuguese)",
+        short_text: "pt-BR",
+    },
     Language {
         combo_box_text: "简体中文 (Simplified Chinese)",
         short_text: "zh",
diff --git a/justfile b/justfile
index e312fb09f..4495c9a78 100644
--- a/justfile
+++ b/justfile
@@ -20,7 +20,7 @@ krokiet_dark:
 
 cli +args:
     RUST_BACKTRACE=1 cargo run --bin czkawka_cli -- {{args}}
-cli_r args:
+cli_r +args:
     RUST_BACKTRACE=1 cargo run --bin czkawka_cli --release -- {{args}}
 cli_help:
     cargo run --bin czkawka_cli -- --help
diff --git a/krokiet/README.md b/krokiet/README.md
index 523a796d9..e1c460bda 100644
--- a/krokiet/README.md
+++ b/krokiet/README.md
@@ -1,9 +1,8 @@
 # Krokiet
 
-Krokiet is new Czkawka frontend written in Slint, which uses Rust in opposite to Gtk 4 frontend which uses mostly
-C code.
+Krokiet is new Czkawka frontend written in Slint.
 
-![Krokiet](https://github.com/qarmin/czkawka/assets/41945903/52628a29-ecd6-4692-9ee4-8a680c889193)
+![Krokiet](https://github.com/user-attachments/assets/531cc479-8900-4db6-aa60-598284e7f815)
 
 Different toolkit means different look, limitations and features, so you should not expect same features like in Gtk 4
 frontend(but of course I want implement most of the features from other project).
diff --git a/krokiet/icons/krokiet_dir.svg b/krokiet/icons/krokiet_dir.svg
new file mode 100644
index 000000000..74bf927b2
--- /dev/null
+++ b/krokiet/icons/krokiet_dir.svg
@@ -0,0 +1,1 @@
+<svg height="800" viewBox="0 0 24 24" width="800" xmlns="http://www.w3.org/2000/svg"><path d="m20 6h-8l-1.234019-2h-6.765981c-1.1 0-1.99.9-1.99 2l-.01 12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2v-10c0-1.1-.9-2-2-2zm.353272 12.646417-16.9353697-.074836.0407418-11.2095966 16.8454139.0812889z"/></svg>
\ No newline at end of file
diff --git a/krokiet/icons/krokiet_info.svg b/krokiet/icons/krokiet_info.svg
new file mode 100644
index 000000000..a4041af0a
--- /dev/null
+++ b/krokiet/icons/krokiet_info.svg
@@ -0,0 +1,1 @@
+<svg enable-background="new 0 0 512 512" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><path d="m24.773302 46.565159h177.47093v34.719147h-177.47093z"/><path d="m24.509338 89.189049h320.15558v34.719147h-320.15558z" stroke-width="1.34313"/><path d="m24.301399 131.74066h258.78989v34.719147h-258.78989z" stroke-width="1.20756"/><path d="m24.437267 174.7984h355.40219v34.719147h-355.40219z" stroke-width="1.41513"/><path d="m24.333075 218.5652h295.98373v34.719147h-295.98373z" stroke-width="1.29143"/><path d="m23.53825 261.53271h230.1015v34.719147h-230.1015z" stroke-width="1.13867"/><path d="m23.328859 306.26999h367.64264v34.719147h-367.64264z" stroke-width="1.43929"/><path d="m23.514387 351.94516h177.47093v34.719147h-177.47093z"/><path d="m23.365833 394.39001h311.79446v34.719147h-311.79446z" stroke-width="1.32547"/><path d="m23.207998 438.19919h425.50278v34.719147h-425.50278z" stroke-width="1.54842"/></svg>
\ No newline at end of file
diff --git a/krokiet/icons/krokiet_save.svg b/krokiet/icons/krokiet_save.svg
new file mode 100644
index 000000000..4812bda4e
--- /dev/null
+++ b/krokiet/icons/krokiet_save.svg
@@ -0,0 +1,1 @@
+<svg clip-rule="evenodd" fill-rule="evenodd" height="2048" image-rendering="optimizeQuality" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" viewBox="0 0 2048 2048" width="2048" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h2048v2048h-2048z" fill="none"/><path d="m236.71658 507.59377h82.08745v1271.91523h-82.08745z" stroke-width=".678476"/><path d="m474.29746 533.31919h82.08745v398.17011h-82.08745z" stroke-width=".379612"/><path d="m1022.7429 849.58334v82.08745h-519.64533v-82.08745z" stroke-width=".43367"/><path d="m966.21052 532.48314h82.08738v398.1701h-82.08738z" stroke-width=".379612"/><path d="m235.65532 1746.6133h1546.04568v85.1226h-1546.04568z" stroke-width=".761729"/><path d="m236.6738 507.31956h1076.3544v85.1226h-1076.3544z" stroke-width=".635575"/><path d="m1311.7633 507.6448 469.3371 399.07317-55.1405 64.84894-469.3371-399.07317z" stroke-width=".480842"/><path d="m1699.1531 904.94712h82.0874v925.90568h-82.0874z" stroke-width=".57888"/><ellipse cx="985.26324" cy="1279.5432" rx="166.93671" ry="169.26324"/></svg>
\ No newline at end of file
diff --git a/krokiet/icons/krokiet_select.svg b/krokiet/icons/krokiet_select.svg
index e9be3889b..c6eb3fe62 100644
--- a/krokiet/icons/krokiet_select.svg
+++ b/krokiet/icons/krokiet_select.svg
@@ -1,1 +1,1 @@
-<svg enable-background="new 0 0 256 256" viewBox="0 0 256 256" xmlns="http://www.w3.org/2000/svg"><text/><path d="m88.762429 63.360798s-.422221 3.866804 1.564925 14.586544c.702752 3.791076 1.755116 8.245298 3.305133 12.476376.746597 2.038002 1.623507 4.065074 2.655645 5.960422 1.019612 1.872363 2.214311 3.65987 3.622478 5.21535 1.41229 1.55999 3.06238 2.91163 4.98677 3.86575 1.9601.97182 4.13058 1.49307 6.48306 1.45457 2.39714-.0393 4.86216-.65723 7.35925-1.80738 2.58382-1.1901 5.18603-2.9417 7.79784-5.191517 5.76675-4.967507 11.58647-12.371239 17.35185-21.488295 7.58688-11.997444 14.68709-26.35706 20.48863-39.477373 0 0-5.64097-3.03885-5.64097-3.03885s-5.64096-3.038852-5.64096-3.038852c-5.71885 12.933369-12.19317 26.718281-18.91857 38.402125-5.11472 8.885674-9.85335 15.642247-14.17638 20.178223-1.93003 2.025082-3.68252 3.507311-5.26449 4.54966-1.51207.996293-2.85107 1.579658-4.03668 1.865955-1.15181.278137-2.25333.299771-3.34763.05507-1.09846-.245557-2.22523-.768213-3.3798-1.611286-1.15559-.843802-2.28711-1.971265-3.38107-3.344183-1.103294-1.384656-2.133049-2.974344-3.086024-4.686454-1.985446-3.567097-3.576614-7.554834-4.796996-11.098968-3.437201-9.981995-3.946011-13.826957-3.946011-13.826957z" stroke-width="1.64865"/><g stroke-width="1.52107"><path d="m166.32011 17.387035h12.277943v104.96534h-12.277943z"/><path d="m73.619453 17.351675h12.277943v104.96534h-12.277943z"/><path d="m17.369175-178.59412h12.277943v104.96534h-12.277943z" transform="rotate(90)"/><path d="m110.02438-178.60258h12.277943v104.96534h-12.277943z" transform="rotate(90)"/><path d="m167.52612 131.14308h12.277943v104.96534h-12.277943z"/><path d="m74.82547 131.10773h12.277943v104.96534h-12.277943z"/><path d="m131.12523-179.80013h12.277943v104.96534h-12.277943z" transform="rotate(90)"/><path d="m223.78044-179.80859h12.277943v104.96534h-12.277943z" transform="rotate(90)"/></g></svg>
\ No newline at end of file
+<svg enable-background="new 0 0 256 256" viewBox="0 0 256 256" xmlns="http://www.w3.org/2000/svg"><text/><path d="m88.762429 63.360798s-.422221 3.866804 1.564925 14.586544c.702752 3.791076 1.755116 8.245298 3.305133 12.476376.746597 2.038002 1.623507 4.065074 2.655645 5.960422 1.019612 1.872363 2.214311 3.65987 3.622478 5.21535 1.41229 1.55999 3.06238 2.91163 4.98677 3.86575 1.9601.97182 4.13058 1.49307 6.48306 1.45457 2.39714-.0393 4.86216-.65723 7.35925-1.80738 2.58382-1.1901 5.18603-2.9417 7.79784-5.191517 5.76675-4.967507 11.58647-12.371239 17.35185-21.488295 7.58688-11.997444 14.68709-26.35706 20.48863-39.477373 0 0-5.64097-3.03885-5.64097-3.03885s-5.64096-3.038852-5.64096-3.038852c-5.71885 12.933369-12.19317 26.718281-18.91857 38.402125-5.11472 8.885674-9.85335 15.642247-14.17638 20.178223-1.93003 2.025082-3.68252 3.507311-5.26449 4.54966-1.51207.996293-2.85107 1.579658-4.03668 1.865955-1.15181.278137-2.25333.299771-3.34763.05507-1.09846-.245557-2.22523-.768213-3.3798-1.611286-1.15559-.843802-2.28711-1.971265-3.38107-3.344183-1.103294-1.384656-2.133049-2.974344-3.086024-4.686454-1.985446-3.567097-3.576614-7.554834-4.796996-11.098968-3.437201-9.981995-3.946011-13.826957-3.946011-13.826957z" stroke-width="1.64865"/><g stroke-width="1.52107"><path d="m166.32011 17.387035h12.277943v104.96534h-12.277943z"/><path d="m73.619453 17.351675h12.277943v104.96534h-12.277943z"/><path d="m17.369175-178.59412h12.277943v104.96534h-12.277943z" transform="rotate(90)"/><path d="m110.02438-178.60258h12.277943v104.96534h-12.277943z" transform="rotate(90)"/><path d="m167.52612 131.14308h12.277943v104.96534h-12.277943z"/><path d="m74.82547 131.10773h12.277943v104.96534h-12.277943z"/><g transform="rotate(90)"><path d="m131.12523-179.80013h12.277943v104.96534h-12.277943z"/><path d="m223.78044-179.80859h12.277943v104.96534h-12.277943z"/></g></g></svg>
\ No newline at end of file
diff --git a/krokiet/icons/subsettings.svg b/krokiet/icons/subsettings.svg
index 45e04f91c..c095ee5e6 100644
--- a/krokiet/icons/subsettings.svg
+++ b/krokiet/icons/subsettings.svg
@@ -1,1 +1,1 @@
-<svg viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><path d="m259.96 178.63c-116.38.46054-109.81 154.42-4.8963 157.07 110.82 2.7975 108.63-157.48 4.8963-157.07zm-4.5114 238.17-59.661 58.623c-3.663 4.3684-9.9047 5.5348-14.898 2.784l-79.778-46.06c-4.7847-2.888-6.9422-8.6968-5.203-14.008l22.977-56.917c-9.1283-11.972-16.619-25.108-22.274-39.06l-61.08-8.7064c-5.5804-.89998-9.7077-5.679-9.7856-11.331l-.13413-91.888c-.02721-5.6801 4.0661-10.543 9.6676-11.485l61.227-8.6679c2.8571-7.0258 6.169-13.858 9.9147-20.453 3.7735-6.4529 7.9798-12.643 12.59-18.527l-23.107-57.358c-1.985-5.3221.17966-11.298 5.1124-14.115l79.649-45.836c4.933-2.7634 11.138-1.5821 14.711 2.8005l66.966 73.793c-6.8372 161.75-1.2386 214.48-6.8946 306.41z"/><path d="m275 50h200v20h-200z" stroke-width=".8921"/><path d="m275 85h200v20h-200z" stroke-width=".8921"/><path d="m275 120h200v20h-200z" stroke-width=".8921"/><path d="m275 155h200v20h-200z" stroke-width=".8921"/><path d="m335 190h140v20h-140z" stroke-width=".74638"/><path d="m345 225h130v20h-130z" stroke-width=".71923"/><g transform="scale(1 -1)"><path d="m273.16-466.69h199.81v20h-199.81z" stroke-width=".89168"/><path d="m273.16-431.69h199.81v20h-199.81z" stroke-width=".89168"/><path d="m273.16-396.69h199.81v20h-199.81z" stroke-width=".89168"/><path d="m273.16-361.69h199.81v20h-199.81z" stroke-width=".89168"/><path d="m333.1-326.69h139.87v20h-139.87z" stroke-width=".74603"/><path d="m343.09-291.69h129.88v20h-129.88z" stroke-width=".71889"/></g></svg>
\ No newline at end of file
+<svg viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><path d="m259.96 178.63c-116.38.46054-109.81 154.42-4.8963 157.07 110.82 2.7975 108.63-157.48 4.8963-157.07zm-4.5114 238.17-59.661 58.623c-3.663 4.3684-9.9047 5.5348-14.898 2.784l-79.778-46.06c-4.7847-2.888-6.9422-8.6968-5.203-14.008l22.977-56.917c-9.1283-11.972-16.619-25.108-22.274-39.06l-61.08-8.7064c-5.5804-.89998-9.7077-5.679-9.7856-11.331l-.13413-91.888c-.02721-5.6801 4.0661-10.543 9.6676-11.485l61.227-8.6679c2.8571-7.0258 6.169-13.858 9.9147-20.453 3.7735-6.4529 7.9798-12.643 12.59-18.527l-23.107-57.358c-1.985-5.3221.17966-11.298 5.1124-14.115l79.649-45.836c4.933-2.7634 11.138-1.5821 14.711 2.8005l66.966 73.793c-6.8372 161.75-1.2386 214.48-6.8946 306.41z"/><g stroke-width=".8921"><path d="m275 50h200v20h-200z"/><path d="m275 85h200v20h-200z"/><path d="m275 120h200v20h-200z"/><path d="m275 155h200v20h-200z"/></g><path d="m335 190h140v20h-140z" stroke-width=".74638"/><path d="m345 225h130v20h-130z" stroke-width=".71923"/><g transform="scale(1 -1)"><g stroke-width=".89168"><path d="m273.16-466.69h199.81v20h-199.81z"/><path d="m273.16-431.69h199.81v20h-199.81z"/><path d="m273.16-396.69h199.81v20h-199.81z"/><path d="m273.16-361.69h199.81v20h-199.81z"/></g><path d="m333.1-326.69h139.87v20h-139.87z" stroke-width=".74603"/><path d="m343.09-291.69h129.88v20h-129.88z" stroke-width=".71889"/></g></svg>
\ No newline at end of file
diff --git a/krokiet/src/connect_save.rs b/krokiet/src/connect_save.rs
new file mode 100644
index 000000000..5ed32aef3
--- /dev/null
+++ b/krokiet/src/connect_save.rs
@@ -0,0 +1,24 @@
+use std::sync::{Arc, Mutex};
+
+use rfd::FileDialog;
+use slint::ComponentHandle;
+
+use crate::shared_models::SharedModels;
+use crate::{Callabler, GuiState, MainWindow};
+
+pub fn connect_save(app: &MainWindow, shared_models: Arc<Mutex<SharedModels>>) {
+    let a = app.as_weak();
+    app.global::<Callabler>().on_save_results(move || {
+        let app = a.upgrade().expect("Failed to upgrade app :(");
+        let active_tab = app.global::<GuiState>().get_active_tab();
+
+        let file_dialog = FileDialog::new();
+        let Some(folder) = file_dialog.pick_folder() else {
+            return;
+        };
+        let folder_str = folder.to_string_lossy();
+        if let Err(e) = shared_models.lock().unwrap().save_results(active_tab, &folder_str) {
+            app.global::<GuiState>().set_info_text(e.into());
+        }
+    });
+}
diff --git a/krokiet/src/connect_scan.rs b/krokiet/src/connect_scan.rs
index 4324b47cf..04c331155 100644
--- a/krokiet/src/connect_scan.rs
+++ b/krokiet/src/connect_scan.rs
@@ -1,4 +1,5 @@
 use std::rc::Rc;
+use std::sync::{Arc, Mutex};
 use std::thread;
 
 use chrono::DateTime;
@@ -30,9 +31,10 @@ use crate::settings::{
     get_resize_algorithm_idx, SettingsCustom, ALLOWED_AUDIO_CHECK_TYPE_VALUES, ALLOWED_BIG_FILE_SIZE_VALUES, ALLOWED_DUPLICATES_CHECK_METHOD_VALUES,
     ALLOWED_DUPLICATES_HASH_TYPE_VALUES, ALLOWED_IMAGE_HASH_ALG_VALUES, ALLOWED_RESIZE_ALGORITHM_VALUES,
 };
+use crate::shared_models::SharedModels;
 use crate::{CurrentTab, GuiState, MainListModel, MainWindow, ProgressToSend};
 
-pub fn connect_scan_button(app: &MainWindow, progress_sender: Sender<ProgressData>, stop_receiver: Receiver<()>) {
+pub fn connect_scan_button(app: &MainWindow, progress_sender: Sender<ProgressData>, stop_receiver: Receiver<()>, shared_models: Arc<Mutex<SharedModels>>) {
     let a = app.as_weak();
     app.on_scan_starting(move |active_tab| {
         let app = a.upgrade().expect("Failed to upgrade app :(");
@@ -58,40 +60,42 @@ pub fn connect_scan_button(app: &MainWindow, progress_sender: Sender<ProgressDat
 
         let custom_settings = collect_settings(&app);
 
+        let cloned_model = Arc::clone(&shared_models);
+
         let a = app.as_weak();
         match active_tab {
             CurrentTab::DuplicateFiles => {
-                scan_duplicates(a, progress_sender, stop_receiver, custom_settings);
+                scan_duplicates(a, progress_sender, stop_receiver, custom_settings, cloned_model);
             }
             CurrentTab::EmptyFolders => {
-                scan_empty_folders(a, progress_sender, stop_receiver, custom_settings);
+                scan_empty_folders(a, progress_sender, stop_receiver, custom_settings, cloned_model);
             }
             CurrentTab::BigFiles => {
-                scan_big_files(a, progress_sender, stop_receiver, custom_settings);
+                scan_big_files(a, progress_sender, stop_receiver, custom_settings, cloned_model);
             }
             CurrentTab::EmptyFiles => {
-                scan_empty_files(a, progress_sender, stop_receiver, custom_settings);
+                scan_empty_files(a, progress_sender, stop_receiver, custom_settings, cloned_model);
             }
             CurrentTab::SimilarImages => {
-                scan_similar_images(a, progress_sender, stop_receiver, custom_settings);
+                scan_similar_images(a, progress_sender, stop_receiver, custom_settings, cloned_model);
             }
             CurrentTab::SimilarVideos => {
-                scan_similar_videos(a, progress_sender, stop_receiver, custom_settings);
+                scan_similar_videos(a, progress_sender, stop_receiver, custom_settings, cloned_model);
             }
             CurrentTab::SimilarMusic => {
-                scan_similar_music(a, progress_sender, stop_receiver, custom_settings);
+                scan_similar_music(a, progress_sender, stop_receiver, custom_settings, cloned_model);
             }
             CurrentTab::InvalidSymlinks => {
-                scan_invalid_symlinks(a, progress_sender, stop_receiver, custom_settings);
+                scan_invalid_symlinks(a, progress_sender, stop_receiver, custom_settings, cloned_model);
             }
             CurrentTab::BadExtensions => {
-                scan_bad_extensions(a, progress_sender, stop_receiver, custom_settings);
+                scan_bad_extensions(a, progress_sender, stop_receiver, custom_settings, cloned_model);
             }
             CurrentTab::BrokenFiles => {
-                scan_broken_files(a, progress_sender, stop_receiver, custom_settings);
+                scan_broken_files(a, progress_sender, stop_receiver, custom_settings, cloned_model);
             }
             CurrentTab::TemporaryFiles => {
-                scan_temporary_files(a, progress_sender, stop_receiver, custom_settings);
+                scan_temporary_files(a, progress_sender, stop_receiver, custom_settings, cloned_model);
             }
             CurrentTab::Settings | CurrentTab::About => panic!("Button should be disabled"),
         }
@@ -100,7 +104,13 @@ pub fn connect_scan_button(app: &MainWindow, progress_sender: Sender<ProgressDat
 
 // Scan Duplicates
 
-fn scan_duplicates(a: Weak<MainWindow>, progress_sender: Sender<ProgressData>, stop_receiver: Receiver<()>, custom_settings: SettingsCustom) {
+fn scan_duplicates(
+    a: Weak<MainWindow>,
+    progress_sender: Sender<ProgressData>,
+    stop_receiver: Receiver<()>,
+    custom_settings: SettingsCustom,
+    shared_models: Arc<Mutex<SharedModels>>,
+) {
     thread::Builder::new()
         .stack_size(DEFAULT_THREAD_SIZE)
         .spawn(move || {
@@ -169,6 +179,8 @@ fn scan_duplicates(a: Weak<MainWindow>, progress_sender: Sender<ProgressData>, s
                 vec.par_sort_unstable_by(|a, b| split_path_compare(a.path.as_path(), b.path.as_path()));
             }
 
+            shared_models.lock().unwrap().shared_duplication_state = Some(item);
+
             a.upgrade_in_event_loop(move |app| {
                 write_duplicate_results(&app, vector, messages);
             })
@@ -213,7 +225,13 @@ fn prepare_data_model_duplicates(fe: &DuplicateEntry) -> (ModelRc<SharedString>,
 }
 
 ////////////////////////////////////////// Empty Folders
-fn scan_empty_folders(a: Weak<MainWindow>, progress_sender: Sender<ProgressData>, stop_receiver: Receiver<()>, custom_settings: SettingsCustom) {
+fn scan_empty_folders(
+    a: Weak<MainWindow>,
+    progress_sender: Sender<ProgressData>,
+    stop_receiver: Receiver<()>,
+    custom_settings: SettingsCustom,
+    shared_models: Arc<Mutex<SharedModels>>,
+) {
     thread::Builder::new()
         .stack_size(DEFAULT_THREAD_SIZE)
         .spawn(move || {
@@ -226,6 +244,8 @@ fn scan_empty_folders(a: Weak<MainWindow>, progress_sender: Sender<ProgressData>
 
             vector.par_sort_unstable_by(|a, b| split_path_compare(a.path.as_path(), b.path.as_path()));
 
+            shared_models.lock().unwrap().shared_empty_folders_state = Some(item);
+
             a.upgrade_in_event_loop(move |app| {
                 write_empty_folders_results(&app, vector, messages);
             })
@@ -260,7 +280,13 @@ fn prepare_data_model_empty_folders(fe: &FolderEntry) -> (ModelRc<SharedString>,
 }
 
 ////////////////////////////////////////// Big files
-fn scan_big_files(a: Weak<MainWindow>, progress_sender: Sender<ProgressData>, stop_receiver: Receiver<()>, custom_settings: SettingsCustom) {
+fn scan_big_files(
+    a: Weak<MainWindow>,
+    progress_sender: Sender<ProgressData>,
+    stop_receiver: Receiver<()>,
+    custom_settings: SettingsCustom,
+    shared_models: Arc<Mutex<SharedModels>>,
+) {
     thread::Builder::new()
         .stack_size(DEFAULT_THREAD_SIZE)
         .spawn(move || {
@@ -280,6 +306,8 @@ fn scan_big_files(a: Weak<MainWindow>, progress_sender: Sender<ProgressData>, st
                 vector.par_sort_unstable_by_key(|fe| fe.size);
             }
 
+            shared_models.lock().unwrap().shared_big_files_state = Some(item);
+
             a.upgrade_in_event_loop(move |app| {
                 write_big_files_results(&app, vector, messages);
             })
@@ -316,7 +344,13 @@ fn prepare_data_model_big_files(fe: &FileEntry) -> (ModelRc<SharedString>, Model
 }
 
 ///////////////////////////////// Empty Files
-fn scan_empty_files(a: Weak<MainWindow>, progress_sender: Sender<ProgressData>, stop_receiver: Receiver<()>, custom_settings: SettingsCustom) {
+fn scan_empty_files(
+    a: Weak<MainWindow>,
+    progress_sender: Sender<ProgressData>,
+    stop_receiver: Receiver<()>,
+    custom_settings: SettingsCustom,
+    shared_models: Arc<Mutex<SharedModels>>,
+) {
     thread::Builder::new()
         .stack_size(DEFAULT_THREAD_SIZE)
         .spawn(move || {
@@ -329,6 +363,8 @@ fn scan_empty_files(a: Weak<MainWindow>, progress_sender: Sender<ProgressData>,
 
             vector.par_sort_unstable_by(|a, b| split_path_compare(a.path.as_path(), b.path.as_path()));
 
+            shared_models.lock().unwrap().shared_empty_files_state = Some(item);
+
             a.upgrade_in_event_loop(move |app| {
                 write_empty_files_results(&app, vector, messages);
             })
@@ -364,7 +400,13 @@ fn prepare_data_model_empty_files(fe: &FileEntry) -> (ModelRc<SharedString>, Mod
 }
 // Scan Similar Images
 
-fn scan_similar_images(a: Weak<MainWindow>, progress_sender: Sender<ProgressData>, stop_receiver: Receiver<()>, custom_settings: SettingsCustom) {
+fn scan_similar_images(
+    a: Weak<MainWindow>,
+    progress_sender: Sender<ProgressData>,
+    stop_receiver: Receiver<()>,
+    custom_settings: SettingsCustom,
+    shared_models: Arc<Mutex<SharedModels>>,
+) {
     thread::Builder::new()
         .stack_size(DEFAULT_THREAD_SIZE)
         .spawn(move || {
@@ -406,6 +448,8 @@ fn scan_similar_images(a: Weak<MainWindow>, progress_sender: Sender<ProgressData
                 vec_fe.par_sort_unstable_by_key(|e| e.similarity);
             }
 
+            shared_models.lock().unwrap().shared_similar_images_state = Some(item);
+
             a.upgrade_in_event_loop(move |app| {
                 write_similar_images_results(&app, vector, messages, hash_size);
             })
@@ -453,7 +497,13 @@ fn prepare_data_model_similar_images(fe: &ImagesEntry, hash_size: u8) -> (ModelR
 
 // Scan Similar Videos
 
-fn scan_similar_videos(a: Weak<MainWindow>, progress_sender: Sender<ProgressData>, stop_receiver: Receiver<()>, custom_settings: SettingsCustom) {
+fn scan_similar_videos(
+    a: Weak<MainWindow>,
+    progress_sender: Sender<ProgressData>,
+    stop_receiver: Receiver<()>,
+    custom_settings: SettingsCustom,
+    shared_models: Arc<Mutex<SharedModels>>,
+) {
     thread::Builder::new()
         .stack_size(DEFAULT_THREAD_SIZE)
         .spawn(move || {
@@ -486,6 +536,8 @@ fn scan_similar_videos(a: Weak<MainWindow>, progress_sender: Sender<ProgressData
                 vec_fe.par_sort_unstable_by(|a, b| split_path_compare(a.path.as_path(), b.path.as_path()));
             }
 
+            shared_models.lock().unwrap().shared_similar_videos_state = Some(item);
+
             a.upgrade_in_event_loop(move |app| {
                 write_similar_videos_results(&app, vector, messages);
             })
@@ -529,7 +581,13 @@ fn prepare_data_model_similar_videos(fe: &VideosEntry) -> (ModelRc<SharedString>
     (data_model_str, data_model_int)
 }
 // Scan Similar Music
-fn scan_similar_music(a: Weak<MainWindow>, progress_sender: Sender<ProgressData>, stop_receiver: Receiver<()>, custom_settings: SettingsCustom) {
+fn scan_similar_music(
+    a: Weak<MainWindow>,
+    progress_sender: Sender<ProgressData>,
+    stop_receiver: Receiver<()>,
+    custom_settings: SettingsCustom,
+    shared_models: Arc<Mutex<SharedModels>>,
+) {
     thread::Builder::new()
         .stack_size(DEFAULT_THREAD_SIZE)
         .spawn(move || {
@@ -593,6 +651,8 @@ fn scan_similar_music(a: Weak<MainWindow>, progress_sender: Sender<ProgressData>
                 vec_fe.par_sort_unstable_by(|a, b| split_path_compare(a.path.as_path(), b.path.as_path()));
             }
 
+            shared_models.lock().unwrap().shared_same_music_state = Some(item);
+
             a.upgrade_in_event_loop(move |app| {
                 write_similar_music_results(&app, vector, messages);
             })
@@ -642,7 +702,13 @@ fn prepare_data_model_similar_music(fe: &MusicEntry) -> (ModelRc<SharedString>,
     (data_model_str, data_model_int)
 }
 // Invalid Symlinks
-fn scan_invalid_symlinks(a: Weak<MainWindow>, progress_sender: Sender<ProgressData>, stop_receiver: Receiver<()>, custom_settings: SettingsCustom) {
+fn scan_invalid_symlinks(
+    a: Weak<MainWindow>,
+    progress_sender: Sender<ProgressData>,
+    stop_receiver: Receiver<()>,
+    custom_settings: SettingsCustom,
+    shared_models: Arc<Mutex<SharedModels>>,
+) {
     thread::Builder::new()
         .stack_size(DEFAULT_THREAD_SIZE)
         .spawn(move || {
@@ -656,6 +722,8 @@ fn scan_invalid_symlinks(a: Weak<MainWindow>, progress_sender: Sender<ProgressDa
 
             vector.par_sort_unstable_by(|a, b| split_path_compare(a.path.as_path(), b.path.as_path()));
 
+            shared_models.lock().unwrap().shared_same_invalid_symlinks = Some(item);
+
             a.upgrade_in_event_loop(move |app| {
                 write_invalid_symlinks_results(&app, vector, messages);
             })
@@ -690,7 +758,13 @@ fn prepare_data_model_invalid_symlinks(fe: &SymlinksFileEntry) -> (ModelRc<Share
     let data_model_int = VecModel::from_slice(&[modification_split.0, modification_split.1]);
     (data_model_str, data_model_int)
 } ////////////////////////////////////////// Temporary Files
-fn scan_temporary_files(a: Weak<MainWindow>, progress_sender: Sender<ProgressData>, stop_receiver: Receiver<()>, custom_settings: SettingsCustom) {
+fn scan_temporary_files(
+    a: Weak<MainWindow>,
+    progress_sender: Sender<ProgressData>,
+    stop_receiver: Receiver<()>,
+    custom_settings: SettingsCustom,
+    shared_models: Arc<Mutex<SharedModels>>,
+) {
     thread::Builder::new()
         .stack_size(DEFAULT_THREAD_SIZE)
         .spawn(move || {
@@ -704,6 +778,8 @@ fn scan_temporary_files(a: Weak<MainWindow>, progress_sender: Sender<ProgressDat
 
             vector.par_sort_unstable_by(|a, b| split_path_compare(a.path.as_path(), b.path.as_path()));
 
+            shared_models.lock().unwrap().shared_temporary_files_state = Some(item);
+
             a.upgrade_in_event_loop(move |app| {
                 write_temporary_files_results(&app, vector, messages);
             })
@@ -737,7 +813,13 @@ fn prepare_data_model_temporary_files(fe: &TemporaryFileEntry) -> (ModelRc<Share
     (data_model_str, data_model_int)
 }
 ////////////////////////////////////////// Broken Files
-fn scan_broken_files(a: Weak<MainWindow>, progress_sender: Sender<ProgressData>, stop_receiver: Receiver<()>, custom_settings: SettingsCustom) {
+fn scan_broken_files(
+    a: Weak<MainWindow>,
+    progress_sender: Sender<ProgressData>,
+    stop_receiver: Receiver<()>,
+    custom_settings: SettingsCustom,
+    shared_models: Arc<Mutex<SharedModels>>,
+) {
     thread::Builder::new()
         .stack_size(DEFAULT_THREAD_SIZE)
         .spawn(move || {
@@ -774,6 +856,8 @@ fn scan_broken_files(a: Weak<MainWindow>, progress_sender: Sender<ProgressData>,
 
             vector.par_sort_unstable_by(|a, b| split_path_compare(a.path.as_path(), b.path.as_path()));
 
+            shared_models.lock().unwrap().shared_broken_files_state = Some(item);
+
             a.upgrade_in_event_loop(move |app| {
                 write_broken_files_results(&app, vector, messages);
             })
@@ -810,7 +894,13 @@ fn prepare_data_model_broken_files(fe: &BrokenEntry) -> (ModelRc<SharedString>,
     (data_model_str, data_model_int)
 }
 ////////////////////////////////////////// Bad Extensions
-fn scan_bad_extensions(a: Weak<MainWindow>, progress_sender: Sender<ProgressData>, stop_receiver: Receiver<()>, custom_settings: SettingsCustom) {
+fn scan_bad_extensions(
+    a: Weak<MainWindow>,
+    progress_sender: Sender<ProgressData>,
+    stop_receiver: Receiver<()>,
+    custom_settings: SettingsCustom,
+    shared_models: Arc<Mutex<SharedModels>>,
+) {
     thread::Builder::new()
         .stack_size(DEFAULT_THREAD_SIZE)
         .spawn(move || {
@@ -824,6 +914,8 @@ fn scan_bad_extensions(a: Weak<MainWindow>, progress_sender: Sender<ProgressData
 
             vector.par_sort_unstable_by(|a, b| split_path_compare(a.path.as_path(), b.path.as_path()));
 
+            shared_models.lock().unwrap().shared_bad_extensions_state = Some(item);
+
             a.upgrade_in_event_loop(move |app| {
                 write_bad_extensions_results(&app, vector, messages);
             })
diff --git a/krokiet/src/main.rs b/krokiet/src/main.rs
index 2e86ee688..640d6494e 100644
--- a/krokiet/src/main.rs
+++ b/krokiet/src/main.rs
@@ -19,6 +19,7 @@
 #![allow(clippy::match_same_arms)] // Generated code
 
 use std::rc::Rc;
+use std::sync::Arc;
 
 use crossbeam_channel::{unbounded, Receiver, Sender};
 use czkawka_core::common::{print_version_mode, setup_logger};
@@ -31,6 +32,7 @@ use crate::connect_move::connect_move;
 use crate::connect_open::connect_open_items;
 use crate::connect_progress_receiver::connect_progress_gathering;
 use crate::connect_rename::connect_rename;
+use crate::connect_save::connect_save;
 use crate::connect_scan::connect_scan_button;
 use crate::connect_select::{connect_select, connect_showing_proper_select_buttons};
 use crate::connect_show_preview::connect_show_preview;
@@ -38,6 +40,7 @@ use crate::connect_stop::connect_stop_button;
 use crate::connect_translation::connect_translations;
 use crate::set_initial_gui_info::set_initial_gui_infos;
 use crate::settings::{connect_changing_settings_preset, create_default_settings_files, load_settings_from_file, save_all_settings_to_file};
+use crate::shared_models::SharedModels;
 
 mod common;
 mod connect_delete;
@@ -46,6 +49,7 @@ mod connect_move;
 mod connect_open;
 mod connect_progress_receiver;
 mod connect_rename;
+mod connect_save;
 mod connect_scan;
 mod connect_select;
 mod connect_show_preview;
@@ -55,6 +59,7 @@ mod localizer_krokiet;
 mod model_operations;
 mod set_initial_gui_info;
 mod settings;
+mod shared_models;
 
 slint::include_modules!();
 fn main() {
@@ -68,13 +73,15 @@ fn main() {
 
     zeroing_all_models(&app);
 
+    let shared_models = SharedModels::new_shared();
+
     set_initial_gui_infos(&app);
 
     create_default_settings_files();
     load_settings_from_file(&app);
 
     connect_delete_button(&app);
-    connect_scan_button(&app, progress_sender, stop_receiver);
+    connect_scan_button(&app, progress_sender, stop_receiver, Arc::clone(&shared_models));
     connect_stop_button(&app, stop_sender);
     connect_open_items(&app);
     connect_progress_gathering(&app, progress_receiver);
@@ -86,6 +93,7 @@ fn main() {
     connect_showing_proper_select_buttons(&app);
     connect_move(&app);
     connect_rename(&app);
+    connect_save(&app, Arc::clone(&shared_models));
 
     app.run().expect("Failed to run app :(");
 
diff --git a/krokiet/src/shared_models.rs b/krokiet/src/shared_models.rs
new file mode 100644
index 000000000..b219d8926
--- /dev/null
+++ b/krokiet/src/shared_models.rs
@@ -0,0 +1,80 @@
+use std::sync::{Arc, Mutex};
+
+use czkawka_core::bad_extensions::BadExtensions;
+use czkawka_core::big_file::BigFile;
+use czkawka_core::broken_files::BrokenFiles;
+use czkawka_core::common_traits::PrintResults;
+use czkawka_core::duplicate::DuplicateFinder;
+use czkawka_core::empty_files::EmptyFiles;
+use czkawka_core::empty_folder::EmptyFolder;
+use czkawka_core::invalid_symlinks::InvalidSymlinks;
+use czkawka_core::same_music::SameMusic;
+use czkawka_core::similar_images::SimilarImages;
+use czkawka_core::similar_videos::SimilarVideos;
+use czkawka_core::temporary::Temporary;
+
+use crate::CurrentTab;
+
+pub struct SharedModels {
+    pub shared_duplication_state: Option<DuplicateFinder>,
+    pub shared_empty_folders_state: Option<EmptyFolder>,
+    pub shared_empty_files_state: Option<EmptyFiles>,
+    pub shared_temporary_files_state: Option<Temporary>,
+    pub shared_big_files_state: Option<BigFile>,
+    pub shared_similar_images_state: Option<SimilarImages>,
+    pub shared_similar_videos_state: Option<SimilarVideos>,
+    pub shared_same_music_state: Option<SameMusic>,
+    pub shared_same_invalid_symlinks: Option<InvalidSymlinks>,
+    pub shared_broken_files_state: Option<BrokenFiles>,
+    pub shared_bad_extensions_state: Option<BadExtensions>,
+}
+
+impl SharedModels {
+    pub fn new() -> Self {
+        Self {
+            shared_duplication_state: None,
+            shared_empty_folders_state: None,
+            shared_empty_files_state: None,
+            shared_temporary_files_state: None,
+            shared_big_files_state: None,
+            shared_similar_images_state: None,
+            shared_similar_videos_state: None,
+            shared_same_music_state: None,
+            shared_same_invalid_symlinks: None,
+            shared_broken_files_state: None,
+            shared_bad_extensions_state: None,
+        }
+    }
+
+    pub fn new_shared() -> Arc<Mutex<Self>> {
+        Arc::new(Mutex::new(Self::new()))
+    }
+
+    pub fn save_results(&self, active_tab: CurrentTab, choosen_dir: &str) -> Result<(), String> {
+        let cd = choosen_dir;
+        let result = match active_tab {
+            CurrentTab::DuplicateFiles => self.shared_duplication_state.as_ref().map(|x| x.save_all_in_one(cd, "results_duplicates")),
+            CurrentTab::EmptyFolders => self.shared_empty_folders_state.as_ref().map(|x| x.save_all_in_one(cd, "results_empty_directories")),
+            CurrentTab::EmptyFiles => self.shared_empty_files_state.as_ref().map(|x| x.save_all_in_one(cd, "results_empty_files")),
+            CurrentTab::TemporaryFiles => self.shared_temporary_files_state.as_ref().map(|x| x.save_all_in_one(cd, "results_temporary_files")),
+            CurrentTab::BigFiles => self.shared_big_files_state.as_ref().map(|x| x.save_all_in_one(cd, "results_big_files")),
+            CurrentTab::SimilarImages => self.shared_similar_images_state.as_ref().map(|x| x.save_all_in_one(cd, "results_similar_images")),
+            CurrentTab::SimilarVideos => self.shared_similar_videos_state.as_ref().map(|x| x.save_all_in_one(cd, "results_similar_videos")),
+            CurrentTab::SimilarMusic => self.shared_same_music_state.as_ref().map(|x| x.save_all_in_one(cd, "results_same_music")),
+            CurrentTab::InvalidSymlinks => self.shared_same_invalid_symlinks.as_ref().map(|x| x.save_all_in_one(cd, "results_invalid_symlinks")),
+            CurrentTab::BrokenFiles => self.shared_broken_files_state.as_ref().map(|x| x.save_all_in_one(cd, "results_broken_files")),
+            CurrentTab::BadExtensions => self.shared_bad_extensions_state.as_ref().map(|x| x.save_all_in_one(cd, "results_bad_extensions")),
+            CurrentTab::Settings | CurrentTab::About => panic!("Cannot save results for settings or about tab"),
+        };
+
+        let current_path = match std::env::current_dir() {
+            Ok(t) => t.to_string_lossy().to_string(),
+            Err(_) => "<unknown>".to_string(),
+        };
+
+        match result.expect("Tried to save results, without running scan(bug which needs to be fixed)") {
+            Ok(()) => Ok(()),
+            Err(e) => Err(format!("Failed to save results to folder {current_path}, reason {e}")),
+        }
+    }
+}
diff --git a/krokiet/ui/action_buttons.slint b/krokiet/ui/action_buttons.slint
index 7df4af918..181812c36 100644
--- a/krokiet/ui/action_buttons.slint
+++ b/krokiet/ui/action_buttons.slint
@@ -28,6 +28,7 @@ export component ActionButtons inherits HorizontalLayout {
     callback show_select_popup(length, length);
     callback show_remove_popup();
     callback show_rename_popup();
+    callback show_save_popup();
     callback request_folder_to_move();
 
     in-out property <[MainListModel]> duplicate_files_model: [];
@@ -157,6 +158,17 @@ export component ActionButtons inherits HorizontalLayout {
         }
     }
 
+    save_button := Button {
+        visible: lists_enabled;
+        height: parent.height;
+        enabled: !scanning && self.visible && results_available;
+        text: "Save";
+        icon: @image-url("../icons/krokiet_save.svg");
+        clicked => {
+            show_save_popup();
+        }
+    }
+
     rename_button := Button {
         visible: lists_enabled && GuiState.active_tab == CurrentTab.BadExtensions;
         height: parent.height;
@@ -177,16 +189,18 @@ export component ActionButtons inherits HorizontalLayout {
         spacing: 0px;
         VisibilityButton {
             height: parent.height;
+            width: 40px;
             button_visibility: BottomPanelVisibility.Directories;
             bottom_panel_visibility <=> bottom_panel_visibility;
-            text: "Dirs";
+            icon: @image-url("../icons/krokiet_dir.svg");
         }
 
         VisibilityButton {
             height: parent.height;
+            width: 40px;
             button_visibility: BottomPanelVisibility.TextErrors;
             bottom_panel_visibility <=> bottom_panel_visibility;
-            text: "Output";
+            icon: @image-url("../icons/krokiet_info.svg");
         }
     }
 }
diff --git a/krokiet/ui/callabler.slint b/krokiet/ui/callabler.slint
index 79dffa76b..a4a3cd784 100644
--- a/krokiet/ui/callabler.slint
+++ b/krokiet/ui/callabler.slint
@@ -22,8 +22,9 @@ export global Callabler {
 
     callback tab_changed();
 
+    // Dialogs
+    callback save_results();
     callback move_items(bool, bool, string);
-
     callback rename_files();
 
     // Translations
diff --git a/krokiet/ui/main_window.slint b/krokiet/ui/main_window.slint
index eeb34ed5e..07db84a52 100644
--- a/krokiet/ui/main_window.slint
+++ b/krokiet/ui/main_window.slint
@@ -17,6 +17,7 @@ import {PopupDelete} from "popup_delete.slint";
 import {PopupMoveFolders} from "popup_move_folders.slint";
 import { PopupSelectResults } from "popup_select_results.slint";
 import {PopupRenameFiles} from "popup_rename_files.slint";
+import {PopupSave} from "popup_save.slint";
 import { ToolSettings } from "tool_settings.slint";
 
 export {Settings, Callabler, GuiState}
@@ -156,6 +157,9 @@ export component MainWindow inherits Window {
             show_rename_popup => {
                 rename_popup_window.show_popup();
             }
+            show_save_popup => {
+                save_popup_window.show_popup();
+            }
         }
 
         HorizontalLayout {
@@ -224,6 +228,14 @@ export component MainWindow inherits Window {
         y: parent.y + (parent.height - self.popup_height) / 2.0;
     }
 
+    save_popup_window := PopupSave {
+        height: root.height;
+        width: root.width;
+
+        x: parent.x + (root.width - self.popup_width) / 2.0;
+        y: parent.y + (parent.height - self.popup_height) / 2.0;
+    }
+
     show_move_folders_dialog(folder_name) => {
         move_popup_window.folder_name = folder_name;
         move_popup_window.show_popup();
diff --git a/krokiet/ui/popup_save.slint b/krokiet/ui/popup_save.slint
new file mode 100644
index 000000000..f35310ef8
--- /dev/null
+++ b/krokiet/ui/popup_save.slint
@@ -0,0 +1,74 @@
+import { Button, VerticalBox ,TextEdit, HorizontalBox, TabWidget, ListView, StandardListView, StandardTableView, CheckBox, LineEdit} from "std-widgets.slint";
+import {SelectableTableView} from "selectable_tree_view.slint";
+import {LeftSidePanel} from "left_side_panel.slint";
+import {MainList} from "main_lists.slint";
+import {CurrentTab, ProgressToSend} from "common.slint";
+import { ActionButtons } from "action_buttons.slint";
+import { Progress } from "progress.slint";
+import {MainListModel, SelectMode, SelectModel} from "common.slint";
+import {Settings} from "settings.slint";
+import {Callabler} from "callabler.slint";
+import { BottomPanel } from "bottom_panel.slint";
+import {ColorPalette} from "color_palette.slint";
+import {GuiState} from "gui_state.slint";
+import { Preview } from "preview.slint";
+
+export component PopupSave inherits Rectangle {
+    out property <length> popup_width: 500px;
+    out property <length> popup_height: 150px;
+    callback show_popup();
+
+    popup_window := PopupWindow {
+        width: popup_width;
+        height: popup_height;
+
+        close-on-click: false;
+        Rectangle {
+            width: parent.width;
+            height: parent.height;
+            border-radius: 5px;
+            background: ColorPalette.popup_background;
+            VerticalLayout {
+                Text {
+                    vertical-stretch: 0.0;
+                    min-height: 30px;
+                    text: "Saving results";
+                    vertical-alignment: top;
+                    horizontal-alignment: center;
+                    font-size: 13px;
+                }
+                Text {
+                    vertical-stretch: 1.0;
+                    text: "This will save results to 3 different files" + "\nAre you want to continue?";
+                    vertical-alignment: center;
+                    horizontal-alignment: center;
+                    font-size: 13px;
+                    padding: 10px;
+                }
+
+                HorizontalLayout {
+                    Button {
+                        text: "Yes";
+                        clicked => {
+                            popup_window.close();
+                            Callabler.save_results();
+                        }
+                    }
+                    Rectangle {
+
+                    }
+                    Button {
+                        text: "No";
+                        clicked => {
+                            popup_window.close();
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    show_popup() => {
+        popup_window.show();
+    }
+}
\ No newline at end of file


Test patch: