Immich: La Alternativa Self-Hosted a Google Photos con IA que Controlas Tú (Guía Completa 2025)
¿Cansado de pagar suscripciones mensuales por almacenar tus fotos? ¿Preocupado por la privacidad de tus recuerdos familiares en servidores de Google? Immich es la respuesta que estabas buscando: una solución self-hosted de gestión de fotos con inteligencia artificial que funciona en tu propio servidor.
En esta guía completa aprenderás a instalar y configurar Immich, entenderás cómo funciona su sistema de IA local, y descubrirás por qué más de 83,600 usuarios en GitHub confían en esta herramienta para proteger sus recuerdos digitales.
¿Qué es Immich y Por Qué Debería Importarte?
Immich es una plataforma open-source de gestión de fotos y vídeos que replica la experiencia de Google Photos, pero ejecutándose completamente en tu infraestructura. Lanzado bajo licencia AGPL-3.0, ha experimentado un crecimiento explosivo con 1,664 contribuidores y 278 releases desde su inicio.
La Promesa de Immich: Privacidad Sin Sacrificar Funcionalidad
El dilema tradicional era claro: o sacrificabas privacidad usando servicios cloud, o renunciabas a funcionalidades avanzadas de IA con soluciones self-hosted básicas. Immich rompe este paradigma ejecutando modelos de machine learning localmente en tu servidor, sin enviar ni un solo pixel a terceros.
La versión actual v2.2.3 (lanzada el 5 de noviembre de 2025) incluye:
- Reconocimiento facial con clustering automático usando InsightFace
- Búsqueda semántica por texto natural con modelos CLIP de OpenAI
- Detección de objetos sin etiquetado manual
- Apps móviles nativas para iOS y Android con backup automático
- Álbumes compartidos con sistema multi-usuario completo
Todo esto ejecutándose en hardware modesto: 4GB de RAM y 2 cores de CPU son suficientes para empezar.
Casos de Uso Reales: ¿Cuándo Immich es la Mejor Opción?
1. El Homelab Personal
Perfil: Entusiasta tecnológico con NAS Synology/QNAP o mini-PC. Si estás montando tu primer homelab, Immich es un proyecto perfecto para aprender automatización con Docker mientras resuelves un problema real.
Setup típico:
- Hardware: NAS existente con 4GB RAM, 2TB HDD
- Usuarios: 3-4 miembros de la familia
- Biblioteca: ~500GB de fotos y vídeos
- Coste mensual: €0 (hardware ya existente)
2. Fotógrafo Profesional
Perfil: Profesional con biblioteca RAW masiva que necesita búsqueda rápida. La búsqueda semántica con modelos de IA locales permite encontrar fotos por concepto («sesión atardecer playa») sin etiquetar manualmente.
Setup típico:
- Servidor dedicado: 16GB RAM, 4TB SSD (trabajo activo) + 8TB HDD (archivo)
- Uso: Gestión de sesiones por cliente, búsqueda por evento/fecha
- ROI vs Google One (2TB a €10/mes): 3-4 años con servidor usado de €300-500
3. Familia Consciente de Privacidad
Perfil: Familia sin conocimientos técnicos pero con hijo/a tech-savvy.
Setup típico:
- Mini-PC: €200 con 8GB RAM, 1TB SSD
- Usuarios: 4 móviles con backup automático
- Ahorro vs Google One (5 usuarios, 2TB): €360/año → ROI en 7 meses
Arquitectura Técnica: Cómo Funciona Immich Por Dentro
Entender la arquitectura de Immich te ayudará a diagnosticar problemas y optimizar tu instalación.
Stack Tecnológico Completo
Frontend Web:
SvelteKit (framework moderno JS)
├── Tailwind CSS (estilos utility-first)
├── TypeScript (type safety)
└── Vite (build tool ultra-rápido)
Backend API:
NestJS (Node.js framework enterprise)
├── TypeORM (ORM para PostgreSQL)
├── Bull (job queue con Redis)
└── Sharp (procesamiento de imágenes)
Apps Móviles:
Flutter (framework cross-platform)
├── Dart (lenguaje de programación)
├── Riverpod (gestión de estado)
└── Isar (base de datos local)
Machine Learning:
Python (servicio independiente)
├── PyTorch (framework ML)
├── ONNX Runtime (inferencia optimizada)
├── InsightFace (reconocimiento facial)
└── CLIP (búsqueda semántica)
Contenedores Docker y Sus Funciones
Immich se despliega con 5 contenedores especializados:
| Contenedor | Función | Puerto | Recursos Típicos |
|---|---|---|---|
immich-server |
API REST + lógica negocio | 2283 | 512MB-1GB RAM |
immich-web |
Frontend SvelteKit | interno | 256MB RAM |
immich-machine-learning |
Procesamiento IA | interno | 1-2GB RAM (+GPU) |
postgres |
Base de datos | 5432 | 512MB-1GB RAM |
redis |
Cache + job queue | 6379 | 128MB RAM |
Total RAM en uso típico: 2.5-4GB (sin ML activo), 4-6GB (con ML procesando)
Instalación Paso a Paso con Docker Compose
Prerrequisitos Verificados
Antes de empezar, asegúrate de cumplir estos requisitos:
# 1. Verificar Docker Engine (mínimo v25)
docker --version
# Salida esperada: Docker version 25.x.x o superior
# 2. Verificar Docker Compose V2
docker compose version
# Salida esperada: Docker Compose version v2.x.x
# 3. Verificar espacio en disco
df -h /ruta/donde/instalaras/immich
# Recomendado: Al menos 50GB libres inicialmente
⚠️ IMPORTANTE: Docker Engine v25+ es obligatorio. Versiones antiguas (v24, v23) causarán errores de compatibilidad con las nuevas features.
Paso 1: Preparar Directorios
Crea una estructura organizada para los datos de Immich:
# Directorio principal de la aplicación
mkdir -p ~/immich-app
cd ~/immich-app
# Directorio para fotos subidas
mkdir -p /mnt/datos/immich/upload
# Directorio para base de datos (NO usar network share)
mkdir -p /mnt/datos/immich/postgres
Paso 2: Descargar Archivos de Configuración
# Descargar docker-compose.yml oficial
wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
# Descargar .env de ejemplo
wget -O .env https://github.com/immich-app/immich/releases/latest/download/.env.example
Paso 3: Configurar Variables de Entorno
Edita el archivo .env con tus rutas y configuración:
nano .env
Contenido recomendado del .env:
# Ubicación donde se almacenarán las fotos subidas
UPLOAD_LOCATION=/mnt/datos/immich/upload
# Ubicación de los datos de PostgreSQL
# ⚠️ CRÍTICO: NO usar network shares (NFS, SMB) aquí
DB_DATA_LOCATION=/mnt/datos/immich/postgres
# Contraseña de PostgreSQL
# ⚠️ Usar SOLO caracteres alfanuméricos (evita problemas parsing)
DB_PASSWORD=InmichSecure2025
# Usuario base de datos (dejar por defecto)
DB_USERNAME=postgres
# Nombre de la base de datos (dejar por defecto)
DB_DATABASE_NAME=immich
# Zona horaria (opcional pero recomendado)
TZ=Europe/Madrid
# Versión de Immich (release = última estable)
IMMICH_VERSION=release
# Puerto de acceso web (cambiar si 2283 está ocupado)
# IMMICH_PORT=2283
Notas críticas sobre configuración:
- DB_PASSWORD: Solo alfanuméricos. Evita símbolos (
!@#$%) que pueden causar errores de parsing de Docker. - DB_DATA_LOCATION: NUNCA usar network shares (NFS, Samba). PostgreSQL requiere filesystem local con soporte de locks.
- UPLOAD_LOCATION: Puede ser network share SI tu red es rápida (1Gbps+).
Paso 4: Docker Compose Completo Personalizado
Si descargaste el docker-compose.yml oficial, ya está listo. Pero aquí tienes una versión comentada para entender cada parte:
version: "3.8"
services:
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
command: ["start.sh", "immich"]
volumes:
- ${UPLOAD_LOCATION}:/usr/src/app/upload
- /etc/localtime:/etc/localtime:ro
env_file:
- .env
ports:
- 2283:3001
depends_on:
- redis
- database
restart: always
immich-microservices:
container_name: immich_microservices
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
command: ["start.sh", "microservices"]
volumes:
- ${UPLOAD_LOCATION}:/usr/src/app/upload
- /etc/localtime:/etc/localtime:ro
env_file:
- .env
depends_on:
- redis
- database
restart: always
immich-machine-learning:
container_name: immich_machine_learning
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
volumes:
- model-cache:/cache
env_file:
- .env
restart: always
redis:
container_name: immich_redis
image: redis:6.2-alpine
restart: always
database:
container_name: immich_postgres
image: tensorchord/pgvecto-rs:pg14-v0.2.0
env_file:
- .env
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_USER: ${DB_USERNAME}
POSTGRES_DB: ${DB_DATABASE_NAME}
volumes:
- ${DB_DATA_LOCATION}:/var/lib/postgresql/data
restart: always
volumes:
model-cache:
Paso 5: Iniciar Immich
# Descargar imágenes e iniciar contenedores
docker compose up -d
# Verificar que todos los contenedores están running
docker compose ps
# Ver logs en tiempo real (útil para troubleshooting)
docker compose logs -f
Salida esperada de docker compose ps:
NAME IMAGE STATUS
immich_server ghcr.io/immich-app/immich-server:release Up 2 minutes
immich_microservices ghcr.io/immich-app/immich-server:release Up 2 minutes
immich_machine_learning ghcr.io/immich-app/immich-ml:release Up 2 minutes
immich_postgres tensorchord/pgvecto-rs:pg14-v0.2.0 Up 2 minutes
immich_redis redis:6.2-alpine Up 2 minutes
Paso 6: Primer Acceso y Configuración
-
Abre tu navegador y accede a:
http://<IP-de-tu-servidor>:2283 -
Registra el usuario administrador:
- Email:
admin@tudominio.com - Contraseña: (elige una segura)
- Nombre:
Admin
⚠️ CRÍTICO: El primer usuario que se registre será el administrador. Asegúrate de ser tú.
- Configuración inicial recomendada:
- Ve a
Settings(esquina superior derecha) Machine Learning Settings: Habilita facial recognitionStorage Settings: Verifica que las rutas son correctasUser Settings: Configura 2FA (muy recomendado)
Machine Learning Local: Cómo Funciona la IA de Immich
Una de las características más impresionantes de Immich es su capacidad de ejecutar modelos de IA sin enviar datos fuera de tu servidor.
Modelos de IA Utilizados
1. InsightFace (Reconocimiento Facial)
Función: Detectar y reconocer caras en fotos y vídeos.
Proceso técnico:
1. Imagen original → Genera thumbnail preview
↓
2. Envía a immich-machine-learning
↓
3. Modelo descarga automáticamente si no existe
↓
4. Face detection con aceleración hardware (GPU/CPU AVX2)
↓
5. Genera embeddings faciales (vectores numéricos de 512 dims)
↓
6. Algoritmo DBSCAN agrupa caras similares
↓
7. Almacena en PostgreSQL (tabla: person, asset_faces)
Configuración de clustering:
# Parámetros DBSCAN que usa Immich (configurables en UI)
{
"min_samples": 3, # Mínimo de caras para crear cluster
"epsilon": 0.6, # Distancia máxima entre caras similares
"min_cluster_size": 5 # Mínimo de fotos para mostrar persona
}
Precisión esperada:
- Misma persona, misma iluminación: >95%
- Misma persona, diferentes años: ~85%
- Niños creciendo: ~70% (dificulta clustering)
2. CLIP (Búsqueda Semántica)
Función: Buscar fotos usando lenguaje natural.
Ejemplos de búsquedas:
"perros jugando en la playa"
"montañas con nieve al atardecer"
"comida italiana en restaurante"
"coche rojo aparcado"
Cómo funciona:
Al subir foto:
1. Imagen → Modelo CLIP genera embedding (vector 768 dims)
2. Embedding se almacena en PostgreSQL con pgvecto-rs
Al buscar:
1. Texto "perros en playa" → CLIP genera embedding de texto
2. Búsqueda vectorial en BD (similitud coseno)
3. Devuelve imágenes con mayor similitud (score >0.7)
Ventaja vs tags manuales: No necesitas etiquetar nada. CLIP entiende semántica y contexto.
3. Detección de Objetos
Identifica automáticamente:
- Animales (perros, gatos, pájaros, caballos)
- Vehículos (coches, motos, bicicletas, aviones)
- Comida (pizza, sushi, pasta, café)
- Naturaleza (árboles, flores, montañas, mar)
Configurar Aceleración por GPU
Si tienes GPU NVIDIA, puedes acelerar el procesamiento ML hasta 10x. Esto es especialmente útil si ya tienes GPUs configuradas en tu homelab para otras cargas de trabajo de IA:
# Añade a immich-machine-learning en docker-compose.yml
immich-machine-learning:
# ... resto de configuración ...
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
environment:
- NVIDIA_VISIBLE_DEVICES=all
Prerrequisitos:
- NVIDIA GPU con soporte CUDA
- NVIDIA Container Toolkit instalado
- Drivers NVIDIA actualizados
Benchmarks reales (RTX 3060 vs CPU i5-10400):
| Tarea | CPU (6 cores) | GPU RTX 3060 | Speedup |
|---|---|---|---|
| Procesar 1000 fotos (facial recognition) | 45 min | 4.5 min | 10x |
| Generar embeddings CLIP | 30 min | 3 min | 10x |
| Detección de objetos | 20 min | 2.5 min | 8x |
Apps Móviles: Backup Automático en iOS y Android
Las apps nativas son uno de los puntos fuertes de Immich frente a alternativas basadas en web.
Instalación y Configuración
iOS (App Store):
1. Busca "Immich" en App Store
2. Instala la app oficial (gratis)
3. Abre y conecta a tu servidor:
- URL: http://TU-IP:2283
- Email: admin@tudominio.com
- Contraseña: tu-password
Android (Google Play):
1. Busca "Immich" en Google Play
2. Instala la app oficial (gratis)
3. Configuración idéntica a iOS
Configurar Backup Automático
1. En la app, ve a: Profile → Backup Settings
2. Selecciona álbumes a respaldar:
✅ Camera Roll (Carrete)
✅ Screenshots (opcional)
❌ WhatsApp (suelen ser duplicados)
3. Configura comportamiento:
- Background backup: ON
- Require WiFi: ON (recomendado)
- Require charging: OFF (backup más frecuente)
4. Prueba manual:
- Tap "Backup Now"
- Verifica que fotos aparecen en web UI
Nota sobre LivePhotos (iOS): Immich preserva el vídeo asociado. Se reproduce automáticamente al ver la foto en la web.
Solución a Problemas Comunes de Apps
Error: “Connection failed»
# Verifica que el servidor es accesible desde móvil
ping TU-IP
# Verifica que el puerto 2283 no está bloqueado por firewall
sudo ufw allow 2283/tcp
Backup se detiene en background (iOS):
iOS limita procesos en background agresivamente.
Soluciones:
1. Deja la app abierta durante backup inicial
2. Habilita "Background App Refresh" en iOS Settings
3. Conecta a WiFi + cargador (iOS prioriza estos casos)
Backup lento (Android):
Android Doze mode suspende la app tras inactividad.
Soluciones:
1. Añade Immich a "No optimizar batería"
2. Settings → Battery → Immich → Unrestricted
Comparativa Detallada: Immich vs Google Photos vs Alternativas
Tabla Comparativa Completa
| Característica | Google Photos | Immich | PhotoPrism | Nextcloud Photos |
|---|---|---|---|---|
| Precio | €1.99-9.99/mes | Gratis (HW one-time) | Gratis (HW one-time) | Gratis (HW one-time) |
| Privacidad | ❌ Datos en Google | ✅ 100% local | ✅ 100% local | ✅ 100% local |
| IA facial recognition | ✅ Excelente | ✅ Muy bueno | ✅ Bueno | ⚠️ Básico |
| Búsqueda semántica | ✅ Excelente | ✅ Muy bueno (CLIP) | ⚠️ Limitada | ❌ No |
| Apps móviles nativas | ✅ iOS/Android | ✅ iOS/Android (Flutter) | ⚠️ PWA lenta | ✅ iOS/Android |
| Backup automático móvil | ✅ Sí | ✅ Sí (background) | ⚠️ Manual/PWA | ✅ Sí |
| Álbumes compartidos | ✅ Sí | ✅ Multi-usuario completo | ✅ Sí | ✅ Sí |
| Edición de fotos | ✅ Integrada | ❌ No (usar externa) | ❌ No | ❌ No |
| Storage ilimitado | ❌ Pago por tier | ✅ Según HW | ✅ Según HW | ✅ Según HW |
| Setup inicial | ✅ Trivial | ⚠️ Docker knowledge | ⚠️ Docker knowledge | ⚠️ Docker/setup complejo |
| Recursos mínimos | N/A | 4GB RAM, 2 cores | 2GB RAM, 2 cores | 4GB RAM, 2 cores |
| Desarrollo activo | ✅ Muy activo (278 releases) | ✅ Activo (~50 releases) | ✅ Nextcloud GmbH | |
| Comunidad | N/A | ✅ 83k stars GitHub | ✅ 35k stars GitHub | ✅ Nextcloud ecosystem |
Análisis de Coste Total (TCO) a 5 Años
Google Photos (Plan 200GB):
Suscripción: €2.99/mes × 60 meses = €179.40
Hardware: €0
Electricidad: €0
Total 5 años: €179.40
Immich (Setup homelab modesto):
Hardware (Mini-PC Beelink): €200 (one-time)
Discos 2TB (2× 1TB SSD): €100
Electricidad (~15W 24/7): €8/mes × 60 = €480
Total 5 años: €780
Coste por GB almacenado: €780 / 2000GB = €0.39/GB
Google Photos (Plan 2TB – Fotógrafo):
Suscripción: €9.99/mes × 60 meses = €599.40
Total 5 años: €599.40
Coste por GB: €599 / 2000GB = €0.30/GB
Immich (Setup profesional – Fotógrafo):
Servidor usado (Dell R720): €400
Discos 8TB (4× 2TB): €300
Electricidad (~80W 24/7): €35/mes × 60 = €2,100
Total 5 años: €2,800
Coste por GB: €2,800 / 8000GB = €0.35/GB
Conclusión TCO:
- Bibliotecas pequeñas (<500GB): Google Photos más económico
- Bibliotecas grandes (>2TB): Immich competitivo a partir del año 3
- Ventaja Immich: Control total, privacidad, posibilidad de expandir storage a coste marginal bajo
Mejores Prácticas de Seguridad y Backups
Acceso Remoto Seguro (SIN Exponer Puertos)
Opción 1: VPN con Tailscale (Recomendado para principiantes)
Tailscale usa WireGuard como protocolo subyacente, proporcionando encriptación robusta sin sacrificar velocidad:
# 1. Instalar Tailscale en servidor
curl -fsSL https://tailscale.com/install.sh | sh
# 2. Autenticar
sudo tailscale up
# 3. Obtener IP de Tailscale
tailscale ip -4
# Salida ejemplo: 100.101.102.103
# 4. Desde móvil: instalar Tailscale, conectar, usar:
# http://100.101.102.103:2283
Ventajas Tailscale:
- Zero-config (no tocar router)
- Encriptación WireGuard
- Gratis hasta 100 dispositivos
Opción 2: Reverse Proxy con Nginx + Let’s Encrypt
# 1. Instalar Nginx Proxy Manager (vía Docker)
docker run -d \
--name nginx-proxy-manager \
-p 80:80 \
-p 443:443 \
-p 81:81 \
-v ~/npm/data:/data \
-v ~/npm/letsencrypt:/etc/letsencrypt \
jc21/nginx-proxy-manager:latest
# 2. Accede a: http://TU-IP:81
# User: admin@example.com
# Pass: changeme
# 3. Añade Proxy Host:
# Domain: immich.tudominio.com
# Forward to: http://immich_server:3001
# SSL: Request Let's Encrypt certificate
Ventajas Nginx Proxy Manager:
- HTTPS gratis con Let’s Encrypt
- Interfaz web sencilla
- Soporte múltiples dominios
Estrategia de Backups Completa
Backup 1: Base de Datos PostgreSQL (CRÍTICO)
#!/bin/bash
# Script: backup-immich-db.sh
BACKUP_DIR="/mnt/backups/immich"
DATE=$(date +%Y-%m-%d_%H-%M-%S)
# Crear backup de PostgreSQL
docker exec -t immich_postgres pg_dumpall -c -U postgres | \
gzip > "$BACKUP_DIR/db_backup_$DATE.sql.gz"
# Mantener solo últimos 7 días
find "$BACKUP_DIR" -name "db_backup_*.sql.gz" -mtime +7 -delete
echo "Backup completado: db_backup_$DATE.sql.gz"
Añadir a cron:
# Ejecutar backup diario a las 3 AM
crontab -e
# Añadir línea:
0 3 * * * /home/user/backup-immich-db.sh
Backup 2: Fotos (Sincronización a NAS/Cloud)
#!/bin/bash
# Script: sync-immich-photos.sh
SOURCE="/mnt/datos/immich/upload"
DEST="user@nas:/backups/immich-photos"
# Sincronizar fotos a NAS (preserva permisos y timestamps)
rsync -avz --delete \
--exclude='thumbs/' \
--exclude='encoded-video/' \
"$SOURCE/" "$DEST/"
echo "Fotos sincronizadas a NAS"
Backup 3: Configuración Docker (Rápido)
# Backup de docker-compose.yml y .env
tar -czf ~/immich-config-backup.tar.gz \
~/immich-app/docker-compose.yml \
~/immich-app/.env
# Subir a cloud (ejemplo con rclone a Google Drive)
rclone copy ~/immich-config-backup.tar.gz gdrive:backups/
Restauración desde Backup
Restaurar base de datos:
# 1. Detener Immich
cd ~/immich-app
docker compose down
# 2. Restaurar dump de PostgreSQL
gunzip < /mnt/backups/immich/db_backup_2025-11-06.sql.gz | \
docker exec -i immich_postgres psql -U postgres
# 3. Reiniciar Immich
docker compose up -d
Restaurar fotos:
# Sincronizar desde NAS a servidor
rsync -avz user@nas:/backups/immich-photos/ /mnt/datos/immich/upload/
Optimización de Performance
Separar Storage por Tipo de Datos
Configuración óptima:
# docker-compose.yml optimizado para performance
services:
database:
volumes:
# Base de datos en SSD NVMe (I/O crítico)
- /mnt/ssd-nvme/immich/postgres:/var/lib/postgresql/data
immich-server:
volumes:
# Fotos originales en HDD (coste/TB)
- /mnt/hdd-raid/immich/originals:/usr/src/app/upload/library
# Thumbnails en SSD SATA (acceso frecuente)
- /mnt/ssd-sata/immich/thumbs:/usr/src/app/upload/thumbs
# Vídeos transcodificados en SSD (streaming)
- /mnt/ssd-sata/immich/encoded:/usr/src/app/upload/encoded-video
Distribución de espacio típica (biblioteca 1TB):
| Tipo de dato | Tamaño | Storage recomendado | Razón |
|---|---|---|---|
| Fotos originales | 700 GB | HDD (RAID 1) | Acceso infrecuente, redundancia |
| Vídeos originales | 300 GB | HDD (RAID 1) | Acceso infrecuente |
| Thumbnails | 50 GB | SSD | Acceso MUY frecuente (timeline) |
| Vídeos transcodificados | 30 GB | SSD | Streaming requiere baja latencia |
| Base de datos | 10 GB | SSD NVMe | I/O intensivo (búsquedas) |
Ajustar Workers de Machine Learning
# docker-compose.yml
immich-machine-learning:
environment:
# Número de workers paralelos (según CPU)
- MACHINE_LEARNING_WORKERS=4
# Modelo de facial recognition (opciones: buffalo_l, buffalo_m, buffalo_s)
# buffalo_l = mayor precisión, más recursos
# buffalo_s = menor precisión, más rápido
- MACHINE_LEARNING_MODEL_FACE=buffalo_m
# Habilitar aceleración AVX2 (CPUs modernas)
- MACHINE_LEARNING_ACCELERATION=openvino
Guía de workers según CPU:
- 2 cores → 1-2 workers
- 4 cores → 2-3 workers
- 6 cores → 3-4 workers
- 8+ cores → 4-6 workers
Nota: Más workers NO siempre es mejor. Exceder el número de cores causa context switching y ralentiza.
Monitoreo de Recursos
Script de monitoreo simple:
#!/bin/bash
# Script: monitor-immich.sh
echo "=== Immich Resource Monitor ==="
echo ""
# Uso de RAM por contenedor
echo "RAM Usage:"
docker stats --no-stream --format "table {{.Name}}\t{{.MemUsage}}" | grep immich
echo ""
# Espacio en disco
echo "Disk Usage:"
du -sh /mnt/datos/immich/* 2>/dev/null
echo ""
# Jobs pendientes en Redis
echo "Pending ML Jobs:"
docker exec immich_redis redis-cli LLEN bull:immich:thumbnail-generation
docker exec immich_redis redis-cli LLEN bull:immich:face-detection
echo ""
# Última ejecución
date
Ejecutar cada hora con cron:
0 * * * * /home/user/monitor-immich.sh >> /var/log/immich-monitor.log
Preguntas Frecuentes (FAQ)
¿Puedo migrar desde Google Photos a Immich?
Sí, usando Google Takeout:
# 1. Descarga tu archivo de Google Takeout (puede tardar días)
# 2. Extrae el archivo ZIP
# 3. Usa immich-cli para subir masivamente
npx immich upload --recursive /ruta/a/google-takeout/Google\ Photos/
# 4. Immich detectará duplicados automáticamente
Nota: Metadata EXIF se preserva, pero álbumes de Google Photos NO se transfieren (requiere reorganización manual).
¿Immich funciona sin conexión a internet?
Sí, completamente. Solo necesitas red local (LAN) para:
- Acceso desde navegadores en red local
- Apps móviles conectadas a la misma WiFi
Para acceso remoto sin internet público, usa VPN (Tailscale/WireGuard).
¿Puedo ejecutar Immich en Raspberry Pi?
⚠️ Posible pero NO recomendado para bibliotecas grandes:
Raspberry Pi 4 (8GB):
- ✅ Funciona para bibliotecas pequeñas (<50GB, <5000 fotos)
- ❌ Machine Learning MUY lento (sin AVX2, CPU ARM limitado)
- ❌ Thumbnails se generan lentamente
Alternativa recomendada: Mini-PC x86 usado (€100-150) con CPU Intel/AMD tiene 5-10x mejor rendimiento.
¿Qué pasa si actualizo Immich y algo se rompe?
# 1. SIEMPRE hacer backup de DB antes de actualizar
./backup-immich-db.sh
# 2. Anotar versión actual
docker inspect immich_server | grep Image
# 3. Actualizar
docker compose pull
docker compose up -d
# 4. Si algo falla, revertir a versión anterior
docker compose down
# Edita docker-compose.yml y cambia IMMICH_VERSION a versión anterior
docker compose up -d
# 5. Restaurar DB si es necesario
gunzip < backup.sql.gz | docker exec -i immich_postgres psql -U postgres
¿Puedo usar Immich comercialmente (negocio)?
Sí, la licencia AGPL-3.0 permite uso comercial, pero:
⚠️ AGPL requiere: Si modificas el código y ofreces servicio a terceros (ej: hosting de Immich), debes liberar tus modificaciones bajo AGPL.
Escenarios permitidos sin restricciones:
- ✅ Usar Immich sin modificaciones para tu negocio (fotos empresa)
- ✅ Modificar para uso interno (sin ofrecer servicio a terceros)
Escenarios que requieren liberar código:
- ⚠️ Modificar Immich y ofrecer hosting como servicio (ej: “Immich as a Service»)
¿Cuánto tarda en procesar 10,000 fotos con ML?
Depende del hardware:
CPU Intel i5-10400 (6 cores, sin GPU):
- Facial recognition: ~3-4 horas
- CLIP embeddings: ~2-3 horas
- Total: 5-7 horas
CPU + GPU NVIDIA RTX 3060:
- Facial recognition: ~20-30 minutos
- CLIP embeddings: ~15-20 minutos
- Total: 35-50 minutos
Nota: El procesamiento es ONE-TIME. Nuevas fotos se procesan inmediatamente al subirlas.
¿Immich soporta vídeos 4K?
Sí, con transcoding automático:
# Configuración de transcoding en Settings → Video Settings
Transcoding:
- Codec: H.264 (compatibilidad) o H.265 (menor tamaño)
- Target resolution: Original, 1080p, 720p, 480p
- Target bitrate: 10Mbps (4K), 5Mbps (1080p), 2Mbps (720p)
- Hardware acceleration: VAAPI (Intel), NVENC (NVIDIA), AMF (AMD)
Vídeos originales se preservan. Transcoding genera versión web-friendly para streaming.
¿Puedo tener múltiples instancias de Immich (trabajo/personal)?
Sí, ejecuta múltiples stacks Docker en puertos diferentes:
# Instancia 1: Personal (puerto 2283)
cd ~/immich-personal
docker compose up -d
# Instancia 2: Trabajo (puerto 2284)
cd ~/immich-trabajo
# Edita docker-compose.yml: cambia puerto 2283 → 2284
docker compose up -d
Cada instancia tiene su propia BD, usuarios y fotos independientes.
¿Cómo elimino fotos definitivamente (no solo de álbumes)?
1. Selecciona fotos en web UI
2. Click en ícono de tres puntos (⋮)
3. "Delete from Library" (NO "Remove from Album")
4. Confirma
Nota: Fotos eliminadas van a "Trash" (papelera) 30 días.
Para eliminar permanentemente: Settings → Trash → Empty Trash
¿Puedo compartir fotos con personas que NO tienen cuenta Immich?
Sí, con Public Share Links:
1. Crea álbum con fotos a compartir
2. Click en álbum → Share → Create Public Link
3. Configura:
- Password protection (opcional)
- Expiration date (opcional)
- Allow download (opcional)
4. Copia link y comparte
El link funciona sin login. Cualquiera con el link puede ver.
Advertencia de seguridad: Links públicos exponen fotos a cualquiera con el link. Usa passwords y expiraciones para contenido sensible.
¿Immich consume mucho ancho de banda al sincronizar?
Upload inicial consume mucho (subes TODA tu biblioteca).
Sincronización continua es eficiente:
- Solo fotos nuevas se suben
- Compresión automática en tránsito
- Duplicados detectados (no suben dos veces)
Estimación bandwidth mensual (4 personas, 200 fotos nuevas/mes):
- Fotos (15MB/foto × 200): ~3GB/mes
- Thumbnails ya generadas: 0GB adicional
- Total: ~3GB/mes (insignificante en plan móvil moderno)
¿Qué hago si Immich deja de responder después de actualización?
# 1. Ver logs de errores
docker compose logs immich-server | grep ERROR
# Errores comunes y soluciones:
# Error: "Database migration failed"
# Solución: Restaurar backup de DB pre-actualización
# Error: "ENOSPC: no space left on device"
# Solución: Liberar espacio en disco
df -h
docker system prune -a
# Error: "Cannot connect to Redis"
# Solución: Reiniciar Redis
docker compose restart redis
# 2. Si nada funciona, revert completo
docker compose down
# Cambiar IMMICH_VERSION a versión anterior en .env
docker compose up -d
Conclusión: ¿Vale la Pena Immich en 2025?
Immich ha alcanzado un nivel de madurez que lo convierte en la alternativa self-hosted más competitiva frente a Google Photos para usuarios con conocimientos técnicos básicos.
Cuando Immich es la Mejor Elección
✅ Priorizas privacidad: Tus fotos contienen información sensible (documentos, familia, trabajo).
✅ Biblioteca grande: Más de 500GB de fotos/vídeos (Google One a €9.99/mes = €120/año).
✅ Ya tienes homelab: Aprovechar hardware existente (NAS, mini-PC) sin coste adicional.
✅ Quieres aprender: Self-hosting es una habilidad valiosa en el ecosistema tech actual.
✅ Control total: Necesitas certeza de dónde están tus datos y quién puede acceder.
Cuando Google Photos Sigue Siendo Mejor
❌ Zero conocimientos técnicos: No quieres aprender Docker ni troubleshooting.
❌ Biblioteca pequeña: Menos de 100GB (plan Google One 100GB a €1.99/mes es difícil de batir).
❌ Movilidad extrema: Necesitas acceso instantáneo desde cualquier red sin configurar VPN.
❌ Edición integrada: Usas intensivamente las herramientas de edición de Google Photos.
La Apuesta a Futuro
Con 83,600 estrellas en GitHub y 1,664 contribuidores, Immich tiene una comunidad activa que garantiza desarrollo continuo. La versión v2.2.3 es estable y funcional para producción.
La inversión de tiempo en configurar Immich hoy (4-6 horas incluyendo troubleshooting) te ahorra €600-1,200 en suscripciones a 5 años, además de darte control permanente sobre tus recuerdos digitales.
Si estás leyendo esto, probablemente ya tienes el perfil técnico necesario. Immich se integra perfectamente con otros proyectos self-hosted como n8n para automatización o Kubernetes para orquestación avanzada. El siguiente paso es tuyo.
¿Listo para instalar Immich? Descarga el docker-compose.yml oficial y empieza hoy: https://docs.immich.app
