A collection of user scripts for MusicBrainz.
To install a user script from this repository, you'll need a userscript manager like Tampermonkey or Violentmonkey.
Adds customizable quick-select buttons for languages in MusicBrainz release editor instead of using the drop-down.
Paste a source release URL/MBID; copy its track titles as recording aliases on the current (target) release's recordings.
On the Recordings tab of the release editor, paste a release MBID or URL to auto-assign all recordings by track position.
Hides the Love, Hate, and Play buttons on ListenBrainz for a cleaner, distraction-free interface.
This script converts Wikipedia links to their equivalent Wikidata entities in MusicBrainz.
Generates MusicBrainz relationship seeder URLs from Harmony streaming links.
Designed to be used with the MusicBrainz: Seed URLs to Release Recordings script for streamlined editing workflows.
Adds buttons to copy and visit the Wikidata entity for a Wikipedia page.
Use this bookmarklet on Wikipedia category pages to check if artist links have a MusicBrainz ID or not.
javascript:(()=>{fetch('https://raw.githubusercontent.com/YoGo9/Scripts/refs/heads/main/musicbrainz-checker-bookmarklet.js').then(r=>r.text()).then(eval);})()Use this bookmarklet to import albums from your Navidrome instance to Musicbrainz
javascript:!async%20function()%7B%22use%20strict%22%3Bvar%20e%3Dlocation.hash.match(%2F%23%5C%2Falbum%5C%2F(%5B%5E%2F%5D%2B)%2F)%3Bif(e)%7Bvar%20t%3De%5B1%5D%2Ca%3DlocalStorage.getItem(%22token%22)%3Bif(a)%7Bvar%20r%2Cn%2Ci%3D%7BAccept%3A%22application%2Fjson%22%2C%22X-ND-Authorization%22%3A%22Bearer%20%22%2Ba%7D%3Btry%7Br%3Dawait%20N(%22%2Fapi%2Falbum%2F%22%2Bt)%2Cn%3Dawait%20N(%22%2Fapi%2Fsong%3Falbum_id%3D%22%2BencodeURIComponent(t)%2B%22%26_start%3D0%26_end%3D2000%22)%7Dcatch(e)%7Breturn%20void%20alert(%22Could%20not%20fetch%20album%20data%20from%20Navidrome%3A%5Cn%22%2Be.message)%7Dif(Array.isArray(n)%26%260!%3D%3Dn.length)%7Bvar%20o%3Dr.tags%7C%7C%7B%7D%3Bn.sort(function(e%2Ct)%7Bvar%20a%3De.discNumber%7C%7C1%2Cr%3Dt.discNumber%7C%7C1%3Breturn%20a!%3D%3Dr%3Fa-r%3A(e.trackNumber%7C%7C0)-(t.trackNumber%7C%7C0)%7D)%3Bvar%20s%3D%5B%5D%3Bn.forEach(function(e)%7Bvar%20t%3De.discNumber%7C%7C1%3B-1%3D%3D%3Ds.indexOf(t)%26%26s.push(t)%7D)%2Cs.sort(function(e%2Ct)%7Breturn%20e-t%7D)%3Bvar%20u%3Ddocument.createElement(%22form%22)%3Bu.action%3D%22https%3A%2F%2Fmusicbrainz.org%2Frelease%2Fadd%22%2Cu.method%3D%22post%22%2Cu.target%3D%22_blank%22%2Cu.style.display%3D%22none%22%2C_(%22name%22%2Cr.name)%3Bvar%20m%3Dr.mbzReleaseGroupId%7C%7Cnull%3Bif(m)_(%22release_group%22%2Cm)%3Belse%7Bvar%20l%3DA(%22releasetype%22)%3Bl%26%26_(%22type%22%2Cl)%7Dvar%20d%3DA(%22albumversion%22)%3Bd%26%26_(%22comment%22%2Cd)%3Bvar%20c%3DA(%22barcode%22)%3Bc%26%26_(%22barcode%22%2Cc)%3Bvar%20b%3DA(%22releasestatus%22)%3Bb%26%26_(%22status%22%2Cb.toLowerCase())%3Bvar%20f%3Dfunction(e)%7Bif(!e)return%7B%7D%3Bvar%20t%3DString(e).split(%22-%22)%3Breturn%7Byear%3At%5B0%5D%7C%7C%22%22%2Cmonth%3At%5B1%5D%7C%7C%22%22%2Cday%3At%5B2%5D%7C%7C%22%22%7D%7D(r.releaseDate%7C%7Cr.date)%3B_(%22events.0.date.year%22%2Cf.year)%2C_(%22events.0.date.month%22%2Cf.month)%2C_(%22events.0.date.day%22%2Cf.day)%3Bvar%20v%3DA(%22releasecountry%22)%3Bv%26%26_(%22events.0.country%22%2Cv)%3Bvar%20h%3Dr.catalogNum%7C%7Cnull%2Cp%3DA(%22recordlabel%22)%3Bh%26%26_(%22labels.0.catalog_number%22%2Ch)%2Cp%26%26_(%22labels.0.name%22%2Cp)%3Bvar%20g%3Dr.mbzAlbumArtistId%7C%7Cnull%3B_(%22artist_credit.names.0.name%22%2Cr.albumArtist)%2C_(%22artist_credit.names.0.artist.name%22%2Cr.albumArtist)%2Cg%26%26_(%22artist_credit.names.0.mbid%22%2Cg)%3Bvar%20y%3DA(%22media%22)%3Bs.forEach(function(e%2Ct)%7Bvar%20a%3Dn.filter(function(t)%7Breturn(t.discNumber%7C%7C1)%3D%3D%3De%7D)%3By%26%26_(%22mediums.%22%2Bt%2B%22.format%22%2Cy)%3Bvar%20i%3Da.map(function(e)%7Breturn%20e.discSubtitle%7D).filter(Boolean)%5B0%5D%3Bi%26%26_(%22mediums.%22%2Bt%2B%22.name%22%2Ci)%2Ca.forEach(function(e%2Ca)%7Bvar%20n%3D%22mediums.%22%2Bt%2B%22.track.%22%2Ba%2B%22.%22%3B_(n%2B%22name%22%2Ce.title)%2C_(n%2B%22number%22%2Ce.trackNumber%7C%7Ca%2B1)%2C_(n%2B%22length%22%2Cfunction(e)%7Bif(!e%26%260!%3D%3De)return%22%22%3Bvar%20t%3DMath.round(e)%2Ca%3Dt%2560%3Breturn%20Math.floor(t%2F60)%2B%22%3A%22%2B(a%3C10%3F%220%22%3A%22%22)%2Ba%7D(e.duration))%2Ce.mbzRecordingID%26%26_(n%2B%22recording%22%2Ce.mbzRecordingID)%3Bvar%20i%3De.artist%7C%7Cr.albumArtist%3B_(n%2B%22artist_credit.names.0.name%22%2Ci)%2C_(n%2B%22artist_credit.names.0.artist.name%22%2Ci)%2Ce.mbzArtistId%26%26_(n%2B%22artist_credit.names.0.mbid%22%2Ce.mbzArtistId)%7D)%7D)%2C_(%22edit_note%22%2C%22Seeded%20from%20personal%20Navidrome%20library%20tags%20via%20bookmarklet.%22)%2Cdocument.body.appendChild(u)%2Cu.submit()%2CsetTimeout(function()%7Bu.remove()%7D%2C1e3)%7Delse%20alert(%22No%20tracks%20found%20for%20this%20album.%22)%7Delse%20alert(%22No%20Navidrome%20auth%20token%20found%20in%20localStorage.%20Are%20you%20logged%20in%3F%22)%7Delse%20alert(%22Run%20this%20on%20a%20Navidrome%20album%20page%20(URL%20containing%20%23%2Falbum%2F%3Cid%3E).%22)%3Bfunction%20N(e)%7Breturn%20fetch(e%2C%7Bheaders%3Ai%7D).then(function(t)%7Bif(!t.ok)throw%20new%20Error(e%2B%22%20-%3E%20HTTP%20%22%2Bt.status)%3Breturn%20t.json()%7D)%7Dfunction%20A(e)%7Bvar%20t%3Do%5Be%5D%3Breturn%20Array.isArray(t)%26%26t.length%3Ft%5B0%5D%3Anull%7Dfunction%20_(e%2Ct)%7Bif(null!%3Dt%26%26%22%22!%3D%3Dt)%7Bvar%20a%3Ddocument.createElement(%22input%22)%3Ba.type%3D%22hidden%22%2Ca.name%3De%2Ca.value%3Dt%2Cu.appendChild(a)%7D%7D%7D()%3BThese scripts were developed with assistance from AI tools.
Big thanks to:
And of course, many other MusicBrainz contributors whose userscripts AI pulled code from. Appreciate all the work you've put into the community!