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:
+17
-9
@@ -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>;
|
||||
|
||||
|
||||
@@ -2,6 +2,10 @@
|
||||
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
|
||||
// This file is automatically generated. DO NOT EDIT
|
||||
|
||||
export function BackfillLibraryLyrics() {
|
||||
return window['go']['explore']['Service']['BackfillLibraryLyrics']();
|
||||
}
|
||||
|
||||
export function BrowseReleaseGroups(arg1) {
|
||||
return window['go']['explore']['Service']['BrowseReleaseGroups'](arg1);
|
||||
}
|
||||
@@ -74,6 +78,10 @@ export function GetThumbnails(arg1) {
|
||||
return window['go']['explore']['Service']['GetThumbnails'](arg1);
|
||||
}
|
||||
|
||||
export function GetTrackLyrics(arg1) {
|
||||
return window['go']['explore']['Service']['GetTrackLyrics'](arg1);
|
||||
}
|
||||
|
||||
export function GetTrackThumbnail(arg1, arg2, arg3, arg4) {
|
||||
return window['go']['explore']['Service']['GetTrackThumbnail'](arg1, arg2, arg3, arg4);
|
||||
}
|
||||
@@ -82,14 +90,14 @@ export function GetTrackThumbnails(arg1) {
|
||||
return window['go']['explore']['Service']['GetTrackThumbnails'](arg1);
|
||||
}
|
||||
|
||||
export function IndexNewArtists() {
|
||||
return window['go']['explore']['Service']['IndexNewArtists']();
|
||||
}
|
||||
|
||||
export function InvalidateIndexDiscographies() {
|
||||
return window['go']['explore']['Service']['InvalidateIndexDiscographies']();
|
||||
}
|
||||
|
||||
export function InvalidateLibrarySync() {
|
||||
return window['go']['explore']['Service']['InvalidateLibrarySync']();
|
||||
}
|
||||
|
||||
export function IsIndexReady() {
|
||||
return window['go']['explore']['Service']['IsIndexReady']();
|
||||
}
|
||||
@@ -110,32 +118,40 @@ export function PopulateLocalCrossReferences() {
|
||||
return window['go']['explore']['Service']['PopulateLocalCrossReferences']();
|
||||
}
|
||||
|
||||
export function PopulateLocalCrossReferencesIfNeeded() {
|
||||
return window['go']['explore']['Service']['PopulateLocalCrossReferencesIfNeeded']();
|
||||
}
|
||||
|
||||
export function PrefetchReleases(arg1) {
|
||||
return window['go']['explore']['Service']['PrefetchReleases'](arg1);
|
||||
}
|
||||
|
||||
export function RebuildLyricsIndex() {
|
||||
return window['go']['explore']['Service']['RebuildLyricsIndex']();
|
||||
}
|
||||
|
||||
export function RebuildLyricsIndexIfNeeded() {
|
||||
return window['go']['explore']['Service']['RebuildLyricsIndexIfNeeded']();
|
||||
}
|
||||
|
||||
export function RecordSearchClick(arg1, arg2, arg3) {
|
||||
return window['go']['explore']['Service']['RecordSearchClick'](arg1, arg2, arg3);
|
||||
}
|
||||
|
||||
export function RefreshListenCounts() {
|
||||
return window['go']['explore']['Service']['RefreshListenCounts']();
|
||||
}
|
||||
|
||||
export function ResolveReleaseGroupMBIDs(arg1) {
|
||||
return window['go']['explore']['Service']['ResolveReleaseGroupMBIDs'](arg1);
|
||||
}
|
||||
|
||||
export function Search(arg1) {
|
||||
return window['go']['explore']['Service']['Search'](arg1);
|
||||
}
|
||||
|
||||
export function SearchArtists(arg1) {
|
||||
return window['go']['explore']['Service']['SearchArtists'](arg1);
|
||||
}
|
||||
|
||||
export function SearchLocal(arg1) {
|
||||
return window['go']['explore']['Service']['SearchLocal'](arg1);
|
||||
}
|
||||
|
||||
export function SearchRecordings(arg1) {
|
||||
return window['go']['explore']['Service']['SearchRecordings'](arg1);
|
||||
}
|
||||
|
||||
export function SearchReleaseGroups(arg1) {
|
||||
return window['go']['explore']['Service']['SearchReleaseGroups'](arg1);
|
||||
export function SearchLyrics(arg1) {
|
||||
return window['go']['explore']['Service']['SearchLyrics'](arg1);
|
||||
}
|
||||
|
||||
export function SetContext(arg1) {
|
||||
|
||||
Reference in New Issue
Block a user