Skip AcoustID verification for high-confidence cross-language matches

When the fingerprint score is >=0.95 but title/artist don't match
(e.g. English expected vs Japanese returned), SKIP instead of FAIL.
A 95%+ fingerprint means the audio IS the correct recording — the
metadata mismatch is just a language/script difference, not a wrong
file. Prevents Japanese, Chinese, Korean, and other non-Latin tracks
from being falsely quarantined.

Happy path unchanged — matching title/artist still returns PASS at
the earlier check before this code is reached.
pull/253/head
Broque Thomas 2 months ago
parent c0bb1a4f34
commit f68cae64a7

@ -330,8 +330,22 @@ class AcoustIDVerification:
logger.info(f"AcoustID verification PASSED (scan match) - {msg}")
return VerificationResult.PASS, msg
# No match found — this file is likely wrong
# Report what AcoustID thinks the file actually is (top result by score)
# No match found — but if fingerprint score is very high (≥0.95),
# the audio IS correct and the title mismatch is likely a language
# difference (e.g. Japanese kanji vs English title for the same song).
# Skip rather than quarantine a correct file.
if best_score >= 0.95:
top = recordings[0]
msg = (
f"Title/artist mismatch but fingerprint confidence very high ({best_score:.2f}): "
f"AcoustID='{top.get('title', '?')}' by '{top.get('artist', '?')}', "
f"expected '{expected_track_name}' by '{expected_artist_name}'"
f"likely same song in different language/script"
)
logger.info(f"AcoustID verification SKIPPED (high confidence) - {msg}")
return VerificationResult.SKIP, msg
# Low fingerprint score + no metadata match — file is likely wrong
top = recordings[0]
top_title = top.get('title', '?')
top_artist = top.get('artist', '?')

@ -19009,6 +19009,15 @@ def get_version_info():
"title": "What's New in SoulSync",
"subtitle": f"Version {SOULSYNC_VERSION} — Latest Changes",
"sections": [
{
"title": "🔧 Fix AcoustID False Positives for Non-English Tracks",
"description": "AcoustID no longer quarantines correct files when titles are in different languages",
"features": [
"• High-confidence fingerprint matches (95%+) now SKIP instead of FAIL when title/artist don't match",
"• Prevents Japanese, Chinese, Korean, and other non-Latin tracks from being falsely quarantined",
"• Audio fingerprint confirms the recording is correct — metadata mismatch is just a language difference"
]
},
{
"title": "🔧 Fix Soulseek Junk Tags Surviving Post-Processing",
"description": "Tags from Soulseek source files are now wiped to disk immediately, before metadata enhancement",

@ -3403,6 +3403,7 @@ function closeHelperSearch() {
const WHATS_NEW = {
'2.1': [
// Newest features first
{ title: 'Fix AcoustID False Positives', desc: 'High-confidence fingerprints no longer quarantine correct files when titles are in different languages' },
{ title: 'Fix Junk Tags Surviving', desc: 'Soulseek source tags are now wiped to disk immediately — no more album fragmentation from partial metadata' },
{ title: 'Watch All Preview Modal', desc: 'Watch All Unwatched now opens a modal showing which artists will be added before confirming', page: 'library', selector: '#library-watchlist-all-btn' },
{ title: 'Fix Watch All Unwatched', desc: 'Watch All Unwatched now works for Deezer users — was silently skipping artists with only Deezer IDs' },

Loading…
Cancel
Save