A new MusicBrainz user script was released

2 posts were merged into an existing topic: ROpdebee’s userscripts support thread

Import from Music Forest

Source | Install (GitHub)
Install (Greasy Fork) | Install (OpenUserJS)

Import releases from Music Forest into MusicBrainz.

Import from THBWiki

Source | Install (GitHub)
Install (Greasy Fork) | Install (OpenUserJS)

Import releases from THBWiki into MusicBrainz.

5 Likes

To celebrate the new year, I have released two new userscripts which should help you to add spoken vocals and copyright relationships faster. These are also teasers for the features which are still to come: Partially automated parsing of plain text credits and importing of (all) relationships from other sites like Discogs.

As a bonus I have finally released a few bookmarklets which I have been using for a while now and which had been buried in my (formerly private) feature branch for the above userscripts:

10 Likes

Not a new script but an old one that was apparently never mentioned here has a useful update for people dealing with parent works and subworks (mostly classical I guess with symphony/movements and opera/acts).

The Guess work/load subworks script is helping a lot to fill automatically the “edit relationships” page when consecutive tracks correspond to consecutive subworks of a parent work but has trouble dealing with tracks not corresponding exactly to the parent work structure:

  • there was a way to deal with a subwork split between different tracks (marking them as “partial recording”)
  • there was no way to deal with several subworks associated to the same track and this was solved in the new version 2022.1.28

There’s also an infobox 🛈 in the script now to explain what syntax the script expects for the different cases above

3 Likes

Artist Credits Helper

Split and fill artist credits, append character voice actor credit, and guess artists from track titles.

5 Likes

Export Brainz ratings (to a JSON flat file) is a very interesting userscript, written by @HebPlacesAGehen:

// ==UserScript==
// @name     Export Brainz ratings
// @version  1.1
// @include  /^https://musicbrainz.org/user/\w+/ratings/recording/
// @grant    GM.getValue
// @grant    GM.setValue
// ==/UserScript==

function download(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
	element.setAttribute('download', filename); element.style.display = 'none';
	document.body.appendChild(element); element.click(); document.body.removeChild(element);
}
(async () => {
	let ratingDict = JSON.parse(await GM.getValue("ratings", "{}"));
	let $ratingContainers = document.querySelectorAll(".inline-rating"); for(let $ratingContainer of $ratingContainers){
		let $ratingEl = $ratingContainer.querySelector(".remove-rating");
		if(!$ratingEl){ continue }
		// Get rating
		let rating = Number.parseInt($ratingEl.text);
		// Get recordingId
		let $container = $ratingContainer.parentElement;
		let $anchor = $container.querySelector('a[href^="/recording"]');
		if(!$anchor){ continue }
		let recordingId = $anchor.href.split("/").pop(-1);
		if(recordingId){
			ratingDict[recordingId] = rating * 0.2;
			//console.log(`${recordingId} rated ${rating}`);
		}
	}
	await GM.setValue("ratings", JSON.stringify(ratingDict));
	// Get next page
	let $nextPage = document.querySelector("ul.pagination li:last-child a");
	if($nextPage){
		window.setTimeout(() => $nextPage.click(), 1000);
	} else {
		download("ratings.json", JSON.stringify(ratingDict, null, "\t"));
	}
})();

It does so much with a so small code!

I have just changed this JSON.stringify small parameter to get a more human readable download file:

--		download("ratings.json", JSON.stringify(ratingDict));
++		download("ratings.json", JSON.stringify(ratingDict, null, "\t"));
2 Likes
5 Likes

Apparently this is an old script, but @SothoTalKer just added it to the userscript wiki page so I tried it out. Pretty cool!

Display shortcut for relationships on MusicBrainz

Github

“Display clickable icons, without opening each entity page, for release-group, release, recording and work external links: e.g. Amazon, Bandcamp, Discogs etc”

4 Likes

Hi all

I would like to download this script but I dont know how. Cant find it on the Userscript Wiki Page.

It’s on the ‘official’ userscript wiki page, rather than Colbydrays personal one (who still gets all the credit for making up 90% of the ‘official’ one)

Edit: Oh, maybe you couldn’t find it because I changed the name to something shorter, to not gunk up the list? Maybe I shouldn’t have done that!
It’s in there as ‘Shortcuts to external links’

2 Likes

Hi Aerozol

Thank you for the info. I have found it :slight_smile:

Ps. very happy with this User Script. Thank you again

1 Like

EDIT: don’t use this, see the post below

This isn’t really specific to MB but it might be helpful. I created a tiny script to remove the prompt on Tidal (specifically on listen.tidal.com, not tidal.com) that asks you to sign up/log in, so you can view credits without creating an account.

GitHub (click the ‘Raw’ button to install)

// ==UserScript==
// @name        Remove Tidal sign up/log in prompt
// @namespace   cherryblossom.dev
// @description Remove the sign up/log in prompt on Tidal
// @supportURL  https://gist.github.com/cherryblossom000/5dbf2de13b4d0084f49509533431c450
// @downloadURL https://gist.githubusercontent.com/cherryblossom000/5dbf2de13b4d0084f49509533431c450/raw/rm-tidal-login-prompt.user.js
// @match       https://listen.tidal.com/*
// @grant       none
// @version     1.0.0
// @author      cherryblossom
// ==/UserScript==

const waitFor = async selector =>
	new Promise(resolve => {
		const existing = document.querySelector(selector)
		if (existing) return resolve(existing)
		new MutationObserver((mutations, observer) => {
			const added = mutations.flatMap(m => [...m.addedNodes]).find(n => n.matches?.(selector))
			if (added) {
				resolve(added)
				observer.disconnect()
			}
		}).observe(document.body, {subtree: true, childList: true})
	})

waitFor('.ReactModalPortal').then(div => div.remove())
5 Likes

@jesus2099 pointed out to me that you can just use a Stylus userstyle instead:

3 Likes

This is staying installed after-all - much more useful than I thought it would be, even though it takes quite a wide chunk of the release tables!

3 Likes

Some simple tasks don’t need a userscript and can be done with a user stylesheet:

2 Likes

Batch Query AcoustID

Source | Install (GitHub)
Install (Greasy Fork) | Install (OpenUserJS)

Batch query AcoustID of recordings on release and collection page.

4 Likes

New userscript by @zabey!

Bandcamp Tag Importer

Source | Install (GitHub)

Easily submit tags on Bandcamp pages to Musicbrainz.

bandcamp tag import script

9 Likes

New userscript time!

Youtube Link Canonicalizer

Youtube channels have several different ways to link to them, but the most common one is @username. However, URLs of this type can be changed by the channel owner at any time, which leads to broken links in the database. To prevent this, you can use a channel ID to reference a channel, which this userscript makes trivial to obtain!

Source | Install (Github)

Screenshot 2024-02-05 at 11-43-07 Weedow - MusicBrainz
Screenshot 2024-02-05 at 11-43-43 Weedow - Edit - MusicBrainz

19 Likes

I made this thing

Supraphonline import script

It seeds releases from the official online catalog of the Czech Supraphon label. I just forked the murdos repo and based it on the Metal Archives importer. I’m not sure if anyone would be interested in this script, but I’ll be using (and thus testing) it extensively, fixing whatever problem comes along. I don’t intend to submit a PR until I feel like it’s reliable.

As of now, it’s capable of seeding a release with the correct number of media and tracks, and most of the release metadata. I also had to patch the mbimport.js lib with two novelties. One is the ability to set the discography entry page and the other is the ability to seed multiple release events.

I have a somewhat troubled relationship with JavaScript (I hate it), so if you see any crimes against the language or have any suggestion whatsoever, please do send me some kind of message somewhere (do we have direct messages here, or should I create a separate topic?).

No screenshot, because it doesn’t do anything flashy.

7 Likes