Drag onto the map
Drop a photo straight onto the map to assign its coordinates. Clustered markers keep thousands of pins readable.
Scans, old imports and stripped exports lose their GPS. Immich Places gives you a fast map and list to hand those photos a location, one drop at a time or a whole track at once.

LEAFLET MAP · GPX IMPORT · NOMINATIM + HERE + GOOGLE · SQLITE · DOCKER
Everything is arranged around one job: getting a location onto the photos that are missing it, fast.
Drop a photo straight onto the map to assign its coordinates. Clustered markers keep thousands of pins readable.
Geocoding with autocomplete and history, Nominatim by default, with optional HERE and Google providers for tougher lookups.
Locations pulled from same-day and nearby-day shots, weekly patterns, frequent spots and the album a photo belongs to.
Upload one or many GPX tracks and batch-assign coordinates to photos by their timestamp, no clicking required.
Star locations from search results for one-tap reuse across a session. The spots you use often stay one click away.
A photo grid filtered by GPS status or album, with a fullscreen lightbox and shift+click multi-select for bulk work.
Every edit is staged locally first. You place photos, review the pending changes, and only then does anything reach your Immich server, in one deliberate save.
# Immich API key needs
user.read
asset.read
asset.update
asset.view
album.read
stack.read
validated against /api/users/me
It stages everything locally and only ever writes the coordinates you approve.
State lives in a local SQLite database on the host you run. Your Immich server only ever sees the writes you approve.
Multi-select with shift+click, assign in bulk, and review everything in the confirmation bar before a single change is saved.
Start with Nominatim for free, then add HERE or Google keys for stronger results. The provider chain falls through automatically.
Optionally pull location history from Dawarich to place photos by where you actually were, not just where you guess.
Set an env, bring it up with compose, and log in to start placing.
$ cp .env.example .env
$ docker compose up -d --build
→ backend :8082
→ web :3032
# open localhost:3032
Run cp .env.example .env and set IMMICH_URL and a stable ENCRYPTION_KEY.
docker compose up -d --build brings up the Go backend and the web UI on port 3032.
Open localhost:3032, paste your API key, wait for sync, then start dropping photos on the map.
Yes. Immich Places is open source and runs with Docker compose. Nominatim geocoding needs no API key, so the default setup costs nothing.
No. Edits live in a local SQLite database and nothing is written back to Immich until you review the pending changes and save them from the confirmation bar.
An API key with read and update on assets, plus album and stack read. It validates the key against /api/users/me before syncing.
Yes. Nominatim is the default; add HERE and/or Google keys and the provider chain tries each in order until one returns a strong result.
Yes. Import one or more GPX tracks and it assigns coordinates to photos by matching timestamps, so a whole trip can be placed at once.
No. It's an independent open-source companion that talks to Immich's public REST API. Immich is a trademark of its respective owners.
Free & open source
Fix the geolocation on years of old shots, keep your albums in sync, and do it from a map instead of one asset at a time.