AI photo geolocation: three agent skills that find where a photo was taken
geo-sleuth, GeoInt and Geo OSINT Locator turn a coding agent into a photo investigator. They make different bets on geometry, clues and proof.
Point a coding agent at a photo and ask where it was taken, and a good model will usually name the right region. Getting from "somewhere in South China" to a camera position you can defend is a different job: it takes map data, elevation models, satellite tiles and a discipline about what counts as evidence. Three open agent skills on Onei package that job, and they make different bets about how to do it. This guide explains what they have in common, where they differ, and how to pick one.
What the models can already do
Bellingcat, the open-source investigations group, tested current models on 52 photos that had never been published online, asking each for a single set of coordinates. The best models placed more than half of the photos within 25 km, and several placed at least 10 of the 52 within 1 km. None was close to reliably finding the exact spot, and all of them could be confidently wrong. In one Venice example most models found the right area, but only two tool-equipped setups returned the exact camera position: Bellingcat's own internal agent and geo-sleuth, both of which can download and compare satellite tiles.
That is the gap these skills fill. The model reads the scene; scripts query OpenStreetMap, terrain and imagery so that a candidate location is checked against data rather than accepted because it sounds plausible.
The three skills
geo-sleuth: geometry first
geo-sleuth is the most-used skill on the site and the one the others build on or answer. Its rule is "scripts rank, the model judges": about twenty single-purpose Python scripts read EXIF and OCR, run reverse image searches, scan OpenStreetMap features such as railway bridges or power lines, fit the photo's skyline against elevation data and rank satellite tiles, and the model only picks among the top few. Every conclusion has to name a command that ran and the file it produced, and the answer comes back as coordinates with an error radius, a heading and an evidence image.
It is strongest on photos with nothing to read. The README's showcase narrows a stripped-EXIF rice-paddy photo from 27,335 railway bridge segments to a point about 2 m from the camera, using pier spacing as a ruler and the ridge line as a fingerprint. Its blind re-runs (87 m with the hint "it is in China", and 3 m with no hint) are on photos the skill had already learned from, and the author labels them regression checks, not accuracy on unseen photos.
Needs Python 3.10+, uv, curl and Chrome or Playwright Chromium. MIT.
GeoInt: instinct, then proof
GeoInt starts from geo-sleuth's code (it keeps that licence notice) and rewrites the method. The agent first writes down a gut call the way a strong GeoGuessr player would, from soil, road paint, poles, plates and scripts, then proves, narrows or overturns it. It adds a large clue library: text-to-country signals, regional plate codes and world priors from local models (StreetCLIP and GeoCLIP, plus OWLv2 for object crops and GeoCalib for camera calibration). Street-level search covers many panorama providers, and it can locate a video from aircraft passes in its audio, matched against open flight tracks.
It is the heaviest of the three: the optional model download is about 6.2 GB, an optional Gemini key re-checks reverse-search results, and StreetCLIP's weights are licensed for non-commercial use only. Every photo gets its own archive with a report and evidence images. Code is MIT.
Geo OSINT Locator: a gate before any exact answer
Geo OSINT Locator puts its effort into reasoning discipline rather than tooling. Its motto is "deduction, not prediction": it resets geographic priors between images so earlier guesses carry no weight, keeps a ledger of up to three competing candidates, verifies them across independent evidence channels, and tries to falsify the runner-up before promoting the leader. Only a strict gate allows an exact location. Otherwise it reports an area (AREA_NARROWED) or says a human needs to review it.
Its helper scripts are light (Nominatim and Overpass lookups, geometry, a final SVG dashboard), so it also works in a chat app that loads skills, not only in a coding agent. The repository declares no licence, so check with the author before you redistribute it.
Which one to use
- A landscape, a rail line or a skyline with nothing to read: start with geo-sleuth. Terrain and OpenStreetMap geometry are what it was built around.
- Street scenes, screenshots or video, anywhere in the world: GeoInt, if you can afford the disk space and setup. Its clue library and street-level tools cover more of the world.
- Reporting or verification, where a wrong pin costs more than a vague one: Geo OSINT Locator, for its explicit "area, not point" answers and its competitor check.
Nothing stops you installing more than one. A sensible workflow is to let one skill propose and another check, then verify the final position yourself in satellite imagery and street view, which is what Bellingcat concludes too.
Installing them
All three are standard SKILL.md folders, so they work in Claude Code, Codex, Cursor and other agents that load skills. geo-sleuth and Geo OSINT Locator install with the skills CLI (npx skills add Oldcircle/geo-sleuth, npx skills add jumpifequal/geo-osint-locator-skill); GeoInt's README installs it with git clone into your agent's skills folder. Each skill page on Onei leads with its install command, and How to install an agent skill covers where each agent looks.
Before the first run, ask the agent to run geo-sleuth's or GeoInt's doctor.py to check the setup.
Use them on photos you are allowed to analyse
These tools can place a person's photo on a street. geo-sleuth's README asks you to run it on your own photos or ones you have permission to analyse, and never to find people who have not agreed to be found. That is the right rule for all three.
More skills in this area are under geolocation and OSINT.
Sources
Bellingcat: can LLMs supercharge geolocation?
A test of current models on 52 unpublished photos: big gains at narrowing the area, no model reliable at the exact spot, and humans still needed to verify.
geo-sleuth: an agent skill that finds where a photo was taken
The repository and README: the script toolbox, the three case studies, the benchmarks, requirements and the responsible-use note.
GeoInt: GeoGuessr instincts plus OSINT discipline
The repository and README: the gut-call-then-proof method, local models, street-level and audio tools, and what it reuses from geo-sleuth.
Geo OSINT Locator: forensic single-image geolocation
The repository and README: the candidate ledger, the verification loop, the locality states and the STRONG gate before an exact answer.
Overpass API: querying OpenStreetMap features
The read-only OpenStreetMap query service all three skills call to list candidate features such as bridges, power lines or streets.
Get the next issue by email
One email a week with the stories and releases above, before they reach the archive. Unsubscribe in one click.
We send a confirmation link first. See our privacy policy.