Immich: Tu propio "Google Fotos"

Docker 27 de abr. de 2026

Immich es una solución totalmente gratuita y sin ningun tipo de limitación para que montes tu propia nube para guardar y gestionar tus fotos, es totalmente funcional y una alternativa real a Google Fotos.

Permite que las fotos y videos que realices con tu movil se guarden en tu propio servidor.

La mejor opción es instalarlo mediante docker en tu propio servidor de casa, puedes ver el procedimiento completo en su documentación:

Docker Compose [Recommended] | Immich
Docker Compose is the recommended method to run Immich in production. Below are the steps to deploy Immich with Docker Compose.

Instalar mediante Docker Compose

Además una vez instalado y configurado en tu propio servidor, lo ideal es instalar la aplicación para movil y sacarle todo el rendimiento.

Demo on-line de Immich


La aplicación móvil es gratuita y no tiene publicidad

Immich - Apps on Google Play
This is a client app for the self-hostable Immich Server

Aplicación para Google Play

Immich App - App Store
Download Immich by FUTO Computing on the App Store. See screenshots, ratings and reviews, user tips, and more apps like Immich.

Aplicación en la App Store

Sin embargo este artículo además de mostrarte esta magnifica solución alternativa a Google Fotos, es para mostrar como solucionar el error en el procesamiento y detección de caras.

Solución al error de Detección de Caras

He visto que mucha gente se queja de que el proceso de detección de caras les falla.
En las pruebas locales que realicé funcionaba correctamente, pero al ponerlo en producción fallaba tal y como comentaban el resto de usuarios.

Lo primero que he realizado ha sido revisar los logs del contenedor immich-server para verlos, simplemente ejecuta el comando docker logs immich-server a mi me aparecían lo siguientes errores:

Error: Machine learning request '{"facial-recognition":{"detection":{"modelName":"buffalo_l","options":{"minScore":0.5}},"recognition":{"modelName":"buffalo_l"}}}' failed for all URLs
    at MachineLearningRepository.predict (/usr/src/app/server/dist/repositories/machine-learning.repository.js:117:15)
    at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
    at async MachineLearningRepository.detectFaces (/usr/src/app/server/dist/repositories/machine-learning.repository.js:126:26)
    at async PersonService.handleDetectFaces (/usr/src/app/server/dist/services/person.service.js:244:52)
    at async JobService.onJobRun (/usr/src/app/server/dist/services/job.service.js:51:30)
    at async EventRepository.onEvent (/usr/src/app/server/dist/repositories/event.repository.js:91:13)
    at async /usr/src/app/server/node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/cjs/classes/worker.js:570:32
[Nest] 7  - 04/27/2026, 8:09:55 PM    WARN [Microservices:MachineLearningRepository] Machine learning request to "http://immich-machine-learning:3003" failed: fetch failed
[Nest] 7  - 04/27/2026, 8:09:55 PM    WARN [Microservices:MachineLearningRepository] Machine learning request to "http://immich-machine-learning:3003" failed: fetch failed
[Nest] 7  - 04/27/2026, 8:09:55 PM    WARN [Microservices:MachineLearningRepository] Machine learning request to "http://172.28.0.2:3003" failed: fetch failed
[Nest] 7  - 04/27/2026, 8:09:55 PM    WARN [Microservices:MachineLearningRepository] Machine learning request to "http://172.28.0.2:3003" failed: fetch failed
[Nest] 7  - 04/27/2026, 8:09:55 PM   ERROR [Microservices:{"id":"d7da13f6-d3d7-4e70-afa1-0c4b69e00e61"}] Unable to run job handler (AssetDetectFaces): Error: Machine learning request '{"facial-recognition":{"detection":{"modelName":"buffalo_l","options":{"minScore":0.5}},"recognition":{"modelName":"buffalo_l"}}}' failed for all URLs

Luego he realizado una revisión de la configuración del servidor (via web) con el usuario administrador y veo la siguiente configuración en la parte de "aprendizaje automático":

Aunque en la configuración de los servidores tengo creada su propia red para conectar internamente todos los contenedores, he comprobado que el problema es que no sabe resolver el nombre del servidor de aprendizaje.

Para comprobar si es realmente un problema de resolución de nombres he averiguado la ip del contenedor para incluir esa IP, se averigua facilmente con el siguiente comando:

docker inspect immich_machine_learning

Localiza la línea que pone IPAddress y apunta la dirección IP


Luego vía web pulsa sobre el botón + Añadir URL incluye esa IP en la configuración escribiendo:
http://172.28.0.2:3003

Vuelve a revisar los logs y verás que comienza a funcionar el procesamiento:

[Nest] 25  - 04/27/2026, 8:10:00 PM     LOG [Api:MachineLearningRepository~vq17wdpu] Machine learning server became healthy (http://172.28.0.2:3003).
...
[Nest] 7  - 04/27/2026, 8:10:41 PM     LOG [Microservices:PersonService] Detected 1 new faces in asset 0e39b92b-30e5-4388-90b1-094680f2ab52
[Nest] 7  - 04/27/2026, 8:10:46 PM     LOG [Microservices:PersonService] Detected 4 new faces in asset 498858e7-73c2-47e4-be5a-97b8002da160
...

Problema detectado, pero como la IP del contenedor puede modifcarse hay que solucionar el problema de la resolución del nombre.
Para no arrastrar configuraciones de prueba, eliminamos la URL que acabamos de incluir que tenía la IP fijada.

La solución

La solución es realmente sencilla, tan sólo hay que incluir la línea hostname: immich-machine-learning
en la parte del contenedor de aprendizaje dentro del fichero docker-compose.yml

El fichero deberá quedar así:

...

  immich-machine-learning:
    container_name: immich_machine_learning
    hostname: immich-machine-learning
    image: ghcr.io/immich-app/immich-machine-learning:v2
    volumes:
      - model-cache:/cache
    env_file:
      - .env
    networks:
      red-immich: null
    restart: always

...

Ahora si revisas de nuevo los logs verás que funciona todo correctamente sin errores:

...
[Nest] 25  - 04/27/2026, 8:10:00 PM     LOG [Api:MachineLearningRepository~vq17wdpu] Machine learning server became healthy (http://immich-machine-learning:3003).
[Nest] 25  - 04/27/2026, 8:10:00 PM     LOG [Api:SystemConfigService~0x797efo] LogLevel=log (set via system config)
[Nest] 7  - 04/27/2026, 8:10:00 PM     LOG [Microservices:SystemConfigService] LogLevel=log (set via system config)
...
[Nest] 7  - 04/27/2026, 8:25:03 PM     LOG [Microservices:PersonService] Detected 1 new faces in asset 1121a8d3-1e12-45b7-8e01-d9a9982a56b8
[Nest] 7  - 04/27/2026, 8:25:05 PM     LOG [Microservices:PersonService] Detected 1 new faces in asset 4cbc79b6-b605-4edf-b7e9-9c744e720aca
[Nest] 7  - 04/27/2026, 8:25:14 PM     LOG [Microservices:PersonService] Detected 1 new faces in asset 1f630c0c-87c5-4d86-931d-18e75cb662c0
[Nest] 7  - 04/27/2026, 8:25:14 PM     LOG [Microservices:PersonService] Creating new person for face 4d71ab9a-bd70-4a6c-bd73-ae435fe2e936
[Nest] 7  - 04/27/2026, 8:25:15 PM     LOG [Microservices:PersonService] Creating new person for face 02f60e7e-8802-461e-9d50-0ac6d00c092d
[Nest] 7  - 04/27/2026, 8:25:15 PM     LOG [Microservices:PersonService] Creating new person for face 9c463892-3ba9-4c84-9c79-81491090f259
...

En cuento termine de procesar las fotos verás que las caras ha sido reconocidas correctamente:

Reconocimiento facial correcto en Immich

Enhorabuena, ya tienes totalmente configurado el procesamiento de caras en Immich.

Etiquetas

Luis GuLo

🐧 SysAdmin GNU/Linux - 🐳 Docker - 🖥️ Bash Scripting - 🐪 Perl - 🐬 MySQL - 👥 Formador de TI - 👥 Formador de SysAdmin's - 💢 Ansible - ☁️ Cloud Computing - ❤️ Debian GNU/Linux