github.devotd.
NewMultimodal

oldcircle/geo-sleuth — an agent skill that finds where a photo was taken

A Python agent skill that cross-checks OpenStreetMap geometry against elevation, satellite, and Street View data to estimate where a photo was taken and which way the camera pointed.

Repositoryoldcircle/geo-sleuth ↗

An agent skill that finds where a photo was taken — OpenStreetMap geometry, elevation skylines, satellite imagery and street view — and shows its work. Works with Claude Code, Codex, Cursor, Gemini CLI, OpenCode and GitHub Copilot.

stars
★ 3.2K
Forks
432
Language
Python
License
MIT
Read original source ↗View on GitHub ↗

oldcircle/geo-sleuth is an agent skill that finds the shooting location and the direction the camera was facing from a single photo. Even when a photo has no sign, license plate, or other readable text, it narrows down candidates using OpenStreetMap geometry, elevation data, satellite tiles, and Street View imagery as evidence. It consists of SKILL.md and Python scripts, and it is not an MCP server.

The gap between bridge spans serves as a ruler, shadows give a bearing, and ridgelines are compared against terrain like fingerprints. Exploration, scoring, and ranking are handled by about twenty scripts, and the model only picks among the top candidates. Results include coordinates with an error radius, the camera direction, the evidence images, and a probability carrying a stage rating. Each conclusion is required to state the commands it ran and the files it generated during that session. The same folder works in Claude Code, Codex, Cursor, Gemini CLI, OpenCode, and GitHub Copilot, and requires Python 3.10 or later. According to the README, no separate model is needed.

The README presents a case where the location was narrowed to within 2 meters from a photo showing fields, an elevated road, and a mountain behind a bridge. It does note, however, that other models may not reach the same result, and the repository contains no evaluation dataset confirming this accuracy and no reproducible measurement script. So the 2-meter case is a result recorded in the README, not a measurement that demonstrates general accuracy.