v1.5 — pictures turned on their side, and copies in every language
What's new
Pictures turned on their side are found again.
Until now a copy counted as the same picture only if it stood upright. The
camera's own orientation tag was handled, but once the pixels themselves are
rewritten — by an editor, a chat app or a scanner — that tag is gone and the
fingerprint changes completely. Measured before the change: one picture saved
three ways (upright, turned 90 degrees without any tag, mirrored) produced no
group at all.
Every picture now carries eight fingerprints instead of one — four turns and
their mirrors — and only an upright fingerprint is compared against turned
ones, never turned against turned. That last detail matters: turning a
fingerprint loses detail, and comparing two turned ones pulls unrelated
pictures together. On a real 800-photo sample, 25 of the resulting groups
contain a turned or mirrored variant.
The report says how a copy differs, not just that it exists. Two new
notes, which can appear together:
a lower resolution than the rest; a different orientation from the rest
Where a group has a clear majority — three upright copies and one turned —
only the odd one out is named. Where there is no majority, every picture is
named and you decide which one is wrong, because the program will not guess.
A picture lying on its side is often not a copy at all but a mistake: turned
once for a reason and never turned back. Better seen before a batch goes out
to someone.
Copies are recognised in every language the program speaks. Windows names
a copy after its own language — - kopija, - копия, - Kopie — and macOS
writes Copy of …. Only the English and Lithuanian forms were recognised
before: three pairs out of five slipped past unnoticed.
A year in brackets is no longer read as a copy number. Report (2024).pdf
and Budget (2026).xlsx used to confess to being copies of something. Copy
numbers are short — browsers and Explorer count 1, 2, 3 — while four digits at
the end are almost always a year. This one was shipped in v1.4 and affected
the "which one is the original" column.
Pictures that cannot be opened are counted out loud. Damaged files,
unknown formats and images too large for the imaging library were caught and
forgotten. Two real archives held 240 and 285 of them. The scan now says how
many, instead of quietly looking at fewer pictures than it was given.
Where the search reaches — and where it stops
Measured on a real 3437×2409 photograph:
| Half size, quarter size | found |
| Turned, mirrored, turned and shrunk | found |
| Cropped by about 2 % | found |
| Cropped by 10 % | not found |
| Darkened by 30 % | not found |
The last two were never found in earlier versions either — that is the
fingerprint's own boundary, not something that broke. Saying so plainly
seems more useful than letting you discover it on your own photographs.
Honesty notes
- Adding turned copies briefly broke the commonest case of all: a picture
shrunk by half stopped being found, because the ordinary fingerprint had
been routed through the same machinery the rotations use. It is now
computed exactly as before, bit for bit, with a test that compares against
the old recipe so it cannot drift again. - Verified on 1,500 real photographs: 183 groups against 199 for the old
upright-only search, largest group unchanged, and exactly as many large
groups as before — turned copies join their originals without dragging
strangers along. Speed is unchanged at about 77 pictures per second. - Checked on a live 30,122-file scan across five folders including a NAS
share, in German as well as Lithuanian.
A Mac build — untested by human eyes
There is a macOS build in this release, and it comes with a warning that is
not boilerplate: neither of us owns a Mac. It was compiled on GitHub's own
machines, all 51 tests pass there, and an automated screenshot shows the window
rendering correctly — fonts, buttons, colours. But no person has ever seen it
running on a real Apple computer.
Two things were fixed for it: "open file" and "show in folder" were
Windows-only calls and would have thrown on a Mac. The scan, the report and the
export share the same code on both systems.
macOS will warn you when you open it, because the app is not signed by Apple —
right-click it and choose Open. If that feels wrong to you, don't do it. Czkawka
and dupeGuru ship unsigned the same way, but you are not obliged to trust
anyone's word for that.
If you run it and something is broken, saying so is genuinely useful — that is
the only way we will find out.
Checksums
SmartDuplicateFinder.exe (Windows)
MD5: d52207d8a723749e3c5365288a97f999
SHA256: A8FBFCD667B33D31B29A18C3F22176AAED97D9497183F1EF419E0273283D7F28
SmartDuplicateFinder-macOS.zip
MD5: d6cadebd2c83b783d93fbe8218e75701
SHA256: E1D0C081C7F440CA7DB6EFD5A7022FA4631CE5ABEF541F6A2407E2CF5F7349C2
VirusTotal: an unsigned PyInstaller executable always collects a few
generic machine-learning flags — v1.3 was flagged by 4 engines out of 67, all
of them heuristics, while Avast, Avira, BitDefender, ClamAV, Kaspersky, ESET
and Microsoft Defender reported it clean. You do not have to take our word for
it: paste the SHA256 above into virustotal.com
and look for yourself.
🤖 Built together with Claude (Anthropic AI).