Skip to content

markyip/LocateIt

Repository files navigation

LocateIt

Version Downloads License Buy Me a Coffee

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


Quick start

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

LocateIt (full) — desktop mode

Use desktop mode on Windows, macOS, and Linux: native Open File dialog, full JPEG & RAW save, no browser folder picker.

Windows

run-desktop.bat

macOS / Linux

chmod +x run-desktop.sh stop.sh   # first time only
./run-desktop.sh

Pick 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"

LocateIt Lite — browser mode

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 releaseLocateIt-Lite-v1.1.1.zip

Windows

run-lite.bat

macOS / Linux

Start from Terminal (do not double-click run-lite.sh):

bash run-lite.sh

On 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.


Manual setup (developers)

Full app — desktop

python3 -m venv .venv
source .venv/bin/activate          # Windows: .venv\Scripts\activate
pip install -r requirements.txt
python desktop.py

Lite — 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

How to use

  1. Click Open album (desktop mode remembers your last folder via Restore album when applicable).
  2. Photos with GPS appear as numbered cluster pins on the map.
  3. Photos without GPS appear in the sidebar — drag them to the map (pin follows your cursor), then Save.
  4. Use map search to jump to a place, then fine-tune placement.
  5. 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.

Tips

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

Stopping the app & port conflicts

LocateIt runs a local web server on 127.0.0.1:8765 while the launcher is active.

What happens if I close windows?

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.

If port 8765 is stuck

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.bat

macOS / Linux (manual stop):

./stop.sh

Or use another port:

.venv\Scripts\python.exe desktop.py --port 8766

Guidance for end users

  • 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.sh manually or close the previous command window.

Browser vs desktop

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

Architecture

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

Requirements

  • 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)

Development

run-desktop.bat

The batch file creates .venv, installs requirements.txt, and starts desktop.py.


License

MIT — use freely for personal workflows.

About

Find where your photos belong

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors