Echoes is an advanced duplicate finder for Lightroom Classic. It finds probable duplicate and near-duplicate photos by comparing Lightroom catalog metadata.
It is designed for review, reporting, and cleanup planning. It does not compare pixels, and it does not delete files.
For a short first-use walkthrough, see the Echoes Quick Guide.
What The Plugin Does
The plugin scans a chosen Lightroom scope, reads metadata for each photo, compares enabled match criteria, groups probable duplicates, chooses suggested keepers, and writes reports.
It can optionally apply Lightroom markings after a scan:
- Add a duplicate-candidate keyword
- Add a keeper keyword
- Create review collections
- Create one collection per duplicate group
- Mark duplicate candidates as rejected
Those actions only happen when you choose Apply Marking and the license/trial state allows full processing.
What The Plugin Does Not Do
The plugin never:
- Deletes files from disk
- Moves files
- Renames files
- Removes photos from the Lightroom catalog
- Compares image pixels
- Guarantees that a duplicate candidate should be deleted
Treat results as a review queue. Confirm the files in Lightroom before deleting, removing, or archiving anything.
Safe First Workflow
Use this workflow the first time you run the plugin or when testing new settings:
- Select 2 to 50 photos in Lightroom.
- Open
File > Plug-in Extras > Find Duplicate Images with Echoes.... - On
Scan Setup, set the scan scope toSelected Photos. - Leave
Duplicate Detection Presetset toBalanced. - On
Advanced Settings, leaveModeset toDry RunorReport Only. - Choose a log folder you can find easily.
- Click
Run Scan. - Review the summary dialog.
- Open the image log and audit log.
- Only after the results make sense, consider using
Apply Marking.
Main Window Overview
The main window has seven tabs:
Scan SetupMatch CriteriaAdvanced Match CriteriaFile HandlingAdvanced SettingsLicenseAbout
The bottom buttons are:
Run Scan: saves the current settings and starts the scan.Cancel: closes the plugin without running a scan.
After a scan completes, the summary dialog has:
Back to Settings: returns to the plugin settings.Close: closes the summary.
Scan Setup
Use this tab to choose what will be scanned and choose a starting preset.
1. Scan Scope
The scan scope controls which Lightroom photos are read.
Selected Photos
Scans only the currently selected target photos.
Best for:
- First tests
- Known duplicate pairs
- Small controlled review sets
Watch for:
- If the wrong photos are selected, the plugin scans those photos.
- This is the safest first scope because it is small and predictable.
Selected Photos Against Current Source
Scans the current Lightroom source but only reports duplicate groups involving at least one selected target photo.
Example:
- The current folder contains 40 photos.
- You select 10 target photos.
- The plugin compares the 40 source photos.
- It reports duplicate groups involving the selected 10 target photos.
- Non-selected source photos may appear as
Referencein the image log if they were used for comparison but were not part of a reported target result.
Best for:
- Checking selected photos against their folder or collection
- Asking "do these selected photos already exist somewhere in this source?"
- Avoiding a full-source report when only selected targets matter
Watch for:
- You must select at least one target photo.
- The active Lightroom source must be the folder, collection, or source you intend to compare against.
- A non-selected source photo can become the suggested keeper if the file-handling rules prefer it.
Current Collection
Scans the active Lightroom collection.
Best for:
- Curated projects
- Review collections
- Temporary duplicate-candidate collections
Watch for:
- Make sure the collection itself is the active source.
- Collection membership is Lightroom organization, not file identity.
Current Folder
Scans the active Lightroom folder.
Best for:
- Folder-by-folder review
- Testing one shoot or import folder
- Avoiding full-catalog scans
Watch for:
- If you meant to scan a collection, use
Current Collectioninstead.
Current Source
Scans whatever Lightroom currently exposes as the active source.
Best for:
- Flexible workflows where the source could be a folder, collection, collection set, or other active source
- Working directly from the current Lightroom view
Watch for:
- Confirm the active source before running.
- If the source is broad, the scan may take longer.
Entire Catalog
Scans every photo in the catalog.
Best for:
- Final broad audits
- Catalog-wide duplicate discovery after settings are already tested
Watch for:
- Large catalogs can take a long time, but Echoes narrows comparisons through matching evidence anchors before it scores pairs.
- Start with smaller scopes first.
- Use at least one reliable
Requiredcriterion when possible.
Skip Virtual Copies
When checked, Lightroom virtual copies are excluded from duplicate comparison.
Use this when:
- Virtual copies are intentional edit variants.
- You do not want virtual copies reported as duplicate candidates.
Log behavior:
- Skipped virtual copies appear in the image log as
Skipped: Virtual Copy.
Watch for:
- The original/master copy can still be scanned.
- This is different from the
Photos with the same virtual copy namematch criterion. The skip option removes virtual copies from comparison; the criterion compares copy-name metadata for photos that remain in the scan.
Skip Stacked Photos
When checked, photos Lightroom reports as stacked are excluded from duplicate comparison.
When unchecked, stacked photos are scanned. Lightroom stack membership can create duplicate groups directly, so stack members are reviewed together even when ordinary metadata matching would not group every file.
Use this when:
- Stacks represent intentional variants.
- Stacks contain bursts, HDR source frames, panorama source frames, or grouped review choices.
Log behavior:
- Skipped stacked photos appear in the image log as
Skipped: Stacked Photo.
Watch for:
- Stack behavior depends on Lightroom catalog organization.
- This is different from the optional
Stack Informationadvanced match criterion. - Leave
Skip stacked photoschecked if your stacks are intentional groups that should not be marked.
Skip Photos With Keywords
When checked, photos with one of the listed keywords are excluded from duplicate comparison.
Use this when:
- You already have keywords such as
Do Not Scan,Archive, orKeep. - You want to protect manually reviewed photos from future duplicate scans.
- You use workflow keywords to separate finished images from images that still need review.
Enter keywords separated by commas, semicolons, or new lines.
Log behavior:
- Skipped photos appear in the image log as
Skipped: Keyword.
Watch for:
- Matching is case-insensitive.
- The skip option checks Lightroom keyword metadata and export keyword metadata.
- Keyword skipping happens before duplicate matching, so skipped photos are not compared against other photos.
2. Duplicate Detection Preset
The preset is a starting point for match criteria.
Conservative
Uses stricter default matching.
What it emphasizes:
- Filename without extension must match
- Capture time must match
- Camera model, image dimensions, and file size support the match
Best for:
- Lower false-positive risk
- RAW/JPEG pairs from the same capture
- Controlled duplicate searches
Watch for:
- It may miss duplicates with renamed files or shifted capture times.
Balanced
Recommended default.
What it emphasizes:
- Capture time and camera model are strong evidence
- Image dimensions support the match
- Filename without extension and file size provide lighter support
Best for:
- First real scans
- General duplicate review
- Testing before customizing
Watch for:
- Review results before applying markings.
RAW/JPEG Pairs
Targets RAW/JPEG pairs or format variants from the same original capture.
What it emphasizes:
- Filename without extension must match
- Capture time is strong evidence
- Camera model and image dimensions support the match
Best for:
- RAW plus JPEG imports
- Camera-original format pairs
- Controlled scans where filenames are still intact
Watch for:
- It may miss renamed exports or renamed originals.
Renamed Originals
Targets duplicate originals whose filenames changed.
What it emphasizes:
- Capture time must match
- Camera model is strong evidence
- Dimensions and file size support the match
Best for:
- Originals renamed by import tools
- Files moved between naming schemes
- Cases where filename evidence is unreliable
Watch for:
- Capture times must be reliable.
Edited Exports
Targets edited or exported copies with recognizable filename relationships.
What it emphasizes:
- Similar filenames and capture time are strong evidence
- Camera model supports the match
- Dimensions provide light support because exports may be resized
Best for:
- Files with suffixes such as
edit,copy,final,HDR,Pano, or app names - Lightroom exports and edited derivatives
- Review queues where renamed copies should be found
Watch for:
- Pair with capture time when possible.
Filename Discovery
Uses broader filename-similarity matching for exploratory scans.
What it emphasizes:
- Similar filenames are strong evidence
- Capture time and camera model support the match
- Dimensions provide light support
- Filename similarity mode is set to
Loose
Best for:
- Finding possible renamed duplicates
- Auditing messy folders before creating a stricter custom preset
- Discovery scans run in
Dry RunorReport Only
Watch for:
- Higher false-positive risk than
Edited Exports. - Review results carefully before applying markings.
Aggressive
Uses looser scoring and more supporting fields.
What it emphasizes:
- Filename without extension and capture time are strong evidence
- Camera model, lens, and dimensions provide extra support
- File size, ISO, and aperture provide lighter support
Best for:
- Discovery scans
- Finding possible duplicates where metadata may differ
- Building a broad review queue
Watch for:
- Higher false-positive risk.
- Use
Dry RunorReport Onlyfirst.
Custom Presets
Use Save As... to store the current UI setup under your own name.
Custom presets appear in the same preset menu as the built-in presets.
You can:
- Save the current setup as a new custom preset
- Select a custom preset later
- Update the selected custom preset after changing its settings
- Save edited settings as a separate new custom preset
- Rename a custom preset
- Delete a custom preset
Built-in presets cannot be renamed or deleted.
Custom presets include:
- Scan scope
- Skip filters
- Enabled basic match criteria
- Enabled advanced match criteria
- Importance levels
- Duplicate threshold
- Tolerance settings
- File handling keeper rules
- Apply Marking actions
- Mode
- Cleanup settings
- Log folder and log format
Custom presets do not include license keys, activation tokens, or paid-license state.
Match Criteria
Use this tab to choose which basic metadata fields define duplicate evidence.
Each row has:
- A checkbox to enable the criterion
- An importance menu
Importance Levels
Required
The criterion must match. If it does not match, the pair is disqualified.
Required criteria can also make scans faster because obvious mismatches are skipped earlier.
Use Required when:
- The field is reliable.
- A mismatch should definitely reject the pair.
Avoid Required when:
- The field may be missing.
- The field may differ between originals and exports.
- You are doing broad discovery.
Strong
Gives the field a strong influence when it matches.
Use it for fields that are highly meaningful but should not always be mandatory.
Medium
Gives the field a moderate influence when it matches.
Use it for useful supporting evidence.
Weak
Gives the field a small influence when it matches.
Use it for fields that help but should not drive the decision alone.
Ignore
The enabled field is ignored for scoring.
Use it when you want to keep a field visible but prevent it from affecting the current scan.
How A Match Is Decided
A pair becomes a duplicate when:
- All
Requiredcriteria match, if any are enabled - At least one enabled duplicate-evidence anchor matches
- Enough supporting criteria match for the selected preset
Duplicate-Evidence Anchors
Some fields can act as core duplicate evidence. These are anchors:
- Filename
- Filename without extension
- Full path
- Capture time
- Image dimensions
- File size
- GPS location
At least one anchor criterion must be enabled for the scan to create duplicate groups.
If only contextual criteria are enabled, the plugin reports a settings issue instead of creating groups.
Contextual Criteria
Contextual criteria can support a match but should not prove duplicates by themselves. Examples include camera model, lens, ISO, aperture, folder, rating, label, file type, import date, and virtual copy name.
This matters because many unrelated photos from the same shoot can share contextual metadata.
File Information Criteria
Photos With The Same Filename
Compares the full filename.
Use it for:
- Exact filename duplicate imports
- Export/original pairs that kept the same filename
Watch for:
- Different extensions or renamed exports may not match.
Photos With The Same Filename Without Extension
Compares the filename stem without the extension.
Use it for:
- RAW/JPEG pairs such as
IMG_1234.CR3andIMG_1234.JPG - Exports that kept the original base name
Watch for:
- Cameras can reuse filenames after counter rollover.
- Filename alone is usually not enough for catalog-wide cleanup.
Photos With Similar Filenames
Compares filename stems with common rename patterns normalized.
Use it for:
- Edited or exported copies with suffixes such as
-Edit,copy,final,HDR,Pano,denoise, or app names - Files whose separators or case changed, such as
IMG_1234andimg-1234 - Names where meaningful tokens were reordered
Watch for:
- Similar filename matching is still filename-based evidence, not image-content comparison.
- Keep the mode conservative when scanning a large catalog.
- Nearby camera sequence numbers are intentionally not treated as matches by filename alone.
Photos With The Same RAW/JPEG File Type
Compares normalized file type.
Use it for:
- Finding duplicates of the same general type
- Supporting other file criteria
Watch for:
- RAW and JPEG versions of the same capture are often intentionally different file types.
Photos With The Same File Size
Compares file size, with optional tolerance from File size tolerance.
Use it for:
- Exact duplicate files
- Duplicate imports of the same file
Watch for:
- Metadata changes can alter file size.
- Different exports of the same image may have very different file sizes.
Photos In The Same Folder
Compares folder path/name metadata.
Use it for:
- Finding duplicates inside a folder
- Supporting folder-focused cleanup
Watch for:
- Folder is organization, not image identity.
- Many unrelated photos can share a folder.
Photos With The Same Full Path
Compares full path metadata.
Use it for:
- Detecting duplicate catalog references to the same file path
Watch for:
- Most normal duplicate files have different paths.
- This should usually be disabled unless you are looking for duplicate catalog references.
Capture Information Criteria
Photos Taken At The Same Time
Compares capture time, with optional tolerance from Capture time variance.
Use it for:
- RAW/JPEG pairs
- Duplicate imports
- Camera-original duplicates
Watch for:
- Exported files can have shifted timestamps.
- Burst photos can be close together.
Photos From The Same Camera Make
Compares camera manufacturer.
Use it for:
- Supporting camera metadata
Watch for:
- Very broad. Many unrelated photos can share camera make.
Photos From The Same Camera Model
Compares camera model.
Use it for:
- Supporting capture-time and filename matches
- Separating files from different cameras
Watch for:
- Many photos from one shoot can share the same camera model.
Photos Taken With The Same Lens
Compares lens metadata.
Use it for:
- Supporting duplicate evidence
- Controlled camera-original workflows
Watch for:
- Lens metadata can be missing or formatted differently.
- Lens alone is not duplicate evidence.
Photos With The Same Focal Length
Compares focal length as numeric metadata.
Use it for:
- Supporting capture matches
Watch for:
- Many unrelated photos can share focal length.
Photos With The Same Aperture
Compares aperture as numeric metadata.
Use it for:
- Weak support in controlled workflows
Watch for:
- Aperture is common across many photos.
Photos With The Same Shutter Speed
Compares shutter speed text metadata.
Use it for:
- Weak support
Watch for:
- Formatting may differ.
- Many photos can share shutter speed.
Photos With The Same ISO
Compares ISO as numeric metadata.
Use it for:
- Weak support
Watch for:
- ISO alone is not duplicate evidence.
Image Information Criteria
Photos With The Same Image Dimensions
Compares image dimensions.
Use it for:
- Originals and same-size exports
- Supporting exact duplicate checks
Watch for:
- Crops, resizing, and exports can change dimensions.
Photos With The Same Rating
Compares Lightroom star rating.
Use it for:
- Supporting curated duplicate workflows
Watch for:
- Rating is user behavior, not image identity.
Photos With The Same Color Label
Compares Lightroom color label name.
Use it for:
- Supporting workflows where labels are consistently applied
Watch for:
- Labels are user organization, not image identity.
Location Information Criteria
Photos Taken At The Same GPS Location
Compares GPS coordinates, with optional tolerance from GPS distance tolerance.
Use it for:
- Location-based duplicate support
- Phone photos where GPS is available
Watch for:
- Same place does not mean same photo.
- GPS can be missing, approximate, or manually assigned.
Lightroom Information Criteria
Photos With The Same Virtual Copy Name
Compares Lightroom virtual copy name.
Use it for:
- Workflows where virtual copies are named consistently
Watch for:
- Many photos have no copy name.
- This is not the same as
Skip virtual copies.
Photos Imported On The Same Date
Compares import date.
Use it for:
- Supporting duplicate-import investigations
Watch for:
- Many unrelated photos can share an import date.
Photos From The Same Import Session
Compares import-session-like metadata.
Use it for:
- Supporting duplicate import review
Watch for:
- Many unrelated photos can be part of the same import.
Advanced Match Criteria
Use this tab for optional, less common metadata fields.
Each advanced row has:
- A checkbox to enable the field
- An importance menu
The same Required, Strong, Medium, Weak, and Ignore meanings apply.
Advanced Field Caveat
Advanced fields depend on the metadata available in Lightroom. Many fields may be missing for some formats, cameras, exports, or catalog records.
Avoid making advanced fields Required unless you have verified the data is consistently present.
Camera | Camera Serial Number
Compares camera serial number.
Use it when:
- You use multiple copies of the same camera model.
- Serial metadata is reliable in your files.
Watch for:
- Often missing.
- Not all cameras or file types expose it.
Camera | Firmware
Compares camera firmware metadata.
Use it when:
- You have a controlled workflow where firmware is meaningful.
Watch for:
- Rarely useful by itself.
- Can change over time.
Lens | Lens Serial Number
Compares lens serial number.
Use it when:
- Lens identity matters and serial metadata is present.
Watch for:
- Often missing.
Exposure | Exposure Compensation
Compares exposure compensation.
Use it as:
- Weak supporting evidence
Watch for:
- Many unrelated photos can share exposure compensation.
Flash | Flash Mode
Compares flash mode metadata.
Use it as:
- Weak supporting evidence
Watch for:
- Not duplicate evidence by itself.
Flash | Flash Fired
Compares whether flash fired.
Use it as:
- Weak supporting evidence
Watch for:
- Many photos can share the same flash state.
Color | White Balance
Compares white balance metadata.
Use it for:
- Supporting camera-original workflows
Watch for:
- Edited files and rendered exports may differ.
Color | Color Space
Compares color space metadata.
Use it for:
- Rendered file workflows
- Separating exports from originals
Watch for:
- Not duplicate evidence by itself.
Location | GPS Altitude
Compares GPS altitude.
Use it for:
- Extra GPS support
Watch for:
- Often missing or noisy.
Creator Information | Artist
Compares artist metadata.
Use it for:
- Metadata-rich archives
Watch for:
- Many photos from the same creator can match.
Creator Information | Copyright
Compares copyright metadata.
Use it for:
- Controlled archives
Watch for:
- Usually broad.
- Should not be main duplicate evidence.
Creator Information | Contact Information
Compares creator/contact metadata.
Use it for:
- Metadata-rich archives
Watch for:
- Often missing or broad.
Keywords | Keywords
Compares Lightroom keyword metadata.
Use it for:
- Curated workflows where duplicate variants share keywords
Watch for:
- Keywords can diverge after editing or catalog work.
Keywords | Catalog Keywords
Compares export-oriented keyword metadata.
Use it for:
- Workflows where catalog/export keyword differences matter
Watch for:
- Similar to normal keywords, this can be broad or inconsistent.
Lightroom | Collections
Compares Lightroom collection membership metadata when available.
Use it for:
- Collection-based workflows
Watch for:
- Collection membership is organization, not image identity.
Lightroom | Stack Information
Compares Lightroom stack metadata when available.
Use it for:
- Workflows where stack membership is meaningful
Watch for:
- Stack behavior depends on Lightroom catalog organization.
- This is not the same as
Skip stacked photos.
File Handling
Use this tab to choose which files should be protected as keepers inside duplicate groups.
The plugin does not delete non-keepers. It labels them as duplicate candidates in reports and optional markings.
Minimum Keepers
Controls how many files can be protected as keepers in larger groups.
Default:
Minimum keepers:1Apply extra keepers when group has at least:3
Behavior:
- With
Minimum keepersset to1, each duplicate group has one keeper. - If
Minimum keepersis greater than1, extra keepers apply only when the group size is at least the configured group-size setting. - The plugin never marks every photo in a group as a duplicate candidate. At least one file remains protected.
Example:
Minimum keepers:2Apply extra keepers when group has at least:3
Results:
- A 2-photo group gets 1 keeper and 1 duplicate candidate.
- A 3-photo group gets 2 keepers and 1 duplicate candidate.
- A 4-photo group gets 2 keepers and 2 duplicate candidates.
In the image log:
- Primary keeper is
Keeper. - Extra protected keepers are
Additional Keeper. - Non-keepers are
Duplicate Candidate.
Keeper Priority Rules
Rules are evaluated in priority order. The first enabled rule that separates two files wins. If no enabled rule separates the files, the first photo in the group is selected.
The list is shown in priority order. Use the priority menu or the ↑ / ↓ buttons to reorder rules; the row contents update so priority 1 appears first, priority 2 appears second, and so on.
When you move a rule to a priority already used by another rule, the lower-priority rules shift down automatically. For example, moving a rule to priority 3 moves the old priority 3 to 4, the old 4 to 5, and so on.
Saved keeper priorities are also normalized when the dialog opens and before settings are saved, so the list should always display as 1, 2, 3, 4... without duplicate or skipped priority numbers.
Each rule has:
- A checkbox
- A priority number
↑/↓reorder buttons
Lower priority numbers run earlier.
Prefer RAW Over Rendered Formats
Chooses RAW and DNG files over non-RAW rendered files.
Best for:
- Keeping original camera files
Watch for:
- DNG is treated as RAW for this broad rule.
- Disable this if your finished TIFF, PSD, or JPEG should be the keeper.
Prefer Camera RAW Over DNG
Chooses camera-native RAW files, such as CR3, NEF, ARW, RAF, or ORF, over DNG files.
Best for:
- Workflows where the untouched camera RAW should stay protected.
- Keeping the manufacturer-specific RAW file when both RAW and converted DNG versions exist.
Watch for:
- This rule is optional and disabled by default.
- It only separates camera RAW files from DNG files. The broader RAW rule still handles RAW/DNG versus rendered formats.
Prefer DNG Over Camera RAW
Chooses DNG files over camera-native RAW files.
Best for:
- Workflows where DNG is your preferred archival original.
- Catalogs where converted DNG files should be protected over the original camera RAW.
Watch for:
- This rule is optional and disabled by default.
- Do not enable both RAW/DNG direction rules at the same priority. If both are enabled, normal priority order decides which one runs first.
Prefer TIFF/Lossless Over JPEG
Chooses lossless rendered formats over JPEG when comparing non-RAW rendered files.
Lossless rendered extensions include:
- TIFF
- PNG
- PSD
- PSB
Best for:
- Keeping high-quality rendered masters
Watch for:
- RAW files are handled by the RAW rule, not this rule.
Prefer Higher Rating
Chooses the photo with the higher Lightroom rating.
Best for:
- Catalogs where star ratings reflect curation decisions
Watch for:
- Inconsistent ratings can choose the wrong keeper.
Prefer Larger Resolution
Chooses the photo with more pixels.
Best for:
- Keeping full-size originals over smaller exports
Watch for:
- A larger file may not be the best edited version.
Prefer Edited Photo
Chooses the photo Lightroom reports as edited.
Best for:
- Keeping developed versions
Watch for:
- Edits are catalog state, not necessarily final quality.
Prefer Non-Rejected Photo
Chooses a non-rejected photo over a rejected photo.
Best for:
- Protecting files you have not already rejected
Watch for:
- If old rejected flags are messy, review them before using this rule heavily.
Prefer Color-Labeled Photo
Chooses a photo with a color label over one without a label.
Best for:
- Workflows where labels mark preferred files
Watch for:
- Disabled by default.
- Label meaning varies by catalog.
Prefer Larger File Size
Chooses the larger file.
Best for:
- Keeping originals or higher-quality rendered files
Watch for:
- Larger file size does not always mean better file.
Prefer Filename Without Copy/Edit Suffix
Chooses the file with the cleaner original-looking filename when another matching file has a suffix such as copy, edit, final, HDR, Pano, denoise, or an app name.
Best for:
- Similar-filename duplicate groups where one file is an obvious copy or derivative
- Protecting
DSC_3017overDSC_3017 copy
Watch for:
- Higher-priority keeper rules still run first.
- You can change or disable this rule in the priority list.
- This rule only separates files when the base filename matches after removing the suffix.
Prefer Longer Filename
Chooses the file with the longer filename.
Best for:
- Workflows where descriptive filenames should be protected over shorter camera filenames
- Cases where renamed masters contain useful identifying text
Watch for:
- Disabled by default.
- This can conflict with
Prefer filename without copy/edit suffix; normal priority order decides which rule wins. - Longer does not always mean more original or higher quality.
Prefer Newer Import
Chooses the photo imported more recently.
Best for:
- Workflows where later imports are more trustworthy
Watch for:
- Disabled by default.
- Newer import is not always better.
Prefer Older Capture Date
Chooses the older capture date.
Best for:
- Workflows where earlier capture metadata is considered more original
Watch for:
- Disabled by default.
- Do not enable both older and newer capture date unless you intentionally set priorities.
Prefer Newer Capture Date
Chooses the newer capture date.
Best for:
- Workflows where updated capture metadata is preferred
Watch for:
- Disabled by default.
- Conflicts conceptually with
Prefer older capture date.
Advanced Settings
Use this tab for tolerances, mode, cleanup, optional markings, and logging.
Tolerance Settings
Capture Time Variance
Allows capture times to match within a number of seconds.
Use 0 when:
- Exact capture time is expected.
- You are matching RAW/JPEG files from the same capture.
Increase it when:
- Exported files have slightly shifted timestamps.
- Software rounded timestamps differently.
- Cameras had small clock differences.
Watch for:
- Large values can group nearby burst photos.
GPS Distance Tolerance
Allows GPS locations to match within a number of meters.
Use small values when:
- GPS is precise.
- You want strict location matching.
Increase it when:
- Phone GPS is approximate.
- Photos were manually geotagged.
Watch for:
- Same location does not mean same photo.
File Size Tolerance
Allows file sizes to differ by a percentage.
Use 0 when:
- You want exact file-size matches.
Increase it when:
- Files were exported with small metadata differences.
- You expect slight file-size variation.
Watch for:
- Large tolerances reduce file size as evidence.
Numeric Metadata Tolerance
Allows numeric metadata values to differ by a small amount.
Applies to:
- Focal length
- Aperture
- ISO
- Advanced numeric fields
Watch for:
- This applies broadly to numeric criteria. Keep it conservative.
Filename Similarity
Controls how flexible the Photos with similar filenames criterion is.
This does not change the criterion's weight. Weight still comes from the normal importance menu for that row: Required, Strong, Medium, Weak, or Ignore.
Modes:
Strict: normalized stems, punctuation/case changes, and common suffixes.Balanced: strict behavior plus token reordering and extended names where the shorter name's tokens appear in order inside the longer name.Loose: balanced behavior plus conservative fuzzy matching.
Watch for:
- Looser matching can find more renamed exports, but it should be paired with reliable evidence such as capture time.
Mode
Dry Run
Scans and writes reports. No Lightroom markings are applied.
Use it for:
- First tests
- New settings
- Large scans you have not validated
Report Only
Scans and writes reports. No Lightroom markings are applied.
Use it for:
- Report-only workflows
- Trial-limited scans
- Situations where you want no catalog changes
Apply Marking
Scans, writes reports, and applies enabled Lightroom markings.
Use it only after:
- You have tested the settings.
- You have reviewed the logs.
- You understand which optional actions are enabled.
Watch for:
Apply Markingchanges Lightroom catalog metadata, keywords, rejected flags, and/or collections depending on selected actions.- Trial-limited scans are forced to report-only behavior.
Cleanup Before Scan
Cleanup options run before the new scan, only when enabled and allowed by the license/trial state.
Before Scan, Remove Previous Echoes Collection Set
Deletes the configured Echoes collection set before scanning.
Default collection set name:
Echoes
Watch for:
- Only use this for collection sets created for Echoes review.
- If you rename the collection set to something you use manually, cleanup can remove that set.
Before Scan, Remove Echoes Keywords From Photos
Removes the configured Echoes duplicate and keeper keywords from photos.
Default keyword names:
Echoes Duplicate CandidateEchoes Keeper
Watch for:
- Use unique keyword names for Echoes.
- If you reuse those keyword names for other purposes, cleanup can remove them.
Before Scan, Clear Rejected Flags From Previous Echoes Collection Photos
Clears rejected flags only from photos found inside the configured Echoes collection set.
Watch for:
- This is intentionally narrow.
- It does not clear rejected flags across the whole catalog.
- If collection cleanup is also enabled, rejected flags are cleared before the collection set is deleted.
Marking Actions
Add Duplicate Keyword
Adds the configured duplicate keyword to non-keeper photos in duplicate groups.
Default:
Echoes Duplicate Candidate
Duplicate Keyword
Text field for the duplicate keyword name.
Use a unique name so cleanup affects only plugin-managed keywords.
Add Keeper Keyword
Adds the configured keeper keyword to suggested keepers and additional keepers.
Default:
Echoes Keeper
Keeper Keyword
Text field for the keeper keyword name.
Create Duplicate Candidates Collection
Creates a review collection containing photos from duplicate groups.
Default collection name:
All Duplicate Groups
Collection Name
Text field for the all-groups review collection.
Create Collection Set
Creates a parent collection set and a per-scan child collection set.
Default parent collection set:
Echoes
Default per-scan set format:
Scan - YYYYMMDD_HHMMSS
Collection Set Name
Text field for the parent collection set name.
Scan Set Prefix
Text field for the prefix used in each per-scan collection set.
Create One Collection Per Duplicate Group
Creates group collections such as:
Group 001
Group 002
Group 003
Best for:
- Reviewing one duplicate group at a time
Large scans:
- Echoes always creates the all-groups review collection when review collections are enabled.
- If the all-groups review set is very large, Echoes splits it into numbered parts so Lightroom can add photos in smaller batches.
- If a scan finds too many duplicate groups, Echoes skips per-group collections to avoid creating thousands of Lightroom collections. Use the all-groups review collections and the logs for large-scan review.
Mark Duplicate Candidates As Rejected
Marks non-keeper duplicate candidates as rejected in Lightroom.
Behavior:
- Suggested keepers are first cleared from rejected status.
- Duplicate candidates are then marked rejected.
- Additional keepers are protected like primary keepers.
Watch for:
- Rejected status does not delete files.
- Confirm results before deleting rejected files outside the plugin.
Log Folder
Folder where reports are written.
Use a folder you can find easily, such as a project folder or Documents.
Choose
Opens a folder picker for the log folder.
Log Format
Controls image and audit log format.
Options:
CSVText
CSV is recommended for spreadsheet review.
Text writes easier-to-read plain text image and audit logs. Use it when you want to read the reports directly instead of opening them in a spreadsheet.
Results And Logs
Each completed scan writes reports to the selected log folder.
Summary Dialog
The summary dialog shows:
- Photos scanned
- Duplicate groups found
- Potential duplicates
- Keepers suggested
- Unique photos
- Skipped photos
- Errors
- Possible pairs before indexing
- Candidate pairs compared
- License summary, when relevant
- Review collection note, when relevant
- Settings issue, when relevant
- Image log path
- Audit log path
Summary Report
The summary report is a text file containing:
- Mode
- Requested mode
- Effective mode
- License summary
- Photos scanned
- Duplicate groups found
- Potential duplicates
- Keepers suggested
- Unique photos
- Skipped photos
- Errors
- Possible pairs before indexing
- Candidate pairs compared
- Image log path
- Audit log path
- Audit detail note, when large-scan audit details were capped
- Marking warning, when review collections were split or per-group collections were skipped
- Settings issue, if any
Image Log
The image log has one row for each scanned photo.
Columns:
Lightroom IDFilenameFull PathFolderExtensionFile SizeCapture DateImport DateCamera MakeCamera ModelLensISOApertureShutter SpeedDimensionsRatingLabelGPSDuplicate Group IDResultMetadata Diagnostics, which can help support troubleshooting if Lightroom could not read some metadata
Result values:
Keeper: primary suggested keeper in a duplicate group.Additional Keeper: extra protected keeper when minimum keepers are enabled.Duplicate Candidate: non-keeper photo in a duplicate group.Unique: target photo that did not end up in a duplicate group.Reference: source photo used for comparison inSelected Photos Against Current Sourcebut not itself reported as a selected target duplicate result.Skipped: not evaluated because no criteria were enabled or the configuration was invalid.Skipped: Virtual Copy: excluded bySkip virtual copies.Skipped: Stacked Photo: excluded bySkip stacked photos.Skipped: Keyword: excluded bySkip photos with keywords.Error: metadata read or processing error occurred.
Audit Log
The audit log explains comparison decisions.
Columns:
Group IDPhoto APhoto BCriterionDecisionConfidenceSuggested KeeperReason
For large scans, the audit log may summarize only part of the pair-by-pair detail so the report stays manageable. Duplicate detection still evaluates the scan normally.
License
Use this tab to activate, deactivate, retrieve, or buy a license.
Trial Behavior
Trial policy:
- Full processing is allowed for up to 50 photos per scan.
- Trial duration is 14 days.
- If the scan has more than 50 photos and no paid license is active, the scan still writes reports but cleanup and Lightroom markings are disabled.
- If the trial has expired and no paid license is active, reports can still be generated, but cleanup and Lightroom markings require a license.
License Key
Enter the license key supplied by the licensing service.
The plugin uses the key to activate your paid license.
Open License Retrieval Page
Opens:
https://adf.colrbent.com/thank-you.html
Use this if you need to find or retrieve your license key.
Buy License
Visible when no paid license is active.
Opens:
https://adf.colrbent.com
Activate
Attempts to activate the entered license key. Successful activation shows paid license status and removes the scan limit.
Deactivate
Deactivates the local license and returns the plugin to trial/limited behavior.
Use it when:
- Moving a license to another computer
- Clearing an incorrect activation
License Checks
Paid licenses may occasionally need an online check. If validation is required, connect to the internet and activate or check the license again.
About
The About tab displays:
- Product name
- Short product description
- Version
- Website
- Support email
- License help URL
- Copyright
Check for Updatesbutton
Check For Updates
Checks whether a newer version is available.
If an update is available, the dialog can open the download page.
Recommended Workflows
Small Test Scan
- Select 2 to 50 photos.
- Use
Selected Photos. - Use
Balanced. - Use
Dry Run. - Review image and audit logs.
- Adjust criteria if needed.
Folder Review
- Select a folder in Lightroom.
- Use
Current Folder. - Start with
Balanced. - Use
Report Only. - Review logs.
- If results are good, rerun with
Apply Markingand collection creation.
Selected Photos Against Source
- Select the target photos.
- Make sure the correct folder, collection, or source is active.
- Choose
Selected Photos Against Current Source. - Use
Report Only. - Review
Referencerows in the image log.
Large Catalog Audit
- Test settings on a small scope first.
- Use reliable anchors such as capture time, filename without extension, dimensions, file size, or GPS.
- Avoid broad contextual-only settings.
- Use
Report Onlyfirst. - Expect longer runtime and larger logs.
Review Collections Workflow
- Run a scan with collection creation enabled.
- Review
All Duplicate Groups. - Review individual
Group ###collections. - Confirm keeper choices.
- Delete, reject, archive, or ignore manually in Lightroom according to your own workflow.
How Not To Use The Plugin
Do not:
- Run
Apply Markingon an untested full catalog. - Delete files solely because they are marked as duplicate candidates.
- Use only contextual criteria such as camera model, lens, ISO, folder, rating, or label.
- Set many unreliable fields to
Required. - Use cleanup options with collection or keyword names that you also use manually.
- Assume virtual copies or stacks are unwanted duplicates.
- Assume larger file size always means better keeper.
Troubleshooting
No Photos Were Found
Check:
- The selected scan scope.
- Whether a folder, collection, or source is actually active in Lightroom.
- Whether target photos are selected for
Selected PhotosorSelected Photos Against Current Source.
No Duplicates Were Found
Possible causes:
- Criteria are too strict.
- A required field does not match.
- An anchor criterion is missing.
- Metadata is missing or inconsistent.
- Skip filters excluded expected candidates.
Try:
- Use
Balanced. - Remove unnecessary
Requiredsettings. - Check the image log.
- Use a smaller known duplicate set for testing.
Diagnostic FAQs
Why did camera model plus lens not find duplicates?
Camera model, lens, focal length, aperture, ISO, shutter speed, folder, rating, color label, and file type are contextual fields. They can support a duplicate decision, but they do not prove that two photos are duplicates by themselves.
Improve the odds:
- Enable at least one duplicate-evidence anchor such as capture time, filename, similar filename, dimensions, file size, GPS, full path, or filename without extension.
- Use camera model or lens as
MediumorStrongsupport, not as the only evidence. - Check the audit log for
Duplicate evidence anchor.
Why did two photos with the same visible date not match?
Lightroom may show only the date in the metadata panel, but Echoes compares the actual capture timestamp. With Capture time variance set to 0, even a one-second difference can fail the capture-time criterion.
Improve the odds:
- Increase
Capture time varianceto2,5, or10seconds for exported or rewritten files. - Pair capture time with another anchor such as similar filename, dimensions, or file size.
- Avoid very large capture-time tolerances for burst sequences unless another strong anchor is enabled.
Why did similar names not match?
Strict filename similarity handles normalized stems, punctuation/case changes, and common suffixes. Balanced also handles token reordering and extended names, such as a shorter filename whose tokens appear in order inside a longer filename. Loose adds conservative fuzzy matching.
Improve the odds:
- Use
Balancedfor names such as030506_M_055and030506_M_BUDAPEST_055. - Use
Loosefor discovery scans where names changed more heavily. - Pair loose filename matching with reliable evidence such as capture time, dimensions, file size, or camera model.
Why did matching dimensions and camera model still miss a pair?
Dimensions are duplicate evidence, but camera model is contextual. If dimensions are disabled, missing, or different, the contextual camera fields cannot create a group on their own.
Improve the odds:
- Enable
Photos with the same image dimensionswhen originals and copies keep the same pixel size. - Enable
Photos with the same file sizewhen exact copies are expected. - Use file-size tolerance only when small metadata rewrites change file size slightly.
Why did a Required criterion make obvious duplicates disappear?
Required means a mismatch disqualifies the pair. It is useful for strong workflow assumptions, but too many required fields can make the scan brittle.
Improve the odds:
- Make only fields that truly must match
Required. - Move uncertain fields to
StrongorMedium. - Check the audit log for the first required field that reports
NO MATCHorMISSING.
Why did enabling many criteria reduce matches instead of improving them?
Every enabled criterion contributes to scoring unless its value is missing. Matching fields add score, and non-matching fields reduce confidence by increasing the available score that the pair failed to earn.
Improve the odds:
- Enable fewer, more meaningful criteria.
- Use
Strongfor trusted evidence andMediumorWeakfor supporting metadata. - Disable fields that are inconsistent across your duplicate sources.
Why did a broad full-catalog scan take too long or compare too many pairs?
Echoes indexes enabled duplicate-evidence anchors before scoring. If the enabled anchors are too broad for the catalog, many candidate pairs can still survive indexing.
Improve the odds:
- Scan one folder or collection first.
- Add a selective
Requiredcriterion when it is safe, such as filename without extension for RAW/JPEG pairs. - Use the summary values
Possible pairs before indexingandCandidate pairs comparedto see whether anchors are narrowing the scan.
Why was the wrong keeper selected?
Keeper choice is separate from duplicate detection. Once a duplicate group exists, Echoes evaluates enabled keeper rules in priority order. The first enabled rule that separates the files wins.
Improve the odds:
- Put your most important keeper rule at the top of the File Handling list.
- Use the
↑/↓buttons or priority menu to reorder rules. - Disable rules that should not influence keeper selection for the current workflow.
Too Many Duplicates Were Found
Possible causes:
- Criteria are too broad.
- Threshold is low.
- Contextual fields are carrying too much weight.
- Required criteria are not selective enough.
Try:
- Use
Conservative. - Require capture time or filename without extension when appropriate.
- Disable weak contextual fields.
- Review the audit log.
Scan Takes Too Long
Possible causes:
- Large scan scope.
- Few or no required criteria.
- Too many photos remain possible matches after the required criteria are applied.
Try:
- Use a smaller scope.
- Add reliable
Requiredcriteria. - Scan one folder or collection first.
Apply Marking Did Not Run
Possible causes:
- Mode was
Dry RunorReport Only. - Trial scan limit was exceeded.
- Trial expired.
- License check is required.
- Lightroom blocked a catalog write operation.
Check:
- Summary report effective mode.
- License status.
- Marking error message, if shown.
Logs Are Missing
Check:
- Log folder exists and is writable.
- Lightroom has permission to write there.
- The scan was not cancelled before logs were written.
Glossary
Anchor Criterion
A metadata field strong enough to act as duplicate evidence, such as capture time, filename, dimensions, file size, GPS, or full path.
Contextual Criterion
A metadata field that can support a match but should not prove duplicates by itself, such as camera model, lens, folder, rating, or label.
Duplicate Group
A set of two or more photos the plugin considers probable duplicates.
Keeper
The primary photo suggested for protection inside a duplicate group.
Additional Keeper
An extra protected photo when minimum keepers are enabled.
Duplicate Candidate
A non-keeper photo inside a duplicate group.
Reference
A source photo used for comparison in Selected Photos Against Current Source but not itself reported as a selected target duplicate result.
Report Only
Mode that writes reports without changing Lightroom catalog markings.
Apply Marking
Mode that writes reports and applies selected Lightroom keywords, collections, and rejected flags.
Trial Limit
The unlicensed full-processing limit of 50 photos per scan during the 14-day trial.