Back to Tools

High-Res Image Finder

Use cases

Finding manufacturer high-res images for products Upgrading product photos for better conversion Replacing compressed images with originals Improving Google Image Search visibility

Uses Google Vision API reverse image search to find full, partial, and visually similar matches.

Scores results by pixel ratio weighted by aspect similarity (pixel_ratio × (0.7 + 0.3 × aspect_similarity)), filtering for a minimum weighted score of 1.2.

Features domain-specific rate limiting (3-5s), human-like breaks every 20 requests, and Playwright browser fallback for blocked domains.

Platform

Python script (requires Python 3.x)

Input

Image URLs CSV

Google Vision API credentials

Output

Excel with matched high-res images

View Source

Features

  • Four match types: full, partial, visually similar, page-based
  • Aspect-weighted resolution scoring (minimum score 1.2 to keep a match)
  • Top 5 matches kept per match type per image
  • Domain rate limiting (3-5s) plus global delays and breaks every 20 requests
  • Playwright headless browser fallback for blocked domains
  • Incremental Excel saves every 100 images (no resume on restart)
  • Concurrent processing (2 workers, thread-safe)

How to use

  1. 1 Prepare CSV with image URLs (column auto-detected: Address, URL, Image URL)
  2. 2 Edit the input, output and credentials paths at the top of the script
  3. 3 Point GOOGLE_APPLICATION_CREDENTIALS_PATH at a Vision-enabled service account JSON
  4. 4 Adjust MIN_IMPROVEMENT_RATIO (default 1.2) if needed
  5. 5 Run the script; results save incrementally every 100 images
  6. 6 Review multi-sheet Excel output (Summary plus one sheet per match type)

Frequently asked questions

What does the input CSV need to contain?
One column of absolute image URLs. The script auto-detects the column from names like Address, URL, Image URL or image_url, and if the CSV has only a single column it uses that regardless of name. Rows that are empty or do not start with http:// or https:// are dropped, and .svg URLs are skipped. The input, output and credentials paths are constants at the top of the script, so edit those (or set GOOGLE_APPLICATION_CREDENTIALS_PATH) before running.
What does it cost to run?
It makes one Google Cloud Vision web detection call per input image, and Google bills web detection per image after the monthly free tier, so cost scales directly with the number of rows in your CSV. You need a Google Cloud service account JSON key with the Vision API enabled. Fetching the candidate images themselves is plain HTTP and free.
How does it decide a found image is genuinely better?
Each candidate is scored as pixel ratio (new pixels divided by original pixels) weighted by aspect ratio similarity: pixel_ratio x (0.7 + 0.3 x aspect_similarity). Only candidates scoring above 1.2 are kept, and at most the top 5 per match type (full, partial, visually similar, page) are saved per source image. A much larger image with a very different aspect ratio scores lower than the raw pixel ratio suggests.
Why is it so slow?
Deliberately. It waits 3 to 5 seconds between requests to the same domain, 0.5 to 1.5 seconds globally between all requests, and pauses 10 to 30 seconds after every 20 requests, with only 2 concurrent workers. For blocked hosts it can also fall back to a headless Playwright Chromium browser, which is slower still. Budget accordingly for large lists.
Can I resume an interrupted run?
No. It saves incrementally every 100 processed images and Ctrl+C triggers a clean save, so you will not lose results, but restarting processes the whole CSV from scratch (the startup banner says exactly this). URLs are also shuffled at the start of each run, so output order will not match your input.
Do I need Playwright installed?
It is optional. Requests are tried first with rotating user agents and browser-like headers; if a domain returns 403 errors, Playwright Chromium is used as a fallback and that domain is remembered as Playwright-only for the rest of the run. Without Playwright installed, images on those blocked domains are simply skipped.

Need something built for your business?

This tool started as bespoke client work. I build custom scripts, data pipelines, and full apps for SEO and product data problems that off-the-shelf tools don't solve.

Book a Call