CLI tool
ermig1979/AntiDupl avatar
ermig1979/AntiDupl

AntiDupl compares image contents, so it finds near-duplicates a hash cannot

A program to search similar and defect pictures on the disk

1,695 stars118 forksC#MIT

At a glance

What is it?
AntiDupl.NET is a Windows desktop program that searches a disk for similar and damaged images across eighteen graphic formats by comparing file contents rather than bytes. A separate command line project, AntiDuplX, ports the same idea to Linux, and the build needs Visual Studio 2022 with C++ workloads and vcpkg.
Who is it for?
Photographers and archivists with large mixed-format image collections on Windows will find AntiDupl.NET useful where a hash based deduplicator stops working, because it compares contents and therefore catches re-saved and slightly edited copies. Linux users should use AntiDuplX instead, since the desktop application is Windows only.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 4 days ago.
What is it written in?
Mainly C#, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 20, 2026, and from our analysis. They are not legal advice.

Editorial analysis

Why byte comparison is not enough for a photo archive

The problem the project names is ordinary: modern users accumulate large image collections in many formats, duplicates pile up, and removing them by hand stops being practical once the collection is big enough. What makes this more than a file name and size comparison is the stated basis of comparison.

AntiDupl compares the contents of the files. That single choice is what allows it to find not only almost identical images but also similar ones. A file that was exported twice at different quality settings, or cropped and re-saved, has different bytes and a different checksum, so a hash based tool will call them distinct. A content comparison can still group them.

The second capability is defect detection. The program can find images with certain types of defects, which is a different job from deduplication: instead of asking whether two files are the same picture, it asks whether a picture is damaged. On an archive where files were restored from a failing disk, that is the question you actually have.

The format list is where the practical limits show. JPEG, GIF, TIFF, BMP, PNG, EMF, WMF, WEBP, EXIF, ICON, JP2, PSD, DDS, HEIF, HEIC, TGA, AVIF and JXL. That covers camera originals, web formats, Windows metafiles and the modern still image codecs. The README does not document RAW camera files such as CR2 or NEF, which is worth noticing if your collection is made of raw files with JPEG previews.

Building it means installing a C++ toolset for a C# application

AntiDupl.NET is written in C#, but the README's build instructions require both .NET and C++ desktop workloads, which tells you that native code is on the dependency path. The current default toolset is v143.

The first three steps are getting the toolchain and the package manager ready. Clone vcpkg, then bootstrap and integrate it:

code
git clone https://github.com/Microsoft/vcpkg.git
code
cd vcpkg
./bootstrap-vcpkg.bat
./vcpkg integrate install

Those are Windows batch scripts, so this path is Windows only. The `integrate install` step is what makes the native dependencies appear automatically inside Visual Studio, which is why the README can promise that depended libraries will be loaded and built by vcpkg without a manual dependency list.

With the toolchain in place, you open the solution and build:

code
src\AntiDupl.sln

The repository layout is thin and predictable: `src/` holds the solution and the code, `data/` holds the application's data files, `docs/` holds documentation, `cmd/` is a separate top level directory, and `.github/` carries the workflow definitions.

Because vcpkg resolves the native dependencies at build time, a clean clone on a machine without the C++ workload installed will fail at the build step rather than at the solution load. The two workloads named in the README, .NET Desktop development and Desktop development with C++, are both required.

AntiDuplX is the answer for Linux, and it is a different repository

The desktop application is not the whole project. The README points to a separate command line tool, AntiDuplX, hosted at github.com/ermig1979/AntiDuplX, described as a standalone project that uses a similar algorithm for image comparison and works on Linux and Windows.

Two details in that sentence carry weight. It is a different repository, so its version and its release cadence are independent of the desktop application's, and the algorithm is described as similar rather than identical, so results may not line up exactly between the two tools.

For a server or a scheduled job, that command line route is the only one in this project family that works. There is no documented headless mode for AntiDupl.NET itself, and the README describes it as a program with a graphical interface carrying a Russian and English UI.

The dual language support is worth a note if you script around it, since the README states both interfaces are available but does not say whether a language can be forced from the command line. For a tool intended for unattended runs, that is a detail you would want confirmed before depending on it.

A fast release in 2026 on top of a two year gap

The release history explains a lot about the project's state. v2.3.13 was published on 2026-04-11, while v2.3.12 dates from 2023-10-10 and v2.3.11 from 2023-03-15. Two and a half years separate the previous release from the most recent one.

That pattern is consistent with a project maintained in bursts rather than continuously. The last push was on 2026-10-16, so the code is being worked on recently even though the version number has moved only once in recent memory.

The practical reading is that v2.3.13 is the release to use, and it is recent enough that format support questions are more likely to be answered than not. But the long gap before it means the changelog between 2.3.12 and 2.3.13 is where the substantive changes live, and the README does not summarize them.

The homepage at ermig1979.github.io/AntiDupl carries the screenshot shown at the top of the README, along with help material under a data/help path including an english files directory. The licence is MIT with the terms in the root LICENSE file, which is the permissive case and removes the question that would otherwise arise for a tool you might want to fold into an internal pipeline.

Where AntiDupl is the wrong tool

The clearest case is a Linux or macOS user with no interest in running the desktop application. AntiDupl.NET is a Windows program; the CLI route is a separate repository. If you need the capability on a build server, plan around AntiDuplX rather than around this project.

The second case is a collection you intend to deduplicate by hash only. If your duplicates are true byte identical copies, an exact-match tool is faster and gives you no risk of grouping two genuinely different images. AntiDupl deliberately trades that certainty for the ability to catch near-duplicates, which means its groups include candidates you have to look at rather than files you can delete blind.

That risk is the operational hazard. Defect detection adds a second category of result alongside duplicate groups, and a script that treats every reported item as a redundant file will eventually remove an image you wanted because it was corrupt rather than duplicated. The README describes the interface as simple, which is a claim about the GUI, and does not describe an unattended or report export mode, so automation would mean reading results out of the interface.

Finally, RAW camera formats are absent from the list. Photographers with large raw archives plus JPEG sidecars will be deduplicating the sidecars only, and the raw files will remain untouched.

Editorial conclusion

Photographers and archivists with large mixed-format image collections on Windows will find AntiDupl.NET useful where a hash based deduplicator stops working, because it compares contents and therefore catches re-saved and slightly edited copies. Linux users should use AntiDuplX instead, since the desktop application is Windows only. Before running it over an archive, note that it also reports images with defects, which means a deletion pass needs the group view rather than a bulk action, and confirm your collection's formats include HEIC or AVIF before assuming coverage.

Frequently asked questions

What image formats can AntiDupl.NET compare?

JPEG, GIF, TIFF, BMP, PNG, EMF, WMF, WEBP, EXIF, ICON, JP2, PSD, DDS, HEIF, HEIC, TGA, AVIF and JXL. The README does not list RAW camera formats such as CR2 or NEF.

Does AntiDupl work on Linux?

The desktop application is Windows only. The README points to a separate command line project, AntiDuplX, which uses a similar algorithm and works on Linux and Windows.

What do I need to build AntiDupl.NET from source?

Visual Studio 2022 with the .NET Desktop development and Desktop development with C++ workloads, then vcpkg cloned, bootstrapped with bootstrap-vcpkg.bat and integrated with ./vcpkg integrate install. Open src\AntiDupl.sln and build.

Can AntiDupl find images that are similar but not identical?

Yes. The README states the comparison is based on file contents, which lets it find not only almost identical images but also similar ones, and it can additionally report images with certain types of defects.

What licence is AntiDupl released under?

MIT, with the terms in the LICENSE file at the repository root.

Official sources

  1. ermig1979/AntiDupl on GitHub
  2. License: MIT
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/ermig1979-antidupl.svg)](https://hysenlabs.com/projects/ermig1979-antidupl)

Was this useful?