Immich
Self-hosted photos and video - a Google Photos alternative with real mobile apps, face and semantic search.
One-click deploy, from $49/mo on a Miget plan.
Immich is the self-hosted photo and video manager that finally feels like Google Photos: first-class iOS and Android apps, automatic phone backup, face recognition, smart and semantic search, albums, shared libraries, and a timeline - all on infrastructure you own.
It is a four-service stack: the server (port 5000), a machine-learning worker for face detection and CLIP search, a Postgres built with the VectorChord vector extension (Immich’s own image - this is why it does not use Miget’s managed Postgres), and Valkey for the job queue. Photos live on a filesystem volume, not object storage, because the library layout and thumbnails need a real filesystem.
It is flagged experimental for two honest reasons: it is heavy (~6-8 GB, the ML worker alone wants ~3 GB while loading models), and Immich ships fast-moving releases where major versions sometimes need a database migration. Pin upgrades and read the release notes. For a permanent home for your photos, that care is worth it.
Upstream project: Immich
#what you get
- Native iOS and Android apps with automatic backup
- Face recognition and CLIP-powered semantic search
- Albums, shared libraries, timeline, map view
- VectorChord Postgres + ML worker (self-contained, not managed pg)
- Library on a filesystem volume - your photos, your disk
- AGPL-3.0; four private/public services
#topology
| Service | Role | Public |
|---|---|---|
| immich-server | API + web app (:5000) | yes |
| immich-machine-learning | face + semantic search models | no (private) |
| database / redis | VectorChord Postgres / Valkey | no (private) |
#miget sizing
// this stack needs
6.3 GiB RAM · 120 GB disk · 4 services
Give the stack at least 8 GB of RAM - the ML worker wants ~3 GB loading models, the server ~2 GB. The 100 GB library volume is the variable; resize it to your collection. Keep replicas at 1 (single-writer library).
Hobby - recommended fit
$49/mo
4 vCPU · 8 GiB · 160 GiB disk
Headroom for your own apps: 16 GiB at $97/mo
Professional - production
$337/mo
16 vCPU · 32 GiB · 200 GiB disk
Dedicated resources, production SLOs - plan details
One Miget plan is a fixed pool of compute - the whole stack (managed databases included) deploys inside it, and anything left over runs your other apps. No per-service or per-seat math.
#vs. the managed service
What the hosted equivalents charge, against the flat Miget plan this stack fits on. Prices as of June 2026, sources linked.
| Service | Plan | Monthly | What you get |
|---|---|---|---|
| Immich on Miget ★ | 8 GiB plan | $49 | this whole stack, flat - no usage meters, and room left for your own apps |
| Google One | 2 TB | ~$10 | $9.99/mo - rented space, library mined |
| iCloud+ | 2 TB | ~$10 | $9.99/mo - rented space |
Cloud photo plans rent storage by the month; Immich is your photos on your own disk, exportable.
#vs. other PaaS
Estimated monthly cost of running this exact stack (6.3 GiB RAM, 120 GB disk, 4 containers) elsewhere, from published June 2026 rates.
| Platform | Est. monthly | Notes |
|---|---|---|
| Miget ★ | $49 flat | compose stacks first-class: one deploy, dedicated vCPU, managed Postgres/Valkey, volumes and TLS all included in the plan |
| Heroku | ~$313 | no volumes; nothing between 1 GB ($50) and 2.5 GB ($250) dynos - 2 GB containers cost far more than shown |
| Render | ~$108 | per-service instances (0.5 GB $7, 2 GB $25) - every container is its own paid service |
| Railway | ~$81 | usage-based ($10/GB RAM-mo); vCPU billed separately at $20/vCPU-mo on top |
| DO App Platform | ~$80 | no persistent volumes - stateful containers need managed DBs/Spaces (base $5 Spaces included here) |
| Fly.io | ~$55 | cheapest sticker price - but burstable shared CPUs (1/16 core; dedicated vCPUs cost ~2-3×), no compose deploys (one app per container, manual wiring), managed DBs billed extra |
Estimates assume RAM fully allocated at published on-demand rates - and sticker price isn't the whole comparison: the cheaper rows buy burstable shared CPUs, per-service wiring instead of a compose deploy, and managed databases billed separately. Heroku and DO App Platform have no persistent volumes at all - stateful stacks like this one need workarounds there.
#deploy it
On Miget
- Create a Compose Stack in app.miget.com pointing at the templates repository
- Set the stack path to
immich -
Set the required variable:
DB_PASSWORD, shared by the server and the database (random string)
- Deploy. Miget layers
compose.miget.yaml(RAM, privacy, volumes, managed services) automatically
Locally first?
Every template is portable, vanilla Docker Compose - the Miget overrides are ignored locally:
git clone https://github.com/deployable-sh/stacks
cd miget-compose-templates/immich
docker compose up -d Same files, same behavior. The template README covers connection strings and scaling notes.
#faq
What does this save vs Google One or iCloud+?
Google One is $9.99/month for 2 TB and iCloud+ is $9.99 for 2 TB - both rent space and mine your library. Immich is one plan plus a volume sized to your photos, with your whole history entirely yours and exportable.
Why a special database instead of managed Postgres?
Immich requires Postgres with a vector extension (VectorChord) for face and semantic search, which is not a standard managed extension. So this template runs Immich’s own database image as a private sidecar with its own volume, rather than the managed Postgres other apps use.
Why is it experimental?
It is a heavy four-service stack and Immich releases move quickly - major versions can need a database migration. Everything is wired and validated, but you should pin versions and read release notes before upgrading, which is why it is not marked stable.
Ship Immich today
One compose stack, 6.3 GiB of RAM, from $49/month flat, and it runs on your laptop with the same files.