Upload one reference audio file, scan a folder, and Sakarto finds everything that sounds harmonically similar to it using Essentia.js HPCP fingerprinting. The reference card is always pinned first — protected from move or delete — and matches appear once the full scan completes.
🔒
100% Private — Your Audio Files Never Leave Your ComputerAll HPCP computation runs in your browser via Essentia.js WASM and the Web Audio API. No uploads, no accounts, no tracking. Close the tab and all data is gone.
🔁 What Is Reverse Audio Search?
Reverse Audio Search is the audio equivalent of reverse image search. Instead of scanning a folder and automatically grouping everything that sounds alike, you choose one specific audio file as your reference, then Sakarto scans a folder to find everything with a similar harmonic fingerprint.
Use it when you already know what track you're looking for — for example: "find all copies, covers, and re-encoded versions of this specific song in my archive."
🎵One Reference Track
Upload a single audio file. Sakarto processes it immediately and displays a player so you can verify you picked the right file.
📁Scan Any Folder
Select a folder and Sakarto fingerprints every audio file in it using Essentia.js HPCP, then compares each against your reference using cosine similarity.
⚡Runs in Background
HPCP extraction continues even when you switch browser tabs. Unlike video scanning, the Web Audio API is never throttled in background. Essentia.js WASM initialises once and is reused for every file.
🛡️Reference is Protected
The reference card is pinned first with a blue REFERENCE badge. It can never be accidentally moved or deleted.
🧠 How the Essentia HPCP Algorithm Works
Both the duplicate finder and this reverse search use the same Essentia.js HPCP fingerprinting pipeline. The difference is what gets compared to what: here, every folder file is compared against your reference only — not against each other.
1
Load Essentia.js WASM & Process the Reference File
When you select your reference audio, Sakarto first initialises the Essentia.js WASM module (1–3 seconds on first use), then immediately processes the reference file — decodes it at 44,100 Hz and computes its full HPCP sequence. A preview player appears so you can confirm the file loaded correctly before scanning begins.
2
Decode Each Folder File at 44,100 Hz
For each audio file in the folder, the browser decodes it at the native 44,100 Hz sample rate using AudioContext.decodeAudioData(). Only the left channel is used. Files over 100 MB are skipped. The reference file itself is skipped if it also appears inside the scanned folder (matched by name + size + date).
3
Extract HPCP for Each Folder File
Each folder file's audio is divided into overlapping 4,096-sample frames (hop 2,048). Essentia's hpcpExtractor(frame, 44100, false) produces a 12-element Harmonic Pitch Class Profile per frame — one bin per semitone of the chromatic scale, capturing the relative harmonic energy at each pitch class.
4
Align Sequences & Compute Average Cosine Similarity
The shorter of the two HPCP sequences determines the alignment length. Each corresponding pair of 12-element vectors is compared using cosine similarity — measuring the angle between them in 12-dimensional chroma space. These per-frame scores are averaged to produce a single similarity value for the file pair.
5
Apply Threshold & Duration Pre-Check
A duration pre-check first rejects any folder file shorter than 50% of the reference duration. For the remaining files, if the average cosine similarity meets or exceeds the threshold set by the slider, the file is added to the results list as a match. Files that don't meet the threshold are silently skipped.
6
Reference Pinned First, Matches Shown After Full Scan
Unlike the duplicate finder (which shows groups live), reverse search completes the full folder scan first, then displays all matches together. The reference card is pinned at position 0 with a blue REFERENCE badge. All matching files appear after it. The result count shows how many similar files were found in total.
💡
Why compare everything against the reference? In the duplicate finder, every file must be compared against every other file (O(n²) comparisons). In reverse search, each file is compared against the reference only (O(n) comparisons) — much faster for large folders. With HPCP's higher per-file processing cost, this O(n) reduction is especially valuable.
🎚️ The Similarity Threshold Slider
The Similarity Threshold slider (50–95) controls how strictly folder files must match your reference to appear in results. Higher values are stricter — cosine similarity of 1.0 means a perfect harmonic match. Adjusting it after a scan re-filters results instantly without re-scanning.
High values (81–95) — Very strict
Only near-identical files match. Use for exact copies, same file at different bitrates, or lossless vs. lossy exports of the same master. Very few or no false positives.
Medium values (66–80) — Balanced (default: 75)
Catches cover versions, different-bitrate re-encodes, and recordings with the same chord progression. A good starting point for music library searches.
Low values (50–65) — Loose
Groups files sharing broad harmonic character — same key, similar chord patterns. Useful for finding harmonically related recordings. Expect more false positives — always listen before deleting.
⚡
Re-filtering is instant. When you adjust the slider and release it, the already-computed HPCP sequences are re-compared against the reference immediately — no re-scanning needed. The WASM computation ran only once during the original scan.
⚖️
Linear scale. Slider value 75 = cosine similarity ≥ 0.75. Each step of 1 is exactly 0.01 cosine units. The slider runs high-to-low where high = stricter — the opposite direction from Hamming distance sliders.
✅ What It Finds — and What It Might Miss
✅ Finds Well
The reference track at different bitrates (320k vs 128k MP3)
Lossless vs. lossy exports of the same master (WAV vs MP3)
Cover versions with the same chord progression
Transpositions to a different key
Alternate arrangements sharing the harmonic structure
Live and studio versions of the same song
⚠️ May Struggle With
Spoken word and podcasts (no harmonic pitch content)
Sound effects, noise, ambient recordings
Heavily pitch-shifted versions (> ~4 semitones)
Very short clips (under ~15 seconds)
Files with very different duration vs. reference
WASM load failure on restricted networks
💡
For spoken word, podcasts, or sound effects, try Meyda MFCC Reverse Search instead — MFCC captures timbral texture and works well for non-musical reference searches. For exact copy detection without WASM, use Chromaprint Reverse Search.
🛡️ How the Reference File is Protected
✅ You Can
Click the reference card to select it
Ctrl+Click it to add to compare
Play it using the built-in player
Preview it full-size with the 🔍 icon
Copy its filename to clipboard
Right-click to access Copy and Compare
🚫 You Cannot
Move the reference file
Delete the reference file
Add it to the move or delete queue
Use the toolbar Move/Delete on it
Right-click Move or Delete (grayed out)
Select it for queue operations
▶️ The Custom Audio Player
Every audio card has a built-in player. Here's how to use it:
All audio player controls and their functions
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.
💡
Exclusive playback. When you press play on any card, all other currently-playing tracks pause automatically. This makes it easy to audition multiple candidates from a duplicate group one by one.
📋 Step-by-Step: How to Use Reverse Audio Search
Step 1
Select Your Reference Audio File
Click Choose Reference Audio. Select any audio file. Sakarto first initialises the Essentia.js WASM module (1–3 seconds on first use), then processes the reference file immediately — a preview player appears so you can play and confirm you chose correctly.
Supported formats: MP3, WAV, FLAC, OGG, M4A, AAC. Files over 100 MB are not supported as reference files.
💡
The reference file does not need to be inside the folder you're about to scan. Sakarto skips it automatically if it also appears inside the scanned folder (matched by name + size + date).
Step 2
Select the Folder to Search
Once a reference file is loaded, Choose Folder to Search becomes active. Click it to open a native folder picker (Chrome / Edge). Or drag and drop a folder directly onto the page.
The folder count shows how many files were found. The Start Search button activates only when both a reference file and a folder are selected.
Step 3
Start the Search
Click 🔍 Start Search. A progress bar shows how many files have been processed. Audio processing runs fully in the background — you can switch browser tabs freely without pausing the scan.
Once the scan completes, the reference card appears at position 0 (blue REFERENCE badge) followed by all matching files sorted by closeness to the reference. The result count shows how many similar files were found.
Step 4
Adjust the Similarity Threshold
Use the Similarity Threshold slider above the results to tune sensitivity. Releasing the slider re-filters results instantly without re-scanning. Start at the default of 75 and adjust based on results.
Step 5
Listen & Review Results
Every card has a built-in player. Use it to listen and confirm similarity before taking action. Playing one track automatically pauses all others.
Click a card to select it (blue border)
Ctrl+Click (Cmd+Click on Mac) to add to the compare list (purple border)
Click the 🔍 icon on hover to open full-size preview with a modal player
Right-click any card for the context menu (Move/Delete disabled on the reference card)
Click & drag on empty space to box-select multiple match cards
Step 6
Compare Reference vs. Match Side-by-Side
Ctrl+Click the reference card and one or more match cards, then click ⚖️ Compare. A modal opens with a player per file, full metadata (duration, size, type, path), and a similarity percentage. For 3+ files, a pairwise similarity matrix is shown.
The reference card in the compare modal shows only a Copy Name button — no Move or Delete — to keep it protected.
Step 7
Act on Matches — Move or Delete
Select match cards (not the reference — it's protected) and use the toolbar. With Queue Mode on (recommended), files are staged first:
📋 CopyCopy filename(s) to clipboard
📂 MoveStage for move to Audio-Duplicates folder
🗑️ DeleteStage for permanent deletion
⚖️ CompareListen and view metadata side-by-side
⚠️
Deletions are permanent. The File System Access API bypasses the recycle bin. Use Queue Mode to review before executing. The reference file cannot be deleted or moved.
Step 8
Queue Mode — Review Before You Commit
With Queue Mode enabled (default), clicking Move or Delete stages files in the Move Queue or Delete Queue tab. Switch to those tabs in the sidebar, listen to each file, remove any you change your mind about, then execute. The default destination folder is Audio-Duplicates, created inside your scanned folder.
🏛️ Quick Reference — All Controls
All toolbar buttons and keyboard shortcuts for reverse audio search
Button / Control
What it does
Choose Reference Audio
Select the audio file to search for. Player preview appears immediately.
Choose Folder to Search
Select the folder to scan. Activates once reference is loaded.
🔍 Start Search
Begin scanning. Processes all folder files, then shows all matches.
Similarity Threshold slider
Adjusts matching strictness (50–95, higher = stricter). Re-filters results on release without re-scanning.
🔄 New Search
Reload the page and start fresh with a new reference file
📋 Copy (N)
Copy selected filenames to clipboard. N = count.
📂 Move (N)
Move match files or stage them in Move Queue (reference excluded)
🗑️ Delete (N)
Delete match files or stage in Delete Queue (reference excluded)
✕ 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.
Click card
Select / deselect the card
Ctrl + Click card
Add / remove from compare list (purple border)
Click & drag (empty area)
Box-select multiple match cards
Right-click card
Context menu: Copy / Move / Delete / Compare. Move & Delete disabled on reference.
🔍 hover icon
Open full-size preview with modal player. Reference shown as REFERENCE.
▶️ on player
Play audio. Pauses all other players on page automatically.
💡 Tips for Best Results
💾
Back Up First
Always back up your audio library before deleting anything. Deleted files bypass the recycle bin and cannot be recovered.
🎧
Use the Best Quality Reference
Use the highest-quality, longest version of the file as your reference — a lossless FLAC or 320k MP3. A heavily compressed reference produces fewer HPCP frames and less reliable matching.
🎚️
Start at Default 75
The default of 75 is well-calibrated for most music. If expected covers aren't showing, lower toward 65. If unrelated songs appear, raise toward 80–85.
⚖️
Listen Before Acting
Use the built-in players to audition reference and match side-by-side before moving or deleting. The algorithm is good but not infallible for edge cases.
📂
Give WASM Time to Load
The Essentia.js WASM module loads from CDN on first use. If the progress bar freezes at 0% for more than 15 seconds, check that your network can reach cdn.jsdelivr.net. Some ad-blockers block CDN requests.
🧪
No Matches? Try a Lower Threshold or Different Algorithm
If Essentia HPCP finds nothing, lower the threshold to 60–65. For spoken word or sound effects, switch to Meyda MFCC Reverse Search. For exact copy detection without WASM, use Chromaprint Reverse Search.
⚠️ Known Limitations
🎵
WASM initialisation adds startup latency.
Essentia.js loads from CDN and compiles once per session. This 1–10 second pause is unavoidable on first use. If it never completes, check network access to cdn.jsdelivr.net. Some firewalls and ad-blockers block CDN requests.
↩️
No undo for file deletion.
The File System Access API bypasses the OS recycle bin entirely. Use Queue Mode to review files before executing any delete operation.
🔀
Single folder at a time.
You can't scan two separate folders in one session. Workaround: scan their common parent directory so both are included.
📊
Higher memory usage than hash-based methods.
HPCP stores a full array of 12-element vectors per file (one per frame). For very large libraries, RAM usage is significantly higher than compact hash methods. Scan in subfolders rather than entire drives.
📱
Move and Delete require Chrome or Edge.
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.
🔒 Privacy & Security
✅
Only the Essentia.js library loads from the network. Three CDN scripts load at page load. After that, all computation is local. Open DevTools → Network tab during scanning: zero outbound requests.
✅
No accounts, no cookies, no analytics. Only your Queue Mode preference is stored in localStorage. No file names, paths, or HPCP data are ever saved or transmitted.
✅
Folder access is scoped and session-only. Browser permission covers only the folder you selected, lasts only while the tab is open, and can be revoked from browser site settings at any time.
✅
Purely static — no backend. Sakarto is HTML, CSS, and JavaScript. No server, no database, and no API endpoint receives any data from you.
❓ Frequently Asked Questions
Does my reference file need to be inside the folder I'm scanning?▼
No — the reference can come from anywhere on your computer. If it happens to also exist inside the scanned folder, Sakarto detects and skips it automatically using a combination of filename, file size, and last-modified date. This means you can scan the same folder the reference lives in and it won't show up as a match to itself. The reference is always displayed at position 0 as a pinned card separate from the scan results.
The Essentia threshold slider feels backwards — higher means stricter?▼
Yes, and it's intentional. Essentia HPCP compares files using cosine similarity — a value between 0 (completely different harmonic content) and 1 (identical). So a threshold of 0.85 means "only show matches that are at least 85% harmonically similar to the reference" — very strict. A threshold of 0.55 means "show anything 55% or more similar" — loose. This is the inverse of Chromaprint and Meyda, which measure distance (lower = stricter). Think of it as a minimum similarity score rather than a maximum difference allowed.
I'm using a studio recording as my reference but the live version of the same song isn't appearing as a match.▼
Try lowering the Similarity Threshold toward 0.60–0.65. Live recordings often have different harmonic balance than studio versions due to reverb, audience noise, and different mixing. The core melody and chord progression will still produce a similar HPCP profile, but the similarity score will be lower than for a clean studio-to-studio comparison. If the live version uses significantly different arrangements (e.g. acoustic vs. electric), try 0.55. Always listen to any matches near the threshold boundary before acting on them.
Can Essentia find copies of a reference that are in a different key (transposed)?▼
Partially. Standard HPCP is not fully transposition-invariant — a song transposed by a semitone or two will produce a slightly shifted chroma profile and may score lower than an untransposed copy. A transposition of 3–4 semitones will likely not match at all. If you need to find transposed versions of your reference, try lowering the threshold significantly and expect more false positives, then filter by ear. For reliable transposition-invariant matching, dedicated music information retrieval tools outside of Sakarto would be more appropriate.
No matches found even though I know harmonically similar recordings exist in the folder. What should I try?▼
Work through this checklist: first, lower the Similarity Threshold toward 0.55–0.60 (remember: lower = looser for Essentia). Second, make sure the candidate files have similar duration to the reference — the duration pre-check excludes files shorter than 50% of the reference length. Third, confirm the WASM library finished loading before you started the scan (look for the "ready" status indicator). Fourth, consider the content: HPCP works best for pitched music with clear harmonic content. If your reference is primarily spoken word, drums, or heavily distorted, try Chromaprint or Meyda MFCC instead.
What type of reference file gives the best results with Essentia HPCP?▼
Use a clean, full-length version of the track with clear harmonic content — a studio recording rather than a live clip with crowd noise, and a version without heavy distortion or noise. Lossless formats (FLAC, WAV) produce slightly more accurate HPCP profiles than heavily compressed MP3s (below 128k). The most important factor is that the harmonic content is clearly present — an instrumental section works better as a reference than a spoken intro, for example, if you're looking for music matches.
Why does the reference player appear before I've selected a folder?▼
Essentia processes the reference file immediately on upload, extracting its HPCP fingerprint right away. This serves two purposes: you can play the file to confirm the right one was loaded, and the fingerprint is ready to compare against the moment you select a folder — no additional processing delay. If you upload a reference file and then wait a minute before selecting a folder, the scan will still start immediately because the reference fingerprint is already computed.
Can I recover files after deleting them?▼
No. Sakarto's File System Access API remove() call permanently deletes files without going through the OS Recycle Bin. The reference file is fully protected and cannot be deleted or moved no matter what. For all matched files, always use Queue Mode: stage them in the Delete Queue, play each one in the player, compare it against the reference card in the Compare modal, and only execute the deletion when you're certain.
Does this work on Firefox or Safari?▼
Reference fingerprinting, folder scanning, HPCP extraction, the built-in players, result display, and the Compare modal all work in Firefox and Safari. Move and Delete are the exception — they depend on the File System Access API which is Chrome 86+ and Edge 86+ only. In other browsers, run the search, review and listen to results, then use Download List to export a report and handle files manually in your file manager.