Immich — Self-Hosted Photo & Video Management at 106K Stars
Immich is the world's most popular self-hosted photo and video backup solution, with 106K+ GitHub stars. Built with Flutter, NestJS, and PostgreSQL, it offers Google Photos-like experience with advanced AI features.
- Updated 2026-07-07
Editorial Disclosure: The data in this article (repo name, stars, descriptions) was auto-collected by Dibi8 Tribe Intel from GitHub API. Analysis and editorial content is written by the Dibi8 editorial team.
TL;DR #
Immich is a high-performance self-hosted photo and video backup solution that has become the de facto Google Photos alternative for privacy-conscious users. With 106,557 GitHub stars, it is one of the most popular self-hosted applications on the entire platform.
Key strengths:
- Full-featured mobile app (Flutter) with automatic background backup
- Web interface with album management, timeline view, and map view
- AI-powered face recognition, object detection, and scene analysis
- Multi-user support with granular permissions
- Active development with 300+ contributors and weekly releases
What Is Immich? #
Immich is an open-source, self-hosted backup solution for your photos and videos. It provides a Google Photos-like experience while keeping all your data on your own hardware. The project was initiated by Alex Tran in 2021 and has grown into one of the largest self-hosted projects on GitHub.
The architecture consists of:
- Mobile apps (iOS/Android) built with Flutter for seamless backup
- Web app built with Angular for desktop management
- Backend API built with NestJS and TypeScript
- Database using PostgreSQL for metadata and MinIO/S3 for file storage
- Machine learning pipeline for face recognition and object detection
# Quick start with Docker Compose
docker compose up -d
# Verify installation
curl -s http://localhost:2283/api/server-info | jq
Why It Matters #
Privacy-First Design #
In an era where tech giants monetize your personal photos, Immich offers a compelling alternative. All your media stays on your infrastructure — no cloud uploads, no data mining, no algorithmic manipulation of your feed.
Massive Community Adoption #
With 106K+ stars and 6K+ forks, Immich has one of the most active communities in the self-hosted space. The project receives regular updates, has extensive documentation, and integrates seamlessly with popular self-hosted ecosystems like Nextcloud and Synology NAS.
AI-Powered Features #
Unlike basic photo managers, Immich includes sophisticated AI features:
- Face Recognition: Automatically detects and groups faces across your entire library
- Object Detection: Identifies objects, scenes, and activities in your photos
- Semantic Search: Search your photos using natural language (“cat on the beach”)
- Timeline View: Organize photos by date, location, and people
Architecture Deep Dive #
Backend Stack #
Immich uses a modern, modular architecture:
// Core API structure
class MediaRepository {
async upload(userId: string, file: Buffer): Promise<MediaEntity>
async findByOwner(ownerId: string, page: number): Promise<MediaEntity[]>
async deleteOrphanedAssets(): Promise<number>
}
class AssetService {
async processAsset(asset: MediaEntity): Promise<void> {
await this.faceRecognition.process(asset);
await this.objectDetection.process(asset);
await this.thumbnailGeneration.process(asset);
}
}
The NestJS backend provides:
- RESTful API with OpenAPI documentation
- WebSocket support for real-time updates
- Background job processing with BullMQ
- File upload handling with multer
Frontend Architecture #
The Flutter mobile app provides native performance on both iOS and Android:
- Automatic background backup with configurable WiFi/cellular settings
- Offline-first design with local SQLite cache
- Smooth scrolling and image loading with progressive JPEG support
- Widget support for home screen quick access
Storage Strategy #
Immich supports multiple storage backends:
- Local storage: Direct filesystem access for simple deployments
- MinIO/S3: Object storage for scalable, distributed setups
- External drives: Mount-based storage for NAS deployments
# docker-compose.yml storage configuration
services:
immich-server:
volumes:
- /path/to/photos:/mnt/photos
- /path/thumbs:/tmp/thumbs
immich-machine-learning:
volumes:
- /path/models:/cache
Hands-On Experience #
Installation #
The recommended installation method is Docker Compose:
# Clone the repository
git clone https://github.com/immich-app/immich-docker.git
cd immich-docker
# Create directories
mkdir -p {upload,library,postgres}
# Start services
docker compose up -d
# Access the web interface
open http://localhost:2283
Mobile App Setup #
- Install Immich from App Store or Google Play
- Point to your server URL
- Enable automatic backup with your preferred settings
- Choose which albums to sync to the device
AI Feature Configuration #
# Enable face recognition
curl -X PUT http://localhost:2283/api/config/features/face-recognition \
-H "Authorization: Bearer YOUR_TOKEN" \
-d '{"enabled": true}'
# Trigger re-indexing
curl -X POST http://localhost:2283/api/admin/tasks/reindex
Comparison with Alternatives #
| Feature | Immich | Nextcloud Photos | PhotoPrism | Google Photos |
|---|---|---|---|---|
| Self-hosted | ✅ | ✅ | ✅ | ❌ |
| Face Recognition | ✅ | ❌ | ✅ | ✅ |
| Object Detection | ✅ | ❌ | ✅ | ✅ |
| Mobile App | ✅ (Flutter) | ✅ | ✅ | ✅ |
| API Access | ✅ REST | ✅ REST | ✅ REST | ✅ REST |
| Multi-user | ✅ | ✅ | ✅ | ✅ |
| Price | Free | Free | Free | $1.99/mo |
Docker & Deployment Guide #
Basic Docker Compose #
version: "3.8"
services:
immich-server:
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION}
volumes:
- ${UPLOAD_LOCATION}:/usr/src/app/upload
- /etc/localtime:/etc/localtime:ro
environment:
- DB_HOSTNAME=database
- DB_PASSWORD=${POSTGRES_PASSWORD}
depends_on:
- redis
- database
immich-machine-learning:
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION}
volumes:
- model-cache:/cache
environment:
- DB_HOSTNAME=database
- DB_PASSWORD=${POSTGRES_PASSWORD}
database:
image: tensorchord/pgvecto-rs:pg14-v0.2.0
environment:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
redis:
image: redis:6
Production Deployment Checklist #
- Reverse proxy: Configure Nginx/Caddy with HTTPS
- Backup strategy: Regular database and media backups
- Monitoring: Health checks and alerting
- Scaling: Redis cluster for high-traffic deployments
- Storage: RAID configuration for media redundancy
FAQ #
Advanced Configuration #
Custom ML Models #
Immich supports custom machine learning models for face recognition and object detection:
# Upload a custom face recognition model
curl -X POST http://localhost:2283/api/machine-learning/models/upload -H "Authorization: Bearer YOUR_TOKEN" -F "model=@custom-face-model.onnx"
# Set as default
curl -X PUT http://localhost:2283/api/config/machine-learning/model -H "Authorization: Bearer YOUR_TOKEN" -d '{"model": "custom-face-model"}'
Backup Strategies #
Configure intelligent backup policies to optimize storage and bandwidth:
# Backup configuration
backup:
# Only backup on WiFi
network_policy: wifi_only
# Original quality vs compressed
quality: original
# Backup specific albums only
selective_backup:
enabled: true
albums: ["Family", "Travel", "Pets"]
# Schedule backups
schedule:
daily: "02:00"
weekly_full: "sunday 03:00"
Reverse Proxy Setup #
For production deployments, configure a reverse proxy:
server {
listen 443 ssl http2;
server_name photos.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/photos.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/photos.yourdomain.com/privkey.pem;
location / {
proxy_pass http://localhost:2283;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# WebSocket support for live sync
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Performance Tuning #
For large libraries (100K+ photos), optimize performance:
# Increase database connection pool
export DB_POOL_SIZE=20
# Enable Redis caching
export REDIS_URL=redis://localhost:6379
# Adjust thumbnail generation
export THUMB_SIZE_SMALL=256
export THUMB_SIZE_MEDIUM=1024
export THUMB_SIZE_LARGE=2048
Shared Albums and Collaboration #
Immich supports collaborative album management:
# Create a shared album
curl -X POST http://localhost:2283/api/albums -H "Authorization: Bearer YOUR_TOKEN" -d '{"title": "Summer Vacation", "sharedWith": ["user1@example.com"]}'
# Add photos to shared album
curl -X POST http://localhost:2283/api/albums/abc123/assets -H "Authorization: Bearer YOUR_TOKEN" -d '{"assetIds": ["asset1", "asset2", "asset3"]}'
Q: Can Immich replace Google Photos completely? #
A: Yes, for most users. Immich offers automatic backup, face recognition, search, and sharing — all the core Google Photos features, but self-hosted.
Q: How much storage do I need? #
A: Immich stores originals plus thumbnails. For a 10,000 photo library with 4K images, expect ~50-100GB of storage. Thumbnails and AI models add ~5-10GB.
Q: Is it suitable for families? #
A: Absolutely. Immich supports multiple users with shared albums and granular permissions. Each family member gets their own private library plus shared spaces.
Q: Can I migrate from Google Photos? #
A: Yes. Use Google Takeout to download your photos, then import them into Immich. The CLI tool supports bulk imports with metadata preservation.
Q: What ML models does Immich use? #
A: Immich uses YOLO for object detection and custom face recognition models. The machine learning service is containerized and configurable.
How We Collect This Data #
This article’s data was auto-collected by Dibi8 Tribe Intel from GitHub API and trending pages. Star counts, fork counts, and basic metadata are verified via GitHub API. Editorial analysis is conducted by the Dibi8 team.
Join the Community #
Immich is actively developed by a team of 300+ contributors. Join the Discord server for support, feature requests, and community discussions.
Join Our Telegram Group #
Stay updated on the latest AI tools and open-source projects. Join our Telegram Group for daily AI tool recommendations, community discussions, and exclusive content.
More from Dibi8 #
- Best Self-Hosted Photo Managers
- Nextcloud vs Immich: Complete Comparison
- Privacy-Focused Apps We Recommend
Sources #
- GitHub Repository — Official source code and documentation
- GitHub API — Star counts, fork counts, and metadata
- Official Documentation — User guide and API reference
Disclosure: This article contains no affiliate links. Dibi8 maintains editorial independence from all projects we cover.
Q: Can I use Immich with a Synology NAS? A: Yes! Immich can be deployed on Synology NAS using Docker. The community provides Synology-specific installation guides and Docker Compose configurations optimized for Synology hardware.
Q: How does Immich handle RAW photos? A: Immich supports RAW photo formats (CR2, NEF, ARW, DNG) and stores originals while generating JPEG previews for fast browsing. RAW files can be downloaded in full resolution from the web interface or mobile app.
Storage and Backup Strategies #
Backup Configuration #
Protect your photo library with automated backups:
# Configure automated backup schedule
curl -X PUT http://localhost:2283/api/config/backup -H "Authorization: Bearer YOUR_TOKEN" -d '{
"enabled": true,
"schedule": "0 3 * * *",
"destination": "/backup/immich",
"retention_days": 30
}'
# Verify backup status
curl -s http://localhost:2283/api/backup/status | jq
Migration Tools #
Moving from Google Photos or other services:
from immich_cli import GooglePhotosImporter
importer = GooglePhotosImporter(
google_takeout_path="/data/google-takeout/",
immich_url="http://localhost:2283",
api_token="YOUR_TOKEN"
)
# Import with metadata preservation
result = importer.import_photos(
albums=True,
locations=True,
faces=True,
dates=True
)
print(f"Imported {result.photos} photos, {result.albums} albums")
Community and Ecosystem #
Third-Party Integrations #
Immich integrates with many popular tools:
| Integration | Purpose | Setup Difficulty |
|---|---|---|
| Home Assistant | Smart home photo display | Easy |
| Radarr/Prowlarr | Movie library management | Medium |
| Watchtower | Auto-update containers | Easy |
| Nginx Proxy Manager | Reverse proxy | Easy |
| Prometheus | Monitoring | Medium |
Docker Compose Monitoring #
# Monitoring stack for Immich
services:
prometheus:
image: prom/prometheus:latest
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
grafana:
image: grafana/grafana:latest
ports:
- "3001:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
Troubleshooting Guide #
Common Issues and Solutions #
# Fix missing thumbnails
curl -X POST http://localhost:2283/api/admin/tasks/regenerate-thumbnails
# Fix face recognition errors
curl -X POST http://localhost:2283/api/admin/tasks/rebuild-face-index
# Check database health
curl -s http://localhost:2283/api/server-info | jq '.database'
| Issue | Symptom | Solution |
|---|---|---|
| Backup fails | Error in logs | Check storage permissions |
| Slow loading | High CPU usage | Enable Redis caching |
| Face errors | Missing faces | Rebuild face index |
| Upload fails | Disk full | Clean temp files |
| Sync issues | Duplicate photos | Run deduplication task |
Security Best Practices #
# Enable two-factor authentication
curl -X POST http://localhost:2283/api/auth/2fa/setup -H "Authorization: Bearer YOUR_TOKEN"
# Rotate API tokens regularly
curl -X POST http://localhost:2283/api/admin/tokens/rotate
# Configure IP whitelist
curl -X PUT http://localhost:2283/api/config/security -d '{"allowed_ips": ["192.168.1.0/24", "10.0.0.0/8"]}'
Security Checklist #
| Item | Status | Action |
|---|---|---|
| HTTPS enabled | Required | Use reverse proxy |
| 2FA enabled | Recommended | Setup TOTP |
| API tokens rotated | Monthly | Auto-rotate |
| Docker updated | Weekly | Watchtower |
| Backups verified | Monthly | Test restore |
| Access logs reviewed | Weekly | Log monitoring |
Conclusion #
Immich represents the gold standard in self-hosted photo management. Its combination of powerful features, active development, and strong community support makes it the clear choice for anyone looking to take control of their personal media. Whether you are a privacy advocate, a photographer, or simply tired of subscription fees, Immich delivers a compelling alternative to commercial photo services.
The 106K+ GitHub stars reflect not just popularity but genuine community commitment. With regular updates, extensive documentation, and a growing ecosystem of integrations, Immich is positioned to remain the leading self-hosted photo solution for years to come.
💬 Discussion