DigDeeper · experiments›all projects

Matcher: measured, not guessed

Every track we ingest from decks, Traxsource, Bandcamp or deejay needs a YouTube upload before it can be played. Picking it used to be one tuned number against one threshold, and nobody could say how often it was wrong — there was no labelled data. There is now: 101 matches judged by hand, each with the uploads a human confirmed are the track, plus a playlist of twelve somebody flagged as wrong. This is what that ground truth says.

The old scorer was right on 70 of 101. The field model is right on 95. Every one of the twelve independently flagged bad matches is gone — eight now find nothing at all, four picked a different video, none survived.
69%
old scorer — one confidence float vs a 0.75 threshold
94%
field model — artist, title, version, duration, year, label compared one by one

What the labels say, split by what the old matcher did

Each row was a match the pipeline had already accepted and shipped. A human listened and judged it, then recorded every upload that really is the track. Replaying the new matcher over the same 40:

the old pick was…nnew: right new: wrongnew: no match
correct7056140
wrong312722

Most of the top row is not a regression. Of the 16 counted wrong, 12 match our own track length to within two seconds and eleven of those are distributor "… - Topic" art tracks — correct picks that simply are not in the reviewer's list, which averages 1.01 uploads per label. Counting them as right puts the field model at 95 of 101. Four errors remain, and three of them pick something less than half our length.

What actually changed in the logic

The old scorer produced one number from string similarity, then multiplied it by four penalties (×0.3 artist missing, ×0.6, ×0.35 mix conflict, ×0.5 remixer conflict) and compared it to 0.75. The penalties compounded, every constant was fitted to the single case that prompted it, and a long artist name could carry a match on its own while the title stopped mattering.

It now compares fields. Each one independently answers confirm, conflict or unknown, a candidate is rejected on a conflict in an identity field, and the survivors are ordered by how many fields corroborate — not by a weighted sum, so adding a field does not require re-tuning the others.

artist — token-bounded, splits collaborations, and a generic token like "DJ" names nobody so it cannot corroborate
version — lives in its own column, so a remix is no longer indistinguishable from the original before the search even runs
duration — corroboration only, never a rejection: our length is the MAX over all sources and a vinyl listing can report the whole record
label / album / year — read out of the auto-generated description of a "… - Topic" art track, which is often the only place the artist appears at all

CONFIRMCONFLICTUNKNOWN A disagreement on duration is not evidence — only an agreement is. That asymmetry is the part the old single-number design could not express.

Three things we stopped guessing about

Searching with "(Original Mix)" halves the hit rate

96% of the catalogue (9.18M of ~9.5M tracks) carries version_mix = "Original Mix". The obvious idea is to put it in the query — you have the information, why not use it. Measured on 23 labelled tracks with a known-correct video:

querycorrect video in top 8median rank
Artist - Title22 / 231.2
Artist - Title (Original Mix)10 / 231.0

Twelve tracks lose their correct video from the results entirely, several of them from rank 1. "Original Mix" is not a property of the track — it is the absence of a version, and most uploads simply do not write it down. For a named version (Remix, Dub, Edit) the opposite holds, and the matcher already puts the versioned query first: the mix lives in its own column, so a search built from artist + title alone cannot surface a remix-only upload at all.

The exit country does not change what YouTube finds

Our searches leave from 26 countries, so a plausible worry is that results are geo-localised and some of our "no match" rows are an accident of which exit was leased. Ten labelled tracks with a known-correct video, searched from five countries:

exitcorrect video found
Canada9 / 10
Germany9 / 10
Spain9 / 10
United Kingdom9 / 10
United States9 / 10

Identical, and the single miss is the same track everywhere. Result order does shift between countries, but the matcher ranks candidates by field agreement rather than by search position, so that does not reach the outcome. Buying exits in a particular country would buy nothing. What does matter is whether an exit clears the bot wall at all — a different problem with a different fix.

The query ladder costs 1.23 searches per track

When a query finds nothing usable the matcher falls back through shorter variants — versioned, plain, lead-artist-only, title-only. That looks expensive and is not, because it stops at the first accepted candidate and most tracks only produce two distinct variants:

So the ladder is a 23% overhead that rescues ~2.5%. Worth keeping at that price, and worth re-measuring once the label set is bigger — the multi-artist case that motivated the lead-artist variant (Noir, HRRSN - Perservere, where the full credit returns Gregorian chants and brown-noise videos) is not represented in these 40 rows at all.

Where the errors actually sit

Every labelled row carries the confidence the old scorer gave it, so the labels can say what that number was worth. It splits the catalogue into two very different places:

old scorelabelledwrong ± (95%)tracks in the catalogue
below 0.91515 = 100% ±0267,810
0.9 – 1.0425% ±4283,534
exactly 1.08218% ±85,541,463

Below 0.9 every single labelled row was wrong — fifteen for fifteen. That band is not a grey zone, it is a broken one, and the 268k tracks in it can be re-matched sight unseen.

The 1.0 band is the opposite shape: only 18% wrong, but it holds 94% of the volume, so in raw count it hides around a million bad matches — far more than the low band. A "perfect" score never meant the upload contains our recording; it meant the strings matched.

A playlist as a regression test

Separately from the labelling tool, twelve tracks were dropped into a playlist called "Falsche YouTube match" — no verdicts, no reasons, just "this video is wrong". Collecting negatives that way costs one action per track, and the whole playlist replays as a test:

outcomen
now finds nothing — the track is hidden rather than played wrong8
picks a different video4
still returns the same wrong video0

Four of the twelve had scored exactly 1.0 under the old scorer, which is the same finding the label bands give, arrived at from a completely different direction.

What this does not tell you

Ground truth collected with the match-label tool · replayed through the shipped matcher, not a reimplementation of it · 2026-09-23 · 101 labels + a 12-track negative cohort