Abstract violet and amber illustration representing PhotoPrism, a self-hosted AI-powered photo and video management platform

PhotoPrism

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.

  1. Download the official compose.yaml for your platform and adjust the volume paths.
  2. Point /photoprism/originals at the folder that already holds your photos and videos.
  3. Set a strong PHOTOPRISM_ADMIN_PASSWORD.
  4. Run docker compose up -d and open port 2342 in your browser.
  5. 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.

CriteriaPhotoPrismImmich
Primary jobOrganizing a library you already have on diskContinuous automatic backup from your phone
Default Docker stack2 containers (app + MariaDB)4 containers (server, ML, Postgres, Redis)
Mobile appWeb UI, mobile-friendly, no dedicated backup appDedicated mobile app with background auto-upload
LicenseAGPL-3.0 (core), Plus License on default Docker tagAGPL-3.0
Face recognitionYes, localYes, local
Our difficulty ratingMediumAdvanced

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.