Free local photo cleanup tool

Duplicate Photo Finder

Find byte-for-byte duplicates and visually similar photos without uploading your library. Compare every group, choose what to keep and export a review list.

Private by design. Photo bytes stay in this browser; only your consented analytics and advertising requests leave the page.

Step 1

Select and scan your photos

Choose a folder or files. Nothing is uploaded.

Balanced 8: 8

Lower values require closer visual hashes. Exact SHA-256 groups do not depend on this setting.

0images selected
0exact groups
0visual groups
Waiting0 / 000:000%

Choose a folder or files to begin.

Step 2

Compare results safely

A recommendation is only a starting point. Inspect names, paths, size, dimensions and dates before changing files.

No automatic deletion. The tool only marks candidates and exports reports. You remain in control of every file.

What this duplicate photo finder solves

Photo libraries collect repeated downloads, messaging-app copies, renamed backups and edited versions. File names alone cannot tell whether two images are actually identical, while a normal gallery can make a compressed copy look indistinguishable from its original. This tool separates those two questions so you can clean a collection with evidence instead of guessing.

It is designed for photographers, families, content teams and anyone consolidating folders from phones, cameras, cloud exports or old drives. You choose the files explicitly. The scanner does not crawl your computer and it never receives permission to delete anything.

Exact duplicates and visual matches are different

An exact group contains files with the same SHA-256 digest. That means their bytes match, even if the files have different names or live in different folders. Visual groups use a 64-bit difference hash, or dHash, calculated from a tiny grayscale representation. dHash can connect a resized or recompressed copy to the same scene even though its bytes differ.

Visual similarity is not proof of duplication. Burst photos, screenshots with a small change and two frames of the same subject can receive nearby hashes. To reduce misleading chain groups, every image admitted to a visual group must be within the chosen threshold of every other member, not merely close to one neighbor.

  • Conservative 4: useful when false positives are especially undesirable.
  • Balanced 8: the default starting point for ordinary mixed libraries.
  • Broad 12: finds more edited variants but requires more careful manual review.
  • Exact groups are independent of the visual threshold.

How to scan and review a library

  1. Choose Select folder when the browser supports directory access, or Select files for a manual selection. Subfolders are included only when your browser supplies their paths.
  2. Use the safe demo first if you want to see the workflow without selecting personal photos.
  3. Choose a visual threshold and start the scan. Decoding, hashing and grouping run in a Web Worker, so progress and Cancel remain available.
  4. Open exact groups first. The suggested keeper favors resolution, then file size and modification date, but you may select another photo.
  5. Treat every visual group as a comparison task. Inspect the actual previews and metadata; do not assume that a nearby hash means the files are interchangeable.
  6. Export CSV, JSON or HTML for documentation. Mark candidates and export the cleanup list only after review. Make a backup before deleting or moving files in your file manager.

Worked example: four files from one photo session

Imagine a folder containing beach-original.jpg, beach-copy.jpg, beach-messenger.jpg and sunset-next-frame.jpg. The first two have different names but exactly the same bytes. The messenger copy has been resized and recompressed, while the last image is a separate frame taken seconds later.

The exact scan places original and copy together because their SHA-256 values match. dHash may place the messenger version in a visual group with the original. The next frame may also look close at a broad threshold, which is why the correct action is to compare rather than delete automatically.

Exact result
2 files, SHA-256 equal, one candidate can be reviewed as redundant.
Visual result
Original plus resized messenger copy, hash distance within the selected threshold.
Operator decision
Keep the preferred quality and metadata; verify the next frame is genuinely unwanted.

How the local comparison works

Files are first grouped by byte size. SHA-256 is calculated only where two or more files share a size, because byte-identical files must have the same size. This avoids unnecessary full-file reads without weakening exact detection. The digest is computed by the browser Web Crypto API.

For visual matching, the browser decodes each supported image, scales it to 9 by 8 pixels, converts the pixels to luminance and compares each pixel with its neighbor. The resulting 64 yes-or-no comparisons form dHash. Hamming distance counts the bits that differ: zero is extremely close, while a larger number allows more visual change.

A BK-tree narrows the candidate search instead of comparing every possible pair. Candidate groups then pass a complete-link check, so all members satisfy the threshold pairwise. The computation yields regularly inside a Worker, and previews are generated only for result candidates plus a small sample to keep memory bounded.

  • Exact identity: same SHA-256 digest.
  • Visual distance: number of different bits between two 64-bit dHashes.
  • Keeper suggestion: highest pixel count, then larger file, then newer date.
  • Potential space is an estimate based on non-keeper file sizes, not a deletion promise.

Privacy, saved scans and reports

Image decoding, hashing and grouping happen on your device. The application does not send photo files, thumbnails, hashes, names or local paths to Xephory. Folder access is read-only and granted through the browser picker. Analytics and Auto ads use the site-wide Google consent configuration, which is separate from photo processing.

The latest result can be stored in IndexedDB in this browser so the page can restore your groups and review choices. Clear saved scan removes that record. Exported reports are created locally and may contain file names and paths, so treat them as private documents when sharing.

HEIC and HEIF support

The scanner first asks the browser to decode each image. When native HEIC/HEIF decoding is unavailable, it tries the local decoder shipped with the site. No photo is sent to a conversion service. Browser memory, unusual camera variants or damaged files can still make decoding fail.

A HEIC file that cannot be visually decoded may still participate in exact matching when another selected file has the same byte size and SHA-256 digest. The result shows the decoding limitation instead of silently claiming that no duplicate exists.

Important limitations before cleanup

  • Perceptual hashes measure visual structure, not meaning or emotional value.
  • Cropped, rotated or heavily edited copies may not match even when they came from the same photo.
  • Burst frames and repeated screenshots can be false positives, especially at a broad threshold.
  • Unsupported or damaged images may be available only for exact matching.
  • The browser cannot inspect folders you did not select and cannot bypass operating-system permissions.
  • Large libraries depend on device speed and memory; keep the tab open and split the job if needed.
  • Always maintain a separate backup before deleting or moving original photos.

Duplicate Photo Finder FAQ

Are my photos uploaded?

No. Photo bytes, previews, hashes, names and paths are processed locally in the browser and are not sent to Xephory.

What proves that two files are exact duplicates?

The tool requires the same SHA-256 digest. It first narrows candidates by file size, then hashes the complete candidate files.

What does similarity distance 8 mean?

It allows up to eight differing bits between two 64-bit dHashes. It is a useful default, not proof that the photos are interchangeable.

Does the tool delete duplicate photos?

No. It creates recommendations and review reports only. Deletion or moving remains a manual action in your file manager.

Can it scan HEIC photos from an iPhone?

Yes when the browser or the included local decoder can read the HEIC/HEIF variant. Exact byte matching may still work when visual decoding fails.

Why can similar photos appear in separate groups?

Groups require every pair to fit the threshold. This prevents a chain of weak matches from merging unrelated endpoints into one group.

Why is one photo recommended to keep?

The default suggestion prefers the highest pixel count, then larger file size and newer modification date. Metadata and personal value still require your judgment.

Can I continue a previous review?

The latest scan and review choices are stored in this browser with IndexedDB. Use Clear saved scan to remove them.