2023-05-18 19:16:31 +00:00
# -*- mode: org; coding: utf-8; -*-
#+OPTIONS : toc:2 num:nil html-style:nil
#+author :
2023-05-20 11:45:28 +00:00
#+title : MusicBrainz & ListenBrainz & others
2023-05-18 19:16:31 +00:00
2023-05-23 14:38:13 +00:00
- [[#musicbrainz ][MusicBrainz ]]
- [[#musicbrainz-api ][MusicBrainz API ]]
- [[#searching--browsing ][searching & browsing ]]
- [[#some-examples ][some examples ]]
- [[#mbid ][MBID ]]
- [[#ambiguity ][ambiguity ]]
- [[#incompleteness ][incompleteness ]]
- [[#listenbrainz ][ListenBrainz ]]
- [[#listening ][listening ]]
- [[#examples ][examples ]]
- [[#incompleteness-1 ][incompleteness ]]
- [[#otherbrainz ][otherBrainz ]]
- [[#further ][further ]]
2023-05-19 14:07:54 +00:00
* MusicBrainz
2023-05-18 19:16:31 +00:00
[[file:img/musicbrainz-logo.svg ]]
MusicBrainz is a community-maintained open source encyclopedia of [[https://musicbrainz.org/doc/About ][music information ]]. The REST-based [[https://musicbrainz.org/doc/MusicBrainz_API ][webservice API ]] can be used for direct access to MusicBrainz data with output in XML and JSON.
This code provides a simple, incomplete yet possibly useful interface to some of the MusicBrainz and ListenBrainz APIs from emacs for exploratory use in =org-mode= or behind the scenes sending listening metadata.
2023-05-20 11:45:28 +00:00
** MusicBrainz API
2023-05-19 14:07:54 +00:00
- Recording documentation: https://musicbrainz.org/doc/Recording
- Release documentation: https://musicbrainz.org/doc/Release
- Artist documentation: https://musicbrainz.org/doc/Artist
** searching & browsing
Search supports the full [[https://lucene.apache.org/core/7_7_2/queryparser/org/apache/lucene/queryparser/classic/package-summary.html#package.description ][Lucene search syntax ]].
2023-05-18 19:16:31 +00:00
** some examples
2023-05-19 14:07:54 +00:00
The API docs provide an example search for “Autechre albums & eps” using the URL https://musicbrainz.org/ws/2/release-group?artist=410c9baf-5469-44f6-9852-826524b80c61&type=album|ep
The equivalent function (which returns a raw response as an alist) would be…
2023-05-18 19:16:31 +00:00
#+BEGIN_SRC emacs-lisp
2023-05-19 14:07:54 +00:00
(musicbrainz-browse "release-group" "artist" "410c9baf-5469-44f6-9852-826524b80c61" "album|ep")
2023-05-18 19:16:31 +00:00
#+END_SRC
2023-05-19 14:07:54 +00:00
For slightly more legible output wrap with =musicbrainz-format=
#+BEGIN_SRC emacs-lisp
2023-05-19 14:27:59 +00:00
(musicbrainz-format
(musicbrainz-browse "release-group"
"artist"
"410c9baf-5469-44f6-9852-826524b80c61"
"album|ep"))
2023-05-19 14:07:54 +00:00
#+END_SRC
2023-05-18 19:16:31 +00:00
2023-05-19 14:27:59 +00:00
A more interactive approach could start with =(musicbrainz-search "artist" "Autechre")= or =(musicbrainz-search-artist "Autechre")= Which returns an MBID required for the lookup =410c9baf-5469-44f6-9852-826524b80c61=
2023-05-18 19:16:31 +00:00
2023-05-19 14:27:59 +00:00
The MBID can be used for specific lookups (and checked if needed using =musicbrainz-mbid-p= )
2023-05-19 14:07:54 +00:00
2023-05-18 19:16:31 +00:00
#+BEGIN_SRC emacs-lisp
2023-05-19 14:07:54 +00:00
(musicbrainz-lookup "artist" "410c9baf-5469-44f6-9852-826524b80c61" "releases")
2023-05-18 19:16:31 +00:00
#+END_SRC
#+BEGIN_SRC emacs-lisp
2023-05-19 14:07:54 +00:00
(musicbrainz-lookup-artist "410c9baf-5469-44f6-9852-826524b80c61")
2023-05-18 19:16:31 +00:00
#+END_SRC
2023-05-19 14:07:54 +00:00
| Autechre | electronic music duo | Group | [[https://musicbrainz.org/artist/410c9baf-5469-44f6-9852-826524b80c61][410c9baf-5469-44f6-9852-826524b80c61]] |
#+BEGIN_SRC emacs-lisp
2023-05-20 11:45:28 +00:00
(musicbrainz-lookup-artist-releases "410c9baf-5469-44f6-9852-826524b80c61")
2023-05-19 14:07:54 +00:00
#+END_SRC
#+BEGIN_SRC emacs-lisp
2023-05-20 11:45:28 +00:00
(musicbrainz-lookup-artist-recordings "410c9baf-5469-44f6-9852-826524b80c61")
2023-05-19 14:07:54 +00:00
#+END_SRC
#+BEGIN_SRC emacs-lisp
(musicbrainz-lookup-release "ec1ecfcc-f529-43d1-8aa6-2c7051ede00c")
#+END_SRC
| 1990 | Autechre / Saw You | Cassette Case | [[https://musicbrainz.org/release/ec1ecfcc-f529-43d1-8aa6-2c7051ede00c][ec1ecfcc-f529-43d1-8aa6-2c7051ede00c]] |
#+BEGIN_SRC emacs-lisp
(musicbrainz-lookup-recording "83730176-89ec-41a5-a4b6-476998f6291c")
#+END_SRC
| [untitled] | [[https://musicbrainz.org/recording/83730176-89ec-41a5-a4b6-476998f6291c][83730176-89ec-41a5-a4b6-476998f6291c]] |
2023-05-18 19:16:31 +00:00
#+BEGIN_SRC emacs-lisp
(musicbrainz-search-label "Warp")
#+END_SRC
2023-05-19 14:32:05 +00:00
| Warp | [[https://musicbrainz.org/label/46f0f4cd-8aab-4b33-b698-f459faf64190][46f0f4cd-8aab-4b33-b698-f459faf64190]] |
2023-05-18 19:16:31 +00:00
#+BEGIN_SRC emacs-lisp
(musicbrainz-search-label "Music" 5)
#+END_SRC
2023-05-19 14:32:05 +00:00
| 100 | Sony Music | global brand, excluding JP, owned by Sony Music Entertainment (1991 ongoing) | [[https://musicbrainz.org/label/9e6b4d7f-4958-4db7-8504-d89e315836af][9e6b4d7f-4958-4db7-8504-d89e315836af]] |
| 96 | [no label] | Special purpose label – white labels, self-published releases and other “no label” releases (ongoing) | [[https://musicbrainz.org/label/157afde4-4bf5-4039-8ad2-5a15acc85176][157afde4-4bf5-4039-8ad2-5a15acc85176]] |
| 91 | Polydor | worldwide imprint, see annotation (1913-04-02 ongoing) | [[https://musicbrainz.org/label/ce24ab18-1bd6-4293-a486-546d13d6a5e2][ce24ab18-1bd6-4293-a486-546d13d6a5e2]] |
| 91 | Universal Music | plain logo: “Universal Music” (ongoing) | [[https://musicbrainz.org/label/13a464dc-b9fd-4d16-a4f4-d4316f6a46c7][13a464dc-b9fd-4d16-a4f4-d4316f6a46c7]] |
| 90 | ZYX Music | (1992 ongoing) | [[https://musicbrainz.org/label/6844efda-a451-431e-8cc1-48ab111b4711][6844efda-a451-431e-8cc1-48ab111b4711]] |
2023-05-18 19:16:31 +00:00
** MBID
2023-05-20 11:45:28 +00:00
“One of MusicBrainz' aims is to be the universal lingua franca for music by providing a reliable and unambiguous form of music identification; this music identification is performed through the use of MusicBrainz Identifiers (MBIDs). An MBID is a 36 character Universally Unique Identifier that is permanently assigned to each entity in the database, i.e. artists, release groups, releases, recordings, works, labels, areas, places and URLs. MBIDs are also assigned to Tracks, though tracks do not share many other properties of entities.” https://musicbrainz.org/doc/MusicBrainz_Identifier
2023-05-18 19:16:31 +00:00
#+BEGIN_SRC emacs-lisp
(musicbrainz-artist-to-mbid "Autechre")
#+END_SRC
2023-05-19 14:27:59 +00:00
returns =410c9baf-5469-44f6-9852-826524b80c61=
2023-05-18 19:16:31 +00:00
#+BEGIN_SRC emacs-lisp
(musicbrainz-mbid-p "410c9baf-5469-44f6-9852-826524b80c61")
#+END_SRC
** ambiguity
2023-05-19 14:27:59 +00:00
From the docs…
2023-05-18 19:16:31 +00:00
#+BEGIN_SRC text
John Williams, the soundtrack composer and conductor, has an artist MBID of 53b106e7-0cc6-42cc-ac95-ed8d30a3a98e
John Williams, the classical guitar player, has an artist MBID of 8b8a38a9-a290-4560-84f6-3d4466e8d791
#+END_SRC
#+BEGIN_SRC emacs-lisp
2023-05-19 14:27:59 +00:00
(musicbrainz-disambiguate-artist "John Williams" 3)
2023-05-18 19:16:31 +00:00
#+END_SRC
2023-05-19 14:27:59 +00:00
| | Artist: John Williams | MBID |
| 100 | John Williams, American score composer | [[https://musicbrainz.org/artist/53b106e7-0cc6-42cc-ac95-ed8d30a3a98e][53b106e7-0cc6-42cc-ac95-ed8d30a3a98e]] |
| 94 | John Williams, classical guitarist | [[https://musicbrainz.org/artist/8b8a38a9-a290-4560-84f6-3d4466e8d791][8b8a38a9-a290-4560-84f6-3d4466e8d791]] |
| 92 | John Williams, English A&R executive, producer, songwriter... | [[https://musicbrainz.org/artist/eb5d7680-0c00-4b0c-b6eb-9605ff77723d][eb5d7680-0c00-4b0c-b6eb-9605ff77723d]] |
There are several “Bad Seeds”
2023-05-18 19:16:31 +00:00
#+BEGIN_SRC emacs-lisp
(musicbrainz-artist-to-mbid "Bad Seeds")
#+END_SRC
2023-05-19 14:27:59 +00:00
Which returns the MBID =7feb02f2-51fa-422d-838e-2c14ecb4c7b8= for “Tomorrows Bad Seeds”, however…
2023-05-18 19:16:31 +00:00
#+BEGIN_SRC emacs-lisp
2023-05-19 14:07:54 +00:00
(musicbrainz-disambiguate-artist "Bad Seeds" 7)
2023-05-18 19:16:31 +00:00
#+END_SRC
| | Artist: Bad Seeds | MBID |
| 100 | Tomorrows Bad Seeds, nil | [[https://musicbrainz.org/artist/7feb02f2-51fa-422d-838e-2c14ecb4c7b8][7feb02f2-51fa-422d-838e-2c14ecb4c7b8]] |
| 98 | The Bad Seeds, 60s Texas rock band | [[https://musicbrainz.org/artist/3e593712-9f70-4b7a-b21b-466016998a3d][3e593712-9f70-4b7a-b21b-466016998a3d]] |
| 98 | The Bad Seeds, 60's US garage rock band from Erlanger, KY | [[https://musicbrainz.org/artist/34bc9a97-fa78-424e-8ca8-a904f978f041][34bc9a97-fa78-424e-8ca8-a904f978f041]] |
| 98 | The Bad Seeds, backing band for Nick Cave | [[https://musicbrainz.org/artist/eb2a8edc-5670-4896-82be-87db38de9583][eb2a8edc-5670-4896-82be-87db38de9583]] |
| 86 | Nick Cave & the Bad Seeds, nil | [[https://musicbrainz.org/artist/172e1f1a-504d-4488-b053-6344ba63e6d0][172e1f1a-504d-4488-b053-6344ba63e6d0]] |
| 50 | The Lightning Seeds, nil | [[https://musicbrainz.org/artist/1ba601a0-3401-4b28-8ddd-9af8203661e8][1ba601a0-3401-4b28-8ddd-9af8203661e8]] |
2023-05-19 14:07:54 +00:00
| 49 | Seeds, UK dancehall | [[https://musicbrainz.org/artist/a03cf587-a3d3-4847-ac41-e488f779a313][a03cf587-a3d3-4847-ac41-e488f779a313]] |
2023-05-18 19:16:31 +00:00
2023-05-20 11:45:28 +00:00
#+BEGIN_SRC emacs-lisp
(musicbrainz-lookup-artist "172e1f1a-504d-4488-b053-6344ba63e6d0")
#+END_SRC
** incompleteness
general, specific and partial API coverage
*** Searching & browsing
Search supports the full [[https://lucene.apache.org/core/7_7_2/queryparser/org/apache/lucene/queryparser/classic/package-summary.html#package.description ][Lucene search syntax ]] in queries.
| (musicbrainz-search /type/ /query/ &optional /limit/ /offset/) | see =musicbrainz-search-types= |
| (musicbrainz-browse /entity/ /link/ /query/ &optional /type/) | and =musicbrainz-entities-*= |
| (musicbrainz-search-artist /artist/ &optional /limit/) | |
| (musicbrainz-artist-to-mbid /artist/) | |
| (musicbrainz-disambiguate-artist /artist/ &optional /limit/) | |
| (musicbrainz-search-label /label/ &optional /limit/) | |
| (musicbrainz-search-recording /query/ &optional /limit/) | |
| (musicbrainz-search-release /query/ &optional /limit/) | |
2023-05-22 14:49:11 +00:00
| (musicbrainz-search-work /query/ &optional /limit/) | |
2023-05-20 11:45:28 +00:00
*** Lookup queries & subqueries
| (musicbrainz-lookup /entity/ /MBID/ &optional /inc/) | valid entities listed in =musicbrainz-entities-core= |
| *Functions & formatted output* | example MBID |
| (musicbrainz-lookup-area /MBID/) | [[https://musicbrainz.org/area/c9ac1239-e832-41bc-9930-e252a1fd1105][c9ac1239-e832-41bc-9930-e252a1fd1105]] |
| (musicbrainz-lookup-artist /MBID/) | [[https://musicbrainz.org/artist/410c9baf-5469-44f6-9852-826524b80c61][410c9baf-5469-44f6-9852-826524b80c61]] |
| (musicbrainz-lookup-artist-recordings /MBID/) | … |
| (musicbrainz-lookup-artist-releases /MBID/) | … |
| (musicbrainz-lookup-artist-release-groups /MBID/) | … |
| (musicbrainz-lookup-artist-works /MBID/) | … |
| (musicbrainz-lookup-collection /MBID/) | … |
| (musicbrainz-lookup-collection-user-collections /MBID/) | … |
| (musicbrainz-lookup-event /MBID/) | [[https://musicbrainz.org/event/7c132556-e902-4481-b9cb-ec76a175628a][7c132556-e902-4481-b9cb-ec76a175628a]] |
| (musicbrainz-lookup-genre /MBID/) | [[https://musicbrainz.org/genre/68c81274-5770-4e7b-a4bf-ab0d7d425d99][68c81274-5770-4e7b-a4bf-ab0d7d425d99]] |
| (musicbrainz-lookup-instrument /MBID/) | [[https://musicbrainz.org/instrument/303d4f1a-f799-4c42-9bac-dbedd9139e91][303d4f1a-f799-4c42-9bac-dbedd9139e91]] |
| (musicbrainz-lookup-label /MBID/) | [[https://musicbrainz.org/label/8943d408-940c-403b-a01d-9036c227d50f][8943d408-940c-403b-a01d-9036c227d50f]] |
| (musicbrainz-lookup-label-releases /MBID/) | … |
| (musicbrainz-lookup-place /MBID/) | [[https://musicbrainz.org/place/73cba8a4-cacb-45b9-8e02-654f716e2e7a][73cba8a4-cacb-45b9-8e02-654f716e2e7a]] |
| (musicbrainz-lookup-recording /MBID/) | [[https://musicbrainz.org/recording/ef8b34c1-8548-472c-872f-03e0d8d3bb37][ef8b34c1-8548-472c-872f-03e0d8d3bb37]] |
| (musicbrainz-lookup-recording-artists /MBID/) | … |
| (musicbrainz-lookup-recording-releases /MBID/) | … |
| (musicbrainz-lookup-recording-isrcs /MBID/) | … |
| (musicbrainz-lookup-recording-url-rels /MBID/) | … |
| (musicbrainz-lookup-release /MBID/) | … |
| (musicbrainz-lookup-release-artists /MBID/) | … |
| (musicbrainz-lookup-release-collections /MBID/) | … |
| (musicbrainz-lookup-release-labels /MBID/) | … |
| (musicbrainz-lookup-release-recordings /MBID/) | … |
| (musicbrainz-lookup-release-release-groups /MBID/) | … |
| (musicbrainz-lookup-release-group /MBID/) | [[https://musicbrainz.org/release-group/fe4acfe9-6d1e-3565-8857-fb16ddc492ab][fe4acfe9-6d1e-3565-8857-fb16ddc492ab]] |
| (musicbrainz-lookup-release-group-artists /MBID/) | … |
| (musicbrainz-lookup-release-group-releases /MBID/) | … |
| (musicbrainz-lookup-series /MBID/) | … |
2023-05-22 14:49:11 +00:00
| (musicbrainz-lookup-work /MBID/) | [[https://musicbrainz.org/work/4ee2545d-2be5-3841-b568-0b4554eccc67][4ee2545d-2be5-3841-b568-0b4554eccc67]] |
2023-05-20 11:45:28 +00:00
| (musicbrainz-lookup-url /MBID/) | … |
2023-05-18 19:16:31 +00:00
2023-05-19 14:07:54 +00:00
* ListenBrainz
2023-05-18 19:16:31 +00:00
[[file:img/listenbrainz-logo.svg ]]
2023-05-19 14:07:54 +00:00
2023-05-20 11:45:28 +00:00
** listening
2023-05-18 19:16:31 +00:00
- https://listenbrainz.org
- https://listenbrainz.readthedocs.io/
2023-05-20 11:45:28 +00:00
** examples
2023-05-18 19:16:31 +00:00
#+BEGIN_SRC emacs-lisp
(setq listenbrainz-api-token "000-000-000")
#+END_SRC
#+BEGIN_SRC emacs-lisp
(listenbrainz-validate-token listenbrainz-api-token)
#+END_SRC
#+BEGIN_SRC emacs-lisp
(listenbrainz-listens "zzzkt")
#+END_SRC
#+BEGIN_SRC emacs-lisp
(listenbrainz-listens "zzzkt" 33)
#+END_SRC
#+BEGIN_SRC emacs-lisp
2023-05-19 14:07:54 +00:00
(listenbrainz-submit-single-listen "Matthew Thomas" "Taema" "Architecture")
2023-05-18 19:16:31 +00:00
#+END_SRC
#+BEGIN_SRC emacs-lisp
2023-05-19 14:07:54 +00:00
(listenbrainz-submit-single-listen "farmersmanual" "808808008088 (11)")
2023-05-18 19:16:31 +00:00
#+END_SRC
#+BEGIN_SRC emacs-lisp
(listenbrainz-submit-playing-now "farmersmanual" "808808008088 (11)")
#+END_SRC
#+BEGIN_SRC emacs-lisp
(listenbrainz-playing-now "zzzkt")
#+END_SRC
#+BEGIN_SRC emacs-lisp
2023-05-19 14:07:54 +00:00
(listenbrainz-stats-artists "zzzkt")
2023-05-18 19:16:31 +00:00
#+END_SRC
#+BEGIN_SRC emacs-lisp
(listenbrainz-stats-releases "zzzkt")
#+END_SRC
#+BEGIN_SRC emacs-lisp
(listenbrainz-stats-recordings "zzzkt" 13 "month")
#+END_SRC
2023-05-20 11:45:28 +00:00
** incompleteness
*** Core API endpoints
2023-05-18 19:16:31 +00:00
https://listenbrainz.readthedocs.io/en/production/dev/api/ #core-api-endpoints
| POST /1/submit-listens | listenbrainz-submit-listen |
| | listenbrainz-submit-single-listen |
| | listenbrainz-submit-playing-now |
| GET /1/validate-token | listenbrainz-validate-token |
| POST /1/delete-listen | - |
| GET /1/user/(playlist_user_name)/playlists/collaborator | - |
| GET /1/user/(playlist_user_name)/playlists/createdfor | - |
| GET /1/users/(user_list)/recent-listens | - |
| GET /1/user/(user_name)/similar-users | - |
| GET /1/user/(user_name)/listen-count | - |
| GET /1/user/(user_name)/playing-now | listenbrainz-playing-now |
| GET /1/user/(user_name)/similar-to/(other_user_name) | - |
| GET /1/user/(playlist_user_name)/playlists | - |
| GET /1/user/(user_name)/listens | listenbrainz-listens |
| GET /1/latest-import | - |
| POST /1/latest-import | - |
2023-05-20 11:45:28 +00:00
*** Feedback API Endpoints
2023-05-18 19:16:31 +00:00
https://listenbrainz.readthedocs.io/en/production/dev/api/ #feedback-api-endpoints
| POST /1/feedback/recording-feedback | - |
| GET /1/feedback/recording/(recording_msid)/get-feedback | - |
| GET /1/feedback/user/(user_name)/get-feedback-for-recordings | – |
| GET /1/feedback/user/(user_name)/get-feedback | - |
2023-05-20 11:45:28 +00:00
*** Recording Recommendation API Endpoints
2023-05-18 19:16:31 +00:00
https://listenbrainz.readthedocs.io/en/production/dev/api/ #core-api-endpoints
| GET /1/cf/recommendation/user/(user_name)/recording | - |
2023-05-20 11:45:28 +00:00
*** Recording Recommendation Feedback API Endpoints
2023-05-18 19:16:31 +00:00
https://listenbrainz.readthedocs.io/en/production/dev/api/ #recording-recommendation-feedback-api-endpoints
| POST /1/recommendation/feedback/submit | - |
| POST /1/recommendation/feedback/delete | - |
| GET /1/recommendation/feedback/user/(user_name)/recordings | - |
| GET /1/recommendation/feedback/user/(user_name) | - |
2023-05-20 11:45:28 +00:00
*** Statistics API Endpoints
2023-05-18 19:16:31 +00:00
https://listenbrainz.readthedocs.io/en/production/dev/api/ #statistics-api-endpoints
| GET /1/stats/sitewide/artists | - |
| GET /1/stats/user/(user_name)/listening-activity | - |
| GET /1/stats/user/(user_name)/daily-activity | - |
| GET /1/stats/user/(user_name)/recordings | listenbrainz-stats-recordings |
| GET /1/stats/user/(user_name)/artist-map | - |
| GET /1/stats/user/(user_name)/releases | listenbrainz-stats-releases |
| GET /1/stats/user/(user_name)/artists | listenbrainz-stats-artists |
2023-05-20 11:45:28 +00:00
*** Status API Endpoints
2023-05-18 19:16:31 +00:00
https://listenbrainz.readthedocs.io/en/production/dev/api/ #status-api-endpoints
| GET /1/status/get-dump-info | - |
2023-05-20 11:45:28 +00:00
*** User Timeline API Endpoints
2023-05-18 19:16:31 +00:00
https://listenbrainz.readthedocs.io/en/production/dev/api/ #user-timeline-api-endpoints
| POST /1/user/(user_name)/timeline-event/create/notification | - |
| POST /1/user/(user_name)/timeline-event/create/recording | - |
| POST /1/user/(user_name)/feed/events/delete | - |
| GET /1/user/(user_name)/feed/events | - |
2023-05-20 11:45:28 +00:00
*** Social API Endpoints
2023-05-18 19:16:31 +00:00
https://listenbrainz.readthedocs.io/en/production/dev/api/ #social-api-endpoints
| GET /1/user/(user_name)/followers | listenbrainz-followers |
| GET /1/user/(user_name)/following | listenbrainz-following |
| POST /1/user/(user_name)/unfollow | - |
| POST /1/user/(user_name)/follow | - |
2023-05-20 11:45:28 +00:00
*** Pinned Recording API Endpoints
2023-05-18 19:16:31 +00:00
https://listenbrainz.readthedocs.io/en/production/dev/api/ #pinned-recording-api-endpoints
| POST /1/pin/unpin | - |
| POST /1/pin | - |
| POST /1/pin/delete/(row_id) | - |
| GET /1/(user_name)/pins/following | - |
| GET /1/(user_name)/pins | - |
2023-05-19 14:07:54 +00:00
* otherBrainz
- [[https://critiquebrainz.org/ ][CritiqueBrainz ]]
- [[https://bookbrainz.org/ ][BookBrainz ]] → https://api.test.bookbrainz.org/1/docs/
- [[https://listenbrainz.org/messybrainz/ ][MessyBrainz ]]
- [[https://coverartarchive.org/ ][Cover art archive ]]
2023-05-18 19:16:31 +00:00
* further
2023-05-20 11:45:28 +00:00
- https://labs.api.listenbrainz.org/
- https://troi.readthedocs.io/en/latest/
2023-05-18 19:16:31 +00:00
- https://listenbrainz.org/user/troi-bot/playlists/
- https://github.com/metabrainz/bono-data-sets/blob/main/top_discoveries.py