marouane53 / GeoINT
git clone https://github.com/marouane53/GeoINT.git
—
+0
stars, 24h · #35,036
+~0
stars, 7 days · #35,511
+212
stars, 30 days · #2,382
213
★ total
40
forks · 1 open issues
Star history (as recorded here)
LanguagePython
LicenseMIT
Created2026-10-08 (14d ago)
Last push7d ago
Watchers5
OwnerUser
Links
README excerpt
# GeoInt
An agent skill for finding where any photo, screenshot, video frame or Street View image was taken — the
instincts of a strong GeoGuessr player plus the discipline of an OSINT investigation. The agent leads with its own
expert read of the scene (a written gut call), then proves, sharpens or overturns it with web research and local
tools, down to street or camera level when the evidence allows. Every photo gets its own timestamped archive with
a report, evidence images and a scoreboard once the true location is known.
> GeoInt builds on geo-sleuth by Oldcircle
> (MIT). From geo-sleuth: 9 tools, the base of 12 more that GeoInt extended, and part of the documentation and data.
> New in GeoInt: 13 tools, a rewritten method (97% new), a worldwide clue library, street-level search across 11
> providers and a per-photo archive with scoring. In all, 80% of the instructions and 47% of the Python code are
> GeoInt's own; Credits shows which part is which.
`SKILL.md` is the method; `references/` holds the playbooks and the worldwide clue library; `scripts/` holds the
tools.
## Install
[code]
Requirements: Python 3.10+, uv, `curl`; `exiftool` and `ffmpeg` recommended. Each
script declares its own dependencies and runs with `uv run`. Per-photo archives go to `~/geoint-photos` with
timestamps in this computer's time zone; set `GEOINT_PHOTOS` / `GEOINT_TZ`, or put
`{"photos_root": "…", "timezone": "…"}` in a `config.local.json` next to `SKILL.md` (git-ignored), to change that.
## What's inside
| Area | Tools |
|---|---|
| Archive and scoring | `photo_session.py` (start / finish / truth / scoreboard / list), `bench.py` |
| One-command local first pass | `recon.py` → `meta.py`, `intake.py`, `ocr.py`, `textgeo.py`, `detect.py`, `calib.py`, `prior.py` |
| Text → place | `textgeo.py` (scripts, telltale letters, language, phone numbers incl. unreadable digits, domains, postal codes, currency, regional words, ~50k brands, GeoNames places), `geodata.py`, `clues.py` (incl. 2,100 regional plate codes across ten countries, with the years each was in use) |
| Reasoning ledger | `board.py` — candidates, clues, likelihood ratios capped by evidence type, exclusion rules, rank / next / check / report |
| Street level | `pano.py` (every provider plus your own manifests: coverage, list, render, sheet), `sweep.py` (rank every panorama of whole towns with MegaLoc), `gsv.py`, `refsheet.py` (real Street View rows per candidate country, region or town), `match.py`, `baidu_pano.py` |
| Clue → short list | `opendata.py` (city open-data portals: bus lanes, street trees, hydrants… filtered to candidate points), `osm.py addr` (house numbers, alone or co-occurring) |
| Maps and geometry | `osm.py`, `poi.py`, `gazetteer.py`, `tiles.py` (incl. NASA daily satellite passes), `sat_scan.py`, `terrain.py`, `sun.py` (incl. past weather by day), `geo.py`, `pose.py`, `evidence.py` (incl. colour-coded match sheets) |
| Local models | StreetCLIP + GeoCLIP world prior (`prior.py`), OWLv2 obj