Track enrichment: Deezer popularity + ReccoBeats audio features #1
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "enrichment"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Populates
danceability,valenceanddeezer_rankso the set arc runs on all four composite-intensity inputs instead ofenergyalone.Before this,
IntensityCtx::intensityrenormalized over present fields and three of the four wereNonein every row — the arc worked, but it was a loudness curve wearing the composite's clothes.Architecture
Two independent queues behind one runner. The providers look alike and behave nothing alike:
Chaining them behind one queue would delay whole-library popularity (minutes) behind the upload grind (hours).
Measured, not assumed
enrichment/coverage_bench.rsruns the actual Rust matcher against a real 110-track library rather than inheriting figures from a throwaway prototype: 106/110 = 96%, better than the prototype's 95%. All four trap cases verified live:The four misses are three genuine white labels plus
Psytech — Fishbait, which the prototype had wrongly matched to Fishbone.Decisions worth knowing
artist:"..."is a soft ranking hint, not a filter. A high-rank false positive silently distorts the arc, which is worse than no data — renormalization handles absence gracefully but cannot detect a lie.413. Measured.deezer_fetched_atset withdeezer_rankNULL already means "looked, found nothing".ureqnotreqwest—Cargo.tomlsays tokio is "kept narrow"; this job is rate-limited and sequential, so async buys nothing.A failing test found a real design gap
strip_mix_suffixonly removes generic markers, soHot In It (Tiësto's Hotter Extended Mix)could never match its catalog entry — an artist's own named mix isn't generic. Fixed withstrip_trailing_groupas a last-resort candidate, tried after the exact title. Correct for this metric specifically: popularity answers "will the crowd recognize this tune".Verification
cargo check --all-targetsclean,npm run buildcleanNot covered
ReccoBeats has never run at scale — only ~40 hand-made requests, and its rate limit is unpublished. Paced conservatively at 1 req/s; the first real run needs watching for 429s.
Deezer's terms are non-commercial only — a documented release blocker before any open-source publication.
🤖 Generated with Claude Code