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.
This commit is contained in:
parent
c0bb1a4f34
commit
f68cae64a7
3 changed files with 26 additions and 2 deletions
|
|
@ -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…
Reference in a new issue