feat: autotag scoring overhaul, dump-based explore index, and lyrics search

Consolidates in-progress work across autotag, explore, and library:

- autotag: beets/Picard-informed scoring engine — ID-first matching, VA
  handling, recommendation tiers, and a merged distance/rank cascade, with
  an eval harness for regression tracking.
- explore: offline MusicBrainz dump import/incremental refresh replaces the
  legacy tier crawl; index-first local search with fuzzy matching and a
  dedicated ranker; disk-free guards for dump downloads.
- library: artist-credit extraction and matching.
- lyrics: owned-library lyric search (FTS) with LRCLIB backfill.

Also: rewrite README to be user-focused, and migrate upstream to
git.ljones.me/yonlu/yellowjacket.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-24 12:14:20 -04:00
co-authored by Claude Opus 4.8
parent d5140395da
commit 65048401e8
117 changed files with 17033 additions and 4767 deletions
+17 -9
View File
@@ -3,6 +3,8 @@
import {explore} from '../models';
import {context} from '../models';
export function BackfillLibraryLyrics():Promise<void>;
export function BrowseReleaseGroups(arg1:string):Promise<Array<explore.MBReleaseGroup>>;
export function BrowseReleases(arg1:string):Promise<Array<explore.MBRelease>>;
@@ -39,14 +41,16 @@ export function GetThumbnail(arg1:string,arg2:string,arg3:string):Promise<string
export function GetThumbnails(arg1:Array<explore.ThumbnailRequest>):Promise<Record<string, string>>;
export function GetTrackLyrics(arg1:number):Promise<explore.TrackLyrics>;
export function GetTrackThumbnail(arg1:string,arg2:string,arg3:string,arg4:string):Promise<string>;
export function GetTrackThumbnails(arg1:Array<explore.TrackThumbnailRequest>):Promise<Record<string, string>>;
export function IndexNewArtists():Promise<void>;
export function InvalidateIndexDiscographies():Promise<void>;
export function InvalidateLibrarySync():Promise<void>;
export function IsIndexReady():Promise<boolean>;
export function LookupArtist(arg1:string):Promise<explore.MBArtist>;
@@ -57,19 +61,23 @@ export function MusicBrainz():Promise<explore.MusicBrainzClient>;
export function PopulateLocalCrossReferences():Promise<void>;
export function PopulateLocalCrossReferencesIfNeeded():Promise<void>;
export function PrefetchReleases(arg1:Array<string>):Promise<void>;
export function RebuildLyricsIndex():Promise<void>;
export function RebuildLyricsIndexIfNeeded():Promise<void>;
export function RecordSearchClick(arg1:string,arg2:string,arg3:string):Promise<void>;
export function RefreshListenCounts():Promise<void>;
export function ResolveReleaseGroupMBIDs(arg1:Array<string>):Promise<Record<string, string>>;
export function Search(arg1:string):Promise<explore.MBSearchResult>;
export function SearchArtists(arg1:string):Promise<Array<explore.MBArtist>>;
export function SearchLocal(arg1:string):Promise<explore.MBSearchResult>;
export function SearchRecordings(arg1:string):Promise<Array<explore.MBRecording>>;
export function SearchReleaseGroups(arg1:string):Promise<Array<explore.MBReleaseGroup>>;
export function SearchLyrics(arg1:string):Promise<Array<explore.LyricsResult>>;
export function SetContext(arg1:context.Context):Promise<void>;