Toolbox

Portfolio duplicate scanner

Drop in a folder of images and every file gets a perceptual fingerprint in your browser. Shots that are too close together are grouped side by side, so you can keep the best frame and pull the rest before "similar content" costs you a rejection on Adobe Stock or Shutterstock.

1. Images

Up to 3,000 JPG, PNG, WebP or TIFF files, including sub-folders.

Nothing selected yet

2. Review folder (optional)

Pick a folder and de-selected files are moved into review/. Without one you get a ZIP download instead.

This browser cannot write to folders, so results download as a ZIP.

3. How similar is too similar?

88%

Groups the same scene shot moments apart — the usual similar-content trigger.

Privacy that matches the implementation

Decoding, hashing, clustering and file moving all happen on your machine. No image, thumbnail or filename is ever sent to a server, and there is no AI call in this tool at all.

How the matching works

Each image gets two 64-bit fingerprints: a gradient hash that survives exposure changes and a DCT hash that survives resizing and light editing. Files group together when either fingerprint is close enough, and the highest-resolution, sharpest frame is marked as the one to keep.

About the duplicate scanner

Near-identical frames are one of the quietest ways a portfolio loses money. This scanner fingerprints every image locally, groups the ones that look alike to a human eye, and helps you keep the strongest frame of each series instead of submitting the whole burst.

The problem it solves

Shooting in continuous mode produces sequences where twelve frames differ by a blink. Marketplaces treat that as content spam: Adobe Stock rejects for similar content, Shutterstock buries near-duplicates in search, and either way the review slots you spend on frames two through twelve return nothing. Buyers also rarely choose from a wall of near-identical thumbnails; a tight edit converts better than a padded one.

Finding those clusters manually across a portfolio of several thousand files is impractical, and filename or file-size sorting does not catch them — a re-export at a different quality setting produces a completely different file that looks the same. Perceptual hashing is the tool built for exactly this comparison.

How it works, step by step

  1. 1. Point it at your files

    Add up to 3,000 JPG, PNG, WebP or TIFF files, or a whole folder. Files are decoded in your browser only; nothing is uploaded and the originals are never modified.

  2. 2. Two fingerprints per image

    Each file is reduced to greyscale and hashed twice: a dHash on a 9x8 grid, which captures the direction of brightness changes, and a DCT-based pHash on a 32x32 grid reduced to its top-left 8x8 frequency block, which captures overall structure. Two hashes cross-check each other, so a slightly cropped or re-exported version still matches while genuinely different frames stay apart.

  3. 3. Parallel decoding

    Hashing runs across a pool of workers with files processed in small chunks between frames, so a few thousand images finish without the tab freezing and the progress bar keeps moving.

  4. 4. Clustering

    Hashes are compared by Hamming distance and grouped into clusters. The similarity slider sets the threshold: tighten it to catch only true re-exports, loosen it to surface whole burst sequences.

  5. 5. Review and act

    Each cluster shows its members side by side at thumbnail size with the sharpest candidate suggested as the keeper. Confirm your picks, then export a CSV report of the clusters or a ZIP of the files marked for review.

Reading the results honestly

A high similarity score means two files look alike to an algorithm, not that one is worthless. Legitimate variants exist: a vertical and horizontal crop of the same scene, the same product on two backgrounds, or a model looking at the camera versus away. The scanner is deliberately a review queue rather than an automatic deleter — every removal stays your decision, and nothing is deleted from disk by the scan itself.

Hashes are also brightness-and-structure based, so a heavy colour grade of the same frame may score lower than you expect, and two different photos of a plain white background may score higher. Use the side-by-side view rather than the number alone.

Questions about this tool

How similar is too similar for a marketplace?
As a working rule, if you would struggle to explain to a reviewer why both files deserve a slot, submit one. Frames from the same burst with only a small pose or expression change are the usual rejection trigger; different compositions, orientations or set-ups of the same subject are normally fine.
Does it detect duplicates across different file formats?
Yes. Hashing happens after decoding, so the same image saved as JPG, PNG and WebP produces near-identical fingerprints even though the files share no bytes and differ in size.
Will it delete my files?
No. The scan only reads files. It produces a report and a review selection, and any removal happens later in your own file manager, so an accidental slider setting cannot cost you originals.
Why does it flag two photos that look different to me?
Perceptual hashes compare structure and brightness distribution, so images sharing a dominant layout — a centred object on a plain background, for instance — can land close together. Loosen or tighten the threshold and trust the side-by-side comparison over the score.
How large a portfolio can it handle in one pass?
Up to 3,000 files per batch, with a 200 MB ceiling per file. For larger libraries, scan folder by folder — clusters almost always sit within the same shoot anyway.