Duplicate File Finder

Find duplicate files and photos in a folder by size and SHA-256 hash, see how much space they waste, and export a txt or csv report. Nothing is uploaded.

🌐 Español

Duplicate File Finder scans a folder (or a set of files) entirely in your browser and lists byte-for-byte duplicates so you can see how much space they waste. Nothing is uploaded, and — because a web page can't touch your file system — this tool only identifies duplicates; it never deletes anything. You remove the copies yourself in your file manager.

Tip: “Select a folder” (Chrome, Edge and other Chromium browsers) walks every sub-folder too. Everything is hashed on your device — a very large folder will take time and read every candidate file, so start with the folders you actually suspect.

🔒 Private by design: everything runs locally in your browser and never uploaded to any server.

Size buckets first, SHA-256 only where it matters

Duplicates pile up by accident. A photo library gets copied to a backup drive, then copied again because nobody could remember whether the first copy finished. The same installer is downloaded twice. A phone sync writes IMG_1234.jpg and then IMG_1234 (1).jpg beside it. Months later there are gigabytes of exact copies and no obvious way to find them.

Sorting by name misses anything renamed. Sorting by size gets you close and then wastes your time on files that merely happen to be the same length. The scan on this page does both stages in the right order. Every selected file is bucketed by its exact byte count, and any bucket holding a single file is discarded on the spot: a file with a unique length provably has no byte-identical twin anywhere in the selection. Only the survivors are opened, and each one is streamed through SHA-256 in chunks rather than being loaded into memory whole. Files are then grouped on size and digest together, so a coincidental size clash cannot survive to the results.

In a typical Downloads or photo folder that filter eliminates most of the work before a single byte is read.

Running a scan from the two pickers

  1. Click Select a folder to pick a directory and walk every sub-folder inside it, or Select files to choose a specific set by hand. There is no drag-and-drop zone on this page; the two buttons are the whole input.
  2. Watch the counter while the same-size candidates are hashed. It reads as a done-of-total over the candidate set, and shows a note about finding same-size candidates before that total is known. Cancel stops the scan and returns you to the pickers with nothing kept.
  3. Read the summary line, which states how many files were scanned, how many duplicate groups came back, and how much space you would reclaim by keeping one copy of each.
  4. Work down the groups. Press Download report (.txt) or Download report (.csv) to save the list, then delete the extra copies yourself in your file manager. Scan again clears everything and returns to the pickers.

The folder button relies on a directory-picking attribute that Chromium browsers support; where it is unavailable the same button degrades into an ordinary multi-file picker, which is what the second button offers explicitly anyway.

One keep, the rest duplicate

Groups are ordered by reclaimable space, largest first, so the worst offenders are at the top of the list rather than buried. Each group header states how many identical files it holds, the size of each one, and the total you would get back. Inside the group the files are sorted by name, the first is tagged keep, and the rest are tagged duplicate.

The reclaimable figure for a group is the size of one file multiplied by the number of extra copies. Four identical 3 MB exports are 12 MB on disk but only 9 MB of waste, because one of them is the file you actually wanted. The total at the top is that figure summed across every group, and files with no duplicate contribute nothing at all to it.

Inside the txt and csv reports

The plain-text export opens with the number of files scanned, the number of groups, and the total reclaimable space in both human-readable and raw-byte form, followed by a paragraph restating that nothing has been or will be deleted. Each group then lists its shared SHA-256 digest and every path underneath it, prefixed with the keep or duplicate tag. It is the version to keep for reference or to paste into a ticket.

The CSV is the version to feed to something else. It has one row per file and the columns group, role, path, size_bytes, size_human, copies_in_group and reclaimable_bytes, with the reclaimable figure filled in only on each group’s first row so that summing the column gives the correct total instead of counting each group once per member. Fields are quoted properly, so paths containing commas survive the trip into a spreadsheet.

Byte-identical is a stricter test than looks-identical

The digest is computed over the file’s actual contents, which cuts both ways and it is worth being clear about both.

In your favour: names, timestamps and folder locations are irrelevant. A photo renamed, moved to another directory, or copied with a “(1)” appended is still detected as a copy of the original, because none of that touches the bytes.

Against you: anything that rewrote the file is a different file. A JPEG re-saved at a different quality, an image resized, a video re-encoded, even a photo whose EXIF was edited, will not match its ancestor no matter how identical the two look on screen. This tool finds exact copies. It is not a perceptual near-duplicate matcher, and it will not claim to be one. If you want to look at what a file really contains before deciding, the Hex Viewer opens one file at a time as a classic offset, hex and ASCII dump.

The deletion step is yours, and the tool has no way to take it

This page only ever reads files through a plain file picker, which gives it no handle it could delete, move or rename anything with, so the scanner is read-only by construction rather than by policy. That constraint is worth keeping even if it could be lifted. An automatic cleaner that guesses wrong takes something you wanted and gives you nothing to appeal to, whereas a reviewed list costs a few minutes and cannot lose data.

Everything happens inside the tab: the files are read from disk and hashed locally, which is also why there is no size ceiling imposed from outside and why the page keeps working with the network off. The same streamed hashing runs in the File Checksum Verifier, which points it at a single file and, if you add a companion .txt holding the published hash, reports a match or mismatch instead of comparing a whole set of files against each other. Once you have pruned a folder, the Create ZIP Files tool will pack what remains into a single archive, and the rest of the dev-tools hub covers the neighbouring file-inspection jobs.

One honest limitation: if a file cannot be read part way through a scan, the run stops and reports the error rather than returning partial groups. Nothing is lost, but you will need to deselect the problem file and scan again.

See it in action

Screenshot of the Duplicate File Finder tool with two file pickers, each taking a whole folder or selection, before anything is compared
Duplicate File Finder mid-process: two file pickers, each taking a whole folder or selection, before anything is compared.
Screenshot of the Duplicate File Finder result screen showing the chosen files hashed and grouped, so identical content shows up together no matter what each copy is named
The finished result: the chosen files hashed and grouped, so identical content shows up together no matter what each copy is named. The download link is a local blob URL — the file never leaves your device.

Frequently asked questions

Will this tool remove the extra copies once it has found them?

It will not. The scanner reads the bytes of the files you hand it through an ordinary file picker, which gives the page read-only copies and no handle it could write back through, and produces a list. Every group in the results tags one file to keep and tags the others, and the downloadable reports repeat those tags so you can work through them in Explorer, Finder or whatever file manager you use. The final decision, and the undo button, stay on your side.

Does the scanner read every file I select?

No, and that is where nearly all of its speed comes from. Files are bucketed by exact byte size first, and any size that only one file has is dropped immediately, because a file with a unique length cannot have a byte-identical twin. Only the files that share a length with at least one other file are ever opened and hashed. The progress counter reflects that, because it counts candidates rather than the total you selected.

If two files are the same size, does the tool call them duplicates?

Not on its own. Matching sizes are common and prove nothing, so every same-size candidate is hashed with SHA-256 and grouped on the pair of size and digest together. Two files that share a length but produce different digests end up in separate groups and are never reported as copies. The size stage is a filter, the hash stage is the verdict.

Which file in a group gets marked as the one to keep?

The files inside each group are sorted by name and the first one in that order is tagged keep, with every other member tagged duplicate. There is nothing clever behind the choice, because all the members are byte-identical, so any of them would do equally well. If you would rather keep a different copy, delete the one that was tagged keep instead and retain one of the others.

Why is the space figure slightly different from what my file manager reports?

Rounding is capped at two decimal places, which can make a group total look a few bytes off from the sum of its parts. The units themselves are 1024-based here, a KB being 1024 bytes and an MB 1024 KB, which matches Windows Explorer but not macOS Finder, which counts in thousands. The txt report also prints the raw byte total in brackets next to the human-readable figure, so you always have an exact number to work from.

Can it scan an external drive or a network share?

If your browser can open the location through its file picker, the scanner can read it, but the bytes still have to travel to your machine to be hashed. That makes a slow USB drive or a network share considerably slower than local storage, and it will read every same-size candidate in full. Copying the folder locally first, or scanning it in sections, is usually the faster route.

Related tools