-
-
Notifications
You must be signed in to change notification settings - Fork 309
Duplicate Photo Finder
The Duplicate Photos Finder is an optimized tool integrated into the Harden System Security app, designed to help you reclaim disk space by finding and removing redundant images. It uses an advanced perceptual hashing algorithm to identify visually similar or exact duplicate photos, even if they have different file names, formats, or slight variations in resolution.
Under the hood, the Duplicate Photos Finder uses dHash (Difference Hash). This perceptual hashing technique converts images to grayscale, resizes them, and compares adjacent pixels to generate a unique signature (hash) for each image. By comparing these hashes, the app can find identical or highly similar images quickly and accurately.
The scan is fully multithreaded and parallelized, utilizing all available CPU cores to process thousands of images in seconds.
Supported Image Formats: .jpg, .jpeg, .png, .bmp, .gif, .tiff, .ico, .jxr, .webp.
To begin a scan, you need to provide the app with the locations you want to search.
-
Select Files and Folders: Use the dedicated buttons in the toolbar to browse and add specific files or entire directories to the scan list. You can view or clear your selections at any time using the flyout menus.
-
Drag & Drop: You can also simply drag and drop files and folders directly into the app's interface (Note: Drag & Drop is natively disabled by Windows when the app is running as Administrator).
Before starting the scan, you can fine-tune how the app detects and sorts duplicates.
You can adjust the Similarity Threshold slider between 50% and 100%.
- 100% means strict matching (exact duplicates).
- Lowering the percentage allows the app to find images that are visually similar but might have been resized, slightly cropped, or filters applied to them. Keep in mind that lower values might include false positives (non-duplicates).
When a group of duplicate photos is found, the app needs to decide which one is considered the "Original" (the one to keep) and which ones are "Duplicates" (the ones to delete). You can choose from four strategies:
- Biggest Resolution (Default)
- Smallest Resolution
- Biggest File Size
- Smallest File Size
Note
In the event of a tie between two formats (e.g., a PNG and a JPG with the exact same resolution and size), the app is programmed to automatically prefer keeping the lossless PNG format over the JPG/JPEG format. This logic only comes into play when the formats are either PNG or JPG/JPEG.
Once the scan is complete, the results are displayed in a clean, side-by-side grouped layout.
- Left Column (Original): The file selected to be kept based on your chosen strategy. It is marked in green.
- Right Column (Duplicates): The list of redundant files that match the original. They are marked in red and intended for deletion.
Each item displays a thumbnail preview along with its file name, resolution, file size, and exact path.
Clicking on any image thumbnail opens a full-size, interactive preview dialog:
- Pan & Zoom: You can click and drag to pan around the image.
- Zoom Controls: Use the Zoom In/Out buttons on the toolbar, or toggle the Mouse Wheel Zoom to zoom in and out using your scroll wheel.
- Open File Location: Easily open Windows File Explorer with the specific image highlighted.
You have full control over how you want to clean up the duplicates.
- Delete Individual Duplicates: Click the "Delete" button under any specific duplicate image to remove it.
- Delete All Duplicates in Group: A single button under the Original image allows you to delete all associated duplicates at once.
- Auto Delete All Duplicates: Found under the "Actions" menu, this will automatically iterate through all found groups and delete every duplicate file, leaving only the originals.
- Delete Original File: If you decide you don't want the original file either, you can right-click (or use the context menu) on the Original image's thumbnail to delete it. This will remove the original file from your disk and dismiss the group from the results, but it will safely leave the duplicates untouched in case you want to manage them differently.
Made a mistake? The app features an Undo capability. When you delete individual duplicates or a single group of duplicates, the app temporarily holds the deleted file bytes securely in RAM.
- You can click Undo Last Deletion in the Actions menu or simply press
Ctrl + Zon your keyboard to instantly restore the deleted files back to your hard drive and the app's UI. - Note: The Undo feature does not apply to the "Auto Delete All Duplicates" mass action due to possible memory constraints.
- Search: Use the search bar to filter the grouped results by file name. The list updates instantly.
- Statistics: Click the Statistics button to see the total number of files processed during the scan and the exact number of duplicates found.
- Clear Data: Resets the app's state, clearing all loaded images, undo history, and scan results so you can start a fresh session.
- Create AppControl Policy
- Create Supplemental Policy
- System Information
- Configure Policy Rule Options
- Policy Editor
- Simulation
- Allow New Apps
- Build New Certificate
- Create Policy From Event Logs
- Create Policy From MDE Advanced Hunting
- Create Deny Policy
- Merge App Control Policies
- Deploy App Control Policy
- Get Code Integrity Hashes
- Get Secure Policy Settings
- Update
- Sidebar
- Validate Policies
- View File Certificates
- Microsoft Graph
- Firewall Sentinel
- Protect
- Microsoft Security Baselines
- Microsoft Security Baselines Overrides
- Microsoft 365 Apps Security Baseline
- Microsoft Defender
- Attack Surface Reduction
- Bitlocker
- Device Guard
- TLS Security
- Lock Screen
- User Account Control
- Windows Firewall
- Optional Windows Features
- Windows Networking
- Miscellaneous Configurations
- Windows Update
- Edge Browser
- Certificate Checking
- Country IP Blocking
- Non Admin Measures
- Group Policy Editor
- Manage Installed Apps
- File Reputation
- Audit Policies
- Cryptographic Bill of Materials
- Intune
- Configuration Service Provider (CSP)
- Service Manager
- Duplicate Photos Finder
- EXIF Manager
- Introduction
- How To Generate Audit Logs via App Control Policies
- How To Create an App Control Supplemental Policy
- The Strength of Signed App Control Policies
- How To Upload App Control Policies To Intune Using AppControl Manager
- How To Create and Maintain Strict Kernel‐Mode App Control Policy
- How to Create an App Control Deny Policy
- App Control Notes
- How to use Windows Server to Create App Control Code Signing Certificate
- Fast and Automatic Microsoft Recommended Driver Block Rules updates
- App Control policy for BYOVD Kernel mode only protection
- EKUs in App Control for Business Policies
- App Control Rule Levels Comparison and Guide
- Script Enforcement and PowerShell Constrained Language Mode in App Control Policies
- How to Use Microsoft Defender for Endpoint Advanced Hunting With App Control
- App Control Frequently Asked Questions (FAQs)
- System Integrity Policy Transformations | XML to CIP and Back
- About Code Integrity Policy Signing
- How To Install Microsoft Store Apps Completely Offline
- Create Bootable USB flash drive with no 3rd party tools
- Event Viewer
- Group Policy
- How to compact your OS and free up extra space
- Hyper V
- Git GitHub Desktop and Mandatory ASLR
- Signed and Verified commits with GitHub desktop
- About TLS, DNS, Encryption and OPSEC concepts
- Things to do when clean installing Windows
- Comparison of security benchmarks
- BitLocker, TPM and Pluton | What Are They and How Do They Work
- How to Detect Changes in User and Local Machine Certificate Stores in Real Time Using PowerShell
- Cloning Personal and Enterprise Repositories Using GitHub Desktop
- Only a Small Portion of The Windows OS Security Apparatus
- Rethinking Trust: Advanced Security Measures for High‐Stakes Systems
- Clean Source principle, Azure and Privileged Access Workstations
- How to Securely Connect to Azure VMs and Use RDP
- Basic PowerShell tricks and notes
- Basic PowerShell tricks and notes Part 2
- Basic PowerShell tricks and notes Part 3
- Basic PowerShell tricks and notes Part 4
- Basic PowerShell tricks and notes Part 5
- How To Access All Stream Outputs From Thread Jobs In PowerShell In Real Time
- PowerShell Best Practices To Follow When Coding
- How To Asynchronously Access All Stream Outputs From Background Jobs In PowerShell
- Powershell Dynamic Parameters and How to Add Them to the Get‐Help Syntax
- RunSpaces In PowerShell
- How To Use Reflection And Prevent Using Internal & Private C# Methods in PowerShell