Repository navigation
Artist Watch: a catalogue of the artist's releases, with a switch per release - #589
Open
BigBrownMF69 wants to merge 2 commits into
Open
BigBrownMF69 wants to merge 2 commits into
BigBrownMF69 wants to merge 2 commits into
Conversation
Phase 2 of henriquesebastiao#581, first part. Artist Watch reads MusicBrainz as a third catalogue (downtify/musicbrainz.py): one request a second process-wide, a User-Agent naming Downtify, 503s retried. The artist is found once through their Deezer page, YouTube Music channel or an unambiguous name, and kept (musicbrainz_id). Only the artist's own release groups (not guest spots), of the watch's primary types, with secondary types let in by artist_watch_musicbrainz_kinds (mixtapes and soundtracks by default), and not bootleg-only. One official edition per group: explicit, the most tracks, digital, earliest. Groups YouTube Music or Deezer already list are left to them; songs found elsewhere are linked as before. library_songs also folds (From "Film") title tags, which Indian labels add on one catalogue and not another. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Phase 2 of henriquesebastiao#581, second part (on top of the MusicBrainz catalogue). Each artist sweep keeps its listing (downtify/artist_catalogue.py, table artist_catalogue), plus each release's track count and whether it turned out to be a guest spot or bootleg. The watch's page gets a Releases panel: every release YouTube Music, Deezer and MusicBrainz list (one row per release, merged across catalogues, folding feat. tags), what the library has of it (complete, partly, to download, out before the watch, not watched, off, guest spot), and a switch per release like Lidarr's per-album monitoring: on downloads it whatever the watch's types or "new releases only" say, off never does. MusicBrainz now lists groups of every kind; which kinds download is per watch (musicbrainz_kinds, else the setting), chosen on the panel. GET/PATCH /api/monitor/playlists/{id}/releases; PATCH watch takes musicbrainz_kinds. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Contributor
Merging this PR will not alter performance1 warning
Comparing |
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Phase 2 of #581, second part: an artist watch's releases, with a switch per release. This is the "have / missing" catalogue view and Lidarr-style per-album monitoring from the proposal.
Stacked on #588 (MusicBrainz catalogue), so it includes that PR's commit. This PR's own change is the second commit,
dc1bdec. Please review #588 first.What it does
(A local test instance in Docker: a real Drake watch, added with "new releases only" and then paused, so nothing was downloaded.)
The listing.
artist_catalogue, in the monitor db (downtify/artist_catalogue.py). The record is upserted, so what was learnt along the way is kept:_release_tracksreturnedNone);The panel, on the watch's page (
WatchView, artist watches only):(feat. …)and remaster tags like PR 579's song key. Laugh Now Cry Later (feat. Lil Durk) on YouTube Music is Deezer's Laugh Now Cry Later.artist_release_tracks, so no disk access.The switch (
PATCH /api/monitor/playlists/{id}/releases {album_ids, choice}) overrides the watch for that release:release_typesor "new releases only" say. Its baseline skip is dropped, and a check starts if the watch is enabled.''follows the watch again.check_artistpicks releases throughartist_catalogue.wanted(album, types, kinds, choices)instead of the type check alone.Release kinds per watch:
musicbrainz_kinds.NULLfollows theartist_watch_musicbrainz_kindssetting.PATCH /api/monitor/playlists/{id}takesmusicbrainz_kinds. This is the UI Read Artist Watch discographies from MusicBrainz too #588 left out.Real data
Drake, YouTube Music + Deezer + MusicBrainz, after the first check: 160 releases, of which 73 only MusicBrainz knows (mostly singles, plus his early mixtapes). Every catalogue's entry for the same release merged into one row. The listing cost the check nothing extra; it is the same discography the sweep already reads.
Tests
tests/test_artist_catalogue.py, 14 tests:(feat. …)tag;tests/test_artist_watch_musicbrainz.pyis updated: a live group is now listed (not downloaded), solast_track_countcounts it.mainon my Windows/Docker setup.ruff check .passes.lib/artistReleases.jscovered. The build succeeds.playlist-monitor.mdpages. The only failure iszh-CN/features/doctor.md, already failing onmainsince docs: complete Simplified Chinese feature translations and fix iOS links #585.musicbrainz_kindssaved.Strings are in all 12 locales. Docs:
features/playlist-monitor.md(new section, all languages) and the API reference.🤖 Generated with Claude Code