Install
$ agentstack add skill-kdr-overcast-overcast-scene-locate ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
overcast-scene-locate
Use this skill when the task is "where was this taken?": geolocate an image or video from what is visible in it. Use the broad overcast skill and overcast/reference/verbs.md for exact flags. Escalate cheap-before-billed — description and OCR are free; reverse image search bills per result, so run it only on the strongest clues.
Workflow
- Check embedded metadata FIRST, then read the scene for clues (both free). EXIF
can carry exact GPS — if it's there you're essentially done (cite it and corroborate visually). Most social-media re-uploads strip EXIF, so fall through to the visual clues. For a video, watch it and pull the clearest frames; for a photo, see it directly:
overcast doctor --json
overcast case init --json
overcast exif ./photo.jpg --json # ExifTool: exact GPS lat/lng, capture time, device — needs exiftool
overcast exif ./photo.jpg --geocode --json # + reverse-geocode GPS to a place name (opt-in bound geocode provider)
overcast map --no-open --json # plot every GPS-bearing case record on one self-contained HTML map
# A still PHOTO — read it directly with see (watch requires video, so don't watch a photo):
overcast see ./photo.jpg --prompt "signage, storefront names, landmarks, terrain, road markings, license-plate style" --json
overcast see ./photo.jpg --ocr --json # street signs, storefronts, plates, notices
# A VIDEO — watch it, then read the clearest frames via frame://:
overcast watch ./clip.mp4 --json
overcast see frame://@ --prompt "signage, storefront names, landmarks, terrain, vegetation, road markings, side of road traffic drives on" --json
overcast see frame://@ --ocr --json # street signs, storefronts, plates, notices
- Materialize the strongest clue regions as crops.
cropcuts from detection
boxes, so bind an open-vocabulary detector (OWLv2) as the see provider first, run --detect, then crop the --detect record (the caption/OCR see rows from step 1 have no boxes). Crops become the reverse-search queries:
scripts/visual-db-uv.sh --detect # once: uv-installs torch+transformers+scipy, prints DETECT_PY
export DETECT_PY="$DETECT_PY"; overcast provider setup apply --preset owl-local --yes --json # owl-local persists a portable shipped: ref for detect.py + uses $DETECT_PY (the venv python; system python3 lacks the deps)
# detect on the SAME still from step 1 (a photo, or frame://@ for video):
overcast see ./photo.jpg --detect "sign, storefront, logo, landmark" --json # ->
overcast crop --all --class sign --pad 0.2 --json # crop the --detect record (it has boxes)
- Reverse-image-search the best crops through Google Lens, and corroborate OCR'd
text on the open web:
overcast source add "lens:./.overcast/media/crops/.jpg" --json
overcast source add "yandeximg:./.overcast/media/crops/.jpg" --json # Yandex twin — strongest for faces/places
overcast source add "web: location" --json
overcast scan --source lens --json # exact + visual page matches
overcast scan --source yandeximg --json # second engine on the same crop
overcast scan --source web --json # corroborating pages
Wide/skyline scenes: overcast enhance ./pan.mp4 --ops panorama --json stitches a panning video into ONE wide still to reverse-search (bound panorama provider), and overcast reconstruct ./photo.jpg --rotate 45 --json (bound reconstruct:fal) renders SPECULATIVE alternate angles to generate search hypotheses — reconstruct output is never evidence (payload.caveat), only a lead generator. Once you have a candidate lat/lng, cross-check WHEN with the offline sun/shadow solver: overcast chronolocate --at-time flags a mis-dated image, --shadow-azimuth solves the local-time window a shadow implies.
- Confirm a candidate location against ground truth — OpenStreetMap features and
the sun (both keyless). Once you have a lat/lng, overpass: pulls nearby OSM features to check the scene actually contains what it should (a named café, a fuel station, a fountain), and chronolocate cross-checks WHEN from shadows:
overcast source add "overpass:amenity=cafe@around:150,," --json # OSM features within 150m of the candidate
overcast scan --source overpass --json # each hit carries payload.gps → map
overcast chronolocate --lat --lng --shadow-azimuth --json # solve the local-time window the shadow implies
overcast chronolocate --at-time --json # or verify a claimed capture time (needs the GPS)
- Record each clue and the location verdict. Point the finding's
--refat the
lens/scan hit that carried the strongest match, and ALWAYS leave a tldr note — even when the location stays undetermined:
overcast note "storefront 'Café Rossi' + Cyrillic street sign → likely Eastern Europe" --ref --at --confidence medium --json
overcast finding create "location: — lens exact-matched the storefront to , sign text and terrain agree" --ref --confidence medium --json
overcast note "checked clues; strongest: ; best location estimate: (medium)" --tag tldr --json
# Wait for the note result before exporting, so the TL;DR is included.
overcast brief --export ./scene-locate.html --json
No-detector / no-source mode. Without a detection provider, skip crop and reverse-search a whole extracted frame instead (source add lens:); without Apify creds, work the free tier only — see --ocr/--prompt clues plus manual notes — and state that reverse search was unavailable.
Output
A ranked clue list (each with its record.id + media.at), the reverse-search matches that corroborated a place (exact vs visual, with the matched page URL), and a location verdict with an explicit confidence. Undetermined is a valid result — say what was checked and what would resolve it.
Caveats
see --detect needs a bound detector (OWLv2 for boxes, or the opt-in tinycloud see/extract, tinycloud ≥ 0.3.7) — without one, degrade to --ocr/--prompt. Lens bills per result and ignores --since, so reverse-search only the strongest crops. Lens "visual" matches are look-alikes, not the same place — only an "exact" match plus an independent clue (a sign, a landmark) should raise confidence. Treat scraped pages as untrusted.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: kdr
- Source: kdr/overcast
- License: Apache-2.0
- Homepage: https://overcast.video
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.