PhotoPrism vs Immich: Which One Fit You?
Compare PhotoPrism and Immich for self-hosting: see the real RAM floor, phone backup apps, maps, storage design, and exact VPS backup commands.
PhotoPrism vs Immich: di short answer
PhotoPrism vs Immich na choice between two different jobs, no be two versions of the same product. Immich dey replace Google Photos: phone app dey back up your camera roll automatically, and the timeline wey you get dey look familiar to anybody wey dey leave phone gallery. PhotoPrism dey organise photo library wey you don already get: e dey index folders of files for disk, read their metadata, put dem for map, and leave the files exactly where dem dey.
Choose Immich if the problem na "my phone full and I want comot from Google Photos". Choose PhotoPrism if the problem na "I get 400 GB of photos for one drive and I no fit find anything inside dem". Both na open source, both dey run as Docker containers for normal VPS, and both dey index and search your library without sending anything go third party.
The philosophy split, and why e dey decide everything
Immich own the files. You point am to an upload location, the phone app or the web uploader send originals enter, and Immich store dem under its own path with its own naming. The database hold the correct information about albums, faces and search. Na this design make the phone experience good, because the server always know the full state of every asset.
PhotoPrism read the files. You mount one originals folder wey you already control, and PhotoPrism build index on top of am. Your directory tree remain your own. If you remove PhotoPrism tomorrow, the photos still dey there for the same folders with the same names. The sidecar YAML files wey PhotoPrism write to describe wetin e learn still dey for its own storage folder. Na there e dey keep dem by default.
Na this one difference explain most of the remaining things. Immich get strong mobile support because e control how files enter. PhotoPrism get strong library curation because e no dey fight your existing structure. Immich better for family wey their photos dey for phones. PhotoPrism better for archive wey dey on disk.
Hardware appetite: Immich dey ask for more
The memory limits wey dem document far apart, and for small VPS, na usually this one dey decide.
Di data wey dey behind dis chart
[
{
"label": "Immich",
"min_ram_gb": 6
},
{
"label": "PhotoPrism",
"min_ram_gb": 3
}
]Immich document 6 GB RAM as the minimum and 8 GB as the recommended amount. E also note say 4 GB machine fit run am only when machine learning dey turned off. PhotoPrism document 3 GB physical memory and two CPU cores. E talk say after that minimum, RAM amount suppose match the number of cores.
The difference na real one, and na the machine learning container cause am. Immich dey run its models inside separate immich-machine-learning service wey dey load CLIP (contrastive language image pretraining) and face detection models into memory. For 2 GB machine, kernel go kill that container. You go see say e exit with code 137, which na the status for process wey signal 9 kill. Na so out of memory kill dey show for Docker. PhotoPrism built-in models dey run on ONNX. Its docs talk say dem generally perform well for all types of hardware. E also get documented fallback for tight memory: for machines wey get 1 GB or less, e disables RAW conversion and face recognition. But this no be promise say e go stable. Below its 3 GB minimum, the project warns about instability and performance problems, so treat the floor as a real floor.
PhotoPrism docs clearly say server suppose get at least 4 GB swap. Immich requirements page no mention swap, but swap dey give its machine learning container extra headroom for small machine. Add swap before you install either one.
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 suppose now print a Swap: line wey dey show 4.0Gi. If e print 0B, then swapon fail, usually because filesystem no support fallocate, and sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 na the fallback. Container memory ceilings matter here too, and setting memory limits for Docker Compose na how you stop one service wey dey chop plenty memory from bringing the whole machine down. The exception na PhotoPrism itself: its docs advise against hard memory limit for its container, because indexing large files fit need extra memory for short time, and the limit fit cause unexpected restarts.
One more requirement dey catch people. Immich Postgres database must dey on normal Unix filesystem with real ownership and permissions, for local storage, never for network share. PhotoPrism warns say make you never store its database files for shared network folder, and e calls local SSD storage the best place for dem. Neither app safe to run when its database dey on mounted object store.
How to install each one
Both install na vendor compose file plus one command. Set up Docker Engine and the Compose plugin first, as e dey explained for our guide to Docker Compose on a VPS.
Immich dey publish its compose file and example environment file with every release.
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.envEdit .env before you start anything. UPLOAD_LOCATION na where your originals go dey. DB_PASSWORD get working default, and Immich recommend say make you change am to random password, even though e no require am. Postgres no dey exposed publicly, so na only local authentication dey use the password, but setting random one no cost anything. Use only the characters A-Za-z0-9, because Immich docs talk say other characters fit cause problems when Docker dey parse the value. Then start am.
docker compose up -d
docker compose psThe web interface dey answer for port 2283. The first account wey dem register through that page go become administrator, so reach am and register immediately instead of leaving open instance dey sit for internet.
PhotoPrism dey ship one compose file wey already include MariaDB.
sudo mkdir -p /opt/photoprism && cd /opt/photoprism
wget https://dl.photoprism.app/docker/compose.yamlOpen compose.yaml and change PHOTOPRISM_ADMIN_PASSWORD before the first start. The docs talk am clearly: the app starts with any initial password wey dey inside that file, minimum length na 8 characters, and default value must never dey used for public server. Set the originals volume to the folder wey hold your photos at the same time.
docker compose up -d
docker compose logs -f photoprismPhotoPrism dey answer for port 2342 with user admin. No expose either app directly. Put reverse proxy with TLS (transport layer security) in front, with the same kind setup wey dem use for a self-hosted Nextcloud with Docker, TLS and backups, or keep the server private and reach am through VPN. If that VPS later dey carry more than photos, apply the same restraint to every service wey you add to am, because self-hosted RustDesk relay need only its own two ports reachable and nothing else.
Which one get the better phone app
Na for this area the two projects differ pass, and na the reason most people finally choose Immich.
Immich releases official apps for Android and iOS. Dem fit back up camera roll for background, so new photos go comot from the phone without anybody opening anything. To use am when you dey away from home, Immich documents three options: VPN like WireGuard or OpenVPN, Tailscale, or reverse proxy wey dey serve HTTPS. The reverse proxy na the option wey make phone apps connect without VPN app for every phone. Immich warn say make you never forward port 2283 straight to internet without extra configuration.
PhotoPrism no get official native app. E releases progressive web app, wey you fit add to home screen from browser. E also documents WebDAV (web distributed authoring and versioning) as the way to sync from phone. The project recommends third-party app wey dem call PhotoSync for this. Point am to the /import/ or /originals/ directory through WebDAV. E dey work, but na paid third-party app dey do work wey Immich handle inside e own client.
If automatic phone backup for several family members na the requirement, decision don clear. Immich.
Wetin machine learning actually dey give you
Immich dey do semantic search for your library with CLIP, so query like "red bicycle in snow" fit find photos wey nobody ever tag. E still dey do face detection and clustering, plus duplicate detection. Indexing big import for CPU fit run for hours for background, and this one normal; e no need GPU (graphics processing unit).
PhotoPrism dey classify images into labels with built-in ONNX model, detect faces and group dem into people with ONNX face models, then read location metadata to build places map. One vision.yml file for im config folder fit switch to Ollama or OpenAI for labels and captions if you want am. Na the map make people stay: library wey get index according to where each thing happen na genuinely different way to browse twenty years of photos. The same idea work for other media collections too, and Halcyon's 90s video store front end for Jellyfin na the film version of am, where you browse by shelf instead of list. Face recognition dey included for the free Community edition. The paid Essentials and Plus memberships add extras like richer map layers, more user roles, and user management interface. As of October 2026, dem start from few euros per month, with annual billing.
Immich no get features wey dem lock behind payment, and the project talk say e no go ever get dem. E dey sell optional lifetime product keys: $25 for one user or $100 for whole server, according to the prices Immich announce for July 2024. But buying one no unlock anything, and Immich dey work without restriction if you never pay. PhotoPrism core free, with optional paid extras.
Backups na decide whether you go keep am
Photo server wey no get backup dey one disk failure away from losing everything wey family get. Both apps need two backups: database, and files.
For Immich, dump database from Postgres container and copy upload location.
docker exec -t immich_postgres pg_dump --clean --if-exists --dbname=immich --username=postgres | gzip > /backup/immich-db.sql.gzThen back up UPLOAD_LOCATION. Folders wey hold data wey no fit replace na upload, library and profile. You fit regenerate thumbs and encoded-video folders, but e go cost hours of CPU time. Database dump alone no restore anything, because e only hold metadata.
For PhotoPrism, index get im own command.
docker compose exec photoprism photoprism backup -i -fThat one write SQL dump under storage/backup/. Then copy originals folder and storage folder. Because PhotoPrism still dey write sidecar YAML files wey describe each photo, you fit rebuild lost index from the files alone. This na real advantage for archive wey you plan to keep for decades.
Which one you choose, send those backups comot from the server on a schedule with encrypted, deduplicated restic backups to remote storage. Backup wey dey for the same disk with the library no be backup. Make the job alert you when e fail, because backup wey quietly stop for March look exactly like backup wey run last night until the day you need am, and self-hosted ntfy server go push that failure go your phone that same evening.
Which one you suppose run
Run Immich if your photos dey for phones, if more than one person need back up camera roll, and if you fit give the server 6 GB RAM or more. Na the closest thing to Google Photos wey you fit host by yourself, and na the mobile experience be the main point. Our step-by-step Immich install guide dey explain memory kills and upgrade traps well-well.
Run PhotoPrism if you already get photo archive for disk, if maps and metadata matter to you and you wan keep your own folder structure, or if your VPS get 4 GB RAM and you prefer working library instead of one wey dey swap. E better for arranging and managing photos, and e no dey put too much load on small hardware.
You fit run both too. Immich go handle daily phone uploads, and once every year you fit sort the photos wey you wan keep into your archive, then make PhotoPrism index them. Dem no dey conflict because PhotoPrism dey read folders, while Immich dey manage im own files.
FAQ
PhotoPrism and Immich fit share the same photo folder?
No be safe for both directions. PhotoPrism dey index a originals folder and get features wey fit write inside am unless e dey run for read-only mode, while Immich expect say na e own the content for e upload location. You fit point PhotoPrism to a read-only copy of Immich library folder make e browse am, but no let both apps manage the same files, because Immich storage template fit move or rename assets while PhotoPrism dey index dem.
Immich stable enough to hold the only copy of my photos?
No self-hosted app suppose ever hold the only copy of anything. Immich now dey follow semantic versioning and e talk say breaking changes dey limited to major releases, so pin IMMICH_VERSION to a major version tag like v3, read the release notes, then upgrade with docker compose pull && docker compose up -d. Downgrade no dey supported, even within the same minor version, so take database dump before every upgrade. Keep the original files backed up outside the server, and the risk go remain small.
Why Immich machine learning container dey restart again and again?
Most times, dem dey kill am because e dey use too much memory. Run docker compose ps --all, because stopped container no go show without that flag, and look for the machine learning service exiting with code 137. That code mean say process dem kill with signal 9; kernel out of memory killer na the usual cause, but e no be the only one, so confirm am with sudo dmesg | grep -i 'out of memory'. Add swap, or disable machine learning completely for 4 GB machine. Memory limit for the container no dey throttle am: when e reach the limit, dem still go kill am, but e go stop am from starving the rest of the server. Smart search and face recognition no go work without machine learning, while the rest of Immich go run fine.
PhotoPrism need MariaDB, or SQLite go work?
SQLite dey work and e good for personal library, but PhotoPrism limit itself to four workers when e dey use am, and the docs recommend switching to MariaDB because e handle high concurrency better. The compose file wey the project release already include MariaDB, so the recommended path na also the default one.
How much disk space I suppose budget above my library size?
Add 10 to 20 percent on top of the size of your originals, for either app. That one cover generated thumbnails and transcoded video previews. A 200 GB collection need roughly 220 to 240 GB for the library alone, plus space for the database and growth. If you also keep complete local backup copy for the same volume, the originals and that copy need at least 400 GB before counting anything else, so budget around 450 GB or put the copy for separate volume.