Find Duplicate Audio (Chromaprint)
Select a folder to scan. Uses spectral fingerprinting (Chromaprint-inspired, pure browser JS) to find duplicate and similar audio files.
Select a folder to scan. Uses spectral fingerprinting (Chromaprint-inspired, pure browser JS) to find duplicate and similar audio files.
A complete guide to finding duplicate and similar audio files using spectral fingerprinting. Covers the algorithm, the Hamming threshold slider, the custom player, and every button in the interface.
This tool finds duplicate and similar audio files by analyzing the actual sound content of each file — not file names or metadata. It creates a spectral fingerprint from the audio waveform and compares fingerprints using Hamming distance, the same core idea used by the AcoustID / Chromaprint system that powers music databases worldwide.
Unlike image duplicate finders, which compare visual pixels, audio comparison works in the frequency domain. The tool can detect the same song re-encoded at a different bitrate, slightly pitch-shifted, or re-exported from a DAW — as long as the harmonic content is similar.
Converts audio to 16 frequency bands per frame and hashes adjacent-band comparisons into a compact binary fingerprint.
Counts differing bits between two fingerprints. Small Hamming distance = similar content. The threshold slider controls how strict matching is.
Audio decoding uses the Web Audio API and continues processing even when you switch browser tabs — no pausing, unlike video scanning.
Every card has a custom play/pause/seek/mute player. Playing one track automatically pauses all others.
The algorithm is a pure-JavaScript implementation inspired by Chromaprint (used by AcoustID, MusicBrainz, and Shazam-style identification). Here is what happens step by step when you scan a file:
The browser decodes the audio file at its native sample rate using AudioContext.decodeAudioData(). An OfflineAudioContext then resamples to a fixed 11,025 Hz mono signal. All files are normalized to the same rate before any analysis, so MP3, WAV, FLAC, and OGG are directly comparable.
The mono audio stream is divided into overlapping frames of 4,096 samples each, stepping forward 1,024 samples (hop size) per frame. Before analysis, each frame is multiplied by a Hann window function — a smooth bell curve that eliminates edge artifacts at frame boundaries and improves frequency resolution.
A pure-JavaScript Cooley-Tukey Fast Fourier Transform converts each windowed frame from the time domain to the frequency domain, producing a magnitude spectrum. Each FFT output bin represents the energy at a specific frequency. The spectrum for a 4,096-sample frame at 11,025 Hz covers frequencies from 0 Hz up to ~5,512 Hz at ~2.7 Hz resolution per bin.
The magnitude spectrum is divided into 16 equal-width frequency bands. The total energy in each band is summed. Then 15 adjacent-band comparisons are made: is band N louder than band N+1? Each comparison sets one bit in a 15-bit sub-fingerprint. This is the same core idea as Chromaprint: it captures relative spectral shape, not absolute values, making it robust against loudness normalization and bitrate changes.
One sub-fingerprint (15-bit integer) is produced per frame. The full audio file produces an array of these integers — typically hundreds to thousands depending on file length. This array is the audio "fingerprint" stored in memory for comparison.
To compare two files, their fingerprint arrays are XOR'd element by element. Each XOR result is popcount'd (number of differing bits counted). The total errors are divided by the total bits compared to produce a distance percentage. If this percentage falls below the threshold set by the slider, the files are grouped as duplicates. A duration pre-check rejects pairs where one file is shorter than 50% of the other.
The slider labeled Hamming Threshold (0–50) controls how strictly two fingerprints must match to be grouped as duplicates. It is the most important control on this page.
Only nearly identical files match. Use for exact duplicates, same file at different bitrates, or lossless vs. lossy exports of the same master. Very few false positives. May miss slightly re-encoded or pitch-shifted copies.
Catches re-encoded versions, different bitrates (320k vs 128k), and slight post-processing. The default of 10 is a good starting point for music libraries. Some false positives are possible for songs with similar instrumentation.
Groups files with similar overall spectral character, even if the content is different. Useful for finding all tracks with similar timbral texture (e.g. all recordings from the same session). Expect more false positives — always review before deleting.
(slider²) / 50 — so slider 10 = 2% bit-error rate, slider 20 = 8%, slider 30 = 18%, slider 50 = 50%.Every audio card has a built-in player. Here's how to use it:
| Control | What it does |
|---|---|
| ▶️ Play button | Starts playback. Automatically pauses any other playing track on the page. |
| ⏸️ Pause button | Pauses playback. Audio position is remembered. |
| Progress bar | Click anywhere on the bar to seek to that position. Drag left/right to scrub. |
| 🔊 / 🔇 Mute button | Mutes or unmutes this individual track. |
| 🔇 Audio (toolbar) | Mutes or unmutes all audio on the page at once. |
| Time display | Shows current position / total duration (e.g. 1:23 / 3:45). |
| ← / → arrow keys | When the progress bar is focused, seeks backward or forward 5 seconds. |
Click 📁 Select Folder to Scan. A native folder picker opens (Chrome / Edge). Or drag and drop a folder onto the page. All audio files inside the folder and its subfolders are collected.
Supported formats: MP3, WAV, FLAC, OGG, M4A, AAC. Files over 100 MB are skipped. Non-audio files are silently ignored.
A progress bar shows how many files have been processed. Processing speed depends on file length and your CPU — expect roughly 1–3 seconds per track for typical music files. Duplicate groups appear live as they're found — you don't have to wait for the full scan to finish before reviewing results.
Click Stop at any time to halt the scan. Results found so far remain visible.
After scanning, use the Hamming Threshold slider to control matching sensitivity. Moving the slider re-groups all already-processed fingerprints instantly — no re-scanning is needed.
Results appear in numbered groups. Each group contains audio files that the algorithm considers similar. Use the built-in players to listen to each file before making decisions.
Ctrl+Click two or more cards, then click ⚖️ Compare in the toolbar. A modal opens showing each file with its own modal-size player, file metadata (duration, size, type, path), and a similarity percentage. For 3+ files, a full pairwise similarity matrix is shown.
Each file in the compare modal also has Copy Name, Move, and Delete buttons for quick actions without closing the modal.
Select files and use the toolbar. With Queue Mode on (recommended), files are staged for review first:
Queue Mode (enabled by default) stages files instead of acting immediately. Switch to the Move Queue or Delete Queue tab in the sidebar. Review the queued files, listen to them, remove any you change your mind about, then click Move All Files or Delete All Files to execute.
The default destination folder for Move is Audio-Duplicates, created inside the scanned folder. You can rename it in the queue input field.
| Button / Control | What it does |
|---|---|
| 🔄 New Search | Reload the page and start a fresh scan |
| 📋 Copy (N) | Copy selected filenames to clipboard. N = count. |
| 📂 Move (N) | Move selected files or stage them in Move Queue |
| 🗑️ Delete (N) | Delete selected files or stage in Delete Queue |
| ✕ Deselect All | Remove selection from all cards |
| ⚖️ Compare (N) | Open compare modal for Ctrl+clicked files. Needs 2+. |
| 🔇 Audio | Mute / unmute all audio players on the page |
| Queue Mode checkbox | Stage files for review before executing. Recommended on. |
| Hamming Threshold slider | Controls matching strictness. Re-clusters instantly on release. |
| Click card | Select / deselect the file |
| Ctrl + Click card | Add / remove from compare list (purple border) |
| Click & drag (empty area) | Box-select multiple cards |
| Ctrl + drag | Add to existing selection with box |
| Right-click card | Context menu: Copy / Move / Delete / Compare |
| 🔍 hover icon on card | Open full-size preview with modal-size player |
| ▶️ on card player | Play audio. Pauses all other players on page. |
Always back up your audio library before deleting anything. Deleted files bypass the recycle bin and cannot be recovered.
Play both tracks using the built-in players before removing one. The algorithm is good but not perfect — always verify by ear for important files.
Begin with the default threshold of 10. Review those results first. Only raise the slider if you want to catch more approximate matches.
In the Compare modal, check file size and duration. A larger file is usually higher quality. Keep the FLAC or high-bitrate version; delete the compressed copy.
Use Move to an "Audio-Duplicates" folder rather than deleting outright. Review the moved files after a few days before permanently removing them.
For very large libraries, scan by genre or artist subfolder. This reduces false positives from tracks with similar instrumentation and keeps groups manageable.
If Chromaprint finds nothing but copies clearly exist, try Essentia HPCP (better for harmonic similarity) or Meyda MFCC (better for timbral texture and spoken word).
The FFT runs on the CPU in JavaScript. Processing a typical 3–4 minute track takes 1–3 seconds depending on your device. Very large libraries (1,000+ tracks) can take several minutes. Close other browser tabs to free up CPU.
The File System Access API bypasses the OS recycle bin entirely. Deleted audio files are gone permanently. Queue Mode exists for exactly this reason — always review before executing.
Each fingerprint is stored in memory as an array of integers. For very large libraries (10,000+ long tracks), RAM usage can become significant. Scan in subfolders if you run into performance issues.
You can't scan two separate folders in one session. Workaround: scan their common parent directory so both are included in the same scan.
The File System Access API is only available in Chrome 86+ and Edge 86+. Firefox and Safari can scan and display results but cannot move or delete files. Use "Download List" to export results in those browsers.
At higher threshold values (20+), songs with similar instrumentation (e.g. two jazz piano tracks) may be grouped together even if they're different recordings. Always listen before deleting.