This commit is contained in:
Ignacio Serantes
2026-03-25 12:18:19 +01:00
parent 0349155fd2
commit 56ef674d4a
9 changed files with 641 additions and 455 deletions

View File

@@ -29,7 +29,7 @@ if FORCE_X11:
# --- CONFIGURATION ---
PROG_NAME = "Bagheera Image Viewer"
PROG_ID = "bagheeraview"
PROG_VERSION = "0.9.11"
PROG_VERSION = "0.9.12"
PROG_AUTHOR = "Ignacio Serantes"
# --- CACHE SETTINGS ---
@@ -96,7 +96,12 @@ KWINOUTPUTCONFIG_PATH = os.path.join(os.path.expanduser("~"),
# --- EXTERNAL TOOLS ---
# Command definitions for external search tools.
try:
from bagheera_search_lib import BagheeraSearcher
HAVE_BAGHEERASEARCH_LIB = True
except ImportError:
HAVE_BAGHEERASEARCH_LIB = False
pass
BALOOSEARCH_EXEC = shutil.which("baloosearch") or shutil.which("baloosearch6")
SEARCH_CMD = [BALOOSEARCH_EXEC, "--type", "image"] if BALOOSEARCH_EXEC else None
@@ -167,8 +172,6 @@ if importlib.util.find_spec("mediapipe") is not None:
pass
HAVE_FACE_RECOGNITION = importlib.util.find_spec("face_recognition") is not None
HAVE_BAGHEERASEARCH_LIB = True
MEDIAPIPE_FACE_MODEL_PATH = os.path.join(CONFIG_DIR,
"blaze_face_short_range.tflite")
MEDIAPIPE_FACE_MODEL_URL = (
@@ -291,6 +294,8 @@ VIEWER_ACTIONS = {
"toggle_visibility": ("Show/Hide Main Window", "Window"),
"toggle_crop": ("Toggle Crop Mode", "Edit"),
"save_crop": ("Save Cropped Image", "File"),
"copy_image": ("Copy Image to Clipboard", "Edit"),
"copy_path": ("Copy File Path", "Edit"),
"compare_1": ("Single View", "View"),
"compare_2": ("Compare 2 Images", "View"),
"compare_4": ("Compare 4 Images", "View"),
@@ -451,8 +456,8 @@ _UI_TEXTS = {
"MENU_ABOUT": "About",
"MENU_ABOUT_TITLE": "About {}",
"MENU_ABOUT_TEXT": "<b>{0}</b> v{1}<br><br>A simple image viewer and manager "
"for KDE with Baloo support.<br><br>Created by {2} with the help of AI, and "
"mostly the good people at KDE and Qt.",
"for KDE with Baloo support.<br><br>Created by {2} with the help of AI, but "
"mostly thanks to the job of the good people at KDE and Qt.",
"MENU_CACHE": "Cache",
"MENU_CLEAR_CACHE": "Clear cache ({} items, {:.1f} MB, {:.1f} MB on disk)",
"MENU_CLEAN_CACHE": "Clean up invalid cache entries",
@@ -527,7 +532,7 @@ _UI_TEXTS = {
"SETTINGS_THUMBS_FILENAME_FONT_SIZE_LABEL": "Thumbnails filename font size:",
"SETTINGS_THUMBS_TAGS_FONT_SIZE_LABEL": "Thumbnails tags font size:",
"SETTINGS_SCAN_THREADS_LABEL": "Generation threads:",
"SETTINGS_SCAN_THREADS_TOOLTIP": "Maximum number of simultaneous threads to"
"SETTINGS_SCAN_THREADS_TOOLTIP": "Maximum number of simultaneous threads to "
"generate thumbnails.",
"SETTINGS_SCAN_MAX_LEVEL_LABEL": "Scan Max Level:",
"SETTINGS_SCAN_BATCH_SIZE_LABEL": "Scan Batch Size:",
@@ -742,6 +747,15 @@ _UI_TEXTS = {
"VIEWER_MENU_TAGS": "Quick tags",
"VIEWER_MENU_CROP": "Crop Mode",
"VIEWER_MENU_SAVE_CROP": "Save Selection...",
"VIEWER_MENU_COPY_PATH": "Copy File Path",
"VIEWER_MENU_COPY_IMAGE": "Copy Image to Clipboard",
"VIEWER_MENU_DETECT_AREAS": "Detect areas",
"VIEWER_MENU_DETECT_FACES": "Faces",
"VIEWER_MENU_DETECT_PETS": "Pets",
"VIEWER_MENU_MANIPULATE": "Manipulate",
"VIEWER_MENU_ZOOM": "Zoom",
"VIEWER_MENU_ZOOM_IN": "Zoom In",
"VIEWER_MENU_ZOOM_OUT": "Zoom Out",
"SAVE_CROP_TITLE": "Save Cropped Image",
"VIEWER_MENU_COMPARE": "Comparison Mode",
"VIEWER_MENU_COMPARE_1": "Single View",
@@ -762,7 +776,7 @@ _UI_TEXTS = {
"CONTEXT_MENU_ROTATE_RIGHT": "Right",
"CONTEXT_MENU_TRASH": "Move to Trash",
"CONTEXT_MENU_CLIPBOARD": "Clipboard",
"CONTEXT_MENU_COPY_URL": "Copy File URL",
"CONTEXT_MENU_COPY_FILE": "Copy File URL",
"CONTEXT_MENU_COPY_DIR": "Copy Directory Path",
"CONTEXT_MENU_PROPERTIES": "Properties",
"CONTEXT_MENU_NO_APPS_FOUND": "No apps found",
@@ -881,7 +895,7 @@ _UI_TEXTS = {
"MENU_ABOUT_TITLE": "Acerca de {}",
"MENU_ABOUT_TEXT": "<b>{0}</b> v{1}<br><br>Un visor y gestor de imágenes "
"simple para KDE con soporte para Baloo.<br><br>Creado por {2} con la ayuda de "
"la IA, y mayormente la buena gente de KDE y Qt.",
"la IA, pero mayormente gracias al trabajo de la buena gente de KDE y Qt.",
"MENU_CACHE": "Caché",
"MENU_CLEAR_CACHE": "Limpiar caché ({} ítems, {:.1f} MB, {:.1f} MB en disco)",
"MENU_CLEAN_CACHE": "Limpiar entradas de caché inválidas",
@@ -898,11 +912,11 @@ _UI_TEXTS = {
"SETTINGS_PERSON_TAGS_LABEL": "Etiquetas de persona:",
"SETTINGS_FACE_ENGINE_LABEL": "Motor de detección de caras:",
"SETTINGS_FACE_COLOR_LABEL": "Color del recuadro de cara:",
"SETTINGS_MRU_TAGS_COUNT_LABEL": "Máx etiquetas recientes:",
"SETTINGS_MRU_TAGS_COUNT_LABEL": "Máximo número de etiquetas recientes:",
"SETTINGS_PET_TAGS_LABEL": "Etiquetas de mascota:",
"SETTINGS_PET_ENGINE_LABEL": "Motor de detección de mascotas:",
"SETTINGS_PET_COLOR_LABEL": "Color del recuadro de mascota:",
"SETTINGS_PET_HISTORY_COUNT_LABEL": "Máx historial mascotas:",
"SETTINGS_PET_HISTORY_COUNT_LABEL": "Máximo historial de mascotas:",
"SETTINGS_PET_TAGS_TOOLTIP": "Etiquetas predeterminadas para mascotas, "
"separadas por comas.",
"SETTINGS_PET_ENGINE_TOOLTIP": "Librería utilizada para la detección de "
@@ -919,7 +933,7 @@ _UI_TEXTS = {
"SETTINGS_BODY_TAGS_LABEL": "Etiquetas de cuerpo:",
"SETTINGS_BODY_ENGINE_LABEL": "Motor de detección de cuerpos:",
"SETTINGS_BODY_COLOR_LABEL": "Color del recuadro de cuerpo:",
"SETTINGS_BODY_HISTORY_COUNT_LABEL": "Máx historial cuerpos:",
"SETTINGS_BODY_HISTORY_COUNT_LABEL": "Máximo historial de cuerpos:",
"SETTINGS_BODY_TAGS_TOOLTIP": "Etiquetas predeterminadas para cuerpos, "
"separadas por comas.",
"SETTINGS_BODY_ENGINE_TOOLTIP": "Librería utilizada para la detección de "
@@ -931,7 +945,7 @@ _UI_TEXTS = {
"SETTINGS_OBJECT_TAGS_LABEL": "Etiquetas de objeto:",
"SETTINGS_OBJECT_ENGINE_LABEL": "Motor de detección de objetos:",
"SETTINGS_OBJECT_COLOR_LABEL": "Color del recuadro de objeto:",
"SETTINGS_OBJECT_HISTORY_COUNT_LABEL": "Máx historial objetos:",
"SETTINGS_OBJECT_HISTORY_COUNT_LABEL": "Máximo historial de objetos:",
"SETTINGS_OBJECT_TAGS_TOOLTIP": "Etiquetas predeterminadas para objetos, "
"separadas por comas.",
"SETTINGS_OBJECT_ENGINE_TOOLTIP": "Librería utilizada para la detección "
@@ -943,7 +957,7 @@ _UI_TEXTS = {
"SETTINGS_LANDMARK_TAGS_LABEL": "Etiquetas de lugar:",
"SETTINGS_LANDMARK_ENGINE_LABEL": "Motor de detección de lugares:",
"SETTINGS_LANDMARK_COLOR_LABEL": "Color del recuadro de lugar:",
"SETTINGS_LANDMARK_HISTORY_COUNT_LABEL": "Máx historial lugares:",
"SETTINGS_LANDMARK_HISTORY_COUNT_LABEL": "Máximo historial de lugares:",
"SETTINGS_LANDMARK_TAGS_TOOLTIP": "Etiquetas predeterminadas para "
"lugares/monumentos, separadas por comas.",
"SETTINGS_LANDMARK_ENGINE_TOOLTIP": "Librería utilizada para la detección "
@@ -952,7 +966,7 @@ _UI_TEXTS = {
"alrededor de los lugares.",
"SETTINGS_LANDMARK_HISTORY_TOOLTIP": "Número máximo de nombres de lugares "
"usados recientemente para recordar.",
"SETTINGS_FACE_HISTORY_COUNT_LABEL": "Máx historial caras:",
"SETTINGS_FACE_HISTORY_COUNT_LABEL": "Máximo historial de caras:",
"SETTINGS_THUMBS_REFRESH_LABEL": "Intervalo refresco miniaturas (ms):",
"SETTINGS_THUMBS_BG_COLOR_LABEL": "Color de fondo de miniaturas:",
"SETTINGS_THUMBS_FILENAME_COLOR_LABEL": "Color del nombre de fichero:",
@@ -960,12 +974,15 @@ _UI_TEXTS = {
"SETTINGS_THUMBS_RATING_COLOR_LABEL": "Color de valoración de miniaturas:",
"SETTINGS_THUMBS_FILENAME_FONT_SIZE_LABEL": "Tamaño de fuente del nombre de "
"fichero:",
"SETTINGS_SCAN_THREADS_LABEL": "Hilos de generación:",
"SETTINGS_SCAN_THREADS_TOOLTIP": "Número máximo de hilos simultaneos para "
"generar miniaturas.",
"SETTINGS_THUMBS_TAGS_FONT_SIZE_LABEL": "Tamaño de fuente de las etiquetas:",
"SETTINGS_SCAN_MAX_LEVEL_LABEL": "Nivel Máximo de Escaneo:",
"SETTINGS_SCAN_BATCH_SIZE_LABEL": "Tamaño de Lote de Escaneo:",
"SETTINGS_SCANNER_SEARCH_ENGINE_LABEL": "Motor de búsqueda de archivos:",
"SETTINGS_SCANNER_SEARCH_ENGINE_TOOLTIP": "Motor a usar para buscar archivos. "
"'Bagheera' usa la librería de BagheeraSearch. 'Baloo0 usa el commando "
"'Bagheera' usa la librería de BagheeraSearch. 'Baloo' usa el commando "
"'baloosearch'",
"SETTINGS_SCAN_FULL_ON_START_LABEL": "Escanear Todo al Inicio:",
"SETTINGS_SCAN_MAX_LEVEL_TOOLTIP": "Profundidad máxima de directorio para "
@@ -1177,6 +1194,15 @@ _UI_TEXTS = {
"VIEWER_MENU_TAGS": "Etiquetas rápidas",
"VIEWER_MENU_CROP": "Modo Recorte",
"VIEWER_MENU_SAVE_CROP": "Guardar Selección...",
"VIEWER_MENU_COPY_PATH": "Copiar Ruta del Archivo",
"VIEWER_MENU_COPY_IMAGE": "Copiar Imagen al Portapapeles",
"VIEWER_MENU_DETECT_AREAS": "Detectar áreas",
"VIEWER_MENU_DETECT_FACES": "Rostros",
"VIEWER_MENU_DETECT_PETS": "Mascotas",
"VIEWER_MENU_MANIPULATE": "Manipular",
"VIEWER_MENU_ZOOM": "Zoom",
"VIEWER_MENU_ZOOM_IN": "Acercar",
"VIEWER_MENU_ZOOM_OUT": "Alejar",
"VIEWER_MENU_COMPARE": "Modo Comparación",
"VIEWER_MENU_COMPARE_1": "Vista Única",
"VIEWER_MENU_COMPARE_2": "2 Imágenes",
@@ -1197,7 +1223,7 @@ _UI_TEXTS = {
"CONTEXT_MENU_ROTATE_RIGHT": "Derecha",
"CONTEXT_MENU_TRASH": "Mover a la Papelera",
"CONTEXT_MENU_CLIPBOARD": "Portapapeles",
"CONTEXT_MENU_COPY_URL": "Copiar URL del Archivo",
"CONTEXT_MENU_COPY_FILE": "Copiar URL del Archivo",
"CONTEXT_MENU_COPY_DIR": "Copiar Ruta del Directorio",
"CONTEXT_MENU_PROPERTIES": "Propiedades",
"CONTEXT_MENU_NO_APPS_FOUND": "No se encontraron aplicaciones",
@@ -1316,7 +1342,7 @@ _UI_TEXTS = {
"MENU_ABOUT_TITLE": "Acerca de {}",
"MENU_ABOUT_TEXT": "<b>{0}</b> v{1}<br><br>Un visor e xestor de imaxes "
"sinxelo para KDE con soporte para Baloo.<br><br>Creado por {2} coa axuda da "
" IA, e maiormente a boa xente de KDE e Qt.",
" IA, pero maiormente gracias ó traballo da boa xente de KDE e Qt.",
"MENU_CACHE": "Caché",
"MENU_CLEAR_CACHE": "Limpar caché ({} elementos, {:.1f} MB, {:.1f} MB en "
"disco)",
@@ -1328,17 +1354,17 @@ _UI_TEXTS = {
"MENU_SHOW_HISTORY": "Amosar Historial",
"MENU_SETTINGS": "Opcións",
"SETTINGS_GROUP_SCANNER": "Escáner",
"SETTINGS_GROUP_AREAS": "´áreas",
"SETTINGS_GROUP_AREAS": "Áreas",
"SETTINGS_GROUP_THUMBNAILS": "Miniaturas",
"SETTINGS_GROUP_VIEWER": "Visor de Imaxes",
"SETTINGS_PERSON_TAGS_LABEL": "Etiquetas de persoa:",
"SETTINGS_FACE_ENGINE_LABEL": "Motor de detección de caras:",
"SETTINGS_FACE_COLOR_LABEL": "Cor do cadro de cara:",
"SETTINGS_MRU_TAGS_COUNT_LABEL": "Máx etiquetas recentes:",
"SETTINGS_MRU_TAGS_COUNT_LABEL": "Máximo número de etiquetas recentes:",
"SETTINGS_PET_TAGS_LABEL": "Etiquetas de mascota:",
"SETTINGS_PET_ENGINE_LABEL": "Motor de detección de mascotas:",
"SETTINGS_PET_COLOR_LABEL": "Cor do cadro de mascota:",
"SETTINGS_PET_HISTORY_COUNT_LABEL": "Máx historial mascotas:",
"SETTINGS_PET_HISTORY_COUNT_LABEL": "Máximo historial de mascotas:",
"SETTINGS_PET_TAGS_TOOLTIP": "Etiquetas predeterminadas para mascotas, "
"separadas por comas.",
"SETTINGS_PET_ENGINE_TOOLTIP": "Libraría utilizada para a detección de "
@@ -1355,7 +1381,7 @@ _UI_TEXTS = {
"SETTINGS_BODY_TAGS_LABEL": "Etiquetas de corpo:",
"SETTINGS_BODY_ENGINE_LABEL": "Motor de detección de corpos:",
"SETTINGS_BODY_COLOR_LABEL": "Cor do cadro de corpo:",
"SETTINGS_BODY_HISTORY_COUNT_LABEL": "Máx historial corpos:",
"SETTINGS_BODY_HISTORY_COUNT_LABEL": "Máximo historial de corpos:",
"SETTINGS_BODY_TAGS_TOOLTIP": "Etiquetas predeterminadas para corpos, "
"separadas por comas.",
"SETTINGS_BODY_ENGINE_TOOLTIP": "Libraría utilizada para a detección de "
@@ -1367,7 +1393,7 @@ _UI_TEXTS = {
"SETTINGS_OBJECT_TAGS_LABEL": "Etiquetas de obxecto:",
"SETTINGS_OBJECT_ENGINE_LABEL": "Motor de detección de obxectos:",
"SETTINGS_OBJECT_COLOR_LABEL": "Cor do cadro de obxecto:",
"SETTINGS_OBJECT_HISTORY_COUNT_LABEL": "Máx historial obxectos:",
"SETTINGS_OBJECT_HISTORY_COUNT_LABEL": "Máximo historial de obxectos:",
"SETTINGS_OBJECT_TAGS_TOOLTIP": "Etiquetas predeterminadas para obxectos, "
"separadas por comas.",
"SETTINGS_OBJECT_ENGINE_TOOLTIP": "Libraría utilizada para a detección de "
@@ -1379,7 +1405,7 @@ _UI_TEXTS = {
"SETTINGS_LANDMARK_TAGS_LABEL": "Etiquetas de lugar:",
"SETTINGS_LANDMARK_ENGINE_LABEL": "Motor de detección de lugares:",
"SETTINGS_LANDMARK_COLOR_LABEL": "Cor do cadro de lugar:",
"SETTINGS_LANDMARK_HISTORY_COUNT_LABEL": "Máx historial lugares:",
"SETTINGS_LANDMARK_HISTORY_COUNT_LABEL": "Máximo historial de lugares:",
"SETTINGS_LANDMARK_TAGS_TOOLTIP": "Etiquetas predeterminadas para "
"lugares/monumentos, separadas por comas.",
"SETTINGS_LANDMARK_ENGINE_TOOLTIP": "Libraría utilizada para a detección "
@@ -1388,7 +1414,7 @@ _UI_TEXTS = {
"arredor dos lugares.",
"SETTINGS_LANDMARK_HISTORY_TOOLTIP": "Número máximo de nomes de lugares "
"usados recentemente para lembrar.",
"SETTINGS_FACE_HISTORY_COUNT_LABEL": "Máx historial caras:",
"SETTINGS_FACE_HISTORY_COUNT_LABEL": "Máximo historial de caras:",
"SETTINGS_THUMBS_REFRESH_LABEL": "Intervalo refresco miniaturas (ms):",
"SETTINGS_THUMBS_BG_COLOR_LABEL": "Cor de fondo de miniaturas:",
"SETTINGS_THUMBS_FILENAME_COLOR_LABEL": "Cor do nome de ficheiro:",
@@ -1396,10 +1422,10 @@ _UI_TEXTS = {
"SETTINGS_THUMBS_RATING_COLOR_LABEL": "Cor da valoración das miniaturas:",
"SETTINGS_THUMBS_FILENAME_FONT_SIZE_LABEL": "Tamaño da fonte do nome de "
"ficheiro:",
"SETTINGS_SCAN_THREADS_LABEL": "Fios de xeración:",
"SETTINGS_SCAN_THREADS_TOOLTIP": "Número máximo de fios simultaneos para "
"xerar miniaturas.",
"SETTINGS_THUMBS_TAGS_FONT_SIZE_LABEL": "Tamaño da fonte das etiquetas:",
"SETTINGS_SCAN_THREADS_LABEL": "Hilos de generación:",
"SETTINGS_SCAN_THREADS_TOOLTIP": "Número máximo de hilos simultáneos para "
"generar miniaturas.",
"SETTINGS_SCAN_MAX_LEVEL_LABEL": "Nivel Máximo de Escaneo:",
"SETTINGS_SCAN_BATCH_SIZE_LABEL": "Tamaño do Lote de Escaneo:",
"SETTINGS_SCANNER_SEARCH_ENGINE_LABEL": "Motor de busca de ficheiros:",
@@ -1615,6 +1641,15 @@ _UI_TEXTS = {
"VIEWER_MENU_TAGS": "Etiquetas rápidas",
"VIEWER_MENU_CROP": "Modo Recorte",
"VIEWER_MENU_SAVE_CROP": "Gardar Selección...",
"VIEWER_MENU_COPY_PATH": "Copiar Ruta do Ficheiro",
"VIEWER_MENU_COPY_IMAGE": "Copiar Imaxe ao Portapapeis",
"VIEWER_MENU_DETECT_AREAS": "Detectar áreas",
"VIEWER_MENU_DETECT_FACES": "Rostros",
"VIEWER_MENU_DETECT_PETS": "Mascotas",
"VIEWER_MENU_MANIPULATE": "Manipular",
"VIEWER_MENU_ZOOM": "Zoom",
"VIEWER_MENU_ZOOM_IN": "Achegar",
"VIEWER_MENU_ZOOM_OUT": "Afastar",
"VIEWER_MENU_COMPARE": "Modo Comparación",
"VIEWER_MENU_COMPARE_1": "Vista Única",
"VIEWER_MENU_COMPARE_2": "2 Imaxes",
@@ -1636,7 +1671,7 @@ _UI_TEXTS = {
"CONTEXT_MENU_ROTATE_RIGHT": "Dereita",
"CONTEXT_MENU_TRASH": "Mover á Papeleira",
"CONTEXT_MENU_CLIPBOARD": "Portapapeis",
"CONTEXT_MENU_COPY_URL": "Copiar URL do Ficheiro",
"CONTEXT_MENU_COPY_FILE": "Copiar URL do Ficheiro",
"CONTEXT_MENU_COPY_DIR": "Copiar Ruta do Directorio",
"CONTEXT_MENU_PROPERTIES": "Propiedades",
"CONTEXT_MENU_NO_APPS_FOUND": "Non se atoparon aplicacións",