Batch PhotoTools — PhotoBrowser

Batch PhotoTools

Automatically fill location metadata on tens of thousands of geotagged photos. Reverse geocodes GPS coordinates, discovers nearby points of interest, and uses AI vision to generate keywords and descriptions — all written directly into your image files.

Version 1.4.1 — Freeware by Vesa Pajula

Multi-threaded engine 📦 Smart caching 🌐 Works offline 🤖 AI-powered 🖼 IPTC + XMP

Overview

Batch Geolocate reads GPS coordinates from your geotagged photos and automatically fills in location metadata: Country, State/Province, City, Sublocation, and Point of Interest (POI). It can optionally use AI to generate keywords and descriptions for each image.

The engine is heavily multi-threaded and designed to squeeze maximum performance from your hardware. Images are clustered by GPS proximity to minimize redundant API calls. Location lookups use an in-memory cache that makes repeated queries instant. Thumbnails and metadata caches are built and refreshed automatically in background threads — you never have to think about cache maintenance.

All metadata is written using industry-standard IPTC and XMP tags, compatible with Adobe Lightroom, Bridge, Capture One, DigiKam, IrfanView, and virtually all professional photo management software.

Windows limitation

Windows 11 File Explorer does not display Country, State, or City metadata in file properties — this is a Microsoft limitation, not a bug. The data is correctly written and visible in all professional photo tools. Keywords and Ratings do appear in Windows.

The Five Applications

Batch Geolocate

Main application. Batch-processes folders of images: reverse geocoding, POI discovery, and AI analysis. Multi-threaded processing engine handles tens of thousands of images efficiently.

Batch PhotoBrowser

Fast photo browser with masonry/grid layouts, metadata overlays, painter tools for batch editing, and full-screen viewer. Concurrent thumbnail generation with automatic background caching. Includes a Corrupt Image Manager for detecting and repairing broken images.

Batch MetadataSync

Ensures IPTC and XMP fields are synchronized. Handles face tag sync across formats and pre-builds the Batch PhotoBrowser cache with parallel thumbnail generation.

Batch PhotoRater

Finds poor quality photos in your library using 5 configurable metrics: blur, brightness, contrast, and entropy analysis. Review individually with a 5-star dialog, batch-rate as 1 star, or move to trash.

Batch PhotoFixer

Repairs corrupted JPEG files with a 6-stage pipeline: structural repair, DQT/DHT table restoration, SOF/SOS recovery, salvage decode, forensic EXIF thumbnail extraction, and advanced bit-level recovery. Side-by-side review of original vs. repaired images.

Tools menu

All five applications include a Tools menu that lets you launch any other application in the suite directly. You can also open the Custom POI Manager from any app. No need to switch to the Start Menu or file explorer — just use the Tools menu.

Quick How-To

Follow these steps in order for the best results with your photo library.

Step 1: Download Your Country's POI Database

1

Open File → Settings → POI Database. Select your home country from the dropdown and click Download. This downloads OpenStreetMap data (restaurants, museums, landmarks, parks, etc.) for fast local lookups.

If you frequently travel to specific countries, download those as well. The program automatically selects the smallest sub-region needed (e.g., Italy/Centro instead of all of Italy) to save download time and disk space.

Why download first?

With a local POI database, the program instantly finds nearby points of interest using indexed SQLite lookups — sub-millisecond response compared to seconds for an online API call. This dramatically speeds up processing and works even without an internet connection.

Step 2: Tag Your Entire Library

2

Select your main photo folder, enable Include subfolders, and click Start Processing with only Tag country, city and subregion enabled (the default). Leave the POI and AI checkboxes off for this first pass.

This is fast — the multi-threaded engine reads GPS coordinates from all images in parallel, clusters nearby photos to avoid redundant API calls, and writes Country, State, City, and Sublocation to every geotagged image. An in-memory location cache ensures each unique location is geocoded only once. Thousands of images are processed in minutes.

Step 3: POI Enrichment

3

Enable Tag Point of Interest and process smaller batches of images (e.g., one trip at a time). The program shows a dialog for each location where it finds nearby points of interest.

Custom locations are key

During POI selection, use "Add your own..." to save frequently visited places: your home, office, favorite restaurant, etc. Check "Save permanently" to remember them forever. This is the single most impactful thing you can do — it provides rich metadata for your most common photo locations and dramatically speeds up future processing.

For quick, automatic POI tagging without interaction, use Quick POI only instead. This selects POIs from your saved locations and local database without showing a dialog, but only when there is exactly one unambiguous match.

Step 4: AI Analysis Optional

4

Enable Use AI for keywords and description to have Kimi K2.5 vision AI analyze each image. It identifies landmarks, statues, food, scenery, and generates keywords and descriptions in your chosen language. Configure your API key first in Settings → AI.

The AI analysis runs with multiple concurrent agents (configurable 1–10) to maximize throughput. Each agent operates independently in its own thread with a dedicated work queue. This costs approximately 1 cent per 5 images.

Step 5: Browse with Batch PhotoBrowser

5

After enriching your photos, click the Show Photos button in Batch Geolocate (or launch Batch PhotoBrowser separately) to browse your library with all metadata visible as overlays. Filter by location, keywords, or rating. Batch PhotoBrowser uses a concurrent thumbnail pipeline that scales to all available CPU cores — opening folders with thousands of images is fast, and subsequent opens are instant thanks to automatic persistent caching.

Batch Geolocate — Full Guide

Main Window

Batch Geolocate main window — processing in progress

The main window consists of:

Settings

Access via File → Settings. Four tabs:

General

Settings — General tab

Distances

Settings — Distances tab

All search radii organized into three sections:

Each field has a tooltip explaining its purpose. "Restore defaults" resets all values.

POI Database

Settings — POI Database tab

Download offline POI data from OpenStreetMap (via Geofabrik). Features:

AI

Settings — AI tab

Supports Moonshot, OpenRouter, NVIDIA NIM, and Together AI endpoints.

POI Selection Dialog

When Tag Point of Interest is enabled (in interactive mode) and no automatic match is found, a dialog appears:

POI resolution order

The program resolves POIs automatically before showing the dialog: (1) your permanently saved custom POIs, (2) locations saved as "no POI", (3) session skips, (4) auto-match from POIs chosen within 50m during this session, (5) offline database, (6) Overpass API. The dialog only appears if none of these produce an unambiguous match.

AI Analysis Window

When AI analysis runs, a separate window shows progress with a dynamic multi-column layout. Each column represents one AI worker (agent), running as an independent thread with its own work queue:

Add or remove agents at runtime using the + and buttons. The default is configurable (1–10 agents, default 5). 3–6 agents is recommended for optimal throughput; too many may trigger rate limits.

If a rate limit is detected, all workers automatically pause and a dialog is shown. The window shows a progress bar with timing statistics (elapsed time, estimated remaining). Images rated as "poor quality" by the AI automatically receive a 1-star rating.

Batch pre-filtering

Before launching the AI window, the engine reads metadata from images in batches of 50 (single exiftool call per batch) to filter out already-processed images. This pre-check is 20x faster than checking images one by one and ensures you never pay to re-analyze images.

Custom POI Manager

Access via Tools → Custom POI Manager. An interactive map-based tool for managing your permanently saved POIs. Opens in a separate window with a full-screen Leaflet.js map and a resizable POI list panel.

Rename POI on images

When you rename a POI in the edit dialog and check "Search and rename on known photos", the tool finds all images in the metadata cache with the old POI name, updates the EXIF XMP-iptcExt:LocationShownLocationName field on each image file, and refreshes the cache entry. This is useful when you discover a POI was misspelled or want to standardize names across your library.

Custom Locations

Custom Locations dialog

Access via File → Custom Locations. View, edit, and delete your permanently saved POIs. Each entry shows GPS coordinates and the resolved city/state/country. Use Edit to rename a POI and Del to remove it. Empty-name entries represent locations permanently marked as "no POI here".

Statistics

Statistics dialog

Access via Help → Statistics. Shows two tables:

How It Works

How Batch Geolocate Works

Access via Help → Explain. An illustrated guide explaining what POIs are, how reverse geocoding works, how the POI sweep finds nearby locations, and how the caching system keeps everything fast.

Batch PhotoBrowser

A fast, modern photo browser that displays your images with metadata overlays, batch editing tools, and full-screen viewing. Built on a concurrent architecture that saturates all available CPU cores for thumbnail generation, with intelligent three-tier loading (EXIF embedded thumbnail → draft decode → full quality) that keeps the UI responsive even with 60,000+ images.

Batch PhotoBrowser — masonry gallery view

Gallery View

Toolbar & Painter Tools

The left-side toolbar provides three painter tools for batch editing. Activate a tool by clicking its icon, then click images to select them, and click Apply to write changes. You can also drag a tool icon onto an image to auto-fill the painter panel with that image's metadata as a template.

Drag & paint

Drag a painter icon onto any image to use that image as a template. For example, drag the Location icon onto a geotagged photo to copy its location data, then click other images to apply the same location to them.

Full-Screen Viewer

Click any thumbnail to open the full-screen viewer. Features:

Batch MetadataSync

A multi-purpose metadata utility with three tabs. Runs all heavy operations in background threads with pause/resume controls.

IPTC ↔ XMP Sync

Batch MetadataSync — Face Tags tab

Ensures IPTC and XMP metadata fields contain identical data. Choose which standard is "master" (IPTC or XMP) and the tool copies values to the other.

Most users will never need this tab. Batch Geolocate already writes to both IPTC and XMP. Use it only if you have images processed by other software that wrote to only one standard.

Face Tags

Batch MetadataSync — Face Tags tab

Synchronizes face/person region tags across different metadata formats:

Cache + Thumbnails

Batch MetadataSync — Cache + Thumbnails tab

Build and maintain the metadata cache and thumbnail files used by Batch PhotoBrowser. The thumbnail generator runs with parallel worker threads that scale to your CPU core count, generating 300px and 600px thumbnails simultaneously. Three actions:

When to pre-build the cache?

Before a trip, after importing a large batch of photos, or when you want Batch PhotoBrowser to open folders instantly. Batch PhotoBrowser also builds and updates its cache automatically in background threads, so this is entirely optional — it just lets you front-load the work.

Batch PhotoRater

Scans your photo library for poor quality images using configurable quality metrics. Helps you quickly find and deal with blurry, too dark, too bright, low contrast, or low entropy photos.

Batch PhotoRater — analysis in progress

Command-line mode

Run batch_photorater.py --mode rate [folder] for scriptable batch rating without the GUI.

Batch PhotoFixer

Repairs corrupted JPEG files using a 6-stage pipeline that progressively attempts more aggressive recovery techniques. Includes camera-specific profile detection for Canon, Nokia, Apple, Samsung, Sony, Nikon, Olympus, Panasonic and more.

Batch PhotoFixer — Review tab with side-by-side comparison

The 6-stage repair pipeline:

  1. Structural — Validates and reorders JPEG markers (SOI, APP, DQT, DHT, SOF, SOS, EOI).
  2. Tables — Restores missing or corrupted DQT/DHT tables using ITU-T T.81 standard references or camera-specific profiles.
  3. Frame/Scan — Repairs SOF/SOS markers, recovers image dimensions from EXIF data.
  4. Salvage — Progressive truncation decode, gray-fill for missing data, automatic quality detection.
  5. Forensic — Extracts EXIF embedded thumbnail, searches for embedded JPEG streams within the file.
  6. Advanced — Bit-flip correction, MCU re-alignment for severely damaged files.

After processing, the Review tab shows original vs. repaired side-by-side. Actions per image:

Corrupt Image Manager (Batch PhotoBrowser)

Batch PhotoBrowser includes a background scanner that detects corrupted images while you browse. Detected issues are collected in the Corrupt Image Manager dialog.

Corrupt Image Manager — Batch PhotoBrowser integration

Context Menu Integration

If you enabled "Add to right-click context menu" during installation, you can right-click any folder or image file and select Batch PhotoTools from the menu (in the classic context menu via Show more options on Windows 11, or Shift+F10).

ContextActionDescription
FolderReverse geolocateOpens Batch Geolocate with the folder pre-selected
FolderAI identifyOpens Batch Geolocate with AI mode pre-selected
FolderSync IPTC and XMPOpens Batch MetadataSync with the folder pre-selected
Image fileShow location dataDisplays location, keywords, and description fields
Image fileReverse geolocateImmediately geocodes and writes location data
Image fileAI identifyImmediately runs AI analysis and writes results

Headless mode

Single-file context menu actions (Show location, Reverse geolocate, AI identify) can run with --headless for scriptable, no-GUI operation that prints results to stdout.

Metadata Fields Written

All fields are written to both IPTC and XMP standards for maximum compatibility across photo management software.

FieldIPTC TagXMP TagSource
CountryCountry-PrimaryLocationNameXMP-photoshop:CountryNominatim
State/ProvinceProvince-StateXMP-photoshop:StateNominatim
CityCityXMP-photoshop:CityNominatim
SublocationSub-locationXMP-iptcCore:LocationNominatim
POIXMP-iptcExt:LocationShownLocationNameOSM / User
DescriptionCaption-AbstractXMP-dc:DescriptionAI
KeywordsKeywordsXMP-dc:SubjectAI
RatingXMP-xmp:RatingAI / User

Performance & Architecture

Batch PhotoTools is engineered for speed and designed to utilize all available hardware resources. Every bottleneck has been addressed with purpose-built optimizations:

O(n)
Image clustering via spatial bucketing
<1ms
Offline POI lookups (indexed SQLite)
20x
Faster AI pre-check via batch exiftool
N cores
Parallel thumbnail generation

FAQ & Troubleshooting

Why don't Country/City show in Windows File Explorer?

Windows does not support displaying IPTC/XMP location fields in file properties. This is a Microsoft limitation. Use Adobe Bridge (free), Lightroom, DigiKam, or Batch PhotoBrowser to see all metadata.

Can I undo changes?

Batch Geolocate uses -overwrite_original so no backup files are created. Always keep backups of your photos before processing.

What image formats are supported?

JPEG (.jpg, .jpeg), TIFF (.tif, .tiff), PNG, and HEIC/HEIF files. GPS extraction requires EXIF data in the image.

What if I don't have GPS in my photos?

Location tagging requires GPS coordinates in the image EXIF data. Photos without GPS will be skipped for geocoding. However, you can manually assign locations using Batch PhotoBrowser's Location Painter tool. AI analysis works on all images regardless of GPS data.

How much does AI analysis cost?

Approximately 1 cent per 5 images using Kimi K2.5. A batch of 1,000 images costs about $2. Using multiple concurrent agents (3–6 recommended) speeds this up proportionally — the multi-agent architecture processes N images simultaneously. The program shows a cost warning when enabling AI for more than 1,000 images.

Overpass API keeps failing / rate limiting

Public Overpass API endpoints are rate-limited. The program rotates between multiple endpoints and applies cooldowns automatically. For large batches, enable "Continue on API fail" and download the POI database for your countries. If all endpoints fail and you don't have the country's data locally, the program will offer to automatically download it.

Processing seems stuck

Check the status bar at the bottom. If all API indicators are yellow (cooldown), the program is waiting for rate limits to expire. You can click Pause and resume later.

Batch PhotoBrowser is slow on first open

The first time Batch PhotoBrowser opens a folder, it reads metadata from all images and generates thumbnails. This is a one-time cost — the results are cached persistently. Subsequent opens are instant. You can pre-build the cache using Batch MetadataSync's Cache + Thumbnails tab to avoid this wait.