PhotoPrism frente a Immich: ¿qué servidor de fotos elegir?
Compara PhotoPrism e Immich con sus mínimos reales de RAM, aplicaciones móviles, mapas y comandos exactos de copia de seguridad para un VPS.
PhotoPrism frente a Immich: respuesta breve
PhotoPrism frente a Immich es una elección entre dos funciones distintas, no entre dos versiones del mismo producto. Immich sustituye a Google Photos: una aplicación para el teléfono hace copias de seguridad automáticas del carrete, y la línea temporal resultará familiar a cualquiera que deje atrás la galería del teléfono. PhotoPrism organiza una biblioteca de fotos que ya existe: indexa carpetas de archivos en el disco, lee sus metadatos, las muestra en un mapa y deja los archivos exactamente donde estaban.
Elija Immich si el problema es «el teléfono está lleno y quiero dejar de usar Google Photos». Elija PhotoPrism si el problema es «tengo 400 GB de fotos en una unidad y no encuentro nada». Ambos son de código abierto, ambos se ejecutan como contenedores Docker en un VPS normal y ambos indexan y permiten buscar en su biblioteca sin enviar nada a terceros.
La división filosófica y por qué lo decide todo
Immich es el propietario de los archivos. Se le indica una ubicación de carga, la aplicación del teléfono o el cargador web envía los originales e Immich los almacena en su propia ruta y con sus propios nombres. La base de datos contiene la información principal sobre los álbumes, las caras y las búsquedas. Este diseño es lo que permite una buena experiencia en el teléfono, porque el servidor siempre conoce el estado completo de cada recurso.
PhotoPrism lee los archivos. Se monta una carpeta originals que ya se administra y PhotoPrism crea un índice sobre ella. El árbol de directorios sigue siendo suyo. Si mañana se elimina PhotoPrism, las fotos permanecen en las mismas carpetas y con los mismos nombres. Los archivos YAML auxiliares que PhotoPrism escribe para describir lo que ha aprendido permanecen en su propia carpeta de almacenamiento, que es donde los guarda de forma predeterminada.
Esta única diferencia explica gran parte del resto. Immich ofrece una integración móvil sólida porque controla la incorporación de archivos. PhotoPrism ofrece una administración sólida de la biblioteca porque no entra en conflicto con la estructura existente. Immich es la mejor opción para una familia cuyas fotos están en los teléfonos. PhotoPrism es la mejor opción para un archivo almacenado en un disco.
Apetito de hardware: Immich pide más
Los mínimos de memoria documentados están muy separados, y en un VPS pequeño este suele ser el factor decisivo.
Los datos de este gráfico
[
{
"label": "Immich",
"min_ram_gb": 6
},
{
"label": "PhotoPrism",
"min_ram_gb": 3
}
]Immich documenta 6 GB de RAM como mínimo y 8 GB como cantidad recomendada. También indica que una máquina con 4 GB sólo puede ejecutarlo si se desactiva el aprendizaje automático. PhotoPrism documenta 3 GB de memoria física y dos núcleos de CPU. También indica que, por encima de ese mínimo, la cantidad de RAM debe corresponderse con el número de núcleos.
La diferencia es real y se debe al contenedor de aprendizaje automático. Immich ejecuta sus modelos en un servicio immich-machine-learning independiente que carga en memoria CLIP (preentrenamiento contrastivo de lenguaje e imágenes) y los modelos de detección facial. En una máquina con 2 GB, el kernel termina ese contenedor. Se muestra con el código de salida 137, que indica que el proceso terminó con la señal 9. Así aparece en Docker una terminación por falta de memoria. Los modelos integrados de PhotoPrism se ejecutan con ONNX. Su documentación indica que, por lo general, funcionan bien en todo tipo de hardware. Además, PhotoPrism tiene una alternativa documentada para situaciones de poca memoria: en máquinas con 1 GB o menos, desactiva la conversión RAW y el reconocimiento facial. Sin embargo, esto no garantiza la estabilidad. Por debajo de su mínimo de 3 GB, el proyecto advierte de inestabilidad y problemas de rendimiento. Por tanto, trate ese valor como un mínimo real.
La documentación de PhotoPrism indica explícitamente que el servidor debe tener al menos 4 GB de swap. La página de requisitos de Immich no menciona el swap, pero este da margen al contenedor de aprendizaje automático en una máquina pequeña. Añádalo antes de instalar cualquiera de las dos aplicaciones.
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
free -hfree -h debería mostrar ahora una línea Swap: con el valor 4.0Gi. Si muestra 0B, significa que swapon ha fallado, normalmente porque el sistema de archivos no admite fallocate, y sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 es la alternativa. Los límites de memoria de los contenedores también son importantes. Configurar límites de memoria en Docker Compose permite impedir que un servicio consuma toda la memoria de la máquina. La excepción es el propio PhotoPrism: su documentación desaconseja establecer un límite de memoria estricto en su contenedor, porque la indexación de archivos grandes necesita temporalmente memoria adicional y un límite puede provocar reinicios inesperados.
Hay otro requisito que suele pasarse por alto. La base de datos Postgres de Immich debe estar en un sistema de archivos Unix normal, con propietarios y permisos reales, en almacenamiento local y nunca en un recurso compartido de red. PhotoPrism advierte que sus archivos de base de datos nunca deben almacenarse en una carpeta de red compartida y considera que el almacenamiento SSD local es la mejor ubicación. Ninguna de las dos aplicaciones debe ejecutarse con la base de datos en un almacén de objetos montado.
Cómo instalar cada una
Ambas instalaciones consisten en un archivo compose del proveedor y un comando. Configure primero Docker Engine y el plugin Compose, como se explica en nuestra guía sobre Docker Compose en un VPS.
Immich publica su archivo compose y un archivo de entorno de ejemplo con cada versión.
sudo mkdir -p /opt/immich && cd /opt/immich
wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.envEdite .env antes de iniciar nada. UPLOAD_LOCATION es la ubicación donde se almacenarán sus originales. DB_PASSWORD incluye un valor predeterminado funcional, e Immich recomienda cambiarlo por una contraseña aleatoria, aunque no lo exige. Postgres no está expuesto públicamente, por lo que la contraseña sólo se utiliza para la autenticación local, pero no cuesta nada establecer una aleatoria. Use únicamente los caracteres A-Za-z0-9, porque la documentación de Immich indica que otros caracteres pueden causar problemas cuando Docker analiza el valor. Después, inícielo.
docker compose up -d
docker compose psLa interfaz web responde en el puerto 2283. La primera cuenta registrada desde esa página se convierte en la cuenta de administrador. Acceda a ella y regístrese de inmediato, en lugar de dejar una instancia abierta en Internet.
PhotoPrism publica un archivo compose que ya incluye MariaDB.
sudo mkdir -p /opt/photoprism && cd /opt/photoprism
wget https://dl.photoprism.app/docker/compose.yamlAbra compose.yaml y cambie PHOTOPRISM_ADMIN_PASSWORD antes del primer inicio. La documentación es clara al respecto: la aplicación se inicia con la contraseña inicial que figure en ese archivo, la longitud mínima es de 8 caracteres y el valor predeterminado nunca debe utilizarse en un servidor público. Configure también el volumen originals para que apunte a la carpeta que contiene sus fotos.
docker compose up -d
docker compose logs -f photoprismPhotoPrism responde en el puerto 2342 con el usuario admin. Ninguna de las dos aplicaciones debe exponerse directamente. Coloque delante un reverse proxy con TLS (seguridad de la capa de transporte), siguiendo el mismo esquema utilizado para un Nextcloud autoalojado con Docker, TLS y copias de seguridad, o mantenga el servidor privado y acceda a él mediante una VPN. Si ese VPS termina alojando algo más que fotos, aplique la misma restricción a cada servicio que añada, porque un relay de RustDesk autoalojado sólo necesita que sus dos puertos estén accesibles y nada más.
Cuál tiene una aplicación móvil mejor
Esta es la diferencia más importante entre los dos proyectos y la razón por la que la mayoría termina usando Immich.
Immich publica aplicaciones oficiales para Android e iOS. Estas realizan copias de seguridad en segundo plano del carrete de la cámara, por lo que las fotos nuevas salen del teléfono sin que nadie tenga que abrir ninguna aplicación. Para usarlo fuera de casa, Immich documenta tres opciones: una VPN como WireGuard u OpenVPN, Tailscale o un proxy inverso que sirva HTTPS. El proxy inverso permite que las aplicaciones móviles se conecten sin instalar una aplicación VPN en cada teléfono. Immich advierte que nunca se debe reenviar el puerto 2283 directamente a Internet sin configuración adicional.
PhotoPrism no tiene una aplicación nativa oficial. Publica una aplicación web progresiva que se añade a la pantalla de inicio desde el navegador. También documenta WebDAV (creación y versionado distribuidos en la web) como método para sincronizar las fotos desde un teléfono. El proyecto recomienda usar para ello una aplicación de terceros llamada PhotoSync, configurada para acceder al directorio /import/ o /originals/ mediante WebDAV. Funciona, pero es una aplicación de terceros de pago que realiza una tarea que Immich incluye en su propio cliente.
Si el requisito es realizar copias de seguridad automáticas desde los teléfonos de varios miembros de la familia, la decisión está clara: Immich.
Lo que ofrece realmente el aprendizaje automático
Immich realiza búsquedas semánticas en la biblioteca mediante CLIP, por lo que una consulta como «bicicleta roja en la nieve» encuentra fotos que nadie etiquetó. También detecta y agrupa rostros, y detecta duplicados. La indexación de una importación grande en la CPU se ejecuta durante horas en segundo plano. Es normal y no requiere una GPU (unidad de procesamiento gráfico).
PhotoPrism clasifica las imágenes mediante etiquetas con un modelo ONNX integrado, detecta rostros y los agrupa en personas con modelos faciales ONNX, y lee los metadatos de ubicación para crear un mapa de lugares. Un archivo vision.yml en su carpeta de configuración puede cambiar el proveedor a Ollama u OpenAI para las etiquetas y los pies de foto, si los necesita. El mapa es la función por la que la gente sigue utilizando el producto: una biblioteca indexada por el lugar donde se tomaron las fotos ofrece una forma realmente distinta de explorar veinte años de fotos. La misma idea funciona con otras colecciones multimedia, y la interfaz de videoclub de los años 90 de Halcyon para Jellyfin es su versión para películas: permite explorar por estantería en lugar de hacerlo por lista. El reconocimiento facial está incluido en la edición Community gratuita. Las suscripciones Essentials y Plus de pago añaden extras como capas de mapa más completas, más roles de usuario y una interfaz de gestión de usuarios. En octubre de 2026, parten de unos pocos euros al mes y se facturan anualmente.
Immich no tiene funciones bloqueadas tras un pago y el proyecto afirma que nunca las tendrá. Sí vende claves de producto opcionales de por vida: $25 para un usuario o $100 para un servidor completo, según los precios anunciados por Immich en julio de 2024. Sin embargo, comprar una clave no desbloquea nada. Immich funciona sin restricciones aunque nunca pague. El núcleo de PhotoPrism es gratuito, con extras de pago opcionales.
Las copias de seguridad determinan si conserva sus datos
Un servidor de fotos sin copias de seguridad puede perder todas las fotos de una familia por un único fallo de disco. Ambas aplicaciones necesitan dos copias de seguridad: una de la base de datos y otra de los archivos.
En Immich, vuelque la base de datos desde el contenedor de Postgres y copie la ubicación de carga.
docker exec -t immich_postgres pg_dump --clean --if-exists --dbname=immich --username=postgres | gzip > /backup/immich-db.sql.gzDespués, haga una copia de seguridad de UPLOAD_LOCATION. Las carpetas que contienen datos irremplazables son upload, library y profile. Las carpetas thumbs y encoded-video se pueden regenerar, aunque eso puede consumir horas de CPU. Un volcado de la base de datos por sí solo no restaura nada, porque sólo contiene metadatos.
En PhotoPrism, el índice tiene su propio comando.
docker compose exec photoprism photoprism backup -i -fEse comando escribe un volcado SQL en storage/backup/. Después, copie la carpeta originals y la carpeta storage. PhotoPrism también escribe archivos YAML auxiliares que describen cada foto. Por tanto, el índice perdido se puede reconstruir sólo a partir de los archivos. Esto es una ventaja importante para un archivo que planea conservar durante décadas.
Elija la opción que elija, envíe esas copias de seguridad fuera del servidor según un programa mediante copias de seguridad restic cifradas y con deduplicación en almacenamiento remoto. Una copia de seguridad almacenada en el mismo disco que la biblioteca no es una copia de seguridad. Configure el trabajo para que avise cuando falle, porque una copia de seguridad que dejó de ejecutarse silenciosamente en marzo parece exactamente igual que una que se ejecutó anoche hasta el día en que la necesita, y un servidor ntfy autohospedado enviará ese fallo a su teléfono esa misma tarde.
Cuál debería ejecutar
Ejecute Immich si sus fotos están en teléfonos, si más de una persona necesita hacer una copia de seguridad del carrete de la cámara y si puede asignar al servidor 6 GB de RAM o más. Es lo más parecido a Google Photos que puede alojar usted mismo, y la experiencia móvil es su principal ventaja. Nuestra guía paso a paso para instalar Immich explica en detalle los cierres por falta de memoria y los problemas habituales durante las actualizaciones.
Ejecute PhotoPrism si ya tiene un archivo de fotos en disco, si le importan los mapas y los metadatos y quiere conservar su propia estructura de carpetas, o si su VPS tiene 4 GB de RAM y prefiere una biblioteca funcional en lugar de una que use swap constantemente. Es una herramienta de curación mejor y consume menos recursos en hardware limitado.
También es razonable ejecutar ambos. Immich gestiona la incorporación diaria de fotos desde los teléfonos. Una vez al año, clasifica las fotos que quiere conservar en su archivo y deje que PhotoPrism las indexe. No entran en conflicto porque PhotoPrism lee las carpetas, mientras que Immich administra sus propios datos.
FAQ
¿Pueden PhotoPrism e Immich compartir la misma carpeta de fotos?
No de forma segura en ambas direcciones. PhotoPrism indexa una carpeta originals y tiene funciones que escriben en ella, salvo que se ejecute en modo de sólo lectura, mientras que Immich espera gestionar el contenido de su ubicación de carga. Puede apuntar PhotoPrism a una copia de sólo lectura de la carpeta library de Immich para explorarla, pero no permita que ambas aplicaciones gestionen los mismos archivos, porque la plantilla de almacenamiento de Immich puede mover o cambiar el nombre de los recursos mientras PhotoPrism los indexa.
¿Es Immich lo bastante estable para guardar la única copia de mis fotos?
Ninguna aplicación autohospedada debería guardar nunca la única copia de ningún archivo. Immich sigue ahora el versionado semántico e indica que los cambios incompatibles se limitan a las versiones principales, así que fije IMMICH_VERSION a una etiqueta de versión principal como v3, lea las notas de la versión y actualice con docker compose pull && docker compose up -d. No se admite la degradación, ni siquiera dentro de la misma versión menor, así que haga un volcado de la base de datos antes de cada actualización. Mantenga los archivos originales respaldados fuera del servidor y el riesgo será reducido.
¿Por qué el contenedor de aprendizaje automático de Immich se reinicia continuamente?
Normalmente, el sistema lo termina porque usa demasiada memoria. Ejecute docker compose ps --all, porque un contenedor detenido queda oculto sin esa opción, y busque que el servicio de aprendizaje automático termine con el código 137. Ese código significa que el proceso recibió la señal 9; la causa habitual es el terminador de procesos por falta de memoria del kernel, pero no es la única, así que confírmelo con sudo dmesg | grep -i 'out of memory'. Añada swap o desactive por completo el aprendizaje automático en una máquina con 4 GB. Un límite de memoria en el contenedor no lo regula: al alcanzar el límite, el proceso sigue terminándose, pero deja de privar de memoria al resto del servidor. La búsqueda inteligente y el reconocimiento facial dejan de funcionar sin aprendizaje automático, pero el resto de Immich funciona correctamente.
¿PhotoPrism necesita MariaDB o sirve SQLite?
SQLite funciona y es adecuado para una biblioteca personal, pero PhotoPrism se limita a cuatro trabajadores cuando lo utiliza, y la documentación recomienda cambiar a MariaDB porque gestiona mejor una alta concurrencia. El archivo compose que distribuye el proyecto ya incluye MariaDB, por lo que la opción recomendada también es la predeterminada.
¿Cuánto espacio en disco debo reservar por encima del tamaño de mi biblioteca?
Añada entre 10 y 20 por ciento al tamaño de los originales, con cualquiera de las dos aplicaciones. Esto cubre las miniaturas generadas y las previsualizaciones de vídeo transcodificadas. Una colección de 200 GB necesita aproximadamente entre 220 y 240 GB sólo para la biblioteca, además de espacio para la base de datos y el crecimiento. Si también conserva una copia de respaldo local completa en el mismo volumen, los originales y esa copia necesitan al menos 400 GB antes de contar cualquier otro elemento, así que reserve unos 450 GB o coloque la copia en un volumen separado.