feat(oci): GPU selection per host and per image, one notification per update, and App tab for stack containers

- Immich asks what runs its video and its recognition in one menu, in both
  modes, and gives the GPU to the server and to Machine learning; AMD uses ROCm
- Frigate, Ollama, llama.cpp, Faster Whisper and Piper take the image built
  for the chosen GPU
- The acceleration menu offers only what the host can run
- An update or a recreation sends one notification with its result instead of
  the stop, backup and start of each container
- A private bridge with nothing connected is not reported as down
- Secondary containers of a stack appear in the App tab with their version and
  logo; Secure Gateway shows the same update state in both views
- A mistyped value in the wizard asks the same question again
This commit is contained in:
MacRimi
2026-10-02 21:45:38 +02:00
parent 20ee21c08f
commit 9b5cefb81a
55 changed files with 2294 additions and 113 deletions
+32 -6
View File
@@ -132,6 +132,8 @@
"ALL Utilities": "TODAS las utilidades",
"ALLOWED_HOSTS cannot contain line breaks": "ALLOWED_HOSTS no puede contener saltos de línea",
"AList initial login": "Primera sesión de AList",
"AMD (ROCm)": "AMD (ROCm)",
"AMD (VA-API and ROCm detection)": "AMD (VA-API y detección con ROCm)",
"AMD CPU detected": "CPU AMD detectada",
"AMD CPU fixes applied successfully": "Las correcciones de CPU AMD se aplicaron con éxito",
"AMD GPU Tools installation completed!": "¡Se completó la instalación de las herramientas AMD GPU!",
@@ -139,6 +141,7 @@
"AMD GPU(s) detected:": "GPU AMD detectadas:",
"AMD KFD device": "dispositivo AMD KFD",
"AMD VA-API + OpenCL (official mod)": "AMD VA-API + OpenCL (modal oficial)",
"AMD compute device": "Dispositivo de cómputo AMD",
"AMD fixes have been successfully reverted": "Las correcciones de AMD se han revertido con éxito",
"AMD mesa drivers installed.": "Controladores Mesa de AMD instalados.",
"AMD softdep configured": "AMD softdep configurado",
@@ -168,8 +171,11 @@
"Acceleration": "Aceleración",
"Acceleration configuration cancelled": "Configuración de aceleración cancelada",
"Acceleration for CodeProject.AI": "Aceleración para CodeProject. AI",
"Acceleration for Faster Whisper": "Aceleración para Faster Whisper",
"Acceleration for Immich smart recognition": "Aceleración para el reconocimiento inteligente Immich",
"Acceleration for Ollama": "Aceleración para Ollama",
"Acceleration for Piper": "Aceleración para Piper",
"Acceleration for llama.cpp": "Aceleración para llama.cpp",
"Accept routes from other nodes?": "¿Aceptar rutas de otros nodos?",
"Accept this host monitoring profile?": "¿Aceptar este perfil de monitorización del host?",
"Access Scope:": "Ámbito de acceso:",
@@ -776,7 +782,7 @@
"Checking remaining interfaces": "Comprobando las interfaces restantes",
"Checking that the container keeps running...": "Comprobando que el contenedor sigue funcionando...",
"Checking that this version builds against the running kernel...": "Comprobando que esta versión se compila con el kernel en ejecución...",
"Checking the GPU of the machine learning container...": "Comprobando la GPU del contenedor de aprendizaje automático...",
"Checking the GPU of the machine learning container...": "Comprobando la GPU del contenedor Machine learning...",
"Checking the container before recreating it...": "Revisando el contenedor antes de recrearlo...",
"Checking the container before the update...": "Revisando el contenedor antes de la actualización...",
"Checking the device permissions for the application user...": "Verificación de los permisos del dispositivo para el usuario de la aplicación...",
@@ -1997,6 +2003,7 @@
"Enter the password for Samba user:": "Ingrese la contraseña para el usuario de Samba:",
"Enter the recovery passphrase set when the keyfile was created:": "ingrese la frase de contraseña de recuperación establecida cuando se creó el archivo de claves:",
"Enter the size in whole GB, for example": "Introduzca el tamaño en GB enteros, por ejemplo",
"Enter the value again.": "Introduce el valor de nuevo.",
"Enter username for Samba server:": "Ingrese el nombre de usuario para el servidor Samba:",
"Enter username:": "Introduzca nombre de usuario:",
"Enterprise Proxmox Ceph repository disabled": "Repositorio Enterprise Proxmox Ceph deshabilitado",
@@ -2383,6 +2390,7 @@
"French": "Francés",
"Freshrss is a free, self-hostable aggregator for rss feeds.": "Freshrss es un agregador libre y auto-hostable para las fuentes de rss.",
"Frigate WebUI": "Frigate WebUI",
"Frigate uses the AMD GPU for detection once /config/config.yaml defines a detector with type: onnx.": "Frigate usa la GPU AMD para la detección cuando /config/config.yaml define un detector con type: onnx.",
"Frigate uses the Coral once /config/config.yaml defines a detector with type: edgetpu and device: pci.": "Frigate usa el Coral cuando /config/config.yaml define un detector con type: edgetpu y device: pci.",
"Frigate uses the Intel NPU once /config/config.yaml defines a detector with type: openvino and device: NPU.": "Frigate usa la NPU de Intel cuando /config/config.yaml define un detector con type: openvino y device: NPU.",
"Full SMART Report": "Informe SMART completo",
@@ -2423,7 +2431,7 @@
"GPU already present in target VM — existing hostpci entry reused": "GPU ya presente en la máquina virtual de destino: se reutiliza la entrada hostpci existente",
"GPU audio added": "Audio GPU agregado",
"GPU audio already present in target VM — existing hostpci entry reused": "El audio de la GPU ya está presente en la máquina virtual de destino: se reutiliza la entrada hostpci existente",
"GPU available for machine learning:": "GPU disponible para el aprendizaje automático:",
"GPU available for machine learning:": "GPU disponible para Machine learning:",
"GPU driver blacklisted": "Controlador de GPU en lista negra",
"GPU guard hook will block concurrent start when another VM is already using this GPU": "El gancho de protección de GPU bloqueará el inicio simultáneo cuando otra VM ya esté usando esta GPU",
"GPU host driver blacklisted in /etc/modprobe.d/blacklist.conf": "Controlador de host de GPU incluido en la lista negra en /etc/modprobe.d/blacklist.conf",
@@ -2541,6 +2549,7 @@
"Hardware acceleration for Emby": "aceleración de hardware para Emby",
"Hardware acceleration for FileFlows": "aceleración de hardware para FileFlows",
"Hardware acceleration for Frigate": "aceleración de hardware para Frigate",
"Hardware acceleration for Immich": "Aceleración por hardware para Immich",
"Hardware acceleration for Jellyfin": "aceleración de hardware para Jellyfin",
"Hardware acceleration for Plex": "aceleración de hardware para Plex",
"Hardware acceleration for Roon Server": "aceleración de hardware para Roon Server",
@@ -3025,6 +3034,7 @@
"Insufficient memory. Skipping LXC": "Memoria insuficiente. Saltarse LXC",
"Insufficient space:": "Espacio insuficiente:",
"Integrity check failed on": "La verificación de integridad falló",
"Intel (SYCL)": "Intel (SYCL)",
"Intel CPU detected": "CPU Intel detectada",
"Intel GPU Tools installation completed!": "¡Se completó la instalación de las herramientas Intel GPU!",
"Intel GPU(s) detected:": "GPU Intel detectadas:",
@@ -3124,8 +3134,8 @@
"Invalid input": "Entrada no válida",
"Invalid internal volume": "Volumen interno inválido",
"Invalid list:": "Lista inválida:",
"Invalid machine learning CPU allocation:": "Aprendizaje de máquina inválida CPU:",
"Invalid machine learning resources": "Recursos de aprendizaje automático inválidos",
"Invalid machine learning CPU allocation:": "Asignación de CPU de Machine learning no válida:",
"Invalid machine learning resources": "Recursos de Machine learning no válidos",
"Invalid main member or duplicated members": "Miembros principales inválidos o miembros duplicados",
"Invalid media path": "Camino de los medios inválidos",
"Invalid media volume": "Volumen de medios inválidos",
@@ -3441,7 +3451,7 @@
"MOTD configuration was already up to date": "la configuración de MOTD ya estaba actualizada",
"Machine Type": "Tipo de máquina",
"Machine learning": "Aprendizaje automático",
"Machine learning profile not implemented; it is not replaced by CPU:": "Perfil de aprendizaje automático no implementado; no es reemplazado por CPU:",
"Machine learning profile not implemented; it is not replaced by CPU:": "Perfil de Machine learning no implementado; no se sustituye por CPU:",
"Machine type: q35": "Tipo de máquina: q35",
"Machine: q35": "Máquina: q35",
"Main endpoint not yet defined": "Punto final principal aún no definido",
@@ -4097,6 +4107,8 @@
"No unprivileged containers available in Proxmox.": "No hay contenedores sin privilegios disponibles en Proxmox.",
"No updates available — run a scan first or wait for the Monitor to refresh.": "No hay actualizaciones disponibles: primero ejecute un análisis o espere a que se actualice el monitor.",
"No updates or failed to fetch templates": "No hay actualizaciones o no se pudieron recuperar las plantillas",
"No usable GPU was found on this host. Immich will be installed on the CPU.": "No se ha encontrado ninguna GPU utilizable en este host. Immich se instalará en la CPU.",
"No usable GPU was found on this host. The application will be installed without hardware acceleration.": "No se ha encontrado ninguna GPU utilizable en este host. La aplicación se instalará sin aceleración por hardware.",
"No user groups found.": "No se encontraron grupos de usuarios.",
"No user-created disk storage or fstab mount found.": "No se encontró ningún almacenamiento en disco creado por el usuario ni montaje fstab.",
"No username provided.": "No se proporcionó ningún nombre de usuario.",
@@ -4678,6 +4690,8 @@
"RAM in MiB": "RAM en MiB",
"REPAIR SUMMARY": "RESUMEN DE REPARACIÓN",
"REQUIREMENTS:": "REQUISITOS:",
"ROCm requires /dev/kfd on the host": "ROCm requiere /dev/kfd en el host",
"ROCm requires the render device of an AMD GPU": "ROCm requiere el dispositivo de render de una GPU AMD",
"ROM dump not available — configuring without romfile.": "Volcado de ROM no disponible: configuración sin archivo rom.",
"ROM file used": "archivo ROM utilizado",
"RPC Bind Service: RUNNING": "Servicio de enlace RPC: EN EJECUCIÓN",
@@ -4743,7 +4757,9 @@
"Recent Samba server": "Servidor Samba reciente",
"Recent logs:": "Registros recientes:",
"Recent test results:": "Resultados de pruebas recientes:",
"Recognition on AMD uses ROCm. Its image is several times larger than the others, so the first installation takes longer, and whether a GPU works with it depends on its model.": "El reconocimiento en AMD usa ROCm. Su imagen es varias veces mayor que las demás, por lo que la primera instalación tarda más, y que una GPU funcione con ella depende de su modelo.",
"Recognition profile not implemented": "Perfil de reconocimiento no implementado",
"Recognition runs on the CPU.": "El reconocimiento se ejecuta en la CPU.",
"Recommendation: reformat the disk to ext4 for a robust setup — see docs.": "Recomendación: vuelva a formatear el disco a ext4 para una configuración sólida; consulte los documentos.",
"Recommendation: start with Complete restore.": "Recomendación: comience con la restauración completa.",
"Recommendation: use 'Export to file' for these paths and apply manually during a maintenance window.": "Recomendación: use 'Exportar a archivo' para estas rutas y aplíquelo manualmente durante una ventana de mantenimiento.",
@@ -5868,6 +5884,7 @@
"That VM is currently stopped, so the GPU can be reassigned now.": "Esa VM está actualmente detenida, por lo que la GPU se puede reasignar ahora.",
"That doesn't look like an SSH private key. Pick the private key file (no .pub extension, parseable by ssh-keygen).": "Eso no parece una clave privada SSH.Elige el archivo de clave privada (sin extensión .pub, analizable mediante ssh-keygen).",
"The .conf files under /config/fail2ban are rewritten on every start. Keep customizations in the matching .local file, for example jail.local for jail.conf.": "Los archivos .conf bajo /config/fail2ban son reescritos en cada inicio. Mantenga las personalizaciones en el archivo .local coincidente, por ejemplo la cárcel.local para jail.conf.",
"The AMD driver does not offer its compute interface (/dev/kfd) on this host.": "El driver de AMD no ofrece su interfaz de cómputo (/dev/kfd) en este host.",
"The AppArmor/seccomp relaxation does not include the required consent": "La relajación AppArmor/seccomp no incluye el consentimiento necesario",
"The Bookmark Everything App": "La aplicación Todo Marcador",
"The Brave browser is a fast, private and secure web browser for PC, Mac and mobile.": "El navegador Brave es un navegador web rápido, privado y seguro para PC, Mac y móvil.",
@@ -6247,7 +6264,7 @@
"The removal could not be prepared:": "No se pudo preparar la eliminación:",
"The repair must preserve the image dependencies:": "La reparación debe preservar las dependencias de la imagen:",
"The requested VMID block is already in use": "El bloque VMID solicitado ya está en uso",
"The requested machine learning GPU profile is not working; it is not replaced by CPU": "El perfil GPU de aprendizaje automático solicitado no funciona; no es reemplazado por CPU",
"The requested machine learning GPU profile is not working; it is not replaced by CPU": "El perfil de GPU solicitado para Machine learning no funciona; no se sustituye por CPU",
"The restored service did not pass its health check": "El servicio restaurado no aprobó su cheque de salud",
"The restored service stopped; the recovery is not confirmed": "El servicio restaurado se detuvo; la recuperación no se confirma",
"The reviewed Tandoor stack does not require a privileged LXC.": "La pila de Tandoor revisada no requiere un LXC privilegiado.",
@@ -6267,6 +6284,7 @@
"The script will preconfigure the selected GPU now and finalize hardware binding after reboot.": "El script preconfigurará la GPU seleccionada ahora y finalizará el enlace del hardware después del reinicio.",
"The selected AMD GPU does not report FLR reset support": "La GPU AMD seleccionada no informa compatibilidad con el restablecimiento de FLR",
"The selected AMD GPU is currently in power state D3cold": "La GPU AMD seleccionada se encuentra actualmente en estado de energía D3cold",
"The selected AMD render device does not exist:": "El dispositivo de render AMD seleccionado no existe:",
"The selected CT does not match its OCI record. Its configuration will not be modified or deleted.": "El CT seleccionado no coincide con su registro OCI. Su configuración no se modificará ni se eliminará.",
"The selected GPU changed": "La GPU seleccionada cambió",
"The selected GPU configuration already exists in this container.": "La configuración de GPU seleccionada ya existe en este contenedor.",
@@ -6340,6 +6358,7 @@
"The staticfiles volume needs at least 1 GB": "El volumen de los ficheros estáticos necesita al menos 1 GB",
"The storage does not accept backups:": "El almacenamiento no admite backups:",
"The storage has been removed and the disk unmounted.": "Se eliminó el almacenamiento y se desmontó el disco.",
"The storage has less than 40 GB free for the ROCm image.": "El almacenamiento tiene menos de 40 GB libres para la imagen de ROCm.",
"The sysctl content was modified outside the saved record": "El contenido de sysctl fue modificado fuera del registro guardado",
"The sysctl include is a link:": "El include de sysctl es un enlace:",
"The sysctl include is not a safe host file": "El include de sysctl no es un archivo seguro del host",
@@ -6351,6 +6370,7 @@
"The tmpfs path or size is outside the supported profile": "El camino o tamaño de tmpfs está fuera del perfil soportado",
"The translated recipe changed during the preparation": "La receta traducida cambió durante la preparación",
"The value contains an unsupported character": "El valor contiene un carácter no admitido",
"The value must be a number:": "El valor debe ser un número:",
"The values do not match. Enter them again.": "Los valores no coinciden. Vuelve a introducirlos.",
"The variable contains control characters:": "La variable contiene caracteres de control:",
"The variable contains line breaks:": "La variable contiene roturas de línea:",
@@ -6933,6 +6953,7 @@
"Video": "Vídeo",
"Video acceleration and object detection are independent choices; the installer does not write camera or detector YAML.": "La aceleración de vídeo y la detección de objetos son opciones independientes; el instalador no escribe cámara o detector YAML.",
"Video transcoding acceleration": "Aceleración de transcodificación de vídeo",
"Video transcoding profile not implemented:": "Perfil de transcodificación de vídeo no implementado:",
"View CIFS Mounts (pvesm + fstab)": "Ver montajes CIFS (pvesm + fstab)",
"View Current Exports": "Ver exportaciones actuales",
"View Current Mounts": "Ver montajes actuales",
@@ -7498,6 +7519,8 @@
"read-only": "solo lectura",
"reboot-quick alias added": "alias de reinicio rápido agregado",
"reboot-quick alias is already configured": "el alias de reinicio rápido ya está configurado",
"recognition": "reconocimiento",
"recognition only": "solo reconocimiento",
"recommended": "recomendado",
"recovering": "recuperando",
"remapped users": "usuarios reasignados",
@@ -7589,6 +7612,9 @@
"vCPUs:": "vCPU:",
"vfio-pci IDs configured": "ID de vfio-pci configurados",
"vfio-pci IDs in /etc/modprobe.d/vfio.conf": "ID de vfio-pci en /etc/modprobe.d/vfio.conf",
"video": "vídeo",
"video + recognition": "vídeo + reconocimiento",
"video only": "solo vídeo",
"vzdump backup speed optimization completed": "Optimización de la velocidad de copia de seguridad de vzdump completada",
"wallabag builds its links from the address given during the installation. If it does not match the address of the container, edit lxc.environment.runtime: SYMFONY__ENV__DOMAIN_NAME in /etc/pve/lxc/<CTID>.conf with the container stopped, and start it again.": "wallabag construye sus enlaces desde la dirección dada durante la instalación. Si no coincide con la dirección del contenedor, edite lxc.environment. tiempo de ejecución: SYMFONY DOMAIN NAME en /etc/pve/lxc/ se hizo referencia aCTID ratio.conf con el contenedor parado, y comenzar de nuevo.",
"wallabag listens on port 80 of the container and stores its data in SQLite.": "wallabag escucha en el puerto 80 del contenedor y almacena sus datos en SQLite.",