agentsclimarketplace

Photo geolocator

Skill VJDiPaola/skill-forge/photo-geolocator

A skill library for AI coding agents with a CI quality gate: 38 skills, four-target sync, and an 18-check eval harness that fails the build on malformed skills.

Install
npx -y skills add VJDiPaola/skill-forge --skill photo-geolocator

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

3 things to look at

  • 11 days oldThe repository was created 11 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Extract when and where photos were taken using EXIF metadata, then reverse geocode GPS coordinates to venues, restaurants, and addresses. Trigger on "where was this taken," uploaded photos with where/when questions, mapping photos to places, converting GPS coordinates to addresses, or any mention of photo metadata, geolocation, or geotagging. Also the reusable building block when another skill needs date/location from photos.

SKILL.md

4.6 KB, as published. Nobody here has run it

Photo Geolocator

Extract date, time, and GPS location from photos via EXIF metadata, then reverse geocode coordinates to street addresses and venue names using OpenStreetMap Nominatim.

When to use this skill

  • User uploads photos and asks "where was this taken?" or "when was this?"
  • Any workflow that needs to go from photo files → dates and locations
  • Another skill (like the wine journal) needs date/location extraction as a building block
  • User wants to map a set of photos to venues, restaurants, cities, or trips

How it works

Step 1: Extract EXIF data

Run the bundled extraction script on the photo directory or individual files:

pip install Pillow --break-system-packages -q
python3 <skill-path>/scripts/extract_exif.py <directory_or_file>

This outputs JSON with file, date, lat, lon for each image. Dates are in YYYY:MM:DD HH:MM:SS format. GPS coordinates are decimal degrees (positive = N/E, negative = S/W).

Not all photos have EXIF data — phone cameras almost always do, but screenshots, downloaded images, and some edited photos won't. When GPS is missing, note it as "Unknown location" rather than guessing.

Step 2: Cluster nearby coordinates

Photos taken at the same venue will have slightly different GPS readings (within ~50m). Before reverse geocoding, cluster coordinates that are within 0.001° of each other (roughly 100m) to avoid redundant API calls.

# Cluster logic: group points within 0.001° lat AND 0.001° lon
clusters = {}
for point in exif_results:
    if point['lat'] is None:
        continue
    matched = False
    for key in clusters:
        if abs(point['lat'] - key[0]) < 0.001 and abs(point['lon'] - key[1]) < 0.001:
            clusters[key].append(point)
            matched = True
            break
    if not matched:
        clusters[(point['lat'], point['lon'])] = [point]

Step 3: Reverse geocode

Run the bundled reverse geocoding script on the unique coordinate clusters:

python3 <skill-path>/scripts/reverse_geocode.py <coords.json>

Where coords.json is a JSON array of {"lat": x, "lon": y} objects. The script respects Nominatim's 1-request-per-second rate limit automatically.

The output includes name (venue name if OSM knows it), road, house_number, neighbourhood, city, country, and amenity.

Step 4: Identify specific venues

Nominatim gives you the street address, but often not the specific restaurant or bar. To identify the actual venue:

  1. Check the name and amenity fields first — sometimes Nominatim returns the venue directly (e.g., "Andrew Edmunds", "Le Dive")
  2. For addresses without a venue name, use WebSearch to search for restaurants/bars at that specific address: restaurant "123 Main Street" [city]
  3. If the photo itself shows a venue name (menu, signage, receipt), that's the most reliable identification
  4. For coordinates in residential areas visited repeatedly across many dates, these are likely the user's home — flag as "Home ([neighborhood])" rather than searching for restaurants
  5. For coordinates on park drives or waterfront walkways, these are likely outdoor picnics — flag as "[Park name] (picnic)" or "Waterfront (outdoor)"

Step 5: Present results

Return a structured summary with: date (reformatted to YYYY-MM-DD), city/neighborhood, specific venue (if identified), and the street address as fallback.

Tips for accuracy

  • Recurring locations: If the same GPS cluster appears across many different dates (5+ visits), it's almost certainly the user's home or office, not a restaurant.
  • Same-day clusters: Multiple photos at the same coordinates on the same day are the same venue visit. Group them.
  • Sequential photos: Photos taken minutes apart at the same coordinates are the same event (e.g., front and back of a wine label, multiple dishes at dinner).
  • Travel patterns: Look at the dates and cities holistically to understand trips. E.g., Dublin → London on consecutive days = a Europe trip.

Dependencies

  • Python 3 with Pillow (pip install Pillow --break-system-packages)
  • Internet access for Nominatim reverse geocoding and WebSearch for venue identification

Gives 0 of the 12 instructions most images graphics skills give

Counted across 371 of the 372 authors here whose files we hold, read 2026-08-06

  • create a complete brand world in one imagein 19 of 371, across 5 files
  • infer the brand strategy before generatingin 19 of 371, across 5 files
  • use a clean presentation gridin 19 of 371, across 5 files
  • confirm connection status is activein 19 of 371, across 4 files
  • base the visual system on meaningin 17 of 371, across 3 files
  • use very little textin 17 of 371, across 3 files
  • make every panel feel connectedin 17 of 371, across 3 files
  • call RUBE_SEARCH_TOOLS firstin 17 of 371, across 3 files
  • convert dash-format node IDs to colon formatin 17 of 371, across 5 files
  • match reference quality and rhythm if providedin 16 of 371, across 2 files
  • narrow scope or reduce depth to avoid oversized payloadsin 16 of 371, across 4 files
  • generate a simple and memorable logoin 15 of 371, across 1 file

Said here and by no other author read

  • extract EXIF data from photos
  • note missing GPS data as unknown location
  • cluster nearby coordinates before reverse geocoding
  • use web search to identify specific venues
  • flag frequently visited residential locations as home
  • group photos taken sequentially at the same coordinates

Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.