PhotoPrism is a self-hosted app for browsing, organizing, and sharing your own photo and video library, built as a privacy-first alternative to Google Photos rather than a clone of it. It classifies pictures by content and location, recognizes recurring faces, and plots your trips on offline world maps, all without uploading anything to Google, Amazon, or Apple unless you go out of your way to do it yourself.
Quick facts: License AGPL-3.0 for the Community Edition, with a separate license for the default Docker image (see below) · image photoprism/photoprism · default port 2342 · alternative to Google Photos, Immich, and Nextcloud Photos.
What PhotoPrism actually does
PhotoPrism indexes a folder of photos and videos you already have. It’s built around organizing an existing library, not being the first place your phone dumps its camera roll. It runs its own classification model on your server to label content and scenery, groups recurring faces so you name someone once and it recognizes them later, and renders offline world maps straight from each photo’s location data. RAW files, HEIF, and most video formats just work, with no manual conversion step needed first.
- Automatic content and scene classification, running locally
- Face detection and clustering, opt-in and fully local
- Six bundled high-resolution world maps for browsing photos by location
- RAW, HEIF, and video support with no separate conversion tool needed
- WebDAV sync, so backup and sync clients you already use can point straight at it
- Filtered search that actually narrows things down, plus shareable albums and links
Read this before you pull the Docker image
The source on GitHub is licensed AGPL-3.0, confirmed against the LICENSE file rather than assumed, plus an added clause restricting use of the PhotoPrism name and brand assets in your own products. Fairly standard stuff. Here’s the part that isn’t obvious, and that PhotoPrism’s own Open Source FAQ states outright: the default “latest” tag on Docker Hub isn’t pure AGPL. It ships under a separate “Plus License” because it bundles compiled-in extensions reserved for paying members. Want the unmodified AGPL Community Edition with nothing bundled in? Pull the “ce” tag instead.
Both tags run for free. The difference is licensing, not price: “ce” is 100% AGPL with no extras bundled in, while “latest” bundles member-only features under PhotoPrism’s own Plus License, inactive until you actually buy a membership. If license purity matters to you, use “ce”.
Installing PhotoPrism with Docker
PhotoPrism publishes a ready-to-edit Compose file for Linux, macOS, Windows, Raspberry Pi, and Podman. MariaDB comes bundled by default, and it’s worth keeping: PhotoPrism caps SQLite installs at four indexing workers, so MariaDB is the better choice once your library grows past a few thousand photos. A trimmed-down version of the compose file looks like this:
services:
photoprism:
image: photoprism/photoprism:ce
restart: unless-stopped
ports:
- "2342:2342"
environment:
PHOTOPRISM_ADMIN_PASSWORD: "changeme123"
PHOTOPRISM_SITE_URL: "http://localhost:2342/"
PHOTOPRISM_DATABASE_DRIVER: "mysql"
PHOTOPRISM_DATABASE_SERVER: "mariadb:3306"
volumes:
- "/mnt/photos:/photoprism/originals"
- "./storage:/photoprism/storage"
depends_on:
- mariadb
mariadb:
image: mariadb:11
restart: unless-stopped
command: mariadbd --innodb-buffer-pool-size=512M
volumes:
- database:/var/lib/mysql
volumes:
database:
docker compose up -d
docker compose exec photoprism photoprism faces index
PhotoPrism’s own documentation recommends at least 4 GB of swap on the host, especially before indexing RAW photos or high-resolution panoramas. The indexer can spike memory well past what it uses at rest, and running out mid-index is common enough that it gets its own entry in their troubleshooting docs.
Before you start: Docker and Compose installed, a real (non-anonymous) volume path for /photoprism/originals pointing at your existing photo folder, and a PHOTOPRISM_ADMIN_PASSWORD of at least 8 characters. There’s no default password to fall back on.
- Download the official
compose.yamlfor your platform and adjust the volume paths. - Point
/photoprism/originalsat the folder that already holds your photos and videos. - Set a strong
PHOTOPRISM_ADMIN_PASSWORD. - Run
docker compose up -dand open port 2342 in your browser. - Log in as
admin, then start indexing from the Library tab.
PhotoPrism vs Immich
Both are self-hosted, AI-powered “Google Photos alternatives,” and enough people search this comparison directly that it’s worth tackling head-on instead of dodging it.
| Criteria | PhotoPrism | Immich |
|---|---|---|
| Primary job | Organizing a library you already have on disk | Continuous automatic backup from your phone |
| Default Docker stack | 2 containers (app + MariaDB) | 4 containers (server, ML, Postgres, Redis) |
| Mobile app | Web UI, mobile-friendly, no dedicated backup app | Dedicated mobile app with background auto-upload |
| License | AGPL-3.0 (core), Plus License on default Docker tag | AGPL-3.0 |
| Face recognition | Yes, local | Yes, local |
| Our difficulty rating | Medium | Advanced |
If continuous phone backup with almost no babysitting is the priority, Immich is built around exactly that. If you’re organizing a photo collection that already sits on a drive somewhere, PhotoPrism’s lighter default stack gets you there with less to maintain.
Pros and cons
- Real face recognition and content classification, running entirely on your own hardware
- Handles RAW and HEIF natively, no separate conversion step
- Offline world maps and WebDAV sync work with clients you probably already use
- The Community Edition is genuinely usable, not a crippled trial dressed up as free software
- The Plus-License-vs-“ce”-tag distinction trips up anyone who skips the FAQ
- Indexing RAW files and video libraries is genuinely CPU and RAM hungry
- No dedicated mobile app for automatic background backup, unlike Immich
- Some newer features stay membership-gated even though the code behind them is sitting right there in the open
Alternatives
If you already run Nextcloud for file storage, its bundled Photos app covers basic gallery browsing without adding another service to maintain. What it doesn’t do is face recognition or content classification, which is exactly the gap PhotoPrism and Immich exist to fill.
Frequently asked questions
Is PhotoPrism free? Yes. The Community Edition is fully usable without paying anything. A paid membership adds extra features and support; it doesn’t paywall the core app.
Does indexing send my photos anywhere? No. Classification and face recognition run on your own server. Nothing gets uploaded to a third party unless you set up sharing yourself.
Can I switch away later? Your files stay as ordinary files in the folder you mounted. PhotoPrism doesn’t lock originals into some proprietary container, so moving on later is just copying a folder.
Official documentation lives at docs.photoprism.app, the source and license are on GitHub, and a live demo is available at try.photoprism.app if you want to poke around before committing a server to it. For the hardware side of running this well, see our homelab setup guide.