diff --git a/web/prisma/migrations/20260714203518_add_discovery_seed/migration.sql b/web/prisma/migrations/20260714203518_add_discovery_seed/migration.sql new file mode 100644 index 0000000..869551d --- /dev/null +++ b/web/prisma/migrations/20260714203518_add_discovery_seed/migration.sql @@ -0,0 +1,7 @@ +-- CreateTable +CREATE TABLE "DiscoverySeed" ( + "mbid" TEXT NOT NULL, + "lastDiscoveredAt" TIMESTAMP(3), + + CONSTRAINT "DiscoverySeed_pkey" PRIMARY KEY ("mbid") +); diff --git a/web/prisma/schema.prisma b/web/prisma/schema.prisma index ee1ef0c..37dea2d 100644 --- a/web/prisma/schema.prisma +++ b/web/prisma/schema.prisma @@ -191,6 +191,14 @@ model DiscoverySeedContribution { @@index([seedMbid]) } +// Throttle registry for discovery seeds that are NOT WatchedArtist rows — i.e. artists you own +// albums by (LibraryItem.artistMbid) but don't follow. Mirrors WatchedArtist.lastDiscoveredAt so +// each library-derived seed is swept once per interval, not every sweep. +model DiscoverySeed { + mbid String @id + lastDiscoveredAt DateTime? +} + model ScanWorkItem { id String @id @default(cuid()) scanId String diff --git a/web/src/app/api/discover/config/route.ts b/web/src/app/api/discover/config/route.ts index 81d3403..4c2b235 100644 --- a/web/src/app/api/discover/config/route.ts +++ b/web/src/app/api/discover/config/route.ts @@ -6,6 +6,7 @@ const DEFAULTS: Record = { "discover.similarPerSeed": "20", "discover.albumsPerArtist": "1", "discover.albumsOnly": "true", + "discover.seedFromLibrary": "true", "discover.minScore": "0", "discover.chunkSize": "5", "discover.listenBrainzUrl": "", diff --git a/web/src/app/settings/settings-form.tsx b/web/src/app/settings/settings-form.tsx index 1922e19..8f48202 100644 --- a/web/src/app/settings/settings-form.tsx +++ b/web/src/app/settings/settings-form.tsx @@ -395,6 +395,8 @@ export function SettingsForm() { Similar per seed — candidates pulled per artist. Albums per artist — releases surfaced per suggested artist. Min score — drops weak suggestions.{" "} Albums only — suggest full-length albums only, hiding singles and EPs.{" "} + Seed from library — also find artists similar to ones you own albums by, not + just the artists you follow.{" "} ListenBrainz base URL — leave blank for the default endpoint. @@ -414,6 +416,14 @@ export function SettingsForm() { /> Albums only (hide singles & EPs) +