MetaBrainz Projects in the news

During the summit this past weekend we talked about posting more updates to our blog. In the spirit of that, I wanted to share two articles where MusicBrainz and AcousticBrainz were recently mentioned in the news: In July the BBC wrote an article covering research from UC Irvine in California:

They found a significant downturn in the positivity of pop songs. Where 1985 saw upbeat tracks like Wham’s Freedom, 2015 favoured more sombre music by Sam Smith and Adele.
The UC Irvine research team analyzed the publicly available data from AcousticBrainz to arrive at this and several other conclusions.

This wasn’t the first time that our project was used to analyze music trends over time and we’re proud that researchers can carry out this kind of work on our public data. In October Insead Knowledge wrote about the gender gap in the music industry:

We also used song credit information from crowdsourced database MusicBrainz to determine how many women and men worked on the writing, production and performance of each song. . . . At first glance, our overall results appear quite simple. In line with past research on creativity, we find no baseline relationship between the novelty of the songs in our sample and the gender identity of the artists involved. Men and women appear to be equally capable in terms of creativity. But when we controlled for genre and, importantly, the gender composition of artists’ genres, the picture changed. Our methods were guided by an awareness that women in music work in a different context than men do: By a kind of gender-slanted gravitational pull, the music industry drives women into certain genres (e.g. pop) and collaborative networks.
We’ve long known about gender imbalances in the music industry and while we’re happy that people are using our data to demonstrate this, we’re dismayed at most of the findings in this article. What is more concerning is that we have a general impression that our community has a slight bias towards adding more information about music created by women, which means that the overall situation may actually be worse than what one can deduce from our data!

As a reminder, all data in MusicBrainz is contributed by members of the community. If you see any situations where women or minorities are being mis- or underrepresented, we encourage you to add this content to MusicBrainz. And if you get stuck, don’t hesitate to ask for help on the forums.

MusicBrainz Server update, 2020-10-05

As we just returned from the virtual MusicBrainz Summit 20, here comes a mostly maintenance release that fixes a bunch of bugs (among which many are about localization) and provides a few handy improvements. It even features a new report showing releases having the same barcode but currently in different release groups, so if you feel like it, do try and help us look into those!

A new release of MusicBrainz Docker is also available that matches this update of MusicBrainz Server. See the release notes for update instructions.

Special thanks to the DistriNet Research Group for making and responsibly sharing a very detailed audit of our OAuth service that has been very helpful with releasing major security improvements in the previous server update!

Thanks to chaban, fabe56, hibiscuskazeneko, humhumxx, jesus2099, lotheric, mfmeulenbelt, nikki, otringal, psychoadept, and wcw1966 for having reported bugs and suggested improvements. Thanks to dimpole, listmycds, mfmeulenbelt, peter9811 for updating the translations. And thanks to all others who tested the beta version!

The git tag is v-2020-10-05.

Bug

  • [MBS-4118] – Date/Number.toLocaleString always uses English
  • [MBS-10956] – Ratings are not loaded in some pages
  • [MBS-11094] – Edit error message appears (and prevents update) unrelated to current edits
  • [MBS-11107] – span.name-variation class is missing on some relationship credits
  • [MBS-11114] – Can’t set track length to 0:00
  • [MBS-11140] – Client side language bundles are not built in production

Improvement

  • [MBS-3116] – Warn when merging works with different ISWCs
  • [MBS-8650] – Accept IPIs with length of 5 characters or longer
  • [MBS-11033] – Update the Apple Music logo used in the sidebar
  • [MBS-11036] – Don’t allow to add new release when moving CD TOC
  • [MBS-11104] – Missing “Credited As” column in Label Relationships tab
  • [MBS-11121] – Update iTunes/Apple Music URL cleanup
  • [MBS-11127] – Don’t return unrelated recording-work relationships within work-level-rels from /ws/2/release
  • [MBS-11136] – Support HTML in admin/attribute descriptions
  • [MBS-11137] – Show basic release info on hover on frontpage’s release additions

New Feature

  • [MBS-6322] – New Report: Releases with identical barcodes in different Release Groups

React Conversion Task

  • [MBS-10991] – Convert user/subscriptions pages to React

MusicBrainz Server update, 2020-09-21

React conversion tasks are conspicuously absent from today’s release, but that’s just because we needed to take some time to get it all working with the recent refactoring. This new server update mainly brings strong security improvements for the OAuth service. It also comes with a fair amount of smaller bugfixes and improvements. The most noticeable of these probably are the added details to the merge recordings’ form and the statistics by entity type on editors’ profile pages.

Announcement for MusicBrainz API users: A small but breaking change will be deployed on October 19th (in one month from now), to fix the JSON formatting of release packaging in search results (SEARCH-579).

A new release of MusicBrainz Docker is also available that matches this update of MusicBrainz Server. See the release notes for update instructions.

Thanks to kellnerd and loujine for contributing code. Thanks to calculator.ftvb, chaban, hibiscuskazeneko, jesus2099, kellnerd, lalinksy, psychoadept, rdswift, and spitzwegerich for having reported bugs and suggested improvements. Thanks to jesus2099, kellnerd, mfmeulenbelt, outsidecontext, and salorock for updating the translations. And thanks to all others who tested the beta version!

The git tag is v-2020-09-21.

Bug

  • [MBS-10880] – Series automatic ordering (without numbers) fails for new release group
  • [MBS-11065] – Smart link blocks affecting legitimate links
  • [MBS-11069] – Diff highlighting not visible for certain display resolutions
  • [MBS-11098] – Big Cartel URLs are denied for labels
  • [MBS-11101] – Series relationships not showing for work series

Improvement

  • [MBS-2768] – Display AcoustIDs, Annotation and any other useful info when merging recordings
  • [MBS-7473] – Adding a new discid: Allow to specify the target by its releaseid
  • [MBS-11017] – Normalize IMSLP URLs to HTTPS and add validation
  • [MBS-11058] – Tighten security of OAuth service
  • [MBS-11061] – Don’t allow MusicBrainz URLs in relationships
  • [MBS-11062] – Link basic how-tos from the front page
  • [MBS-11086] – Add icon for tabs with errors in release editor
  • [MBS-11109] – Block further more smart links
  • [MBS-11119] – Set a Content-Security-Policy header on account/admin related forms

New Feature

  • [MBS-7485] – OAuth token revokation through API
  • [MBS-9769] – Show entities added statistics on editor profile page
  • [MBS-10835] – Disallow creating new accounts with an e-mail already in use
  • [MBS-11097] – Support PKCE (Proof Key for Code Exchange) by OAuth clients

Task

  • [MBS-10921] – Clear editing history of unrelated recording-of relationship edits

MusicBrainz Server update, 2020-09-07

Beyond the restless conversion to React of edits’ display, this new release of MusicBrainz Server features the sidebar display of recordings’ acoustic information automatically computed by AcousticBrainz, and brings a handful of more discreet improvements and fixed bugs.

A new release of MusicBrainz Docker is also available that matches this update of MusicBrainz Server. See the release notes for update instructions.

Thanks to loujine for contributing the code to display AcousticBrainz data. Thanks to chaban, draconx, hawke, scotia, and yindesu for having reported bugs and suggested improvements. Thanks to kellnerd, mfmeulenbelt, salorock, and speardog for updating the translations (de, el, fr, it, nl). And thanks to all others who tested the beta version!

The git tag is v-2020-09-09-hotfixes.

Bug

  • [MBS-11000] – ISE when trying to display “Edit release group” edit
  • [MBS-11039] – Entity present twice in a series with different numbers appears with the same number in the Series page
  • [MBS-11074] – JavaScript is broken in IE11
  • [MBS-11075] – core-js polyfills are included twice in JavaScript bundles
  • [MBS-11076] – Size of data-context attributes used for React hydration bloats page size
  • [MBS-11077] – CritiqueBrainz reviews have disappeared
  • [MBS-11078] – Internal Server Error: undef error – TypeError: Cannot read property ‘names’ of undefined (hotfixed)
  • [MBS-11081] – Pregap info not shown in Add medium edits (hotfixed)
  • [MBS-11085] – Cannot edit 8cm CD release with disc ID (hotfixed)
  • [MBS-11089] – Homepage and blog favicons gone from sidebar (hotfixed)

Improvement

  • [MBS-7409] – Make “cannot attach discid” more obvious when format can’t have discID
  • [MBS-10916] – Show AcousticBrainz info in the Recording sidebar
  • [MBS-10941] – Rename XML Web Service into “MusicBrainz API” (JSON/XML)
  • [MBS-11014] – Provide context to “This relationship already exists” on relationship editor
  • [MBS-11041] – Make ModBot leave a note on autoremoval edits
  • [MBS-11073] – Drop lodash in favor of native JavaScript methods

React Conversion Task

  • [MBS-10972] – Convert Add Instrument edit to React
  • [MBS-10986] – Convert edit error templates to React
  • [MBS-11032] – Convert Add medium edit to React
  • [MBS-11034] – Convert Remove medium edit to React
  • [MBS-11048] – Convert Edit Area edit to React
  • [MBS-11050] – Convert Edit URL edit to React
  • [MBS-11051] – Convert Edit Artist Credit edit to React
  • [MBS-11052] – Convert Edit Relationship Attribute edit to React

Other Task

  • [MBS-11043] – Add offiziellecharts.de to the otherdbs whitelist
  • [MBS-11044] – Drop any references to no longer existing TOBEDELETED edit status

Picard 2.4.4 released

This is another bugfix release for the 2.4 release series of Picard, fixing a couple of issues discovered since Picard 2.4.2 and updating the Spanish and Hebrew translations.

Due to a last minute fix we had both a 2.4.3 and 2.4.4 release today, below is the combined list of changes:

Bugfixes

  • PICARD-1916 – Picard crashes on older releases of macOS due to theming exception
  • PICARD-1918 – Saving files fails if there is no front image and “Save only one front image as separate file” is enabled
  • PICARD-1921 – Windows 10: With dark theme inactive checkboxes cannot be distinguished from active ones
  • PICARD-1928 – After clustering fingerprint icon disappears
  • PICARD-1931 – Regression: “Unmatched Files” do not appear when release was deleted from MB

Improvements

Download

Picard 2.4 is available for download from the download page. For Windows 10 users installing from the Windows Store an update will come automatically as soon as the new release has been approved by Microsoft.

Thanks a lot to all contributors who made this release possible.

GSoC 2020: Spam detection with online learning

Introduction

Hello Everyone!!

I am Rohit Dandamudi, more commonly known as diru1100 in IRC and all other sites. I am currently doing my final year in Computer Science and Engineering at Chaitanya Bharathi Institute of Technology, Hyderabad. This summer, I had the wonderful opportunity to work with MetaBrainz Foundation and it’s my first time participating in GSoC. I worked on the SpamBrainz project under the guidance of yvanzo to make a step forward on eliminating spam in MusicBrainz.

How it started

I started looking for some cool projects to apply for GSoC, eventually, after going through some which were involved in the web development side, I finally got to know about the MetaBrainz Foundation, and it was already pretty late (around 2½ weeks before the proposal deadline), most of my fellow GSoCers were already in good rapport with the community by then. After looking through the project ideas, I wanted to do my project on CritiqueBrainz, but later I found out that it’s not considered for this year. In the end, I liked the concept of SpamBrainz and how it involves a good combination (Deep Learning and Web Development) of technologies. After browsing through the project I understood what I could and tried to make some changes to the codebase and was successfully able to run the model and add some documentation. Finally, I submitted the proposal, which got accepted.

The proposal

My proposal was focused on extending the work done by Leo as part of GSoC 2018. It mainly involved the following:

  • Do the research and implement online learning to:
    • Update the model dynamically as new variations of editor spam accounts appear.
    • Make the model self-sufficient without depending on a particular file or a batch of data.
    • Explore different types of learnings that are applicable to enhance LodBrok and for better performance in production.
  • Complete SpamBrainz API to:
    • Use and update the model with API calls.
    • Connect LodBrok with MusicBrainz Server.
  • Do detailed documentation to make the project more public and involve more contributors

Achievements

LodBrok model improvements

Research for model live update

SpamBrainz API

  • Incorporated the above research in SpamBrainz API, which consists of 2 endpoints, namely:
    • /predict to return classification results by LodBrok for the editor accounts
    • /train to retrain the model with incorrect results sent to SpamNinja respectively
  • After discussing with Leo, I decided to implement the API using Flask and Redis combination. Going with Redis over RabbitMQ for this API is feasible as the API is pretty lightweight and has at most 2 events.
  • Documented the entire API, with internal working, steps to replicate, and images to understand the results obtained.
  • Completed dockerization of SpamBrainz_API for easier integration and testing with MusicBrainz docker.
  • This diagram explains the current workflow of the implemented API:diagram explaining the current workflow of the implemented API

Challenges ahead and future of SpamBrainz

  • The API has to be integrated with MusicBrainz and should undergo more testing with real live data, currently, my focus is on this part.
    • Note: All the work done till now on the model was on dummy data generated by scripts that tend to replicate the real accounts as much as they can be, by taking into account the inputs from Freso, yvanzo, and the analysis done by Leo, without affecting the data privacy policy.
  • To extend online learning to other use cases in MetaBrainz through Transfer Learning and Online Transfer Learning.
  • Also looking forward to writing a research paper about the work done, and eventually publish it in IEEE transactions, as I plan on using SpamBrainz as my final year major project.

Special thanks to…

  • My mentor, YvanZo for being incredibly patient with me, helping me create quality commits, and overall making me a better programmer. Have always learned something new in every interaction with him.
  • LeoVerto, for helping me out whenever stuck and getting me up to date with the project.
  • MetaBrainz Foundation, for creating an open, inclusive, and productive environment to build some amazing stuff.

GSoC 2020: User Collection for BookBrainz

Hi everyone, I am Prabal Singh currently studying in Indian Institute of Technology, Guwahati. This summer I participated in Google Summer of Code and developed a new feature – User Collections – for the project BookBrainz.

I was mentored by Nicolas Pelletier (Mr_Monkey on IRC) during this period. This post summarizes my contributions to the project.

Continue reading “GSoC 2020: User Collection for BookBrainz”

GSoC 2020: Manage your listens better with ListenBrainz

Hey! My name is Shivam Kapila (shivam-kapila on IRC) and I am a final year undergrad at National Institute of Technology Hamirpur. I have been working on the ListenBrainz project this Summer as a participant of the Google Summer of Code program. The past four months were full of fun, hacking and loads of music!!

Landing into the MetaBrainz Community!

My journey with MetaBrainz began in late January this year, when I introduced myself to the community. My first PR improving the developer documentation was by adding parts connected with setting up the Spark infrastructure on a local setup along with consolidating and improving bits of documentation. I delved into real code while implementing front end components for Deleting Listens. Over the next few months, I fixed various bugs like making the Importer Modal responsive, fixing the DB setup scripts, fixing pagination issues while browsing listens, handling stat calculation errors in the Spark Reader and flushing user stats when they delete their listens.

As a GSoC applicant, I proposed to add various Listen Management features like love/hate (aka feedback) and deleting individual listens in ListenBrainz. I also proposed a new design for the Listens page. This involved a lot of designing and research, going through UI/UX design guidelines and tuning colors, shades and shadows till we arrived at a presentable and subtle design.

And finally I onboarded the GSoC train 🙂 .

Bonding with the community

I had been a part of the community since January so I was familiar with how things work in ListenBrainz. So I decided to contribute to the TimescaleDB migration where we moved our primary listen store from InfluxDB to TimescaleDB, opening up a ton of features for us to work on. Here is the final migration PR containing the commits of my contribution.

I also contributed to easing the testing infrastructure for devs to test the patches on their local setups. Following this I upgraded the postgres-client to PG12 version when we migrated to Postgres 12. I also fixed a minor font bug on the profile page.

The GSoC journey begins

Laying the base

As the official coding period began, I started working on my proposed tasks. The first question was: how to store the feedback? So I began implementing the database changes to store the recording feedback and applying the necessary changes in production. Following this I added a Python module to interact with the database and implemented a Pydantic model to validate the feedback records before they are stored in the database or served over the API. Then I added the necessary APIs to store and fetch the feedback for a given user or recording. This was followed by improving the efficiency of the DB module.

I also worked on dumping the recording feedback in the ListenBrainz public dumps. Since ListenBrainz had migrated the stats calculation infrastructure from Google BigQuery to Apache Spark I also removed the BigQuery references from the ListenBrainz website. Now that the timescale migration work became stable, I began working on Delete a Listen feature.

Pulling out the front end brushes

Now that the base was ready for us to work on, I started working on the React components so that the feedback and deletion feature could actually be presented on the website. Around the same time, the Timescale release day was also getting near, so I helped with a few tests and finished up the work for deleting listens. The front end components also started looking good and we were ready to associate the back end with them.

Rectifying & Reactifying

It’s high time and the final phase started. Now that we were ready with a few components we needed some tweaks in some production components to make them subtle. Hence I shot an improvement PR to tweak some shadows, adjust some fonts, adjust heights of the components, sticking the footer to the bottom, and reactify the loading spinner. Then came the Listen Count Card denoting the number of listens for a user. Following this we moved to Card based design for displaying listens.

This was followed by the much awaited feedback controls and now we can love/hate the songs from our listen collection. Isn’t this amazing! There were some needed minor tweaks needed to handle the ‘playing now’ listens correctly. At the same time, following the MetaBrainz guidelines to write quality code, I worked on making the SQL queries more readable. Then came the much awaited Delete a Listen feature and now we can finally get rid of the embarrassing listens!!

I also addressed some high priority tasks like giving the users an option to download their submitted feedback as JSON. We noticed some UI glitches and then came three back to back PRs to update feedback control shades, improving the listen time text and smoothing up the deletion animation. This is how the listen list looks like:

List of listens

What’s next??

Oh, now comes the time when we talk about the current scenario. The tasks currently on my radar are adding cover art support so that the page looks more alive and improving the Spotify imports to only import listens that were listened by the user after the latest Spotify listen we have for them.

After this I aim to work on the recommendation stuff that’s being actively pursued by the team. Also Mr_Monkey and me had been working on some design concepts for the All New ListenBrainz. I am pretty excited to work on it. Wanna take a sneak peek?

A new fam

The journey with MetaBrainz has been so amazing, that I am so tempted to stick here. I feel ecstatic to be a part of GSoC with the best org 🙂 . The best part is – it’s never all about code. There’s a lot to gain. Each day marked gaining maturity and thinking more and more like a real developer. I started feeling at ease with the communicate → code → integrate chain. It really feels fortunate to be a part of the MetaBrainz family where everyone is a ping away <3 .

GSoC marks the kickstart of my journey with MetaBrainz and I will be here lurking on IRC, shooting PRs to make the projects more and more awesome.

Heartiest Gratitude

GSoC 2020: Adding Statistics and Graphs for ListenBrainz Users and Community

Hey everyone! I am Ishaan Shah (ishaanshah), a sophomore at International Institute of Information Technology – Hyderabad, India. This summer, I worked on ListenBrainz as a participant in Google Summer of Code ’20. My project involved generating statistics and visualisations for users using Apache Spark. This blog is an overview about the work I did and my experience working with ListenBrainz.

I started contributing to ListenBrainz in January 2020. My first PR was for LB-179, a small Quality of Life improvement to the LastFM importer. My first major contribution was porting the LastFM importer to ReactJS. Over the next two months, I continued working on the frontend, where I mainly worked on improving the frontend infrastructure by adding support for automated testing, porting the codebase to TypeScript and standardising the frontend code using ESLint and Prettier.

After making a few patches, I understood how ListenBrainz worked and got comfortable with the codebase. I decided to make a proposal for adding statistics to ListenBrainz using Apache Spark. While writing the proposal, I referred to many other websites, blogs, as well as community discussions for different ideas about statistics which could be added. After some research, I narrowed down on the specific graphs and statistics that I wanted to calculate during GSoC.

Community Bonding Period

Since I had been working with the MetaBrainz community since January, I was familiar with how things worked in the community. So we decided to use the Community Bonding Period for fixing and updating the Top Artists charts for a user. The first task that I took up was to add an API endpoint for fetching the Top Artists data for a user programmatically. Until then, I had mostly spent my time working on the frontend, this task helped me in getting familiar with the backend architecture. Next, I worked on porting the Top Artist graph from d3 to nivo – a charting library built with ReactJS and d3. The Top Artists graph only supported All Time statistics before. I worked on adding support for more time ranges. This was the first time I worked with Apache Spark and the PR for this took quite some time, but it was essential that we got it right as most of the statistics we built further would use a similar workflow. After we were satisfied with the overall flow of the data from our Spark cluster to the web server, I started working on showing the stats for different time ranges on the website. Although this task seemed easy at first, it took much longer than expected. We encountered some bugs and received some user feedback when we deployed the graph to production. The rest of this period was spent on incorporating the user feedback and fixing the bugs.

Top Artist shown on the Charts page
Top Artists

First Coding Period

We now had a somewhat stable pipeline for calculating the stats and sending them to the server. I started working on the backend for Top Releases stats for a user. We ran into memory issues when calculating these stats on the cluster, so I spent some time finding the cause of the issue and realised that we were collecting the results all at once which was causing the driver to run out of memory. I fixed this by collecting the results for each user separately and tweaking some RabbitMQ parameters to make sure that messages aren’t dropped while sending them to the server (PR #897). After this, I added Top Recordings for a user. Now we had a brand new Charts page that displayed the user’s Top Artists/Releases/Recordings for different time ranges. Next I started working on temporal statistics for a user i.e, number of listens in a past time range. The query that I wrote for calculating this data turned out to be pretty inefficient for larger datasets. So I ended up writing two versions of the same query: one for large datasets and one for smaller ones. While working on displaying these stats on the frontend, I tried various representations of the data. I finally settled on displaying the data as bar graphs, as shown on this report view.

Listening Activity shown on Reports page
Listening Activity

Second Coding Period

I added two more graphs in this period: Daily Activity and Artist Origins. The Daily Activity graph shows the number of listens a user has at a particular time of the day. I implemented the query for calculating this data in a slightly different way compared to the Listening Activity query. This change improved the query speed significantly. I had some trouble finding a correct way to represent this data. My mentor helped me in this by suggesting the usage of a Heatmap, and the results turned out to be pretty good.

Daily Activity shown on Reports page
Daily Activity

Next, we worked on the Artist Origins graph, which provides an insight into the geographical diversity of a user’s musical taste. I had a lot of help from the ListenBrainz team for this graph and I couldn’t have done this graph without their help. This was by far the most interesting stat that I worked on during the project. Furthermore it laid a general framework to calculate statistics using the data from MusicBrainz. After deploying this map on production, we received feedback from the users that the map looked plain for most of them and there wasn’t much colour difference between different regions. This happened because people generally tend to listen more songs from their home country, so there is a huge difference between the country with maximum artists and average number artists from other countries. We fixed this issue by changing the colour scale from linear to logarithmic.

Comparison between linear and log scale in Artist Origins Map

Final Coding Period

We now turned our attention towards calculating some stats for the whole website. We decided to make a graph for the Top Artists over different time ranges. We thought that this would be relatively easy given that we had already done something similar for individual users before. However we hit an unexpected bump; the data we were calculating was not accurate, mainly because of various different sources of the artists and some minor changes in the artists’ name or metadata resulted in a different entry with a different listen count for the same artist. Moreover, we found a couple of users spamming our website for self promotion and we did not have a solid way to deal with this. Around this time, my college resumed and the amount of time I could dedicate to LB reduced severely. So we decided to use the remaining time to work on improving the frequency at which stats are updated. I have an open PR (#1052) for doing this at the time of me writing this blog and we should be able to implement this functionality in the near future.

Artist Origins shown on reports page
Artist Origins

Experience

The past 4 months have taught me a lot of things. I learnt new technical concepts everyday. I started writing code as a developer rather than a programmer. I understood the importance of proper unit and integration testing (even though it was my least favourite part while adding a new functionality). I also found it much easier to talk and interact with people both online and in real life. Frequent deployments of new features to production helped us a lot. We were able to catch bugs when we still had some context over the code written and also received feedback from the users about how we could improve the new features added. It also kept me motivated to keep working on new graphs and statistics and gave me a sense of satisfaction when I saw them on the production server. I also learnt that things don’t always go the way we expect them to. More often than not, you will run into some bumps while adding new features so it is better to keep some extra time to deal with these issues.

GSoC gave me a wonderful opportunity to work with some amazing people from all over the globe. I was not able to complete all the graphs that I had planned for this summer, but I do plan to continue working on ListenBrainz to add more statistics and new features.

Special Thanks

  • Param Singh (iliekcomputers) for being an amazing mentor and helping me whenever I was stuck on an issue.
  • Robert Kaye (ruaok) for providing some really insightful feedback and the MusicBrainz data that was required for calculating the Artist Origin map.
  • Nicolas Pelletier (Mr_Monkey) for helping me with the frontend for the user Charts page and providing some amazing tips for ReactJS.

MusicBrainz Server update, 2020-08-24

The summer heat is still with us, and also hot out of the oven is a new MusicBrainz server update! This time we have a fair amount of fixes for the “Set cover art” page (which allows you to select a specific cover art from releases to represent a release group). Some other improvements have been made, some small bugs fixed, and the conversion to React marches on firmly.

A recent change had standardized all edit listings to 100 edits per page (it used to be 25 in some places and 100 in others before that). We’re lowering that to 50 with this update to try and make the edit lists a bit less overwhelming but still not too short that related edits get split over too many pages. Do let us know whether it feels better!

Finally, we disabled URLs marked as ended (since they are often squatted and full of ads) and URLs from domains reported as (hopefully temporarily) compromised. You can still copy the URL itself if you want to check it through the Wayback Machine to try and find out what is/was there!

A new release of MusicBrainz Docker is also available that matches this update of MusicBrainz Server. See the release notes for update instructions.

Thanks to jesus2099 for contributing code. Thanks to bsammon, hibiscuskazeneko, lotheric, mrclon, murdos, nikki, sothotalker, tigerman325, tularion, and yindesu for having reported bugs and suggested improvements. Thanks to Besnik and salorock for updating the translations. And thanks to all others who tested the beta version!

The git tag is v-2020-08-24.

Bug

  • [MBS-5611] – Not all releases are shown when selecting release group cover art
  • [MBS-5612] – Set cover art for release group page displays releases in a random order
  • [MBS-7793] – Set release group cover art page fails to display as a grid
  • [MBS-8016] – Dates and countries are missing from the set cover art page
  • [MBS-9420] – “Found in X user collections” displays incorrectly from “Split into separate artists” screen
  • [MBS-10721] – Editing AC for track without a title entered shows [removed]
  • [MBS-10901] – undef error – TypeError: Cannot read property ‘linkTypeID’ of undefined

Improvement

  • [MBS-5588] – Make release box clickable without button to select release-group front cover
  • [MBS-8356] – Show barcode on set RG cover art page
  • [MBS-10376] – Indicate current image on RG Set cover art page
  • [MBS-10377] – Label fields clearly on Set cover art page
  • [MBS-10948] – Allow Baidu Baike links for Labels
  • [MBS-10992] – Skip creating hyperlink for “ended” URL relationship
  • [MBS-10998] – Update the WhoSampled logo used in the sidebar
  • [MBS-11004] – Allow “La Boîte aux paroles” links for labels
  • [MBS-11012] – Update the Kickstarter logo used in the sidebar
  • [MBS-11025] – Update the SoundCloud logo used in the sidebar
  • [MBS-11049] – Disable external links to websites reported as compromised

React Conversion Task

  • [MBS-10965] – Convert Add Disc ID edit to React
  • [MBS-10984] – Convert Move Disc ID edit to React
  • [MBS-10985] – Convert Remove Disc ID edit to React
  • [MBS-10994] – Convert user/message.tt to React
  • [MBS-11020] – Convert historic Add Release Annotation edit to React
  • [MBS-11021] – Convert historic Add Track edits to React
  • [MBS-11022] – Convert historic Add Release edit to React
  • [MBS-11028] – Convert historic Edit Release Language edit to React
  • [MBS-11029] – Convert historic Edit Release Name edit to React
  • [MBS-11030] – Convert historic Edit Release Attributes edit to React
  • [MBS-11031] – Convert historic Edit Track edit to React

Other Task

  • [MBS-10990] – Limit edit displays to 50 edits per page
  • [MBS-11005] – Add Kosovo flag for list of release countries