LocateIt is a standalone desktop tool to open a photo album, view GPS clusters on an interactive map, and geotag photos without GPS by dragging them onto the map.
Each cluster pin shows how many photos share that location (default 5 m radius). Hover a pin for thumbnail previews; click to open a lightbox with a film strip.
Repository: github.com/markyip/LocateIt
LocateIt Lite (single-photo viewer): v1.1.1 release — download LocateIt-Lite-v1.1.1.zip · README-LITE.md
Two apps, one repo — pick the workflow you need:
| LocateIt (full) | LocateIt Lite | |
|---|---|---|
| Purpose | Geotag a whole album | View one geotagged photo |
| Recommended launcher | Desktop mode | Browser (run-lite) |
| Download | Source code (zip) on v1.1.1 | LocateIt-Lite-v1.1.1.zip on the same release |
Use desktop mode on Windows, macOS, and Linux: native Open File dialog, full JPEG & RAW save, no browser folder picker.
Windows
run-desktop.batmacOS / Linux
chmod +x run-desktop.sh stop.sh # first time only
./run-desktop.shPick any photo in your album — the whole folder loads. GPS is written back to the original files when you click Save.
macOS notes: Homebrew Python often needs Tkinter: brew install python-tk@3.12. If RAW save fails, try brew install gettext inih.
Full app — browser mode (optional)
Chrome / Edge only for saving GPS. Uses the File System Access API; you may need to grant folder permission again on each visit.
Windows: run.bat
macOS / Linux: ./run.sh
Pre-fill a folder for read-only map preview:
run.bat "D:\Photos\Trip2024"Lite runs in your browser only: drag one geotagged photo onto the map. Read-only — capture time, lat/lon, ISO, aperture, shutter. No album import, no GPS editing, no session memory. Smaller install (~35 MB venv vs ~105 MB for full LocateIt).
Download: v1.1.1 release → LocateIt-Lite-v1.1.1.zip
Windows
run-lite.batmacOS / Linux
Start from Terminal (do not double-click run-lite.sh):
bash run-lite.shOn external drives (e.g. /Volumes/Development/...), always use bash run-lite.sh — not ./run-lite.sh.
Opens http://127.0.0.1:8765/ — keep the terminal open, then drop a photo on the map. See README-LITE.md.
Full app — desktop
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt
python desktop.pyLite — browser
python3 -m venv .venv-lite
source .venv-lite/bin/activate # Windows: .venv-lite\Scripts\activate
pip install -r requirements-lite.txt
python lite.py- Click Open album (desktop mode remembers your last folder via Restore album when applicable).
- Photos with GPS appear as numbered cluster pins on the map.
- Photos without GPS appear in the sidebar — drag them to the map (pin follows your cursor), then Save.
- Use map search to jump to a place, then fine-tune placement.
- To move a pin, drag the orange placement pin on the map. Drag it back to the sidebar or click × on the thumbnail to unpin.
| Action | How |
|---|---|
| Preview a photo | Click its thumbnail |
| Select several photos | Click the title area under a thumbnail |
| Drag to map | Press and drag from a thumbnail (semi-transparent preview follows the cursor) |
| Save GPS | Save — confirms before writing to original files |
LocateIt runs a local web server on 127.0.0.1:8765 while the launcher is active.
| What you close | What happens |
|---|---|
| Browser tab/window only | Server keeps running in the command window. Refresh the page or reopen http://127.0.0.1:8765/?desktop=1. |
The black command window (run-desktop.bat / run.bat) |
Server stops. Port 8765 is freed. This is the normal way to quit. |
| Command window while server still running, then run the batch again | The launcher automatically stops any process listening on port 8765, then starts fresh. |
run-desktop.bat, run.bat, and their shell equivalents call stop.bat / stop.sh at startup. You usually do not need to stop manually.
If something else is using the port (not LocateIt), use another port:
Windows (manual stop):
stop.batmacOS / Linux (manual stop):
./stop.shOr use another port:
.venv\Scripts\python.exe desktop.py --port 8766- Minimize the command window if you do not want to see it — do not close it until you are finished.
- Closing only the browser is fine; closing the command window exits LocateIt.
- If “port already in use” still appears, run
stop.bat/./stop.shmanually or close the previous command window.
| run-desktop.bat | run.bat | |
|---|---|---|
| Open album | Native file dialog | Browser file + folder API |
| Save GPS to disk | Always (paths on server) | Chrome/Edge + folder permission |
| Extra folder dialog | No | Sometimes (browser limitation) |
| Best for | Daily use, RAW workflows | Quick try in browser |
LocateIt/ # repo (Python package: gps_cluster_map)
run-desktop.bat / run.bat # Windows launchers (full app)
run-lite.bat / run-lite.sh # LocateIt Lite (metadata viewer only)
run-desktop.sh / run.sh # macOS / Linux launchers
stop.bat / stop.sh # Free port 8765
desktop.py / run.py # Full app entry points
lite.py # Lite entry point
requirements-lite.txt # Lite deps (no Pillow/rawpy)
gps_cluster_map/
server.py # FastAPI — scan, thumbnails, geotag, desktop APIs
lite_server.py # Lite — metadata read only
album_scan.py # Full album scan (GPS + pending)
native_dialog.py # Tkinter Open File → parent folder (desktop)
desktop_config.py # Last album path (%LOCALAPPDATA%/LocateIt)
scanner.py # EXIF GPS + union-find clustering
geotag_exiv.py # In-place GPS write (desktop save)
photo_metadata.py # Lite metadata read
web/ # Full app UI
web-lite/ # Lite UI only
- Python 3.10+
- Desktop mode: Tkinter (included with standard Python on Windows)
- Network access for map tiles (OpenStreetMap)
- RAW save: Exiv2 on PATH (optional; JPEG works without it)
run-desktop.batThe batch file creates .venv, installs requirements.txt, and starts desktop.py.
MIT — use freely for personal workflows.
