CINXE.COM
MetaBrainz Summit 2024 – MetaBrainz Blog
<!DOCTYPE html> <html lang="en" class="no-js"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="profile" href="https://gmpg.org/xfn/11"> <script>(function(html){html.className = html.className.replace(/\bno-js\b/,'js')})(document.documentElement);</script> <title>MetaBrainz Summit 2024 – MetaBrainz Blog</title> <meta name='robots' content='max-image-preview:large' /> <meta name="google-site-verification" content="aHsalzSsjEz9L3kesh85sP49ooc2wS4HR-_8_wmoIJg" /> <meta name="msvalidate.01" content="9A2D04F4206FB5DA8B1A5DDDD8772245" /> <!-- Async WordPress.com Remote Login --> <script id="wpcom_remote_login_js"> var wpcom_remote_login_extra_auth = ''; function wpcom_remote_login_remove_dom_node_id( element_id ) { var dom_node = document.getElementById( element_id ); if ( dom_node ) { dom_node.parentNode.removeChild( dom_node ); } } function wpcom_remote_login_remove_dom_node_classes( class_name ) { var dom_nodes = document.querySelectorAll( '.' + class_name ); for ( var i = 0; i < dom_nodes.length; i++ ) { dom_nodes[ i ].parentNode.removeChild( dom_nodes[ i ] ); } } function wpcom_remote_login_final_cleanup() { wpcom_remote_login_remove_dom_node_classes( "wpcom_remote_login_msg" ); wpcom_remote_login_remove_dom_node_id( "wpcom_remote_login_key" ); wpcom_remote_login_remove_dom_node_id( "wpcom_remote_login_validate" ); wpcom_remote_login_remove_dom_node_id( "wpcom_remote_login_js" ); wpcom_remote_login_remove_dom_node_id( "wpcom_request_access_iframe" ); wpcom_remote_login_remove_dom_node_id( "wpcom_request_access_styles" ); } // Watch for messages back from the remote login window.addEventListener( "message", function( e ) { if ( e.origin === "https://r-login.wordpress.com" ) { var data = {}; try { data = JSON.parse( e.data ); } catch( e ) { wpcom_remote_login_final_cleanup(); return; } if ( data.msg === 'LOGIN' ) { // Clean up the login check iframe wpcom_remote_login_remove_dom_node_id( "wpcom_remote_login_key" ); var id_regex = new RegExp( /^[0-9]+$/ ); var token_regex = new RegExp( /^.*|.*|.*$/ ); if ( token_regex.test( data.token ) && id_regex.test( data.wpcomid ) ) { // We have everything we need to ask for a login var script = document.createElement( "script" ); script.setAttribute( "id", "wpcom_remote_login_validate" ); script.src = '/remote-login.php?wpcom_remote_login=validate' + '&wpcomid=' + data.wpcomid + '&token=' + encodeURIComponent( data.token ) + '&host=' + window.location.protocol + '//' + window.location.hostname + '&postid=12081' + '&is_singular=1'; document.body.appendChild( script ); } return; } // Safari ITP, not logged in, so redirect if ( data.msg === 'LOGIN-REDIRECT' ) { window.location = 'https://wordpress.com/log-in?redirect_to=' + window.location.href; return; } // Safari ITP, storage access failed, remove the request if ( data.msg === 'LOGIN-REMOVE' ) { var css_zap = 'html { -webkit-transition: margin-top 1s; transition: margin-top 1s; } /* 9001 */ html { margin-top: 0 !important; } * html body { margin-top: 0 !important; } @media screen and ( max-width: 782px ) { html { margin-top: 0 !important; } * html body { margin-top: 0 !important; } }'; var style_zap = document.createElement( 'style' ); style_zap.type = 'text/css'; style_zap.appendChild( document.createTextNode( css_zap ) ); document.body.appendChild( style_zap ); var e = document.getElementById( 'wpcom_request_access_iframe' ); e.parentNode.removeChild( e ); document.cookie = 'wordpress_com_login_access=denied; path=/; max-age=31536000'; return; } // Safari ITP if ( data.msg === 'REQUEST_ACCESS' ) { console.log( 'request access: safari' ); // Check ITP iframe enable/disable knob if ( wpcom_remote_login_extra_auth !== 'safari_itp_iframe' ) { return; } // If we are in a "private window" there is no ITP. var private_window = false; try { var opendb = window.openDatabase( null, null, null, null ); } catch( e ) { private_window = true; } if ( private_window ) { console.log( 'private window' ); return; } var iframe = document.createElement( 'iframe' ); iframe.id = 'wpcom_request_access_iframe'; iframe.setAttribute( 'scrolling', 'no' ); iframe.setAttribute( 'sandbox', 'allow-storage-access-by-user-activation allow-scripts allow-same-origin allow-top-navigation-by-user-activation' ); iframe.src = 'https://r-login.wordpress.com/remote-login.php?wpcom_remote_login=request_access&origin=' + encodeURIComponent( data.origin ) + '&wpcomid=' + encodeURIComponent( data.wpcomid ); var css = 'html { -webkit-transition: margin-top 1s; transition: margin-top 1s; } /* 9001 */ html { margin-top: 46px !important; } * html body { margin-top: 46px !important; } @media screen and ( max-width: 660px ) { html { margin-top: 71px !important; } * html body { margin-top: 71px !important; } #wpcom_request_access_iframe { display: block; height: 71px !important; } } #wpcom_request_access_iframe { border: 0px; height: 46px; position: fixed; top: 0; left: 0; width: 100%; min-width: 100%; z-index: 99999; background: #23282d; } '; var style = document.createElement( 'style' ); style.type = 'text/css'; style.id = 'wpcom_request_access_styles'; style.appendChild( document.createTextNode( css ) ); document.body.appendChild( style ); document.body.appendChild( iframe ); } if ( data.msg === 'DONE' ) { wpcom_remote_login_final_cleanup(); } } }, false ); // Inject the remote login iframe after the page has had a chance to load // more critical resources window.addEventListener( "DOMContentLoaded", function( e ) { var iframe = document.createElement( "iframe" ); iframe.style.display = "none"; iframe.setAttribute( "scrolling", "no" ); iframe.setAttribute( "id", "wpcom_remote_login_key" ); iframe.src = "https://r-login.wordpress.com/remote-login.php" + "?wpcom_remote_login=key" + "&origin=aHR0cHM6Ly9ibG9nLm1ldGFicmFpbnoub3Jn" + "&wpcomid=1935472" + "&time=1739800799"; document.body.appendChild( iframe ); }, false ); </script> <link rel='dns-prefetch' href='//s0.wp.com' /> <link rel='dns-prefetch' href='//s1.wp.com' /> <link rel='dns-prefetch' href='//s2.wp.com' /> <link rel='dns-prefetch' href='//widgets.wp.com' /> <link rel="alternate" type="application/rss+xml" title="MetaBrainz Blog » Feed" href="https://blog.metabrainz.org/feed/" /> <link rel="alternate" type="application/rss+xml" title="MetaBrainz Blog » Comments Feed" href="https://blog.metabrainz.org/comments/feed/" /> <link rel="alternate" type="application/rss+xml" title="MetaBrainz Blog » MetaBrainz Summit 2024 Comments Feed" href="https://blog.metabrainz.org/2024/10/30/metabrainz-summit-2024/feed/" /> <script type="text/javascript"> /* <![CDATA[ */ function addLoadEvent(func) { var oldonload = window.onload; if (typeof window.onload != 'function') { window.onload = func; } else { window.onload = function () { oldonload(); func(); } } } /* ]]> */ </script> <script> window._wpemojiSettings = {"baseUrl":"https:\/\/s0.wp.com\/wp-content\/mu-plugins\/wpcom-smileys\/twemoji\/2\/72x72\/","ext":".png","svgUrl":"https:\/\/s0.wp.com\/wp-content\/mu-plugins\/wpcom-smileys\/twemoji\/2\/svg\/","svgExt":".svg","source":{"concatemoji":"https:\/\/s2.wp.com\/wp-includes\/js\/wp-emoji-release.min.js?m=1719498190i&ver=6.7.2-RC1-59780"}}; /*! This file is auto-generated */ !function(i,n){var o,s,e;function c(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function p(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data),r=(e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0),new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data));return t.every(function(e,t){return e===r[t]})}function u(e,t,n){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\uddfa\ud83c\uddf3","\ud83c\uddfa\u200b\ud83c\uddf3")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!n(e,"\ud83d\udc26\u200d\u2b1b","\ud83d\udc26\u200b\u2b1b")}return!1}function f(e,t,n){var r="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):i.createElement("canvas"),a=r.getContext("2d",{willReadFrequently:!0}),o=(a.textBaseline="top",a.font="600 32px Arial",{});return e.forEach(function(e){o[e]=t(a,e,n)}),o}function t(e){var t=i.createElement("script");t.src=e,t.defer=!0,i.head.appendChild(t)}"undefined"!=typeof Promise&&(o="wpEmojiSettingsSupports",s=["flag","emoji"],n.supports={everything:!0,everythingExceptFlag:!0},e=new Promise(function(e){i.addEventListener("DOMContentLoaded",e,{once:!0})}),new Promise(function(t){var n=function(){try{var e=JSON.parse(sessionStorage.getItem(o));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(s),u.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"}),a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=function(e){c(n=e.data),a.terminate(),t(n)})}catch(e){}c(n=f(s,u,p))}t(n)}).then(function(e){for(var t in e)n.supports[t]=e[t],n.supports.everything=n.supports.everything&&n.supports[t],"flag"!==t&&(n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&n.supports[t]);n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&!n.supports.flag,n.DOMReady=!1,n.readyCallback=function(){n.DOMReady=!0}}).then(function(){return e}).then(function(){var e;n.supports.everything||(n.readyCallback(),(e=n.source||{}).concatemoji?t(e.concatemoji):e.wpemoji&&e.twemoji&&(t(e.twemoji),t(e.wpemoji)))}))}((window,document),window._wpemojiSettings); </script> <link crossorigin='anonymous' rel='stylesheet' id='all-css-0-1' href='https://s1.wp.com/_static/??-eJyVzDsOwjAQRdENYYaPIkKBWIvljEKC5yPmWYHdA1IqOspT3EuLp2IKVpC05LWNkwbNDM/lvpqiKYkNrXIQbiycYFaDiolnEJZP/orpCWbdlogN/b19cM3gIbkFfvQ9XuWyP+267nA89/38BhoSRIc=&cssminify=yes' type='text/css' media='all' /> <style id='wp-emoji-styles-inline-css'> img.wp-smiley, img.emoji { display: inline !important; border: none !important; box-shadow: none !important; height: 1em !important; width: 1em !important; margin: 0 0.07em !important; vertical-align: -0.1em !important; background: none !important; padding: 0 !important; } </style> <link crossorigin='anonymous' rel='stylesheet' id='all-css-2-1' href='https://s0.wp.com/_static/??-eJyljkEOwiAQRS8knWKNdmM8C9AJUimQmaGG21vdmLhq4vLn5b18eBblchJMAiVWHxKDr9u0SH4jhLAe+67vNNga4gQ2ZvdQMVgy1IClRewc8wH+C8kdlz2hj8UwoxTz1k3LVZSnMO3+8pMgIyF5/uq35aovwzieznrQ8wtw12pJ&cssminify=yes' type='text/css' media='all' /> <style id='wp-block-library-inline-css'> .has-text-align-justify { text-align:justify; } .has-text-align-justify{text-align:justify;} </style> <link crossorigin='anonymous' rel='stylesheet' id='all-css-4-1' href='https://s2.wp.com/_static/??-eJzTLy/QzcxLzilNSS3WzyrWz01NyUxMzUnNTc0rQeEU5CRWphbp5qSmJyZX6uVm5uklFxfr6OPTDpRD5sM02efaGpoZmFkYGRuZGmQBAHPvL0Y=&cssminify=yes' type='text/css' media='all' /> <style id='jetpack-sharing-buttons-style-inline-css'> .jetpack-sharing-buttons__services-list{display:flex;flex-direction:row;flex-wrap:wrap;gap:0;list-style-type:none;margin:5px;padding:0}.jetpack-sharing-buttons__services-list.has-small-icon-size{font-size:12px}.jetpack-sharing-buttons__services-list.has-normal-icon-size{font-size:16px}.jetpack-sharing-buttons__services-list.has-large-icon-size{font-size:24px}.jetpack-sharing-buttons__services-list.has-huge-icon-size{font-size:36px}@media print{.jetpack-sharing-buttons__services-list{display:none!important}}.editor-styles-wrapper .wp-block-jetpack-sharing-buttons{gap:0;padding-inline-start:0}ul.jetpack-sharing-buttons__services-list.has-background{padding:1.25em 2.375em} </style> <link crossorigin='anonymous' rel='stylesheet' id='all-css-6-1' href='https://s2.wp.com/wp-content/plugins/coblocks/2.18.1-simple-rev.4/dist/coblocks-style.css?m=1681832297i&cssminify=yes' type='text/css' media='all' /> <style id='classic-theme-styles-inline-css'> /*! This file is auto-generated */ .wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none} </style> <link crossorigin='anonymous' rel='stylesheet' id='all-css-8-1' href='https://s1.wp.com/_static/??/wp-content/mu-plugins/core-compat/wp-mediaelement.css,/wp-content/mu-plugins/wpcom-bbpress-premium-themes.css?m=1432920480j&cssminify=yes' type='text/css' media='all' /> <style id='global-styles-inline-css'> :root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #fff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--color--dark-gray: #1a1a1a;--wp--preset--color--medium-gray: #686868;--wp--preset--color--light-gray: #e5e5e5;--wp--preset--color--blue-gray: #4d545c;--wp--preset--color--bright-blue: #007acc;--wp--preset--color--light-blue: #9adffd;--wp--preset--color--dark-brown: #402b30;--wp--preset--color--medium-brown: #774e24;--wp--preset--color--dark-red: #640c1f;--wp--preset--color--bright-red: #ff675f;--wp--preset--color--yellow: #ffef8e;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--font-family--albert-sans: 'Albert Sans', sans-serif;--wp--preset--font-family--alegreya: Alegreya, serif;--wp--preset--font-family--arvo: Arvo, serif;--wp--preset--font-family--bodoni-moda: 'Bodoni Moda', serif;--wp--preset--font-family--bricolage-grotesque: 'Bricolage Grotesque', sans-serif;--wp--preset--font-family--cabin: Cabin, sans-serif;--wp--preset--font-family--chivo: Chivo, sans-serif;--wp--preset--font-family--commissioner: Commissioner, sans-serif;--wp--preset--font-family--cormorant: Cormorant, serif;--wp--preset--font-family--courier-prime: 'Courier Prime', monospace;--wp--preset--font-family--crimson-pro: 'Crimson Pro', serif;--wp--preset--font-family--dm-mono: 'DM Mono', monospace;--wp--preset--font-family--dm-sans: 'DM Sans', sans-serif;--wp--preset--font-family--dm-serif-display: 'DM Serif Display', serif;--wp--preset--font-family--domine: Domine, serif;--wp--preset--font-family--eb-garamond: 'EB Garamond', serif;--wp--preset--font-family--epilogue: Epilogue, sans-serif;--wp--preset--font-family--fahkwang: Fahkwang, sans-serif;--wp--preset--font-family--figtree: Figtree, sans-serif;--wp--preset--font-family--fira-sans: 'Fira Sans', sans-serif;--wp--preset--font-family--fjalla-one: 'Fjalla One', sans-serif;--wp--preset--font-family--fraunces: Fraunces, serif;--wp--preset--font-family--gabarito: Gabarito, system-ui;--wp--preset--font-family--ibm-plex-mono: 'IBM Plex Mono', monospace;--wp--preset--font-family--ibm-plex-sans: 'IBM Plex Sans', sans-serif;--wp--preset--font-family--ibarra-real-nova: 'Ibarra Real Nova', serif;--wp--preset--font-family--instrument-serif: 'Instrument Serif', serif;--wp--preset--font-family--inter: Inter, sans-serif;--wp--preset--font-family--josefin-sans: 'Josefin Sans', sans-serif;--wp--preset--font-family--jost: Jost, sans-serif;--wp--preset--font-family--libre-baskerville: 'Libre Baskerville', serif;--wp--preset--font-family--libre-franklin: 'Libre Franklin', sans-serif;--wp--preset--font-family--literata: Literata, serif;--wp--preset--font-family--lora: Lora, serif;--wp--preset--font-family--merriweather: Merriweather, serif;--wp--preset--font-family--montserrat: Montserrat, sans-serif;--wp--preset--font-family--newsreader: Newsreader, serif;--wp--preset--font-family--noto-sans-mono: 'Noto Sans Mono', sans-serif;--wp--preset--font-family--nunito: Nunito, sans-serif;--wp--preset--font-family--open-sans: 'Open Sans', sans-serif;--wp--preset--font-family--overpass: Overpass, sans-serif;--wp--preset--font-family--pt-serif: 'PT Serif', serif;--wp--preset--font-family--petrona: Petrona, serif;--wp--preset--font-family--piazzolla: Piazzolla, serif;--wp--preset--font-family--playfair-display: 'Playfair Display', serif;--wp--preset--font-family--plus-jakarta-sans: 'Plus Jakarta Sans', sans-serif;--wp--preset--font-family--poppins: Poppins, sans-serif;--wp--preset--font-family--raleway: Raleway, sans-serif;--wp--preset--font-family--roboto: Roboto, sans-serif;--wp--preset--font-family--roboto-slab: 'Roboto Slab', serif;--wp--preset--font-family--rubik: Rubik, sans-serif;--wp--preset--font-family--rufina: Rufina, serif;--wp--preset--font-family--sora: Sora, sans-serif;--wp--preset--font-family--source-sans-3: 'Source Sans 3', sans-serif;--wp--preset--font-family--source-serif-4: 'Source Serif 4', serif;--wp--preset--font-family--space-mono: 'Space Mono', monospace;--wp--preset--font-family--syne: Syne, sans-serif;--wp--preset--font-family--texturina: Texturina, serif;--wp--preset--font-family--urbanist: Urbanist, sans-serif;--wp--preset--font-family--work-sans: 'Work Sans', sans-serif;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}.has-albert-sans-font-family{font-family: var(--wp--preset--font-family--albert-sans) !important;}.has-alegreya-font-family{font-family: var(--wp--preset--font-family--alegreya) !important;}.has-arvo-font-family{font-family: var(--wp--preset--font-family--arvo) !important;}.has-bodoni-moda-font-family{font-family: var(--wp--preset--font-family--bodoni-moda) !important;}.has-bricolage-grotesque-font-family{font-family: var(--wp--preset--font-family--bricolage-grotesque) !important;}.has-cabin-font-family{font-family: var(--wp--preset--font-family--cabin) !important;}.has-chivo-font-family{font-family: var(--wp--preset--font-family--chivo) !important;}.has-commissioner-font-family{font-family: var(--wp--preset--font-family--commissioner) !important;}.has-cormorant-font-family{font-family: var(--wp--preset--font-family--cormorant) !important;}.has-courier-prime-font-family{font-family: var(--wp--preset--font-family--courier-prime) !important;}.has-crimson-pro-font-family{font-family: var(--wp--preset--font-family--crimson-pro) !important;}.has-dm-mono-font-family{font-family: var(--wp--preset--font-family--dm-mono) !important;}.has-dm-sans-font-family{font-family: var(--wp--preset--font-family--dm-sans) !important;}.has-dm-serif-display-font-family{font-family: var(--wp--preset--font-family--dm-serif-display) !important;}.has-domine-font-family{font-family: var(--wp--preset--font-family--domine) !important;}.has-eb-garamond-font-family{font-family: var(--wp--preset--font-family--eb-garamond) !important;}.has-epilogue-font-family{font-family: var(--wp--preset--font-family--epilogue) !important;}.has-fahkwang-font-family{font-family: var(--wp--preset--font-family--fahkwang) !important;}.has-figtree-font-family{font-family: var(--wp--preset--font-family--figtree) !important;}.has-fira-sans-font-family{font-family: var(--wp--preset--font-family--fira-sans) !important;}.has-fjalla-one-font-family{font-family: var(--wp--preset--font-family--fjalla-one) !important;}.has-fraunces-font-family{font-family: var(--wp--preset--font-family--fraunces) !important;}.has-gabarito-font-family{font-family: var(--wp--preset--font-family--gabarito) !important;}.has-ibm-plex-mono-font-family{font-family: var(--wp--preset--font-family--ibm-plex-mono) !important;}.has-ibm-plex-sans-font-family{font-family: var(--wp--preset--font-family--ibm-plex-sans) !important;}.has-ibarra-real-nova-font-family{font-family: var(--wp--preset--font-family--ibarra-real-nova) !important;}.has-instrument-serif-font-family{font-family: var(--wp--preset--font-family--instrument-serif) !important;}.has-inter-font-family{font-family: var(--wp--preset--font-family--inter) !important;}.has-josefin-sans-font-family{font-family: var(--wp--preset--font-family--josefin-sans) !important;}.has-jost-font-family{font-family: var(--wp--preset--font-family--jost) !important;}.has-libre-baskerville-font-family{font-family: var(--wp--preset--font-family--libre-baskerville) !important;}.has-libre-franklin-font-family{font-family: var(--wp--preset--font-family--libre-franklin) !important;}.has-literata-font-family{font-family: var(--wp--preset--font-family--literata) !important;}.has-lora-font-family{font-family: var(--wp--preset--font-family--lora) !important;}.has-merriweather-font-family{font-family: var(--wp--preset--font-family--merriweather) !important;}.has-montserrat-font-family{font-family: var(--wp--preset--font-family--montserrat) !important;}.has-newsreader-font-family{font-family: var(--wp--preset--font-family--newsreader) !important;}.has-noto-sans-mono-font-family{font-family: var(--wp--preset--font-family--noto-sans-mono) !important;}.has-nunito-font-family{font-family: var(--wp--preset--font-family--nunito) !important;}.has-open-sans-font-family{font-family: var(--wp--preset--font-family--open-sans) !important;}.has-overpass-font-family{font-family: var(--wp--preset--font-family--overpass) !important;}.has-pt-serif-font-family{font-family: var(--wp--preset--font-family--pt-serif) !important;}.has-petrona-font-family{font-family: var(--wp--preset--font-family--petrona) !important;}.has-piazzolla-font-family{font-family: var(--wp--preset--font-family--piazzolla) !important;}.has-playfair-display-font-family{font-family: var(--wp--preset--font-family--playfair-display) !important;}.has-plus-jakarta-sans-font-family{font-family: var(--wp--preset--font-family--plus-jakarta-sans) !important;}.has-poppins-font-family{font-family: var(--wp--preset--font-family--poppins) !important;}.has-raleway-font-family{font-family: var(--wp--preset--font-family--raleway) !important;}.has-roboto-font-family{font-family: var(--wp--preset--font-family--roboto) !important;}.has-roboto-slab-font-family{font-family: var(--wp--preset--font-family--roboto-slab) !important;}.has-rubik-font-family{font-family: var(--wp--preset--font-family--rubik) !important;}.has-rufina-font-family{font-family: var(--wp--preset--font-family--rufina) !important;}.has-sora-font-family{font-family: var(--wp--preset--font-family--sora) !important;}.has-source-sans-3-font-family{font-family: var(--wp--preset--font-family--source-sans-3) !important;}.has-source-serif-4-font-family{font-family: var(--wp--preset--font-family--source-serif-4) !important;}.has-space-mono-font-family{font-family: var(--wp--preset--font-family--space-mono) !important;}.has-syne-font-family{font-family: var(--wp--preset--font-family--syne) !important;}.has-texturina-font-family{font-family: var(--wp--preset--font-family--texturina) !important;}.has-urbanist-font-family{font-family: var(--wp--preset--font-family--urbanist) !important;}.has-work-sans-font-family{font-family: var(--wp--preset--font-family--work-sans) !important;} :where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;} :root :where(.wp-block-pullquote){font-size: 1.5em;line-height: 1.6;} :where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;} </style> <link crossorigin='anonymous' rel='stylesheet' id='all-css-10-1' href='https://s0.wp.com/wp-content/mu-plugins/jetpack-mu-wpcom-plugin/sun/jetpack_vendor/automattic/jetpack-mu-wpcom/src/build/verbum-comments/verbum-comments.css?m=1737671034i&cssminify=yes' type='text/css' media='all' /> <link rel='stylesheet' id='verbum-gutenberg-css-css' href='https://widgets.wp.com/verbum-block-editor/block-editor.css?ver=1738686361' media='all' /> <link crossorigin='anonymous' rel='stylesheet' id='all-css-12-1' href='https://s2.wp.com/_static/??-eJyNjt0KwjAMRl/IGqr4dyE+inQlzm5tVpqUubc3Uy8EFbzL93FyEhiz8QMJkoBcMSFDrg3IqMXE4SaIBBcFGBKWEkZ0ihWTY2WT5l5bJ88cSFU8RCdu6ZkX8CZPdWbaQAwdSna+f2XgSnDWVWiRsIRZ8X38cP58mGWK+D+uIDRx8P3jxCkd7Xa/sXa1Puy6O8ygbnY=&cssminify=yes' type='text/css' media='all' /> <!--[if lt IE 10]> <link rel='stylesheet' id='twentysixteen-ie-css' href='https://s2.wp.com/wp-content/themes/pub/twentysixteen/css/ie.css?m=1448353951i&ver=20170530' media='all' /> <![endif]--> <!--[if lt IE 9]> <link rel='stylesheet' id='twentysixteen-ie8-css' href='https://s2.wp.com/wp-content/themes/pub/twentysixteen/css/ie8.css?m=1493067000i&ver=20170530' media='all' /> <![endif]--> <!--[if lt IE 8]> <link rel='stylesheet' id='twentysixteen-ie7-css' href='https://s2.wp.com/wp-content/themes/pub/twentysixteen/css/ie7.css?m=1448353951i&ver=20170530' media='all' /> <![endif]--> <link crossorigin='anonymous' rel='stylesheet' id='all-css-18-1' href='https://s1.wp.com/wp-content/themes/pub/twentysixteen/css/style-wpcom.css?m=1514503118i&cssminify=yes' type='text/css' media='all' /> <style id='akismet-widget-style-inline-css'> .a-stats { --akismet-color-mid-green: #357b49; --akismet-color-white: #fff; --akismet-color-light-grey: #f6f7f7; max-width: 350px; width: auto; } .a-stats * { all: unset; box-sizing: border-box; } .a-stats strong { font-weight: 600; } .a-stats a.a-stats__link, .a-stats a.a-stats__link:visited, .a-stats a.a-stats__link:active { background: var(--akismet-color-mid-green); border: none; box-shadow: none; border-radius: 8px; color: var(--akismet-color-white); cursor: pointer; display: block; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen-Sans', 'Ubuntu', 'Cantarell', 'Helvetica Neue', sans-serif; font-weight: 500; padding: 12px; text-align: center; text-decoration: none; transition: all 0.2s ease; } /* Extra specificity to deal with TwentyTwentyOne focus style */ .widget .a-stats a.a-stats__link:focus { background: var(--akismet-color-mid-green); color: var(--akismet-color-white); text-decoration: none; } .a-stats a.a-stats__link:hover { filter: brightness(110%); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.06), 0 0 2px rgba(0, 0, 0, 0.16); } .a-stats .count { color: var(--akismet-color-white); display: block; font-size: 1.5em; line-height: 1.4; padding: 0 13px; white-space: nowrap; } </style> <link crossorigin='anonymous' rel='stylesheet' id='all-css-20-1' href='https://s1.wp.com/_static/??-eJzTLy/QTc7PK0nNK9HPLdUtyClNz8wr1i9KTcrJTwcy0/WTi5G5ekCujj52Temp+bo5+cmJJZn5eSgc3bScxMwikFb7XFtDE1NLExMLc0OTLACohS2q&cssminify=yes' type='text/css' media='all' /> <style id='jetpack-global-styles-frontend-style-inline-css'> :root { --font-headings: unset; --font-base: unset; --font-headings-default: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif; --font-base-default: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;} </style> <link crossorigin='anonymous' rel='stylesheet' id='all-css-22-1' href='https://s2.wp.com/wp-content/themes/h4/global.css?m=1420737423i&cssminify=yes' type='text/css' media='all' /> <script id="jetpack_related-posts-js-extra"> var related_posts_js_options = {"post_heading":"h4"}; </script> <script id="wpcom-actionbar-placeholder-js-extra"> var actionbardata = {"siteID":"1935472","postID":"12081","siteURL":"https:\/\/blog.metabrainz.org","xhrURL":"https:\/\/blog.metabrainz.org\/wp-admin\/admin-ajax.php","nonce":"03e1243f92","isLoggedIn":"","statusMessage":"","subsEmailDefault":"instantly","proxyScriptUrl":"https:\/\/s0.wp.com\/wp-content\/js\/wpcom-proxy-request.js?ver=20211021","shortlink":"https:\/\/wp.me\/p87vi-38R","i18n":{"followedText":"New posts from this site will now appear in your <a href=\"https:\/\/wordpress.com\/reader\">Reader<\/a>","foldBar":"Collapse this bar","unfoldBar":"Expand this bar","shortLinkCopied":"Shortlink copied to clipboard."}}; </script> <script id="jetpack-mu-wpcom-settings-js-before"> var JETPACK_MU_WPCOM_SETTINGS = {"assetsUrl":"https:\/\/s1.wp.com\/wp-content\/mu-plugins\/jetpack-mu-wpcom-plugin\/sun\/jetpack_vendor\/automattic\/jetpack-mu-wpcom\/src\/build\/"}; </script> <script crossorigin='anonymous' type='text/javascript' src='https://s0.wp.com/_static/??-eJxdjEEOwjAMBD9EaqGo9IR4CmpTiyYkjlXbavt7gsQBOM7uzsLGLlRSJIVijrM9IgkkVB7D88MgRnCPFGCymGdYMY+Ks+MqKr/UlUhdkhN8/aa2yep4rfvx3+mCBQXYJtCtBYfEXRHpLS1act+EW7meB++HS++9Ty+VuEGt'></script> <script id="rlt-proxy-js-after"> rltInitialize( {"token":null,"iframeOrigins":["https:\/\/widgets.wp.com"]} ); </script> <link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://musicbrainz.wordpress.com/xmlrpc.php?rsd" /> <meta name="generator" content="WordPress.com" /> <link rel="canonical" href="https://blog.metabrainz.org/2024/10/30/metabrainz-summit-2024/" /> <link rel='shortlink' href='https://wp.me/p87vi-38R' /> <link rel="alternate" type="application/json+oembed" href="https://public-api.wordpress.com/oembed/?format=json&url=https%3A%2F%2Fblog.metabrainz.org%2F2024%2F10%2F30%2Fmetabrainz-summit-2024%2F&for=wpcom-auto-discovery" /><link rel="alternate" type="application/xml+oembed" href="https://public-api.wordpress.com/oembed/?format=xml&url=https%3A%2F%2Fblog.metabrainz.org%2F2024%2F10%2F30%2Fmetabrainz-summit-2024%2F&for=wpcom-auto-discovery" /> <!-- Jetpack Open Graph Tags --> <meta property="og:type" content="article" /> <meta property="og:title" content="MetaBrainz Summit 2024" /> <meta property="og:url" content="https://blog.metabrainz.org/2024/10/30/metabrainz-summit-2024/" /> <meta property="og:description" content="MetaBrainz nerds at the Jantar Mantar observatory. Left to right: jasje, reosarevok, atj, zas, KasukabeDefenceForce, monkey, yvanzo, lucifer, mayhem, ansh, theflash_, kellnerd, bitmap, akshaaa…" /> <meta property="article:published_time" content="2024-10-30T19:26:04+00:00" /> <meta property="article:modified_time" content="2024-11-01T21:37:05+00:00" /> <meta property="og:site_name" content="MetaBrainz Blog" /> <meta property="og:image" content="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-silly-1.jpg?w=1200" /> <meta property="og:image:width" content="1200" /> <meta property="og:image:height" content="525" /> <meta property="og:image:alt" content="" /> <meta property="og:locale" content="en_US" /> <meta property="article:publisher" content="https://www.facebook.com/WordPresscom" /> <meta name="twitter:creator" content="@MusicBrainz" /> <meta name="twitter:site" content="@MusicBrainz" /> <meta name="twitter:text:title" content="MetaBrainz Summit 2024" /> <meta name="twitter:image" content="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-silly-1.jpg?w=640" /> <meta name="twitter:card" content="summary_large_image" /> <!-- End Jetpack Open Graph Tags --> <link rel='openid.server' href='https://blog.metabrainz.org/?openidserver=1' /> <link rel='openid.delegate' href='https://blog.metabrainz.org/' /> <link rel="search" type="application/opensearchdescription+xml" href="https://blog.metabrainz.org/osd.xml" title="MetaBrainz Blog" /> <link rel="search" type="application/opensearchdescription+xml" href="https://s1.wp.com/opensearch.xml" title="WordPress.com" /> <style>.recentcomments a{display:inline !important;padding:0 !important;margin:0 !important;}</style> <style type="text/css"> .recentcomments a { display: inline !important; padding: 0 !important; margin: 0 !important; } table.recentcommentsavatartop img.avatar, table.recentcommentsavatarend img.avatar { border: 0px; margin: 0; } table.recentcommentsavatartop a, table.recentcommentsavatarend a { border: 0px !important; background-color: transparent !important; } td.recentcommentsavatarend, td.recentcommentsavatartop { padding: 0px 0px 1px 0px; margin: 0px; } td.recentcommentstextend { border: none !important; padding: 0px 0px 2px 10px; } .rtl td.recentcommentstextend { padding: 0px 10px 2px 0px; } td.recentcommentstexttop { border: none; padding: 0px 0px 0px 10px; } .rtl td.recentcommentstexttop { padding: 0px 10px 0px 0px; } </style> <meta name="description" content="MetaBrainz nerds at the Jantar Mantar observatory. Left to right: jasje, reosarevok, atj, zas, KasukabeDefenceForce, monkey, yvanzo, lucifer, mayhem, ansh, theflash_, kellnerd, bitmap, akshaaatt, ApeKattQuest, outsidecontext, aerozol This year it was New Delhi, India, that was invaded by data nerds from across the globe! The MetaBrainz team was treated to the glorious chaos, hospitality, sights, noise,…" /> <link rel="icon" href="https://blog.metabrainz.org/wp-content/uploads/2018/11/cropped-metabrainz_logo.png?w=32" sizes="32x32" /> <link rel="icon" href="https://blog.metabrainz.org/wp-content/uploads/2018/11/cropped-metabrainz_logo.png?w=150" sizes="192x192" /> <link rel="apple-touch-icon" href="https://blog.metabrainz.org/wp-content/uploads/2018/11/cropped-metabrainz_logo.png?w=150" /> <meta name="msapplication-TileImage" content="https://blog.metabrainz.org/wp-content/uploads/2018/11/cropped-metabrainz_logo.png?w=150" /> </head> <body class="post-template-default single single-post postid-12081 single-format-standard wp-embed-responsive customizer-styles-applied group-blog jetpack-reblog-enabled"> <div id="page" class="site"> <div class="site-inner"> <a class="skip-link screen-reader-text" href="#content"> Skip to content </a> <header id="masthead" class="site-header"> <div class="site-header-main"> <div class="site-branding"> <a href="https://blog.metabrainz.org/" class="site-logo-link" rel="home" itemprop="url"></a> <p class="site-title"><a href="https://blog.metabrainz.org/" rel="home">MetaBrainz Blog</a></p> <p class="site-description">MetaBrainz Foundation community blog</p> </div><!-- .site-branding --> <button id="menu-toggle" class="menu-toggle">Menu</button> <div id="site-header-menu" class="site-header-menu"> <nav id="site-navigation" class="main-navigation" aria-label="Primary Menu"> </nav><!-- .main-navigation --> </div><!-- .site-header-menu --> </div><!-- .site-header-main --> <div class="header-image"> <a href="https://blog.metabrainz.org/" rel="home"> <img src="https://blog.metabrainz.org/wp-content/uploads/2018/11/cropped-twitter-banner-1500x500.jpg" srcset="" sizes="" width="1200" height="186" alt="MetaBrainz Blog"> </a> </div><!-- .header-image --> </header><!-- .site-header --> <div id="content" class="site-content"> <div id="primary" class="content-area"> <main id="main" class="site-main"> <article id="post-12081" class="post-12081 post type-post status-publish format-standard has-post-thumbnail hentry category-metabrainz category-summit tag-bookbrainz tag-critiquebrainz tag-hardware tag-listenbrainz tag-metabrainz-2 tag-musicbrainz tag-summit tag-summit-24"> <header class="entry-header"> <h1 class="entry-title">MetaBrainz Summit 2024</h1> </header><!-- .entry-header --> <div class="post-thumbnail"> <img width="1200" height="525" src="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-silly-1.jpg?w=1200" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" srcset="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-silly-1.jpg?w=1200 1200w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-silly-1.jpg?w=2400 2400w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-silly-1.jpg?w=128 128w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-silly-1.jpg?w=300 300w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-silly-1.jpg?w=768 768w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-silly-1.jpg?w=1024 1024w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 60vw, (max-width: 1362px) 62vw, 840px" data-attachment-id="12084" data-permalink="https://blog.metabrainz.org/2024/10/30/metabrainz-summit-2024/summit24-silly-1/" data-orig-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-silly-1.jpg" data-orig-size="2407,1053" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="summit24-silly-1" data-image-description="" data-image-caption="" data-medium-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-silly-1.jpg?w=300" data-large-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-silly-1.jpg?w=2407" /> </div><!-- .post-thumbnail --> <div class="entry-content"> <figure class="wp-block-image size-large"><img data-attachment-id="12084" data-permalink="https://blog.metabrainz.org/2024/10/30/metabrainz-summit-2024/summit24-silly-1/" data-orig-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-silly-1.jpg" data-orig-size="2407,1053" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="summit24-silly-1" data-image-description="" data-image-caption="" data-medium-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-silly-1.jpg?w=300" data-large-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-silly-1.jpg?w=2407" width="2407" height="1053" src="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-silly-1.jpg?w=2407" alt="" class="wp-image-12084" srcset="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-silly-1.jpg 2407w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-silly-1.jpg?w=128 128w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-silly-1.jpg?w=300 300w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-silly-1.jpg?w=768 768w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-silly-1.jpg?w=1024 1024w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px" /><figcaption class="wp-element-caption"><em>MetaBrainz nerds at the Jantar Mantar observatory.</em> <em>Left to right: jasje, reosarevok, atj, zas, KasukabeDefenceForce, monkey, yvanzo, lucifer, mayhem, ansh, theflash_, kellnerd, bitmap, akshaaatt, ApeKattQuest, outsidecontext, aerozol</em></figcaption></figure> <p>This year it was New Delhi, India, that was invaded by data nerds from across the globe!</p> <p>The MetaBrainz team was treated to the glorious chaos, hospitality, sights, noise, sweets, monkeys, traffic, heat, and delicious food of India. We reflected on the last year in MetaBrainz, planned and collaborated for the future, and got a little work done – when we could fit it in between mouthfuls of Indian sweets.</p> <p>Read on for a comprehensive summit recap, including the annual recap for each MetaBrainz project, as well as breakout session notes, photos, and links to the slides and video recordings.</p> <span id="more-12081"></span> <p>Firstly, a huge thank you to lucifer. lucifer was our host for the 2024 summit and planned and booked everything together with the MetaBrainz chief of mayhem, mayhem. Both of them kept the ball rolling, taking care of all the details, keeping the food coming throughout and fielding endless questions and texts from a gaggle of wide-eyed foreigners. A big thank you to everyone else who helped out, as well as those who made the effort to travel and attend. A special thank you also to the rest of the Indian team, who made us feel welcome and shared their favourite snacks. Thank you rdswift for getting up early and joining us via Zoom, and everyone else who popped in to watch. Thank you reosarevok and everyone else who helped with the excellent meeting notes that made this recap possible.</p> <p>We had too many extra curricular (non-work related) adventures to share here… jet lag be damned, we plunged into the chaos of Chandni Chowk (Old Delhi) for a street food tour, explored the 300 year old astronomical equipment of Jantar Mantar, the light show of Qutub Minar, museums, street art, trains, bought Kurta (traditional Indian menswear), shopped, watched monkeys playfight on our balcony, dodged traffic, sweated our asses off, and emerged victorious from the shitshow that is the Taj Mahal.</p> <p>India challenged us, and rewarded us. Many of the overseas team also extended their India stay, travelling North and South of Delhi after the summit. You will have to ask them for their photos and stories!</p> <p>A summary of the topics covered follows. You can also see full event details on the <a href="https://musicbrainz.org/doc/MusicBrainz_Summit/24">wiki page</a> and watch the recordings on YouTube: <a href="https://youtu.be/z0RneSATuSo">Day 1</a>, <a href="https://youtu.be/6yDQWoi-qV8">Day 2</a>, <a href="https://youtu.be/xSd23ynigbs">Day 3</a></p> <hr class="wp-block-separator has-alpha-channel-opacity" /> <h2 class="wp-block-heading">State of MetaBrainz</h2> <figure class="wp-block-image size-large"><img data-attachment-id="12090" data-permalink="https://blog.metabrainz.org/2024/10/30/metabrainz-summit-2024/summit24-mayhem/" data-orig-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-mayhem.jpg" data-orig-size="2735,1823" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="summit24-mayhem" data-image-description="" data-image-caption="" data-medium-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-mayhem.jpg?w=300" data-large-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-mayhem.jpg?w=2735" width="2735" height="1823" src="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-mayhem.jpg?w=2735" alt="" class="wp-image-12090" srcset="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-mayhem.jpg 2735w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-mayhem.jpg?w=128 128w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-mayhem.jpg?w=300 300w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-mayhem.jpg?w=768 768w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-mayhem.jpg?w=1024 1024w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px" /><figcaption class="wp-element-caption"><em>mayhem pauses important finance discussion to get someone to <a href="https://en.wiktionary.org/wiki/pull_my_finger">pull his finger</a></em></figcaption></figure> <p>presenter: mayhem (<a href="https://www.youtube.com/watch?v=z0RneSATuSo">youtube</a> | <a href="https://docs.google.com/presentation/d/1Du_u2IqMVzN8oc_HYmKJ3915OL0Sfq8zhE1hhsnp0uw">slides</a>)</p> <p><a href="https://metabrainz.org/">MetaBrainz</a> had two main goals for the year: pay our people well, and increase supporter prices. mayhem is really happy with how the raises went, and is confident that everyone in the team is getting paid fairly now.</p> <p>The team pay rises necessitated a corresponding increase in support prices. This has been more complicated – some supporters agreed to the rise, some decided to leave, and a few new supporters came in their stead. All in all, we’re more or less where we started before the price rise. Income is up 17% and donations are up 70%, which is very nice! Salaries are up 33%, which is partly because of the raises and partly because most people have been busy (and so have been billing for more hours).</p> <p>The summit has been more expensive than expected but not by a huge amount. We are considering alternating between Barcelona and Delhi for future summits. We are reporting a loss of $50k this year, but this is mostly because of one-off expenses, without which we would be at a $20k profit for the year. We are not in a bad situation, but we should be looking to bring in more money for the future.</p> <p>Donations have been falling (even though they’re up this year) and we are going to try to increase the amount of donations we get from individuals. This is important because the US requires non-profits to show they are receiving community support, as opposed to selling services. We are hoping to increase the donations coming from ListenBrainz, whose users don’t contribute as much back into the ecosystem when compared to MusicBrainz. Ideally we will be covering our full hosting costs with donations.</p> <p>Our income is flat, which usually indicates a saturated market and we need to branch out. Luckily, we have been working on exactly that. One of these avenues that we are looking to explore is polishing our messaging for data users, including AI users (once AI trainers have had enough of being sued we expect them to come round to the idea of paying for data). For example:<br>– It’s not clear that LB is open source.<br>– It’s not clear we’re a data service provider.<br>– It’s not clear that we’re an ethical and enshittification-proof non-profit.</p> <p>BookBrainz is still far away from driving revenue, but has potential. What if we spend a year doing our best to get BookBrainz to the point where it has lots of data, good replication, and everything else it needs to be able to work at a data service provider level.</p> <h2 class="wp-block-heading">State of MusicBrainz</h2> <figure class="wp-block-image size-large"><img data-attachment-id="12099" data-permalink="https://blog.metabrainz.org/2024/10/30/metabrainz-summit-2024/summit24-yvanzo/" data-orig-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-yvanzo.jpg" data-orig-size="2735,1823" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="summit24-yvanzo" data-image-description="" data-image-caption="" data-medium-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-yvanzo.jpg?w=300" data-large-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-yvanzo.jpg?w=2735" loading="lazy" width="2735" height="1823" src="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-yvanzo.jpg?w=2735" alt="" class="wp-image-12099" srcset="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-yvanzo.jpg 2735w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-yvanzo.jpg?w=128 128w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-yvanzo.jpg?w=300 300w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-yvanzo.jpg?w=768 768w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-yvanzo.jpg?w=1024 1024w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px" /><figcaption class="wp-element-caption"><em>yvanzo surrounded by MusicBrainz fans</em></figcaption></figure> <p>presenter: yvanzo & reosarevok (<a href="https://youtu.be/z0RneSATuSo?si=uVdLGVV929YK8lXT&t=1595">youtube</a> | <a href="https://docs.google.com/presentation/d/1NBaBU6tvMEEHsFkGdfpMGbueURhuVgStfWOlreSwI0U">slides</a>)</p> <p><a href="https://musicbrainz.org/">MusicBrainz</a> numbers keep going up, along with their rate of change. The numbers of entities, edit activity, etc, it’s all going up.</p> <p>The Event Art Archive was released in June, and 2.6% of events now have artwork. We are also seeing more event additions since the EAA was released, a 57.5% increase.</p> <p>MusicBrainz had two GSoC projects this year, both using Rust:<br>– <a href="https://blog.metabrainz.org/2024/08/26/gsoc-2024-new-email-service-with-internationalization-and-mjml-based-markup/">Jade Ellis’ GSoC project</a> will allow us to localize emails sent to users as well as improve email performance, bringing us out of the 1990’s.<br>– <a href="https://blog.metabrainz.org/2024/10/07/gsoc-2024-musicbrainz-wayback-machine-melba/">Ashutosh Aswal’s GSoC project</a> will save URLs submitted as relationships or in edit notes to the Internet Archive’s Wayback Machine, making it easier to follow old links in edit notes.</p> <p>The React conversion keeps making progress.<br>– The event editor has been converted to react, and work has started on the release editor. The artist credit editor was also significantly improved.<br>– The remaining templates to be converted are mostly edit forms, which are a mix of Perl/Template Toolkit and JavaScript/jQuery+Knockout.js.</p> <p>A number of search upgrades, with the Solr cluster getting new hardware and an upgrade to Solr version 9. The mirror servers and search server indexer (sir) still need to be upgraded.</p> <p>Weblate has been migrated, and is now being used by the MusicBrainz website and Picard for static data (countries, attributes, relationships, etc.) and user documentation.<br>– Wiki pages now document the internationalization for each project.<br>– It’s now a lot easier to find problems with translations, and many localization issues were found and addressed.</p> <p>It has been a really good year for volunteers to musicbrainz-server (special shoutout to derat), as well as volunteer translators. And let’s not forget our beta testers, ticket reporters, and editors, voters and script authors.</p> <p>This year saw a small schema change, adding genre collections.</p> <p><strong>2023-2024 in numbers (-1)</strong><br>Since October 2023</p> <ul class="wp-block-list"> <li>Releases<br>– 4,346,941: Releases in MusicBrainz, total<br>– 501,199: Releases added to MusicBrainz<br>– 1,405: Releases added to MusicBrainz every day, on average<br>– 55%+: Releases added with an importer</li> <li>Genres<br>– 13,754,930: Genre tag upvotes and downvotes, total<br>– 79%: MusicBrainz tags that are in the genre whitelist<br>– 6.5%: MusicBrainz artists that have a genre<br>– 41%: Release groups that have a genre</li> <li>Editors<br>– ~2,100: Weekly active MusicBrainz editors<br>– ~160: Weekly active MusicBrainz voters</li> <li>Edits<br>– 11,911,577: Edits added to MusicBrainz<br>– 30%: Of MusicBrainz edits were entered by the top 25 editors</li> </ul> <h2 class="wp-block-heading">State of Community</h2> <figure class="wp-block-image size-large"><img data-attachment-id="12170" data-permalink="https://blog.metabrainz.org/2024/10/30/metabrainz-summit-2024/_dsc9268/" data-orig-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/dsc9268.jpg" data-orig-size="4848,3232" data-comments-opened="1" data-image-meta="{"aperture":"4","credit":"","camera":"ILCE-6300","caption":"","created_timestamp":"1726965400","copyright":"","focal_length":"16","iso":"160","shutter_speed":"0.016666666666667","title":"","orientation":"0"}" data-image-title="_DSC9268" data-image-description="" data-image-caption="" data-medium-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/dsc9268.jpg?w=300" data-large-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/dsc9268.jpg?w=4848" loading="lazy" width="4848" height="3232" src="https://blog.metabrainz.org/wp-content/uploads/2024/10/dsc9268.jpg?w=4848" alt="" class="wp-image-12170" srcset="https://blog.metabrainz.org/wp-content/uploads/2024/10/dsc9268.jpg?w=4848 4848w, https://blog.metabrainz.org/wp-content/uploads/2024/10/dsc9268.jpg?w=128 128w, https://blog.metabrainz.org/wp-content/uploads/2024/10/dsc9268.jpg?w=300 300w, https://blog.metabrainz.org/wp-content/uploads/2024/10/dsc9268.jpg?w=768 768w, https://blog.metabrainz.org/wp-content/uploads/2024/10/dsc9268.jpg?w=1024 1024w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px" /><figcaption class="wp-element-caption"><em>aerozol (the one on the left) in Chandni Chowk</em></figcaption></figure> <p>presenter: aerozol (<a href="https://youtu.be/z0RneSATuSo?si=OLfRDfQ8qXGaG3rd&t=2870">youtube</a> | <a href="https://docs.google.com/presentation/d/1ff15s91wEtPbOSPd3JgDojCNffhs6d-jSMo4qP6yeGk">slides</a>)</p> <ul class="wp-block-list"> <li>We had 773 email reports (e.g. user reports) in the last year. A big thank you to reosarevok who handles all of these promptly and with care, patience and compassion.</li> <li>Pretty much all our social media and chat platforms are up year on year, activity on the forums and the blog remains static.</li> <li>Discord is by far our fastest growing channel. Since lucifer and atj bridged Discord to our other channels the rest of the MetaBrainz community is also starting to notice an uptick in activity from this generally young(er) userbase, that are not engaging elsewhere.</li> </ul> <h2 class="wp-block-heading">State of BookBrainz</h2> <figure class="wp-block-image size-large"><img data-attachment-id="12167" data-permalink="https://blog.metabrainz.org/2024/10/30/metabrainz-summit-2024/summit24-monkey3/" data-orig-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-monkey3.jpg" data-orig-size="2735,1823" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="summit24-monkey3" data-image-description="" data-image-caption="" data-medium-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-monkey3.jpg?w=300" data-large-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-monkey3.jpg?w=2735" loading="lazy" width="2735" height="1823" src="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-monkey3.jpg?w=2735" alt="" class="wp-image-12167" srcset="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-monkey3.jpg 2735w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-monkey3.jpg?w=128 128w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-monkey3.jpg?w=300 300w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-monkey3.jpg?w=768 768w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-monkey3.jpg?w=1024 1024w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px" /><figcaption class="wp-element-caption"><em>monkey happily setting off on another day of not closing BookBrainz pull requests (this is a joke – monkey made ~1.4K MetaBrainz contributions via Github this year!)</em></figcaption></figure> <p>presenter: monkey (<a href="https://youtu.be/z0RneSATuSo?si=3j3lsl-8sq1lPQ49&t=3324">youtube</a> | <a href="https://docs.google.com/presentation/d/1x2yHTqHWhIsFkpOIWdYkHCfmsfwODLyhf_KO5oBwDeM">slides</a>)</p> <p>The one-man team (!) that is monkey was apologetic about it being a slow year for <a href="https://bookbrainz.org/">BookBrainz</a> updates, due to a focus on ListenBrainz. However, some progress was made, consolidating crucial features, improving infrastructure and refactoring old code. There were also some great community style discussions, with some welcome new faces.</p> <p><strong>Goals for this year</strong></p> <ul class="wp-block-list"> <li>…are the same as last year:</li> <li>The API needs to be deployed to production. This requires more testing first.</li> <li>Deploying <a href="https://blog.metabrainz.org/2023/11/06/gsoc-2023-reviving-the-bookbrainz-importer-project/">kellnerd’s ongoing 2023 & 2024 GSoC project</a>, which will allow imports from other open databases (OpenLibrary, Bookogs, Library of Congress) – the database importer project was actually started back in 2018!</li> <li>Integrating with the Internet Archive to display book covers. The Book Cover Archive? BCA? BAA? 🐑</li> </ul> <p>The number of new users is steadily increasing, with August 2024 seeing a particularly large jump in new users. Correspondingly, the number of revisions (aka ‘edits’, for you MB folks) has also been increasing.</p> <p>However, the top 10 editors list hasn’t changed much since last year. Thank you, editors!</p> <p><strong>New entities since last year</strong></p> <ul class="wp-block-list"> <li>18,296 works</li> <li>5,451 authors</li> <li>4,801 editions</li> <li>4,472 edition groups</li> <li>1,158 publishers</li> <li>1,066 series</li> </ul> <p>Those numbers will explode when we run the database importer project! The only number that went down since last year is the number of merged pull requests, at 74.</p> <p>Thank you to everyone who participated in BookBrainz in 2024, in any way, shape or form.</p> <h2 class="wp-block-heading">State of Infrastructure</h2> <figure class="wp-block-image size-large"><img data-attachment-id="12171" data-permalink="https://blog.metabrainz.org/2024/10/30/metabrainz-summit-2024/summit24-atj-and-zas/" data-orig-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-atj-and-zas.jpg" data-orig-size="2735,1823" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="summit24-atj and zas" data-image-description="" data-image-caption="" data-medium-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-atj-and-zas.jpg?w=300" data-large-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-atj-and-zas.jpg?w=2735" loading="lazy" width="2735" height="1823" src="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-atj-and-zas.jpg?w=2735" alt="" class="wp-image-12171" srcset="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-atj-and-zas.jpg 2735w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-atj-and-zas.jpg?w=128 128w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-atj-and-zas.jpg?w=300 300w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-atj-and-zas.jpg?w=768 768w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-atj-and-zas.jpg?w=1024 1024w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px" /><figcaption class="wp-element-caption"><em>atj and zas plotting something. It’s the quiet server admins you have to keep an eye on</em></figcaption></figure> <p>presenter: zas & atj (<a href="https://youtu.be/z0RneSATuSo?si=mEe-pd9pC3phNfkL&t=4310">youtube</a> | <a href="https://docs.google.com/presentation/d/1M3KcV-Teu4NTJIJfsYKGJc5P6nyw6W07-PPiCEcsyOg">slides</a>)</p> <p>Although MetaBrainz still has the same number of servers as it did in 2023, we have significantly better performance now, thanks to some swapping out of old machines for newer, shinier, and faster machines. MetaBrainz runs 49 servers; 29 physical servers, 14 virtual machines (VMs) and 6 external servers. Server costs remain very low, and we are very satisfied with Hetzner, who we have been working with for 9 years now.</p> <p><strong>Important changes</strong></p> <ul class="wp-block-list"> <li>A new Solr cluster (our search engine) has been deployed in Hetzner Cloud. These nodes are running on ARM hardware.</li> <li>We have a load balancer provided by Hetzner (VM).</li> <li>Our overall response time has been cut by ~5 to 10 times.</li> <li>Everything has become easier to maintain, now being deployed by Ansible.</li> </ul> <p><strong>New machines</strong></p> <ul class="wp-block-list"> <li>Although the number of servers is constant, our resource have increased, due to new (replaced) machines being much faster.</li> <li>Many nodes were replaced by newer and higher performance machines.</li> <li>In exchange, there was a slight increase in Hetzner prices.</li> </ul> <p><strong>New hardware</strong></p> <ul class="wp-block-list"> <li>The new Hetzner servers now provide faster CPUs and ECC RAM.</li> <li>They also come with better SSD drives (which are faster and more reliable).</li> <li> We are using ARM architecture where we can, which gives us cheaper servers due to a lower demand.</li> </ul> <p><strong>Ansible</strong></p> <ul class="wp-block-list"> <li>We’re closer to managing everything with Ansible.</li> <li>The setup for Ansible requires a lot of initial work , but once we get there maintenance is significantly improved.</li> <li>Writing Ansible roles and playbooks is not a trivial task, one that we lean on atj for.</li> <li>The next major goal is to manage Docker with Ansible.</li> </ul> <p><strong>Goals for next year</strong></p> <ul class="wp-block-list"> <li>Get rid of old nagios checks.</li> <li>Use ZFS more. Currently these are used by our database servers, providing better error detection and compression.</li> <li>Move to 10.10.10.0 virtual networks.</li> <li>Improve the Openresty and certificate deployment.</li> </ul> <p>MetaBrainz bandwidth output from our Openresty instances (rex & rudi) is 10MB/s at peak hours. MetaBrainz serves almost 20 TeraBytes of data every month!</p> <h2 class="wp-block-heading">State of MusicBrainz Picard</h2> <figure class="wp-block-image size-large"><img data-attachment-id="12214" data-permalink="https://blog.metabrainz.org/2024/10/30/metabrainz-summit-2024/summit24-outsidecontext2/" data-orig-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-outsidecontext2.jpg" data-orig-size="2735,1823" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="summit24-outsidecontext2" data-image-description="" data-image-caption="" data-medium-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-outsidecontext2.jpg?w=300" data-large-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-outsidecontext2.jpg?w=2735" loading="lazy" width="2735" height="1823" src="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-outsidecontext2.jpg?w=2735" alt="" class="wp-image-12214" srcset="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-outsidecontext2.jpg 2735w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-outsidecontext2.jpg?w=128 128w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-outsidecontext2.jpg?w=300 300w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-outsidecontext2.jpg?w=768 768w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-outsidecontext2.jpg?w=1024 1024w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px" /><figcaption class="wp-element-caption"><em>outsidecontext presenting his digital child, the one that ‘bugs’ him the most</em></figcaption></figure> <p>presenter: outsidecontext & zas (<a href="https://youtu.be/z0RneSATuSo?si=Oyoc2YLUVnE4Z3Tl&t=5104">youtube</a> | <a href="https://docs.google.com/presentation/d/1tC9tX2O9AyE9ADtj-DJhF1jlN6BhGUmqXnAZWhDbnDM">slides</a>)</p> <p>Another busy year for <a href="https://picard.musicbrainz.org/">MusicBrainz Picard</a>, with two Picard releases (2.11 and 2.12), a excellent GSoC project, and a number of significant steps towards <a href="https://blog.metabrainz.org/2024/05/29/picard-3-0-qa/">Picard v3.</a></p> <p><strong>The year’s progress, in brief</strong></p> <ul class="wp-block-list"> <li>A great <a href="https://blog.metabrainz.org/2024/08/26/gsoc-2024-picard-image-processing/">GSoC project for cover art image processing,</a> by twodoorcoupe, which allows users to resize images, convert image formats and can be extended by plugins.</li> <li>The PyQt v6 port has been completed and staged for Picard v3.</li> <li>Progress has been made on the new plugin system for Picard v3.</li> <li>93 tickets were resolved.</li> <li>20 GitHub contributors (including translators).</li> <li>Lots of code refactoring and improvements.</li> <li>Improved OAuth2 support, which will ease the transition to the new plugin system.</li> <li>The transition to Weblate has been well-accepted and much translation progress has been made.</li> </ul> <p><strong>Some things did not go so well…</strong></p> <ul class="wp-block-list"> <li>Platform-specific issues, Qt 6 issues, or issues related to specific setups consumed a lot of development time.</li> <li>outsidecontext has less time available for Picard development – partly due to getting distracted by shiny projects like <a href="https://harmony.pulsewidth.org.uk/">Harmony.</a></li> <li>Development of the new plugin system has stalled.</li> </ul> <p><strong>Progress on Picard v3</strong></p> <ul class="wp-block-list"> <li>The port to PyQt v6 and general OAuth improvements (webflow, token revocation, PKCE) have been completed.</li> <li>The new plugin system, support for Apple silicon, and code cleanups are still in progress.</li> <li>Remaining on the to-do list are porting all the “essential plugins”, updating Snap and PPA packaging for Qt6, and implementing MetaBrainz OAuth.</li> </ul> <h2 class="wp-block-heading">State of ListenBrainz Apps</h2> <figure class="wp-block-image size-large"><img data-attachment-id="12176" data-permalink="https://blog.metabrainz.org/2024/10/30/metabrainz-summit-2024/_dsc9745/" data-orig-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/dsc9745.jpg" data-orig-size="6000,4000" data-comments-opened="1" data-image-meta="{"aperture":"2","credit":"","camera":"ILCE-6300","caption":"","created_timestamp":"1727224292","copyright":"","focal_length":"50","iso":"4000","shutter_speed":"0.00625","title":"","orientation":"0"}" data-image-title="_DSC9745" data-image-description="" data-image-caption="" data-medium-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/dsc9745.jpg?w=300" data-large-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/dsc9745.jpg?w=6000" loading="lazy" width="6000" height="4000" src="https://blog.metabrainz.org/wp-content/uploads/2024/10/dsc9745.jpg?w=6000" alt="" class="wp-image-12176" srcset="https://blog.metabrainz.org/wp-content/uploads/2024/10/dsc9745.jpg?w=6000 6000w, https://blog.metabrainz.org/wp-content/uploads/2024/10/dsc9745.jpg?w=128 128w, https://blog.metabrainz.org/wp-content/uploads/2024/10/dsc9745.jpg?w=300 300w, https://blog.metabrainz.org/wp-content/uploads/2024/10/dsc9745.jpg?w=768 768w, https://blog.metabrainz.org/wp-content/uploads/2024/10/dsc9745.jpg?w=1024 1024w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px" /><figcaption class="wp-element-caption"><em>jasje, theflash_ & akshaaatt, the only young non-Large Language Model developers left in the world</em></figcaption></figure> <p>presenter: akshaaatt, jasje, pranav & theflash_ (<a href="https://youtu.be/6yDQWoi-qV8?si=SNd2sb1ZKhcpa2YY">youtube</a> | <a href="https://docs.google.com/presentation/d/1L7mgRLwgyxPBWEChkGzl6_Q5IawXmS8wkBY8_XGkn6Y">slides</a>)</p> <p>The young(er) and cool(er) developers took some time to share the progress on MetaBrainz apps for those new portable “devices”. They say they are like computers, but for in your pocket. Treally!</p> <p><strong><a href="https://play.google.com/store/apps/details?id=org.listenbrainz.android">Android app</a></strong></p> <ul class="wp-block-list"> <li>Updates this past year:<br>– Year in Music 2023 was an app feature<br>– <a href="https://blog.metabrainz.org/2024/08/26/gsoc-2024-artist-album-user-pages-in-listenbrainz-android-app-for-all-users/">GSoC project by pranav,</a> revamping the dashboard, artist and user pages.<br>– Improved navigation.<br>– A listen service revamp, which didn’t go to plan but the team is working to improve and finish it.</li> <li>User feedback:<br>– We are getting better for existing users,<br>– but the app needs to focus on the new user experience, where we struggle. The first impression is important, as are the reviews that new users leave.</li> <li>The ListenBrainz Android app has around 700 active users and 4,000 downloads.</li> <li>We have submitted 1 million listens to ListenBrainz via the Android app this year (up from 63 thousand last year!)</li> </ul> <p><strong><a href="https://github.com/metabrainz/listenbrainz-ios">iOs app</a></strong></p> <ul class="wp-block-list"> <li>The app is still being tested, but has seen a lot of progress this year:<br>– <a href="https://blog.metabrainz.org/2024/08/26/gsoc-2024-dashboard-page-and-feed-revamp-in-listenbrainz-ios/">GSoC project by theflash_,</a> adding a dashboard section to the app as well as a feed revamp.<br>– Added support for adding reviews, pins and recommendations, user search, and Year in Music (which arrived a bit later than for the Android app).<br>– User navigation is in progress, but still has some issues to address.</li> <li>The team had a bit of a breakthrough, and found a way to submit listens from Apple devices! This only works from Apple Music. Hopefully we can implement this as a feature soon.</li> <li>We have had 336 listens submitted to ListenBrainz via the iOS shortcut.</li> </ul> <h2 class="wp-block-heading">State of ListenBrainz</h2> <figure class="wp-block-image size-large"><img data-attachment-id="12178" data-permalink="https://blog.metabrainz.org/2024/10/30/metabrainz-summit-2024/summit24-lucifer/" data-orig-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-lucifer.jpg" data-orig-size="2735,1823" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="summit24-lucifer" data-image-description="" data-image-caption="" data-medium-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-lucifer.jpg?w=300" data-large-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-lucifer.jpg?w=2735" loading="lazy" width="2735" height="1823" src="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-lucifer.jpg?w=2735" alt="" class="wp-image-12178" srcset="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-lucifer.jpg 2735w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-lucifer.jpg?w=128 128w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-lucifer.jpg?w=300 300w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-lucifer.jpg?w=768 768w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-lucifer.jpg?w=1024 1024w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px" /><figcaption class="wp-element-caption"><em>lucifer spent the whole summit, without pause, rescuing, herding or feeding the MetaBrainz team</em></figcaption></figure> <p>presenter: lucifer & mayhem (<a href="https://youtu.be/6yDQWoi-qV8?si=SNd2sb1ZKhcpa2YY">youtube</a> | <a href="https://docs.google.com/presentation/d/1rB1b6elKlgtSpLqhocapwlXhMP8NQE8mJYmh9yYLJ68">slides</a>)</p> <p><strong>The year in numbers</strong></p> <ul class="wp-block-list"> <li>959 million all-time listens</li> <li>165 million listens submitted this year (so far)</li> <li>31.6K all-time users</li> <li>6.1K new users this year (so far)</li> <li>409 pull requests since last summit</li> <li>67 releases since last summit!</li> </ul> <p><strong>New features</strong> (some of them)</p> <ul class="wp-block-list"> <li>Popularity statistics</li> <li>Entity pages, aka artist and album pages</li> <li>Apple Music playback (a GSoC 2023 project, finished and improved in 2024)</li> <li>The frontend is a single page app now, with seamless playback</li> <li>Much faster (but still too slow) Spark stats</li> <li>Apple and Soundcloud metadata caches</li> <li>Music Neighborhood</li> <li>Queues in BrainzPlayer</li> <li><a href="https://blog.metabrainz.org/2024/08/26/gsoc-2024-add-syndication-feeds-to-listenbrainz/">ericd’s GSoC project,</a> RSS feeds, which is now just waiting for oAuth to be completed</li> <li>And lots more…</li> </ul> <p><a href="https://blog.metabrainz.org/2023/11/04/listenbrainz-service-incident/">A major event last year</a> was the listens database accidentally being deleted – everything was restored from dumps, except for data submitted in the 18 hours before the incident. This shows that our dumps work fairly well, but we have since made some improvements that will mitigate the risks going forward.</p> <p>We also had some issues with Spotify rate limits, which have been solved for now. As the user base grows this issue will probably be recurring, and something to keep an eye on.</p> <p>We added dedicated ListenBrainz channels to <a href="https://musicbrainz.org/doc/Communication/ChatBrainz">ChatBrainz</a>, which has led to a nice uptick in community interaction.</p> <p><strong>Roadmap</strong></p> <ul class="wp-block-list"> <li>We’re working on improving the first user experience, in particular the “cold start” problem.</li> <li>We’ve started working on user flairs and donation pages. LB is starting to consume more resources, which we are looking at offsetting with user donations.</li> <li>We have too many A-level priorities at the moment; we need to review our priorities.</li> <li>We need to make sure the world understands we’re open source and a data service provider (DSP). This means finishing the last datasets and then licensing it and letting the world know. Popularity datasets, for example, have been asked about in the past.</li> </ul> <p>We expect to hit 1 billion ListenBrainz listens some time this year!</p> <hr class="wp-block-separator has-alpha-channel-opacity" /> <p>The following are notes from breakout/hack sessions. Note that some sessions did not necessitate notes, and some were not recorded.</p> <h2 class="wp-block-heading">MetaBrainz-wide OAuth</h2> <figure class="wp-block-image size-large"><img data-attachment-id="12249" data-permalink="https://blog.metabrainz.org/2024/10/30/metabrainz-summit-2024/summit24-kasukabedefenceforce/" data-orig-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-kasukabedefenceforce.jpg" data-orig-size="2735,1823" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="summit24-kasukabedefenceforce" data-image-description="" data-image-caption="" data-medium-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-kasukabedefenceforce.jpg?w=300" data-large-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-kasukabedefenceforce.jpg?w=2735" loading="lazy" width="2735" height="1823" src="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-kasukabedefenceforce.jpg?w=2735" alt="" class="wp-image-12249" srcset="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-kasukabedefenceforce.jpg 2735w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-kasukabedefenceforce.jpg?w=128 128w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-kasukabedefenceforce.jpg?w=300 300w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-kasukabedefenceforce.jpg?w=768 768w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-kasukabedefenceforce.jpg?w=1024 1024w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px" /><figcaption class="wp-element-caption"><em>KasukabeDefenceForce (top) was a huge help, spending most of the time helping out and holding our hands. Not literally. Except for this one time</em></figcaption></figure> <p>presenter: lucifer (<a href="https://youtu.be/z0RneSATuSo?si=aUqCePhp__pJvTP-&t=6470">youtube</a> | <a href="https://docs.google.com/document/d/1uWQ_uRju0Z-3L46mtq56E40x3DONrQLVpW5oOFVj4Q8">previous doc</a>)</p> <p>OAuth, the huge project that was put into lucifer’s already-full hands last year. OAuth represents the MetaBrainz’ planned centralised login system. OAuth will allow us to do a lot of important things, like make signing up and logging in much easier and quicker, and serve user notifications to a user across all ‘Brainz’ sites.</p> <ul class="wp-block-list"> <li>Picard/OOB – PKCE – Req/SHA-256 – Let’s enforce these from day 0</li> <li>Allow customizable port on the client side</li> <li>Compatible versions of Picard 2 & 3 should be released at the same time as MeB OAuth</li> <li>Refresh tokens will expire if unused, for a period of time yet to be decided</li> <li>We will revoke the existing token related to the same application after reauthorisation</li> <li>A lot of things will support OpenID Connect by default. If we can add support, later on, it will make our lives a lot easier</li> </ul> <h2 class="wp-block-heading">MusicBrainz website performance</h2> <figure class="wp-block-image size-large"><img data-attachment-id="12219" data-permalink="https://blog.metabrainz.org/2024/10/30/metabrainz-summit-2024/summit24-handbot/" data-orig-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-handbot.jpg" data-orig-size="2735,1823" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="summit24-handbot" data-image-description="" data-image-caption="" data-medium-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-handbot.jpg?w=300" data-large-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-handbot.jpg?w=2735" loading="lazy" width="2735" height="1823" src="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-handbot.jpg?w=2735" alt="" class="wp-image-12219" srcset="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-handbot.jpg 2735w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-handbot.jpg?w=128 128w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-handbot.jpg?w=300 300w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-handbot.jpg?w=768 768w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-handbot.jpg?w=1024 1024w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px" /><figcaption class="wp-element-caption"><em>Rest in peace, janky handbot. You survived the Indian heat for… minutes</em></figcaption></figure> <p>presenter: zas (<a href="https://youtu.be/z0RneSATuSo?si=LxDNv6uyIdoxZCjr&t=7717">youtube</a>)</p> <p>The MusicBrainz website is way too slow compared with the resources we use for it (and a lot slower compared with the API only servers).</p> <ul class="wp-block-list"> <li>Some pages being slow is normal, because they are huge, but for others we have no real explanation of why they take so long.</li> <li>Releases are by far the worst offender, because of the extra data they have to load.</li> <li>We should review the amount of database queries we’re doing to load each entity, in case we can speed it up.</li> <li>We could consider not loading things like all relationships and works and whatnot for every user, since casual users may be only interested in basic tracklists.</li> <li>While the React migration is ongoing, pages combining TT and React code might actually be <em>slower</em> than before, temporarily.</li> <li>Once React migration is completed, more lazy loading of huge lists can be done with React Table.</li> <li>We need more indicators about what levels of caching are actually used.</li> <li>We might be able to have a separate set of site servers for bots only where we send queries that are obviously from bots – since they make cache inefficient and this could let us prioritize real user queries.</li> <li>Hosting webservice and website containers on different nodes might help with identifying issues.</li> <li>We can consider moving to ARM VMs, which are both cheaper and faster than Intel ones, for the front-end only.</li> </ul> <h2 class="wp-block-heading">ListenBrainz Importers (last.fm, Spotify etc)</h2> <p>presenter: rob & lucifer (<a href="https://youtu.be/z0RneSATuSo?si=hA0FIEbFTFQezJ9P&t=9463">youtube</a>)</p> <p>New ListenBrainz users face some troubles getting started. This problem has two parts, users struggling to find how/where to get their data into ListenBrainz, and our importers not always doing their job.</p> <ul class="wp-block-list"> <li>We get a lot of complaints about our importers (especially the last.fm importer) having problems.</li> <li>We could consider having an official JSON format that we guide third party devs to. </li> <li>We actually have a lot of useful things already (those importers, JSON-L options, etc) that we should finish and/or document, and then have a “How to get my listens into LB” page that gives the users all the different options of getting their stuff in (depending on their use case, players, history, etc.). This should probably be shown to all users when they have no listens yet.</li> <li>Aerozol commented that a new page is not the solution, it has to be part of the UX.</li> <li>A ticket was created:<a href="https://tickets.metabrainz.org/browse/LB-1644"> LB-1644: Create a “How to get my Listens into ListenBrainz” page</a>.</li> <li>One of our users, shisma., created a flowchart (see the above ticket) that we can use as a basis for the UX.</li> </ul> <h2 class="wp-block-heading">ListenBrainz New User Experience</h2> <figure class="wp-block-image size-large"><img data-attachment-id="12229" data-permalink="https://blog.metabrainz.org/2024/10/30/metabrainz-summit-2024/summit24-mayhem-2/" data-orig-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-mayhem-1.jpg" data-orig-size="2735,1823" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="summit24-mayhem" data-image-description="" data-image-caption="" data-medium-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-mayhem-1.jpg?w=300" data-large-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-mayhem-1.jpg?w=2735" loading="lazy" width="2735" height="1823" src="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-mayhem-1.jpg?w=2735" alt="" class="wp-image-12229" srcset="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-mayhem-1.jpg 2735w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-mayhem-1.jpg?w=128 128w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-mayhem-1.jpg?w=300 300w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-mayhem-1.jpg?w=768 768w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-mayhem-1.jpg?w=1024 1024w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px" /><figcaption class="wp-element-caption"><em>All of India was keen to get their new user experience of mayhem</em></figcaption></figure> <p>presenter: lucifer & rob (<a href="https://youtu.be/z0RneSATuSo?si=bjXEdfsRDNH04mqZ&t=10045">youtube</a>)</p> <p>This is an extension of the previous topic, but focussed on the issue of users not getting much interesting data upon signup – the cold start problem.</p> <ul class="wp-block-list"> <li>New users who import their stuff don’t get any cool stats fast enough, which would help wow them.</li> <li>We should make a new Spark cluster, because the current one actually sits idle half the day, but it is occupied half of the day with all sorts of other tasks. We’re starting with one server.</li> <li>It would be great if we could prioritize new users who import a fair amount of data. Then we can show them recommendations as soon as possible – true cold starts will take longer to manage. For now let’s try to use the existing code and not create new code yet.</li> <li>It would be good for users to have a clear idea of when things are going to refresh/when new data is going to get them something cool to look at, because people keep asking about that and getting frustrated. <ul class="wp-block-list"> <li>Aerozol commented that he is unsure that the issue is that the stats aren’t turning up quickly enough – more that users don’t see anything <em>and</em> not given an idea of when they will. Rob mentions that this is something that aerozol could work on, and a ticket is born: <a href="https://tickets.metabrainz.org/browse/LB-1645">LB-1645: Create a “when does my stats update” information routine</a></li> </ul> </li> </ul> <h2 class="wp-block-heading">Genres across MetaBrainz</h2> <p>presenter: aerozol (<a href="https://youtu.be/6yDQWoi-qV8?si=CwFGjusjt_Vqgx0n&t=1260">youtube</a>)</p> <p>Since we can tag at almost every level in MusicBrainz – artist, release group, release, recordings, work – and there is no way to easily tag multiple levels at once, tags get split up and buried. This discussion asks the question: Is there a way to link all of these tag “levels”? For instance, so that artist tags can include genres from down at the recording level.</p> <p>Picard goes through every level as fallback – for example, if it doesn’t find anything at the recording/release/RG level it will look for tags on the artist level. One concern was that ListenBrainz radio/playlists might not be getting good data as a result, but lucifer clarified that ListenBrainz also has similar fallbacks in place.</p> <p>Some people mentioned that inferring, for example, artist level genres from recordings might be tricky. We might only want to do that if a certain threshold of the artist’s recordings are tagged with a specific genre.</p> <p>Release-level tagging being applied on the release group level was also discussed. Should we do that in most cases, or only if the user specifically asks to apply it? Similarly, should the API return derived tags from lower levels when asking for tags from the artist? One thing that was clear is that if yes, it should apply to genre tags only. Some people were uncomfortable with the idea of “their” genre tags being applied to other releases in the release group, and tags being applied to “their” releases. Others responded that as long as the information is correct that is the nature of a collaborative database.</p> <p>A good real-world example is Roon, which only takes genres from the MusicBrainz release level. A fair amount of other software seems to do the same, in which cases just having the tags at the recording level is useless. If we can use those at the release level, for example using a genre for the release if most of the release’s recordings include the tag, that might make our data more useful.</p> <p>ListenBrainz might be a good way to get a lot more genre data, and to let users propagate it between levels (possibly also between sources!), but that requires a separate discussion about genre implementation in ListenBrainz.</p> <h2 class="wp-block-heading">MetaBrainz positioning</h2> <p>presenter: mayhem (<a href="https://youtu.be/xSd23ynigbs?si=_0IgcQHStLxivh-5&t=1720">youtube</a>)</p> <p>Nowadays we have quite a few <a href="https://metabrainz.org/datasets">MetaBrainz datasets</a> that are open source and AI ready, and a neat datasets page to showcase them. But it’s really hard for an interested user to find, for example, that we have a similarity dataset.</p> <p>Mostly, our website homepages don’t make it clear that we provide these services, including services nobody else provides. The websites are either too messy (MusicBrainz) or slightly too clean (ListenBrainz). We need these pages to specify that we’re open source and indicate what datasets we have, and so on.</p> <p>We need to work out the fastest way to transform the current MusicBrainz homepage to something modern that feels more like the ListenBrainz homepage. That requires having an understanding of MusicBrainz, and moving the style code to a modern framework (Bootstrap or equivalent). Then we can use the page as a blueprint for the other projects. When a user moves between project sites it should be clear that they are related.</p> <p>The homepage is really only useful for first-time users. In ListenBrainz, returning users (logged in users) get sent to a more useful page, their dashboard. Is this something that we could implement in MusicBrainz, where returning users are presented with data that is more useful to them, such as recent edits for artists relevant to them, and the like?</p> <p>We all work really hard to avoid enshittification (we even have <a href="https://en.wikipedia.org/wiki/Cory_Doctorow#Enshittification">the guy who coined the term</a> in our board!). Today there is a lot of talk about ethical companies, but we’ve been there all along. We barely had to change anything to deal with GDPR). We do our best to help everyone who contacts support, even in their own languages when we can. This is something that we should showcase and help the world find out about.</p> <p>We have some specific target audiences for our websites and datasets: users don’t necessarily want to hear the same details as corporate supporters, even though everyone wants the same high-level thing (a service that “cares” and will not compromise your data for money).</p> <p>We will try to identify clearly the message we want to send and a way to send it during the rest of the Delhi meeting, and then give it to aerozol to turn that into an actionable design.</p> <p>aerozol note: we ran out of time to action this, but it has not been forgotten!</p> <h2 class="wp-block-heading">Translations</h2> <figure class="wp-block-image size-large"><img data-attachment-id="12221" data-permalink="https://blog.metabrainz.org/2024/10/30/metabrainz-summit-2024/summit24-reosarevokgroup/" data-orig-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-reosarevokgroup.jpg" data-orig-size="2735,1823" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="summit24-reosarevokgroup" data-image-description="" data-image-caption="" data-medium-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-reosarevokgroup.jpg?w=300" data-large-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-reosarevokgroup.jpg?w=2735" loading="lazy" width="2735" height="1823" src="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-reosarevokgroup.jpg?w=2735" alt="" class="wp-image-12221" srcset="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-reosarevokgroup.jpg 2735w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-reosarevokgroup.jpg?w=128 128w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-reosarevokgroup.jpg?w=300 300w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-reosarevokgroup.jpg?w=768 768w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-reosarevokgroup.jpg?w=1024 1024w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px" /><figcaption class="wp-element-caption"><em>reosarevok (center) diligently paying attention. Maybe an interesting bird landed behind the speaker?</em></figcaption></figure> <p>presenter: yvanzo (<a href="https://youtu.be/xSd23ynigbs?si=ZUb38owvjgpj1YWY&t=3800">youtube</a>)</p> <p>We should work on making sure BookBrainz and ListenBrainz are translatable (and translated) if we want to attract as many users as possible. Similarly, MetaBrainz should be translatable, especially if we’re going to use it as the general login page for all projects. BookBrainz and ListenBrainz have localization as a medium-term goal, but MetaBrainz should have it fairly soon.</p> <p>MusicBrainz uses gettext for historical compatibility reasons (that is, it would take a long time to move to something else) but MetaBrainz/BookBrainz/ListenBrainz should start with a protocol that is popular and common, and supported by Weblate. For instance, ICU MessageFormat or Fluent. If it works nicely we can try to use it in MusicBrainz as well.</p> <p>Sometimes users don’t know that there are incomplete translations available, but we also don’t want to imply to give users a bad experience if they are expecting a fully translated site. We could decide to show all available languages on the sites (or all that are over a reasonably low threshold) but make it clear (with color-coded icons?) which ones are complete, fairly complete, or raw.</p> <p>For apps (and of course websites) we should make sure the user is not forced to use a translation, even if it exists and matches their system language – it could be a bad translation, or they might just prefer English.</p> <p>It’s important to build translation communities, and we should figure out how to get more translators involved. This could mean even having a badge for “I translated X lines of the site” for translators.</p> <h2 class="wp-block-heading">Importers (MusicBrainz)</h2> <p>presenter: atj (<a href="https://youtu.be/xSd23ynigbs?si=Rl2QGtS6MCVoYft7&t=5499">youtube</a>)</p> <p>This is a general discussion about MusicBrainz release importers, in light of how important they are to the MusicBrainz ecosystem.</p> <p>Previously the most glaring issue with importers was how they dealt with giant lists of ‘release countries’. The new <a href="https://harmony.pulsewidth.org.uk/">Harmony</a> importer solves this issue by omitting the release country field altogether if the countries list is longer than 10.</p> <p>Additionally, a way to indicate which countries a release was <em>not</em> issued in might be useful, but this would be a schema and an API change. Another suggestion was to have a “digital” release country that side-steps the issue of the streaming world having a different concept of release country than physical releases, but not all people agreed. Supporting very defined regional blocks is also currently being considered by the style lead.</p> <p>Transitioning away from the release-country topic, data standardization among different providers was discussed. Importers should be careful about cleaning up the data too much (i.e. applying guess case), but where multiple providers exist and disagree on certain stylings (showing a lack of artist intent), it could make sense to enforce the MusicBrainz standards (e.g., usage of hyphens instead of parentheses for extra title information). It could also be useful if importers had the option to allow the user to run a regular expression across all titles to fix issues, before importing.</p> <h2 class="wp-block-heading">Client Side memory not being cleaned</h2> <p>akshaaatt has been looking at the memory profile from the chrome dev tools and has found that the memory keeps piling in the tab when navigating to different pages. The garbage collector is supposed to clean up the objects that do not have a reference anymore.</p> <h2 class="wp-block-heading">Old bugs in MusicBrainz</h2> <figure class="wp-block-image size-large"><img data-attachment-id="12217" data-permalink="https://blog.metabrainz.org/2024/10/30/metabrainz-summit-2024/summit24-kellnerd/" data-orig-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-kellnerd.jpg" data-orig-size="2735,1823" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="summit24-kellnerd" data-image-description="" data-image-caption="" data-medium-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-kellnerd.jpg?w=300" data-large-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-kellnerd.jpg?w=2735" loading="lazy" width="2735" height="1823" src="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-kellnerd.jpg?w=2735" alt="" class="wp-image-12217" srcset="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-kellnerd.jpg 2735w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-kellnerd.jpg?w=128 128w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-kellnerd.jpg?w=300 300w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-kellnerd.jpg?w=768 768w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-kellnerd.jpg?w=1024 1024w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px" /><figcaption class="wp-element-caption"><em>kellnerd out in <strong>style</strong></em></figcaption></figure> <p>Participants: bitmap, kellnerd, MonkeyPython, reosarevok, yvanzo (<a href="https://tickets.metabrainz.org/issues/?jql=project%20%3D%20MBS%20AND%20resolution%20%3D%20Unresolved%20ORDER%20BY%20created%20ASC%2C%20priority%20DESC%2C%20updated%20DESC">oldest unresolved MBS tickets</a>)</p> <ul class="wp-block-list"> <li>[<a href="https://tickets.metabrainz.org/browse/MBS-15">MBS-15</a>]: Add some method to cancel editing – <strong>closed as duplicate (linked)</strong></li> <li>[<a href="https://tickets.metabrainz.org/browse/MBS-122">MBS-122</a>]: Combine forgot username and forgot password pages/functions – <strong>commented</strong></li> <li>[<a href="https://tickets.metabrainz.org/browse/MBS-151">MBS-151</a>]: Add last edited timestamp to the webservice – <strong>commented</strong></li> <li>[<a href="https://tickets.metabrainz.org/browse/MBS-4501">MBS-4501</a>]: Alternative tracklists – bitmap is working on it and is probably going to try to get it done before the release editor React conversion – <strong>in progress</strong></li> <li>[<a href="https://tickets.metabrainz.org/browse/MBS-6680">MBS-6680</a>]: Medium sections – we do want to do this, but we won’t start it until the release editor is converted to React because writing it in TT and then converting it would be too annoying – <strong>blocked</strong></li> <li>[<a href="https://tickets.metabrainz.org/browse/MBS-4635">MBS-4635</a>]: Allow replacing images – we agreed that we should look into whether it’s relatively simple to add a new edit type that does this, since the provided benefit seems clear – <strong>todo</strong></li> <li>[<a href="https://tickets.metabrainz.org/browse/MBS-8393">MBS-8393</a>]: Extend dynamic attributes – This is currently blocked by both the search update and the React conversion, but it should not be super hard after that so once those two are done – <strong>blocked</strong></li> <li>[<a href="https://tickets.metabrainz.org/browse/MBS-157">MBS-157</a>]: Sorting tables – This is blocked by the React conversion and also by us running a horribly outdated version of react-table (so old it’s not even called that anymore) – <strong>blocked</strong></li> <li>[<a href="https://tickets.metabrainz.org/browse/MBS-8781">MBS-8781</a>, <a href="https://tickets.metabrainz.org/browse/MBS-3993">MBS-3993</a>, <a href="https://tickets.metabrainz.org/browse/MBS-1735">MBS-1735</a>, <a href="https://tickets.metabrainz.org/browse/MBS-13768">MBS-1 3768</a>]: Medium barcodes, sub-formats and catalog numbers, and medium MBIDs – We are planning to eventually have a medium-centric schema change that implements all four of these. No ETA, but interest for sure – <strong>todo</strong></li> <li>[<a href="https://tickets.metabrainz.org/browse/MBS-603">MBS-603</a>]: Support relationships on mediums. The only current use case is DJ-mixes, which can really be inferred from recording-level relationships. As such, it might not make sense to do the large effort that implementing this would require – <strong>possibly wont do</strong></li> <li>[<a href="https://tickets.metabrainz.org/browse/MBS-5449">MBS-5449</a>]: Per-Medium Front Cover Artwork – We agreed that it could be a good addition to the CAA to be delivered at the same time as a Schema Change. We added the two requirements as:<br>– [<a href="https://tickets.metabrainz.org/browse/IMG-31">IMG-31</a>]: With multiple-disc releases, it should be possible to associate artwork with specific discs<br>– [<a href="https://tickets.metabrainz.org/browse/MBS-13768">MBS-13768</a>]: Add MBIDs to mediums</li> </ul> <h2 class="wp-block-heading">Solr</h2> <figure class="wp-block-image size-large"><img data-attachment-id="12246" data-permalink="https://blog.metabrainz.org/2024/10/30/metabrainz-summit-2024/summit24-bitmap/" data-orig-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-bitmap.jpg" data-orig-size="2735,1823" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="summit24-bitmap" data-image-description="" data-image-caption="" data-medium-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-bitmap.jpg?w=300" data-large-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-bitmap.jpg?w=2735" loading="lazy" width="2735" height="1823" src="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-bitmap.jpg?w=2735" alt="" class="wp-image-12246" srcset="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-bitmap.jpg 2735w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-bitmap.jpg?w=128 128w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-bitmap.jpg?w=300 300w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-bitmap.jpg?w=768 768w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-bitmap.jpg?w=1024 1024w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px" /><figcaption class="wp-element-caption"><em>bitmap, enjoying some lovely jetlag in the world’s busiest alley</em></figcaption></figure> <p>We have an Ansible Solr cluster running on production and beta. We’re currently missing it on mirrors, which means we have 3 Solr 7 clusters running to serve the mirror use.</p> <p>Migration to docker-compose 2 is scheduled for November, so we can update the mirrors at the same time.</p> <p>The Sir indexer needs to be updated to Python 3. The updated PR works, but we have performance issues – a full indexing of recordings runs out of RAM. Some simplifications might help resolve the issue. Sir updates are not needed for the Solr 9 release, but if we can do this in one go then mirrors will have to just update once rather than twice.</p> <p>Getting rid of RabbitMQ and doing everything in Postgres should also simplify problems and improve performance and should ideally also be done at the same time to again avoid an extra mirror update.</p> <p>We are considering recycling an old server into a dedicated Solr/PSQL testing machine that just runs indexing tests, to avoid hitting the production database.</p> <p>We recorded a full day of search requests to throw at a test server in order to load test Solr, we probably should have a repository for this sort of thing.</p> <p><strong>Simplification discussion:</strong></p> <ul class="wp-block-list"> <li>Currently, the data stored in Solr is in the same XML format as written by the API. We could use a more efficient format.</li> <li>Some fields are queried by the indexer to be stored in Solr and returned in responses but are not searchable. </li> <li>We will be using dbmirror tables to know if there’s a change for an entity while doing incremental indexing, but still use the database directly for full indexing.</li> </ul> <p><strong>November goal:</strong></p> <ul class="wp-block-list"> <li>(yvanzo) Upgrade mirrors to Solr 9 with Docker Compose 2</li> </ul> <p><strong>Stretch goals:</strong></p> <ul class="wp-block-list"> <li>JSON schema verification (similar to RELAX NG for XML).</li> <li>Currently the MB website code performs postprocessing of the Solr response to add more information. This should be changed so that the Indexer submits all required information to Solr so that postprocessing is no longer required. Probably something to implement client-side using ReactTable.</li> <li>(bitmap) Move away from RabbitMQ, we’ll start with Postgres queue tables approach for now – there are two challenges: handling missed and duplicate updates.</li> </ul> <p><strong>Actionable tasks agreed on:</strong></p> <ul class="wp-block-list"> <li>(bitmap/zas) Log the number of JSON vs XML queries to the search server, either at the gateway level or in the MusicBrainz Server. Reminder: the queried format can be specified either through URL query parameter “fmt” or through HTTP header.<br>– Collect data for a relevant period of time and decide on either keeping XML output or dropping XML output so as to save efforts from reimplementing XML support while simplifying the data stored in Solr.<br>Rough approximation: 15% are XML, but we should dig deeper.</li> <li>(lucifer) Try indexing without XML to make sure it does make a significant difference to the performance.</li> <li>(zas, atj) Recycle an old server to set up a containerized Postgres/RabbitMQ/Solr for testing indexing performances.<br>– (zas, atj) Make possible to use ZFS snapshots for reproducing tests faster<br>– (lucifer) Make use of it to test Python3 performance issues</li> </ul> <p><strong>Possible long term goals:</strong></p> <ul class="wp-block-list"> <li>Use Kafka and Debezium to replace RabbitMQ / Postgres queue tables, which should improve scalability and reliability. This approach will likely be used in LB in the short/medium term, so lessons learned from that can be applied to MB.</li> </ul> <h2 class="wp-block-heading">BookBrainz breakout</h2> <figure class="wp-block-image size-large"><img data-attachment-id="12215" data-permalink="https://blog.metabrainz.org/2024/10/30/metabrainz-summit-2024/summit24-monkeypython/" data-orig-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-monkeypython.jpg" data-orig-size="2735,1823" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="summit24-monkeypython" data-image-description="" data-image-caption="" data-medium-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-monkeypython.jpg?w=300" data-large-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-monkeypython.jpg?w=2735" loading="lazy" width="2735" height="1823" src="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-monkeypython.jpg?w=2735" alt="" class="wp-image-12215" srcset="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-monkeypython.jpg 2735w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-monkeypython.jpg?w=128 128w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-monkeypython.jpg?w=300 300w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-monkeypython.jpg?w=768 768w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-monkeypython.jpg?w=1024 1024w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px" /><figcaption class="wp-element-caption"><em>MonkeyPython (our new BookBrainz style lead) catches a break in the hustle and bustle</em></figcaption></figure> <p>Participants:<strong> </strong>Monkey, MonkeyPython, kellnerd, ansh, outsidecontext, leftmostcat (remote)</p> <p><strong>Style guidelines</strong></p> <p>Currently there is no process to update guidelines. The process could look like:</p> <ul class="wp-block-list"> <li>Open topic on forums</li> <li>Have some discussion, hopefully arrive at consensus</li> <li>Someone creates a PR to update the documentation, which eventually gets merged</li> </ul> <p>This is currently missing a style lead – even if there is a consensus, someone needs to do a pull request (PR). Pbryan was previously creating a guideline, and did the formatting and opened a PR. That worked, but only because someone volunteered to do it all.</p> <p>It is decided that MonkeyPython will take over the BookBrainz style lead role. Tasks include monitoring community discussion and formalizing any outcomes. Monkey will assist by doing the technical parts of the PR.</p> <p>Next steps are for MonkeyPython to go over existing discussions and turn them into guidelines. Reosarevok will provide assistance when questions arise regarding how to handle certain cases, applying his experience with community guidelines.</p> <p><strong>Edition groups</strong></p> <p>MonkeyPython demonstrated different editions of Alice in Wonderland. This included two versions with visually similar covers, but one is English and one is a Norwegian translation. Other versions included a German ebook edition with a different cover.</p> <p>This illustrated the question of “what is inside one edition group”:</p> <ul class="wp-block-list"> <li>Different languages (separate works), but same general visual appearance (not necessarily the exact same format)</li> <li>Same language (same work), regardless of the general appearance</li> </ul> <p>Ideas:</p> <ol class="wp-block-list"> <li>Can an edition be in more than one group? This would probably be a big code change and needs to be considered thoroughly.</li> <li>Do we drop edition groups in favor of works? Edition groups have the advantage when it comes to books that contain more than one work.</li> <li>Do we use a single edition group for all editions in all languages of the main work.<br>– Counter example: Anthologies of SciFi stories, which are clearly different editions with the same content, need to be grouped</li> <li>Do we create separate works for the text and the illustrations, linking all editions with the same textual contents and the same appearance together, respectively.</li> </ol> <p>Leftmostcat mentioned that currently a single edition has a single edition group it belongs to. This concept is fuzzy in reality and does not really fit the model, meaning that we should be looking at idea 1. more closely.</p> <p>Deciding on a guideline is important, but tricky to get correct and concise. It was decided to put this topic up for community discussion (with screenshots) on the forums and look into the “multiple edition groups” solution (1.)</p> <p><strong>Importing</strong></p> <p>The BookBrainz importer project should be presented to the community with a detailed blog post explaining the feature.</p> <p>We still need to define guidelines for importing entities, which make it clear what the importer does automatically and what is the responsibility of the user when approving an imported entity.</p> <p>It would be good to have edition groups well defined first before finishing the feature. We can do a import run with limited entities (5,000) in order to gather community feedback.</p> <p><strong>Prioritization of main missing features</strong></p> <ul class="wp-block-list"> <li>Move the identifier & alias editing to be part of the main editing flow (WIP)</li> <li>Edit table of content</li> <li>Review tickets in the “Minimal usable interface” fix version (needs to be split up into separate tasks)</li> <li>Revert revisions (WIP)</li> <li>Adding dates to relationships (WIP)</li> <li>Database replication packets</li> <li>Finishing imports</li> <li>Dockerization: Getting from the Docker development setup to a more automated setup for end users which just want to run a local clone of the database and website</li> </ul> <h2 class="wp-block-heading">Ban evading</h2> <p>This remains a big problem – for instance, a single user has made something like 60 accounts.</p> <p>The following solutions were brainstormed:</p> <ul class="wp-block-list"> <li>Flag users as beginners, and limit editing for that status</li> <li>Block beginners from editing specific entities if there is a sign of dodgy edits (note: they might add duplicate artists instead)</li> <li>Solicit more community support to help with ban evaders: for instance, vote on bans (empower community/auto editors)</li> <li>Allow a lower rate of edits (on specific entities seeing dodgy edits)</li> <li>Assign editors reported as “bad” into a mentorship program (this is done on other sites, to apparent good effect)</li> <li>Is it possible to block certain throwaway mail providers?</li> <li>Lock users out of editing after enough downvotes</li> <li>Identifying users based on IP is difficult</li> <li>Generate reports based on editing pattern (for example, editors adding several releases with “feat.” in track titles).</li> <li>Don’t make new releases visible immediately + make it clear that added releases are not yet visible (just for beginner users)</li> <li>…and access your own releases for tagging (major change, currently not feasible)</li> <li>Some AI solution (also not feasible right now)</li> <li>It was mentioned that we might be asking something that is impossible: Allowing users to register and immediately edit public data, <em>and</em> block users from editing with new accounts/evade bans</li> </ul> <h2 class="wp-block-heading">Celebrating users</h2> <figure class="wp-block-image size-large"><img data-attachment-id="12223" data-permalink="https://blog.metabrainz.org/2024/10/30/metabrainz-summit-2024/summit24-chocolate/" data-orig-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-chocolate.jpg" data-orig-size="2735,1823" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="summit24-chocolate" data-image-description="" data-image-caption="" data-medium-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-chocolate.jpg?w=300" data-large-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-chocolate.jpg?w=2735" loading="lazy" width="2735" height="1823" src="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-chocolate.jpg?w=2735" alt="" class="wp-image-12223" srcset="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-chocolate.jpg 2735w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-chocolate.jpg?w=128 128w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-chocolate.jpg?w=300 300w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-chocolate.jpg?w=768 768w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-chocolate.jpg?w=1024 1024w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px" /><figcaption class="wp-element-caption"><em>This year’s celebration of all things chocolate</em></figcaption></figure> <p>This was a casual discussion while on a train, featuring: aerozol, zas, bitmap, atj</p> <p>Wouldn’t it be cool to reward users and celebrate their success? For instance, a notification or a email is of minimal effort for a user reaching their first 100 edits, while a user reaching a threshold like 1 million edits is a big deal and rare enough that we could afford to make it special.</p> <p>“Celebrating” a user could involve:</p> <ul class="wp-block-list"> <li>Personal notifications (like the anniversary one)</li> <li>Site-wide notifications</li> <li>Emails</li> <li>Badges/‘gamification’</li> <li>Mail out physical merch or vouchers for the MeB store!</li> </ul> <h2 class="wp-block-heading">Mobile design goals</h2> <p>Attendees: akshaaatt, aerozol</p> <p>aerozol and akshaaatt discussed what the priorities should be design-wise, to move the mobile app development forward:</p> <ol class="wp-block-list"> <li>GSoC reviews</li> <li>List of things to do + mockups before go-live</li> <li>Revamp storefront</li> </ol> <h2 class="wp-block-heading">Docker</h2> <p>A technical discussion on all things Docker, which is used by all projects except for MusicBrainz Picard.</p> <ul class="wp-block-list"> <li>Docker compose v1 has been EOL for some time, however LTS Linux distributions still provide packages for version 1 and will continue to for some time.</li> <li>The documentation needs to be updated, to tell users that they should be installing from the official Docker repositories.</li> <li>Docker compose version 2 offers lots of extra features that most projects aren’t making use of at the moment. For example, it can reduce the size and time required to create images.</li> <li>We should try to disable buildx on production servers if possible, but it is required on test servers (e.g. wolf).</li> <li>There is currently no automatic pruning of old images, which results in extra disk usage. We have monitoring of the number of images in Grafana with a warning alert, which then requires manual intervention.</li> <li>We would like to have some monitoring of security alerts in software that is included in our Docker images. There is an official Docker product called Scout which can automate scanning of Docker images and provide alerts if there are vulnerabilities etc. It seems to be a paid product so we would need to decide if the cost is worthwhile for the benefits it provides.</li> <li>Potential replacement of docker-server-configs with Ansible based solution. Best option would be to create a separate Ansible repository to manage this. Proposed to add one small project such as the Picard website to the repository. This would be a big change for everyone in the team who currently uses docker-server-configs, so writing good documentation etc. would be very important before it could be fully used in production.</li> <li>It was proposed to add Docker compose v2 files directly into the musicbrainz-server repository from scratch instead of converting musicbrainz-docker.</li> </ul> <h2 class="wp-block-heading">ListenBrainz breakout</h2> <figure class="wp-block-image size-large"><img data-attachment-id="12243" data-permalink="https://blog.metabrainz.org/2024/10/30/metabrainz-summit-2024/summit24-ansh/" data-orig-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-ansh.jpg" data-orig-size="2735,1823" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="summit24-ansh" data-image-description="" data-image-caption="" data-medium-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-ansh.jpg?w=300" data-large-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-ansh.jpg?w=2735" loading="lazy" width="2735" height="1823" src="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-ansh.jpg?w=2735" alt="" class="wp-image-12243" srcset="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-ansh.jpg 2735w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-ansh.jpg?w=128 128w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-ansh.jpg?w=300 300w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-ansh.jpg?w=768 768w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-ansh.jpg?w=1024 1024w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px" /><figcaption class="wp-element-caption"><em>ansh, our newest Software Engineer, keeps his cool. Maybe it’s time to give him some harder tickets?</em></figcaption></figure> <p><strong>Mapping</strong></p> <p>Currently we are only doing mappings using artists and recordings. We should also use releases, whether with one index or with two separate indexes.</p> <p>We are using release and recording MBIDs for mapping if sent (not track MBIDs) but it seems some users are not seeing the right results for those (especially for live), so something is probably broken. We’re going to be reviewing the way we do this.</p> <p>Alternate scripts break the mapping, because we don’t use MusicBrainz aliases. We need to make the mapping more scalable and performant, then work on that. Just using aliases is not trivial because it will break the way the current mapping works. Alternative tracklists might eventually help as well, for track/recording and release names.</p> <p><strong>Importers</strong></p> <p>Both Spotify and last.fm importers have been 80% ready for a long time. We will try not to start any new features until these are done and ready because it’s annoying people that really want to get all their historical data in. Once these are ready, we can look into further importers (Apple Music for example). This applies for both one-off and continuous (connected) importing, as well as smaller things like importing loved tracks and the like.</p> <p><strong>Genres</strong></p> <p>Are we legally allowed to suggest to the user genres included in the Spotify API? Probably, yes. As such, we could show the user “our external data sources suggest these genres might apply to this music” and let the user apply them (submit them to MB) or not.</p> <p>This ties into discussions about flowing genres across entities in MusicBrainz as well – the UI would be the same to pull genres from other levels in ListenBrainz (e.g. from the artist to the release) and suggest them to the user to click (+) or (-) to add them for real real. Similarly, we could suggest genres from music we know is similar to the stuff the user is listening to.</p> <p><strong>Missing data</strong></p> <p>We could consider adding links to Harmony on the missing data page. It’s probably not too legally problematic and we can take the links down if someone complains.</p> <p><strong>Stats on demand</strong></p> <p>We should add a way to generate old stats – at least at first, it might be enough to have a way to tell the user how long that’s going to take.</p> <p>We currently generate all stats from scratch daily (except that deletions happen every 15 days). Should we keep doing this? Should we have iterative generation instead?</p> <h2 class="wp-block-heading">Notifications</h2> <figure class="wp-block-image size-large"><img data-attachment-id="12230" data-permalink="https://blog.metabrainz.org/2024/10/30/metabrainz-summit-2024/summit24-monkeys-2/" data-orig-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-monkeys-1.jpg" data-orig-size="2735,1823" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="summit24-monkeys" data-image-description="" data-image-caption="" data-medium-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-monkeys-1.jpg?w=300" data-large-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-monkeys-1.jpg?w=2735" loading="lazy" width="2735" height="1823" src="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-monkeys-1.jpg?w=2735" alt="" class="wp-image-12230" srcset="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-monkeys-1.jpg 2735w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-monkeys-1.jpg?w=128 128w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-monkeys-1.jpg?w=300 300w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-monkeys-1.jpg?w=768 768w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-monkeys-1.jpg?w=1024 1024w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px" /><figcaption class="wp-element-caption"><em>Monkeys playfighting on the summit terrace! This picture isn’t relevant but has to go somewhere. OR are we secretly planning a monkey-based notification system? My lips are sealed</em></figcaption></figure> <p>We have a project already built for sending emails, but we also have a series of requirements for our notifications. We should first consider what our requirements are, then see if the project can actually fulfil it. For example, it currently doesn’t support attachments, which we use for Year in Music emails, so we need to either change that or figure out a different way to do so.</p> <p>Onsite notifications should be easier, so we can start with that.</p> <h2 class="wp-block-heading">Donations and flairs</h2> <p>We can look into showing donor status across MetaBrainz (such as in ListenBrainz and MusicBrainz). Would it be interesting to have MusicBrainz edits <em>earn</em> donor status with edits, as well?</p> <p>It was raised that we shouldn’t push for donations from MusicBrainz users, because they already donate a lot of time. It was mentioned that because they are invested to that level, they might be happier to give us money without being pushed (e.g. don’t bug them, but give them the opportunity to contribute).</p> <p>Donator flairs should probably not be shown in places like the edit notes, on sites like MusicBrainz, (to avoid the impression that donators have more say than any other user) but they can and possibly should be shown on user pages. </p> <p>We could eventually give flairs (and badges?) for MusicBrainz editing – BookBrainz editors already get badges, for example.</p> <hr class="wp-block-separator has-alpha-channel-opacity" /> <figure class="wp-block-image size-large"><img data-attachment-id="12225" data-permalink="https://blog.metabrainz.org/2024/10/30/metabrainz-summit-2024/summit24-stepwell/" data-orig-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-stepwell.jpg" data-orig-size="2735,1823" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"1"}" data-image-title="summit24-stepwell" data-image-description="" data-image-caption="" data-medium-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-stepwell.jpg?w=300" data-large-file="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-stepwell.jpg?w=2735" loading="lazy" width="2735" height="1823" src="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-stepwell.jpg?w=2735" alt="" class="wp-image-12225" srcset="https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-stepwell.jpg 2735w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-stepwell.jpg?w=128 128w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-stepwell.jpg?w=300 300w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-stepwell.jpg?w=768 768w, https://blog.metabrainz.org/wp-content/uploads/2024/10/summit24-stepwell.jpg?w=1024 1024w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px" /><figcaption class="wp-element-caption"><em>See you at the 2025 MetaBrainz summit!</em></figcaption></figure> <p></p> <div id="jp-post-flair" class="sharedaddy sd-sharing-enabled"> <div id='jp-relatedposts' class='jp-relatedposts' > <h3 class="jp-relatedposts-headline"><em>Related</em></h3> </div></div> </div><!-- .entry-content --> <footer class="entry-footer"> <span class="byline"><span class="author vcard"><span class="screen-reader-text">Author </span> <a class="url fn n" href="https://blog.metabrainz.org/author/aerozol/">aerozol</a></span></span><span class="posted-on"><span class="screen-reader-text">Posted on </span><a href="https://blog.metabrainz.org/2024/10/30/metabrainz-summit-2024/" rel="bookmark"><time class="entry-date published" datetime="2024-10-30T19:26:04+00:00">October 30, 2024</time><time class="updated" datetime="2024-11-01T21:37:05+00:00">November 1, 2024</time></a></span><span class="cat-links"><span class="screen-reader-text">Categories </span><a href="https://blog.metabrainz.org/category/metabrainz/" rel="category tag">MetaBrainz</a>, <a href="https://blog.metabrainz.org/category/summit/" rel="category tag">Summit</a></span><span class="tags-links"><span class="screen-reader-text">Tags </span><a href="https://blog.metabrainz.org/tag/bookbrainz/" rel="tag">BookBrainz</a>, <a href="https://blog.metabrainz.org/tag/critiquebrainz/" rel="tag">CritiqueBrainz</a>, <a href="https://blog.metabrainz.org/tag/hardware/" rel="tag">Hardware</a>, <a href="https://blog.metabrainz.org/tag/listenbrainz/" rel="tag">ListenBrainz</a>, <a href="https://blog.metabrainz.org/tag/metabrainz-2/" rel="tag">metabrainz</a>, <a href="https://blog.metabrainz.org/tag/musicbrainz/" rel="tag">MusicBrainz</a>, <a href="https://blog.metabrainz.org/tag/summit/" rel="tag">Summit</a>, <a href="https://blog.metabrainz.org/tag/summit-24/" rel="tag">summit 24</a></span> </footer><!-- .entry-footer --> </article><!-- #post-12081 --> <div id="comments" class="comments-area"> <h2 class="comments-title"> 3 thoughts on “MetaBrainz Summit 2024” </h2> <ol class="comment-list"> <li id="comment-366353" class="comment even thread-even depth-1"> <article id="div-comment-366353" class="comment-body"> <footer class="comment-meta"> <div class="comment-author vcard"> <b class="fn">Dan / sound.and.vision</b> <span class="says">says:</span> </div><!-- .comment-author --> <div class="comment-metadata"> <a href="https://blog.metabrainz.org/2024/10/30/metabrainz-summit-2024/#comment-366353"><time datetime="2024-10-30T23:56:47+00:00">October 30, 2024 at 23:56</time></a> </div><!-- .comment-metadata --> </footer><!-- .comment-meta --> <div class="comment-content"> <p>you guys have certainly been busy! To another wonderful year with the best community project online! – sound.and.vision</p> </div><!-- .comment-content --> </article><!-- .comment-body --> </li><!-- #comment-## --> <li id="comment-366354" class="comment byuser comment-author-phanboyiv odd alt thread-odd thread-alt depth-1"> <article id="div-comment-366354" class="comment-body"> <footer class="comment-meta"> <div class="comment-author vcard"> <b class="fn"><a href="http://www.stonemonkey.wordpress.com" class="url" rel="ugc external nofollow">phanboy_iv</a></b> <span class="says">says:</span> </div><!-- .comment-author --> <div class="comment-metadata"> <a href="https://blog.metabrainz.org/2024/10/30/metabrainz-summit-2024/#comment-366354"><time datetime="2024-10-31T16:45:29+00:00">October 31, 2024 at 16:45</time></a> </div><!-- .comment-metadata --> </footer><!-- .comment-meta --> <div class="comment-content"> <p>Thanks all! The work you do matters and we are all glad you are doing it!</p> </div><!-- .comment-content --> </article><!-- .comment-body --> </li><!-- #comment-## --> <li id="comment-366355" class="comment byuser comment-author-roman412 even thread-even depth-1"> <article id="div-comment-366355" class="comment-body"> <footer class="comment-meta"> <div class="comment-author vcard"> <b class="fn"><a href="http://musicbahai.wordpress.com" class="url" rel="ugc external nofollow">roman412</a></b> <span class="says">says:</span> </div><!-- .comment-author --> <div class="comment-metadata"> <a href="https://blog.metabrainz.org/2024/10/30/metabrainz-summit-2024/#comment-366355"><time datetime="2024-11-03T06:12:40+00:00">November 3, 2024 at 06:12</time></a> </div><!-- .comment-metadata --> </footer><!-- .comment-meta --> <div class="comment-content"> <p>Thanks a lot for the detailed notes, this is very helpful to understand what’s going on with MB!</p> </div><!-- .comment-content --> </article><!-- .comment-body --> </li><!-- #comment-## --> </ol><!-- .comment-list --> <div id="respond" class="comment-respond"> <h2 id="reply-title" class="comment-reply-title">Leave a comment</h2><form action="https://blog.metabrainz.org/wp-comments-post.php" method="post" id="commentform" class="comment-form" novalidate> <div class="comment-form__verbum transparent"></div><div class="verbum-form-meta"><input type='hidden' name='comment_post_ID' value='12081' id='comment_post_ID' /> <input type='hidden' name='comment_parent' id='comment_parent' value='0' /> <input type="hidden" name="highlander_comment_nonce" id="highlander_comment_nonce" value="04383424d5" /> <input type="hidden" name="verbum_show_subscription_modal" value="" /></div><p style="display: none;"><input type="hidden" id="akismet_comment_nonce" name="akismet_comment_nonce" value="58e4c1399d" /></p><p style="display: none !important;" class="akismet-fields-container" data-prefix="ak_"><label>Δ<textarea name="ak_hp_textarea" cols="45" rows="8" maxlength="100"></textarea></label><input type="hidden" id="ak_js_1" name="ak_js" value="132"/><script>document.getElementById( "ak_js_1" ).setAttribute( "value", ( new Date() ).getTime() );</script></p></form> </div><!-- #respond --> <p class="akismet_comment_form_privacy_notice">This site uses Akismet to reduce spam. <a href="https://akismet.com/privacy/" target="_blank" rel="nofollow noopener">Learn how your comment data is processed.</a></p> </div><!-- .comments-area --> <nav class="navigation post-navigation" aria-label="Posts"> <h2 class="screen-reader-text">Post navigation</h2> <div class="nav-links"><div class="nav-previous"><a href="https://blog.metabrainz.org/2024/10/25/withdrawn-and-expunged-releases-in-musicbrainz/" rel="prev"><span class="meta-nav" aria-hidden="true">Previous</span> <span class="screen-reader-text">Previous post:</span> <span class="post-title">Withdrawn and Expunged releases in MusicBrainz</span></a></div><div class="nav-next"><a href="https://blog.metabrainz.org/2024/11/06/gsoc-2024-integrating-imports-into-bookbrainz/" rel="next"><span class="meta-nav" aria-hidden="true">Next</span> <span class="screen-reader-text">Next post:</span> <span class="post-title">GSoC 2024: Integrating imports into BookBrainz</span></a></div></div> </nav> </main><!-- .site-main --> </div><!-- .content-area --> <aside id="secondary" class="sidebar widget-area"> <section id="block-7" class="widget widget_block"><h2 class="widget-title">Links</h2><div class="wp-widget-group__inner-blocks"> <ul class="wp-block-list"> <li><a href="https://metabrainz.org/">MetaBrainz Foundation</a></li> <li><a href="https://community.metabrainz.org/">MetaBrainz Forums</a></li> <li><a href="https://bsky.app/profile/metabrainz.org">Bluesky</a> / <a href="https://mastodon.social/@metabrainz">Mastodon</a></li> </ul> <ul class="wp-block-list"> <li><a href="https://musicbrainz.org/">MusicBrainz</a></li> <li><a href="https://listenbrainz.org/">ListenBrainz</a></li> <li><a href="https://bookbrainz.org/">BookBrainz</a></li> </ul> </div></section><section id="search-2" class="widget widget_search"><h2 class="widget-title">Search</h2> <form role="search" method="get" class="search-form" action="https://blog.metabrainz.org/"> <label> <span class="screen-reader-text"> Search for: </span> <input type="search" class="search-field" placeholder="Search …" value="" name="s" /> </label> <button type="submit" class="search-submit"><span class="screen-reader-text"> Search </span></button> </form> </section><section id="recent-comments-2" class="widget widget_recent_comments"><h2 class="widget-title">Recent Comments</h2> <table class="recentcommentsavatar" cellspacing="0" cellpadding="0" border="0"> <tr><td title="Hevosen Perse" class="recentcommentsavatartop" style="height:32px; width:32px;"></td><td class="recentcommentstexttop" style="">Hevosen Perse on <a href="https://blog.metabrainz.org/2024/04/23/ssl-com-is-evil-and-deceptive-dont-do-business-with-ssl-com/#comment-366399">SSL.com is evil and deceptive:…</a></td></tr><tr><td title="roman412" class="recentcommentsavatarend" style="height:32px; width:32px;"></td><td class="recentcommentstextend" style="">roman412 on <a href="https://blog.metabrainz.org/2025/02/05/picard-2-13-1-released/#comment-366398">Picard 2.13.1 released</a></td></tr><tr><td title="phwolfer" class="recentcommentsavatarend" style="height:32px; width:32px;"></td><td class="recentcommentstextend" style="">phwolfer on <a href="https://blog.metabrainz.org/2025/02/05/picard-2-13-1-released/#comment-366396">Picard 2.13.1 released</a></td></tr><tr><td title="roman412" class="recentcommentsavatarend" style="height:32px; width:32px;"></td><td class="recentcommentstextend" style="">roman412 on <a href="https://blog.metabrainz.org/2025/02/05/picard-2-13-1-released/#comment-366395">Picard 2.13.1 released</a></td></tr><tr><td title="yvanzo" class="recentcommentsavatarend" style="height:32px; width:32px;"></td><td class="recentcommentstextend" style="">yvanzo on <a href="https://blog.metabrainz.org/2025/01/29/musicbrainz-mirror-security-advisory-2025-01-29/#comment-366392">MusicBrainz mirror security ad…</a></td></tr> </table> </section><section id="categories-2" class="widget widget_categories"><h2 class="widget-title">Categories</h2><nav aria-label="Categories"> <ul> <li class="cat-item cat-item-304848241"><a href="https://blog.metabrainz.org/category/acousticbrainz/">AcousticBrainz</a> (17) </li> <li class="cat-item cat-item-12894481"><a href="https://blog.metabrainz.org/category/musicbrainz/android-app/">Android App</a> (9) </li> <li class="cat-item cat-item-494176"><a href="https://blog.metabrainz.org/category/metabrainz/annual-report/">Annual Report</a> (9) </li> <li class="cat-item cat-item-91682"><a href="https://blog.metabrainz.org/category/april-fools-day/">April Fools' Day</a> (7) </li> <li class="cat-item cat-item-143163948"><a href="https://blog.metabrainz.org/category/better-late-than-never-dept/">Better late than never dept.</a> (14) </li> <li class="cat-item cat-item-635784"><a href="https://blog.metabrainz.org/category/metabrainz/board-meeting-minutes/">Board Meeting Minutes</a> (2) </li> <li class="cat-item cat-item-462334187"><a href="https://blog.metabrainz.org/category/bookbrainz/">BookBrainz</a> (18) </li> <li class="cat-item cat-item-19867758"><a href="https://blog.metabrainz.org/category/development/updates/breaking-changes/">Breaking Changes</a> (7) </li> <li class="cat-item cat-item-772072676"><a href="https://blog.metabrainz.org/category/chatbrainz/">chatbrainz</a> (1) </li> <li class="cat-item cat-item-31409893"><a href="https://blog.metabrainz.org/category/community/cleanup-of-the-month/">Cleanup of the Month</a> (6) </li> <li class="cat-item cat-item-424687959"><a href="https://blog.metabrainz.org/category/google-programs/code%e2%80%90in/">Code‐in</a> (4) </li> <li class="cat-item cat-item-55382"><a href="https://blog.metabrainz.org/category/collaborations/">Collaborations</a> (4) </li> <li class="cat-item cat-item-2528"><a href="https://blog.metabrainz.org/category/community/">Community</a> (142) </li> <li class="cat-item cat-item-71159043"><a href="https://blog.metabrainz.org/category/community/community-recap/">Community Recap</a> (3) </li> <li class="cat-item cat-item-143163949"><a href="https://blog.metabrainz.org/category/musicbrainz/cover-art-archive/">Cover Art Archive</a> (5) </li> <li class="cat-item cat-item-225948242"><a href="https://blog.metabrainz.org/category/critiquebrainz/">CritiqueBrainz</a> (12) </li> <li class="cat-item cat-item-22379"><a href="https://blog.metabrainz.org/category/data/">Data</a> (30) </li> <li class="cat-item cat-item-780"><a href="https://blog.metabrainz.org/category/development/">Development</a> (258) </li> <li class="cat-item cat-item-772478166"><a href="https://blog.metabrainz.org/category/musicbrainz/event-art-archive/">Event Art Archive</a> (4) </li> <li class="cat-item cat-item-54"><a href="https://blog.metabrainz.org/category/general/">General</a> (134) </li> <li class="cat-item cat-item-23185871"><a href="https://blog.metabrainz.org/category/google-programs/">Google Programs</a> (18) </li> <li class="cat-item cat-item-79"><a href="https://blog.metabrainz.org/category/hardware/">Hardware</a> (24) </li> <li class="cat-item cat-item-149"><a href="https://blog.metabrainz.org/category/general/hosting/">Hosting</a> (69) </li> <li class="cat-item cat-item-6850"><a href="https://blog.metabrainz.org/category/musicbrainz/instruments/">Instruments</a> (10) </li> <li class="cat-item cat-item-47801351"><a href="https://blog.metabrainz.org/category/internet-pests/">Internet pests</a> (2) </li> <li class="cat-item cat-item-3558"><a href="https://blog.metabrainz.org/category/jobs/">Jobs</a> (1) </li> <li class="cat-item cat-item-2283"><a href="https://blog.metabrainz.org/category/legal/">Legal</a> (1) </li> <li class="cat-item cat-item-143163951"><a href="https://blog.metabrainz.org/category/libmusicbrainz/">libmusicbrainz</a> (15) </li> <li class="cat-item cat-item-7394916"><a href="https://blog.metabrainz.org/category/libtunepimp/">libtunepimp</a> (8) </li> <li class="cat-item cat-item-19606597"><a href="https://blog.metabrainz.org/category/data/linked-open-data/">Linked open data</a> (2) </li> <li class="cat-item cat-item-399253082"><a href="https://blog.metabrainz.org/category/listenbrainz/">ListenBrainz</a> (61) </li> <li class="cat-item cat-item-646467582"><a href="https://blog.metabrainz.org/category/messybrainz/">MessyBrainz</a> (1) </li> <li class="cat-item cat-item-122663067"><a href="https://blog.metabrainz.org/category/metabrainz/">MetaBrainz</a> (121) </li> <li class="cat-item cat-item-42827"><a href="https://blog.metabrainz.org/category/moderation/">Moderation</a> (8) </li> <li class="cat-item cat-item-170964"><a href="https://blog.metabrainz.org/category/musicbrainz/">MusicBrainz</a> (245) </li> <li class="cat-item cat-item-1511234"><a href="https://blog.metabrainz.org/category/musicbrainz/ngs/">NGS</a> (69) </li> <li class="cat-item cat-item-106116"><a href="https://blog.metabrainz.org/category/musicbrainz/picard/">Picard</a> (135) </li> <li class="cat-item cat-item-201310711"><a href="https://blog.metabrainz.org/category/development/updates/breaking-changes/schema-change-release/">Schema Change Release</a> (66) </li> <li class="cat-item cat-item-3079703"><a href="https://blog.metabrainz.org/category/development/search-server/">Search Server</a> (19) </li> <li class="cat-item cat-item-18568"><a href="https://blog.metabrainz.org/category/development/server/">Server</a> (460) </li> <li class="cat-item cat-item-646632085"><a href="https://blog.metabrainz.org/category/spambrainz/">SpamBrainz</a> (2) </li> <li class="cat-item cat-item-5959850"><a href="https://blog.metabrainz.org/category/style-guidelines/">Style Guidelines</a> (23) </li> <li class="cat-item cat-item-13930"><a href="https://blog.metabrainz.org/category/summaries/">Summaries</a> (6) </li> <li class="cat-item cat-item-176372"><a href="https://blog.metabrainz.org/category/google-programs/summer-of-code/">Summer of Code</a> (87) </li> <li class="cat-item cat-item-115537"><a href="https://blog.metabrainz.org/category/summit/">Summit</a> (25) </li> <li class="cat-item cat-item-143163953"><a href="https://blog.metabrainz.org/category/musicbrainz/tagger-affiliates/">Tagger Affiliates</a> (9) </li> <li class="cat-item cat-item-1"><a href="https://blog.metabrainz.org/category/uncategorized/">Uncategorized</a> (59) </li> <li class="cat-item cat-item-1171"><a href="https://blog.metabrainz.org/category/development/updates/">Updates</a> (357) </li> <li class="cat-item cat-item-95007"><a href="https://blog.metabrainz.org/category/development/virtual-machine/">Virtual Machine</a> (93) </li> <li class="cat-item cat-item-1359"><a href="https://blog.metabrainz.org/category/wiki/">Wiki</a> (7) </li> <li class="cat-item cat-item-143163954"><a href="https://blog.metabrainz.org/category/musicbrainz/windowstagger/">WindowsTagger</a> (33) </li> </ul> </nav></section><section id="archives-2" class="widget widget_archive"><h2 class="widget-title">Archives</h2><nav aria-label="Archives"> <ul> <li><a href='https://blog.metabrainz.org/2025/02/'>February 2025</a> (4)</li> <li><a href='https://blog.metabrainz.org/2025/01/'>January 2025</a> (4)</li> <li><a href='https://blog.metabrainz.org/2024/12/'>December 2024</a> (3)</li> <li><a href='https://blog.metabrainz.org/2024/11/'>November 2024</a> (6)</li> <li><a href='https://blog.metabrainz.org/2024/10/'>October 2024</a> (4)</li> <li><a href='https://blog.metabrainz.org/2024/09/'>September 2024</a> (7)</li> <li><a href='https://blog.metabrainz.org/2024/08/'>August 2024</a> (8)</li> <li><a href='https://blog.metabrainz.org/2024/07/'>July 2024</a> (3)</li> <li><a href='https://blog.metabrainz.org/2024/06/'>June 2024</a> (5)</li> <li><a href='https://blog.metabrainz.org/2024/05/'>May 2024</a> (6)</li> <li><a href='https://blog.metabrainz.org/2024/04/'>April 2024</a> (5)</li> <li><a href='https://blog.metabrainz.org/2024/03/'>March 2024</a> (5)</li> <li><a href='https://blog.metabrainz.org/2024/02/'>February 2024</a> (3)</li> <li><a href='https://blog.metabrainz.org/2024/01/'>January 2024</a> (5)</li> <li><a href='https://blog.metabrainz.org/2023/12/'>December 2023</a> (4)</li> <li><a href='https://blog.metabrainz.org/2023/11/'>November 2023</a> (5)</li> <li><a href='https://blog.metabrainz.org/2023/10/'>October 2023</a> (6)</li> <li><a href='https://blog.metabrainz.org/2023/09/'>September 2023</a> (8)</li> <li><a href='https://blog.metabrainz.org/2023/08/'>August 2023</a> (8)</li> <li><a href='https://blog.metabrainz.org/2023/07/'>July 2023</a> (6)</li> <li><a href='https://blog.metabrainz.org/2023/06/'>June 2023</a> (5)</li> <li><a href='https://blog.metabrainz.org/2023/05/'>May 2023</a> (9)</li> <li><a href='https://blog.metabrainz.org/2023/04/'>April 2023</a> (3)</li> <li><a href='https://blog.metabrainz.org/2023/03/'>March 2023</a> (3)</li> <li><a href='https://blog.metabrainz.org/2023/02/'>February 2023</a> (5)</li> <li><a href='https://blog.metabrainz.org/2023/01/'>January 2023</a> (4)</li> <li><a href='https://blog.metabrainz.org/2022/12/'>December 2022</a> (2)</li> <li><a href='https://blog.metabrainz.org/2022/11/'>November 2022</a> (5)</li> <li><a href='https://blog.metabrainz.org/2022/10/'>October 2022</a> (3)</li> <li><a href='https://blog.metabrainz.org/2022/09/'>September 2022</a> (6)</li> <li><a href='https://blog.metabrainz.org/2022/08/'>August 2022</a> (4)</li> <li><a href='https://blog.metabrainz.org/2022/07/'>July 2022</a> (3)</li> <li><a href='https://blog.metabrainz.org/2022/06/'>June 2022</a> (3)</li> <li><a href='https://blog.metabrainz.org/2022/05/'>May 2022</a> (6)</li> <li><a href='https://blog.metabrainz.org/2022/04/'>April 2022</a> (3)</li> <li><a href='https://blog.metabrainz.org/2022/03/'>March 2022</a> (5)</li> <li><a href='https://blog.metabrainz.org/2022/02/'>February 2022</a> (4)</li> <li><a href='https://blog.metabrainz.org/2022/01/'>January 2022</a> (3)</li> <li><a href='https://blog.metabrainz.org/2021/12/'>December 2021</a> (7)</li> <li><a href='https://blog.metabrainz.org/2021/11/'>November 2021</a> (3)</li> <li><a href='https://blog.metabrainz.org/2021/10/'>October 2021</a> (4)</li> <li><a href='https://blog.metabrainz.org/2021/09/'>September 2021</a> (3)</li> <li><a href='https://blog.metabrainz.org/2021/08/'>August 2021</a> (6)</li> <li><a href='https://blog.metabrainz.org/2021/07/'>July 2021</a> (2)</li> <li><a href='https://blog.metabrainz.org/2021/06/'>June 2021</a> (5)</li> <li><a href='https://blog.metabrainz.org/2021/05/'>May 2021</a> (5)</li> <li><a href='https://blog.metabrainz.org/2021/04/'>April 2021</a> (6)</li> <li><a href='https://blog.metabrainz.org/2021/03/'>March 2021</a> (6)</li> <li><a href='https://blog.metabrainz.org/2021/02/'>February 2021</a> (4)</li> <li><a href='https://blog.metabrainz.org/2021/01/'>January 2021</a> (2)</li> <li><a href='https://blog.metabrainz.org/2020/12/'>December 2020</a> (5)</li> <li><a href='https://blog.metabrainz.org/2020/11/'>November 2020</a> (3)</li> <li><a href='https://blog.metabrainz.org/2020/10/'>October 2020</a> (6)</li> <li><a href='https://blog.metabrainz.org/2020/09/'>September 2020</a> (4)</li> <li><a href='https://blog.metabrainz.org/2020/08/'>August 2020</a> (8)</li> <li><a href='https://blog.metabrainz.org/2020/07/'>July 2020</a> (4)</li> <li><a href='https://blog.metabrainz.org/2020/06/'>June 2020</a> (4)</li> <li><a href='https://blog.metabrainz.org/2020/05/'>May 2020</a> (5)</li> <li><a href='https://blog.metabrainz.org/2020/04/'>April 2020</a> (5)</li> <li><a href='https://blog.metabrainz.org/2020/03/'>March 2020</a> (3)</li> <li><a href='https://blog.metabrainz.org/2020/02/'>February 2020</a> (8)</li> <li><a href='https://blog.metabrainz.org/2020/01/'>January 2020</a> (3)</li> <li><a href='https://blog.metabrainz.org/2019/12/'>December 2019</a> (3)</li> <li><a href='https://blog.metabrainz.org/2019/11/'>November 2019</a> (4)</li> <li><a href='https://blog.metabrainz.org/2019/10/'>October 2019</a> (4)</li> <li><a href='https://blog.metabrainz.org/2019/09/'>September 2019</a> (4)</li> <li><a href='https://blog.metabrainz.org/2019/08/'>August 2019</a> (7)</li> <li><a href='https://blog.metabrainz.org/2019/06/'>June 2019</a> (3)</li> <li><a href='https://blog.metabrainz.org/2019/05/'>May 2019</a> (4)</li> <li><a href='https://blog.metabrainz.org/2019/04/'>April 2019</a> (3)</li> <li><a href='https://blog.metabrainz.org/2019/03/'>March 2019</a> (5)</li> <li><a href='https://blog.metabrainz.org/2019/02/'>February 2019</a> (2)</li> <li><a href='https://blog.metabrainz.org/2019/01/'>January 2019</a> (2)</li> <li><a href='https://blog.metabrainz.org/2018/12/'>December 2018</a> (3)</li> <li><a href='https://blog.metabrainz.org/2018/11/'>November 2018</a> (4)</li> <li><a href='https://blog.metabrainz.org/2018/10/'>October 2018</a> (3)</li> <li><a href='https://blog.metabrainz.org/2018/09/'>September 2018</a> (9)</li> <li><a href='https://blog.metabrainz.org/2018/08/'>August 2018</a> (7)</li> <li><a href='https://blog.metabrainz.org/2018/07/'>July 2018</a> (4)</li> <li><a href='https://blog.metabrainz.org/2018/06/'>June 2018</a> (3)</li> <li><a href='https://blog.metabrainz.org/2018/05/'>May 2018</a> (3)</li> <li><a href='https://blog.metabrainz.org/2018/04/'>April 2018</a> (2)</li> <li><a href='https://blog.metabrainz.org/2018/03/'>March 2018</a> (7)</li> <li><a href='https://blog.metabrainz.org/2018/02/'>February 2018</a> (3)</li> <li><a href='https://blog.metabrainz.org/2018/01/'>January 2018</a> (3)</li> <li><a href='https://blog.metabrainz.org/2017/12/'>December 2017</a> (2)</li> <li><a href='https://blog.metabrainz.org/2017/11/'>November 2017</a> (2)</li> <li><a href='https://blog.metabrainz.org/2017/10/'>October 2017</a> (2)</li> <li><a href='https://blog.metabrainz.org/2017/09/'>September 2017</a> (10)</li> <li><a href='https://blog.metabrainz.org/2017/08/'>August 2017</a> (7)</li> <li><a href='https://blog.metabrainz.org/2017/07/'>July 2017</a> (3)</li> <li><a href='https://blog.metabrainz.org/2017/06/'>June 2017</a> (5)</li> <li><a href='https://blog.metabrainz.org/2017/05/'>May 2017</a> (6)</li> <li><a href='https://blog.metabrainz.org/2017/04/'>April 2017</a> (3)</li> <li><a href='https://blog.metabrainz.org/2017/03/'>March 2017</a> (5)</li> <li><a href='https://blog.metabrainz.org/2017/02/'>February 2017</a> (5)</li> <li><a href='https://blog.metabrainz.org/2017/01/'>January 2017</a> (4)</li> <li><a href='https://blog.metabrainz.org/2016/12/'>December 2016</a> (5)</li> <li><a href='https://blog.metabrainz.org/2016/11/'>November 2016</a> (5)</li> <li><a href='https://blog.metabrainz.org/2016/10/'>October 2016</a> (2)</li> <li><a href='https://blog.metabrainz.org/2016/09/'>September 2016</a> (1)</li> <li><a href='https://blog.metabrainz.org/2016/08/'>August 2016</a> (7)</li> <li><a href='https://blog.metabrainz.org/2016/07/'>July 2016</a> (3)</li> <li><a href='https://blog.metabrainz.org/2016/06/'>June 2016</a> (3)</li> <li><a href='https://blog.metabrainz.org/2016/05/'>May 2016</a> (14)</li> <li><a href='https://blog.metabrainz.org/2016/04/'>April 2016</a> (4)</li> <li><a href='https://blog.metabrainz.org/2016/03/'>March 2016</a> (8)</li> <li><a href='https://blog.metabrainz.org/2016/02/'>February 2016</a> (6)</li> <li><a href='https://blog.metabrainz.org/2016/01/'>January 2016</a> (4)</li> <li><a href='https://blog.metabrainz.org/2015/12/'>December 2015</a> (4)</li> <li><a href='https://blog.metabrainz.org/2015/11/'>November 2015</a> (6)</li> <li><a href='https://blog.metabrainz.org/2015/10/'>October 2015</a> (2)</li> <li><a href='https://blog.metabrainz.org/2015/09/'>September 2015</a> (9)</li> <li><a href='https://blog.metabrainz.org/2015/08/'>August 2015</a> (5)</li> <li><a href='https://blog.metabrainz.org/2015/07/'>July 2015</a> (12)</li> <li><a href='https://blog.metabrainz.org/2015/06/'>June 2015</a> (4)</li> <li><a href='https://blog.metabrainz.org/2015/05/'>May 2015</a> (8)</li> <li><a href='https://blog.metabrainz.org/2015/04/'>April 2015</a> (5)</li> <li><a href='https://blog.metabrainz.org/2015/03/'>March 2015</a> (9)</li> <li><a href='https://blog.metabrainz.org/2015/02/'>February 2015</a> (5)</li> <li><a href='https://blog.metabrainz.org/2015/01/'>January 2015</a> (6)</li> <li><a href='https://blog.metabrainz.org/2014/12/'>December 2014</a> (6)</li> <li><a href='https://blog.metabrainz.org/2014/11/'>November 2014</a> (8)</li> <li><a href='https://blog.metabrainz.org/2014/10/'>October 2014</a> (6)</li> <li><a href='https://blog.metabrainz.org/2014/09/'>September 2014</a> (5)</li> <li><a href='https://blog.metabrainz.org/2014/08/'>August 2014</a> (2)</li> <li><a href='https://blog.metabrainz.org/2014/07/'>July 2014</a> (5)</li> <li><a href='https://blog.metabrainz.org/2014/06/'>June 2014</a> (3)</li> <li><a href='https://blog.metabrainz.org/2014/05/'>May 2014</a> (9)</li> <li><a href='https://blog.metabrainz.org/2014/04/'>April 2014</a> (5)</li> <li><a href='https://blog.metabrainz.org/2014/03/'>March 2014</a> (7)</li> <li><a href='https://blog.metabrainz.org/2014/02/'>February 2014</a> (4)</li> <li><a href='https://blog.metabrainz.org/2014/01/'>January 2014</a> (2)</li> <li><a href='https://blog.metabrainz.org/2013/12/'>December 2013</a> (10)</li> <li><a href='https://blog.metabrainz.org/2013/11/'>November 2013</a> (7)</li> <li><a href='https://blog.metabrainz.org/2013/10/'>October 2013</a> (9)</li> <li><a href='https://blog.metabrainz.org/2013/09/'>September 2013</a> (7)</li> <li><a href='https://blog.metabrainz.org/2013/08/'>August 2013</a> (7)</li> <li><a href='https://blog.metabrainz.org/2013/07/'>July 2013</a> (4)</li> <li><a href='https://blog.metabrainz.org/2013/06/'>June 2013</a> (11)</li> <li><a href='https://blog.metabrainz.org/2013/05/'>May 2013</a> (8)</li> <li><a href='https://blog.metabrainz.org/2013/04/'>April 2013</a> (6)</li> <li><a href='https://blog.metabrainz.org/2013/03/'>March 2013</a> (7)</li> <li><a href='https://blog.metabrainz.org/2013/02/'>February 2013</a> (8)</li> <li><a href='https://blog.metabrainz.org/2013/01/'>January 2013</a> (8)</li> <li><a href='https://blog.metabrainz.org/2012/12/'>December 2012</a> (4)</li> <li><a href='https://blog.metabrainz.org/2012/11/'>November 2012</a> (4)</li> <li><a href='https://blog.metabrainz.org/2012/10/'>October 2012</a> (11)</li> <li><a href='https://blog.metabrainz.org/2012/09/'>September 2012</a> (13)</li> <li><a href='https://blog.metabrainz.org/2012/08/'>August 2012</a> (5)</li> <li><a href='https://blog.metabrainz.org/2012/07/'>July 2012</a> (9)</li> <li><a href='https://blog.metabrainz.org/2012/06/'>June 2012</a> (7)</li> <li><a href='https://blog.metabrainz.org/2012/05/'>May 2012</a> (14)</li> <li><a href='https://blog.metabrainz.org/2012/04/'>April 2012</a> (6)</li> <li><a href='https://blog.metabrainz.org/2012/03/'>March 2012</a> (7)</li> <li><a href='https://blog.metabrainz.org/2012/02/'>February 2012</a> (5)</li> <li><a href='https://blog.metabrainz.org/2012/01/'>January 2012</a> (13)</li> <li><a href='https://blog.metabrainz.org/2011/12/'>December 2011</a> (8)</li> <li><a href='https://blog.metabrainz.org/2011/11/'>November 2011</a> (4)</li> <li><a href='https://blog.metabrainz.org/2011/10/'>October 2011</a> (9)</li> <li><a href='https://blog.metabrainz.org/2011/09/'>September 2011</a> (6)</li> <li><a href='https://blog.metabrainz.org/2011/08/'>August 2011</a> (7)</li> <li><a href='https://blog.metabrainz.org/2011/07/'>July 2011</a> (11)</li> <li><a href='https://blog.metabrainz.org/2011/06/'>June 2011</a> (9)</li> <li><a href='https://blog.metabrainz.org/2011/05/'>May 2011</a> (22)</li> <li><a href='https://blog.metabrainz.org/2011/04/'>April 2011</a> (4)</li> <li><a href='https://blog.metabrainz.org/2011/03/'>March 2011</a> (8)</li> <li><a href='https://blog.metabrainz.org/2011/02/'>February 2011</a> (6)</li> <li><a href='https://blog.metabrainz.org/2011/01/'>January 2011</a> (7)</li> <li><a href='https://blog.metabrainz.org/2010/12/'>December 2010</a> (1)</li> <li><a href='https://blog.metabrainz.org/2010/11/'>November 2010</a> (1)</li> <li><a href='https://blog.metabrainz.org/2010/10/'>October 2010</a> (4)</li> <li><a href='https://blog.metabrainz.org/2010/09/'>September 2010</a> (4)</li> <li><a href='https://blog.metabrainz.org/2010/08/'>August 2010</a> (5)</li> <li><a href='https://blog.metabrainz.org/2010/07/'>July 2010</a> (7)</li> <li><a href='https://blog.metabrainz.org/2010/06/'>June 2010</a> (9)</li> <li><a href='https://blog.metabrainz.org/2010/05/'>May 2010</a> (7)</li> <li><a href='https://blog.metabrainz.org/2010/04/'>April 2010</a> (1)</li> <li><a href='https://blog.metabrainz.org/2010/03/'>March 2010</a> (7)</li> <li><a href='https://blog.metabrainz.org/2010/02/'>February 2010</a> (4)</li> <li><a href='https://blog.metabrainz.org/2010/01/'>January 2010</a> (4)</li> <li><a href='https://blog.metabrainz.org/2009/12/'>December 2009</a> (3)</li> <li><a href='https://blog.metabrainz.org/2009/11/'>November 2009</a> (1)</li> <li><a href='https://blog.metabrainz.org/2009/10/'>October 2009</a> (5)</li> <li><a href='https://blog.metabrainz.org/2009/09/'>September 2009</a> (2)</li> <li><a href='https://blog.metabrainz.org/2009/08/'>August 2009</a> (4)</li> <li><a href='https://blog.metabrainz.org/2009/07/'>July 2009</a> (3)</li> <li><a href='https://blog.metabrainz.org/2009/06/'>June 2009</a> (3)</li> <li><a href='https://blog.metabrainz.org/2009/05/'>May 2009</a> (6)</li> <li><a href='https://blog.metabrainz.org/2009/04/'>April 2009</a> (2)</li> <li><a href='https://blog.metabrainz.org/2009/03/'>March 2009</a> (5)</li> <li><a href='https://blog.metabrainz.org/2009/02/'>February 2009</a> (7)</li> <li><a href='https://blog.metabrainz.org/2009/01/'>January 2009</a> (2)</li> <li><a href='https://blog.metabrainz.org/2008/12/'>December 2008</a> (3)</li> <li><a href='https://blog.metabrainz.org/2008/11/'>November 2008</a> (6)</li> <li><a href='https://blog.metabrainz.org/2008/10/'>October 2008</a> (8)</li> <li><a href='https://blog.metabrainz.org/2008/09/'>September 2008</a> (8)</li> <li><a href='https://blog.metabrainz.org/2008/08/'>August 2008</a> (5)</li> <li><a href='https://blog.metabrainz.org/2008/07/'>July 2008</a> (5)</li> <li><a href='https://blog.metabrainz.org/2008/06/'>June 2008</a> (7)</li> <li><a href='https://blog.metabrainz.org/2008/05/'>May 2008</a> (5)</li> <li><a href='https://blog.metabrainz.org/2008/04/'>April 2008</a> (4)</li> <li><a href='https://blog.metabrainz.org/2008/03/'>March 2008</a> (6)</li> <li><a href='https://blog.metabrainz.org/2008/02/'>February 2008</a> (8)</li> <li><a href='https://blog.metabrainz.org/2008/01/'>January 2008</a> (3)</li> <li><a href='https://blog.metabrainz.org/2007/11/'>November 2007</a> (7)</li> <li><a href='https://blog.metabrainz.org/2007/10/'>October 2007</a> (7)</li> <li><a href='https://blog.metabrainz.org/2007/09/'>September 2007</a> (2)</li> <li><a href='https://blog.metabrainz.org/2007/08/'>August 2007</a> (5)</li> <li><a href='https://blog.metabrainz.org/2007/07/'>July 2007</a> (3)</li> <li><a href='https://blog.metabrainz.org/2007/06/'>June 2007</a> (4)</li> <li><a href='https://blog.metabrainz.org/2007/05/'>May 2007</a> (8)</li> <li><a href='https://blog.metabrainz.org/2007/04/'>April 2007</a> (11)</li> <li><a href='https://blog.metabrainz.org/2007/03/'>March 2007</a> (9)</li> <li><a href='https://blog.metabrainz.org/2007/02/'>February 2007</a> (4)</li> <li><a href='https://blog.metabrainz.org/2007/01/'>January 2007</a> (8)</li> <li><a href='https://blog.metabrainz.org/2006/12/'>December 2006</a> (4)</li> <li><a href='https://blog.metabrainz.org/2006/11/'>November 2006</a> (6)</li> <li><a href='https://blog.metabrainz.org/2006/10/'>October 2006</a> (7)</li> <li><a href='https://blog.metabrainz.org/2006/09/'>September 2006</a> (10)</li> <li><a href='https://blog.metabrainz.org/2006/08/'>August 2006</a> (13)</li> <li><a href='https://blog.metabrainz.org/2006/07/'>July 2006</a> (11)</li> <li><a href='https://blog.metabrainz.org/2006/06/'>June 2006</a> (3)</li> <li><a href='https://blog.metabrainz.org/2006/05/'>May 2006</a> (9)</li> <li><a href='https://blog.metabrainz.org/2006/04/'>April 2006</a> (2)</li> <li><a href='https://blog.metabrainz.org/2006/03/'>March 2006</a> (7)</li> <li><a href='https://blog.metabrainz.org/2006/02/'>February 2006</a> (8)</li> <li><a href='https://blog.metabrainz.org/2006/01/'>January 2006</a> (13)</li> <li><a href='https://blog.metabrainz.org/2005/12/'>December 2005</a> (4)</li> <li><a href='https://blog.metabrainz.org/2005/11/'>November 2005</a> (6)</li> <li><a href='https://blog.metabrainz.org/2005/10/'>October 2005</a> (3)</li> <li><a href='https://blog.metabrainz.org/2005/09/'>September 2005</a> (4)</li> <li><a href='https://blog.metabrainz.org/2005/08/'>August 2005</a> (1)</li> <li><a href='https://blog.metabrainz.org/2005/07/'>July 2005</a> (4)</li> <li><a href='https://blog.metabrainz.org/2005/06/'>June 2005</a> (3)</li> <li><a href='https://blog.metabrainz.org/2005/05/'>May 2005</a> (9)</li> <li><a href='https://blog.metabrainz.org/2005/04/'>April 2005</a> (6)</li> <li><a href='https://blog.metabrainz.org/2005/03/'>March 2005</a> (4)</li> <li><a href='https://blog.metabrainz.org/2005/02/'>February 2005</a> (9)</li> <li><a href='https://blog.metabrainz.org/2005/01/'>January 2005</a> (6)</li> <li><a href='https://blog.metabrainz.org/2004/12/'>December 2004</a> (8)</li> <li><a href='https://blog.metabrainz.org/2004/11/'>November 2004</a> (11)</li> <li><a href='https://blog.metabrainz.org/2004/10/'>October 2004</a> (22)</li> <li><a href='https://blog.metabrainz.org/2004/08/'>August 2004</a> (1)</li> <li><a href='https://blog.metabrainz.org/2004/07/'>July 2004</a> (1)</li> <li><a href='https://blog.metabrainz.org/2004/05/'>May 2004</a> (2)</li> <li><a href='https://blog.metabrainz.org/2004/04/'>April 2004</a> (1)</li> <li><a href='https://blog.metabrainz.org/2004/03/'>March 2004</a> (4)</li> <li><a href='https://blog.metabrainz.org/2004/02/'>February 2004</a> (2)</li> <li><a href='https://blog.metabrainz.org/2004/01/'>January 2004</a> (2)</li> <li><a href='https://blog.metabrainz.org/2003/12/'>December 2003</a> (1)</li> <li><a href='https://blog.metabrainz.org/2003/11/'>November 2003</a> (2)</li> <li><a href='https://blog.metabrainz.org/2003/10/'>October 2003</a> (4)</li> <li><a href='https://blog.metabrainz.org/2003/09/'>September 2003</a> (1)</li> <li><a href='https://blog.metabrainz.org/2003/07/'>July 2003</a> (2)</li> <li><a href='https://blog.metabrainz.org/2003/06/'>June 2003</a> (6)</li> <li><a href='https://blog.metabrainz.org/2003/04/'>April 2003</a> (2)</li> <li><a href='https://blog.metabrainz.org/2003/03/'>March 2003</a> (2)</li> <li><a href='https://blog.metabrainz.org/2003/01/'>January 2003</a> (1)</li> </ul> </nav></section> </aside><!-- .sidebar .widget-area --> </div><!-- .site-content --> <footer id="colophon" class="site-footer"> <nav class="main-navigation" aria-label="Footer Primary Menu"> </nav><!-- .main-navigation --> <div class="site-info"> <span class="site-title"><a href="https://blog.metabrainz.org/" rel="home">MetaBrainz Blog</a></span> <a href="https://wordpress.com/?ref=footer_blog" rel="nofollow">Blog at WordPress.com.</a> </div><!-- .site-info --> </footer><!-- .site-footer --> </div><!-- .site-inner --> </div><!-- .site --> <!-- --> <div style="display:none"> </div> <div id="actionbar" dir="ltr" style="display: none;" class="actnbr-pub-twentysixteen actnbr-has-follow actnbr-has-actions"> <ul> <li class="actnbr-btn actnbr-hidden"> <a class="actnbr-action actnbr-actn-comment" href="https://blog.metabrainz.org/2024/10/30/metabrainz-summit-2024/#comments"> <svg class="gridicon gridicons-comment" height="20" width="20" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><g><path d="M12 16l-5 5v-5H5c-1.1 0-2-.9-2-2V5c0-1.1.9-2 2-2h14c1.1 0 2 .9 2 2v9c0 1.1-.9 2-2 2h-7z"/></g></svg> <span>Comment </span> </a> </li> <li class="actnbr-btn actnbr-hidden"> <a class="actnbr-action actnbr-actn-reblog" href=""> <svg class="gridicon gridicons-reblog" height="20" width="20" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><g><path d="M22.086 9.914L20 7.828V18c0 1.105-.895 2-2 2h-7v-2h7V7.828l-2.086 2.086L14.5 8.5 19 4l4.5 4.5-1.414 1.414zM6 16.172V6h7V4H6c-1.105 0-2 .895-2 2v10.172l-2.086-2.086L.5 15.5 5 20l4.5-4.5-1.414-1.414L6 16.172z"/></g></svg><span>Reblog</span> </a> </li> <li class="actnbr-btn actnbr-hidden"> <a class="actnbr-action actnbr-actn-follow " href=""> <svg class="gridicon" height="20" width="20" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path clip-rule="evenodd" d="m4 4.5h12v6.5h1.5v-6.5-1.5h-1.5-12-1.5v1.5 10.5c0 1.1046.89543 2 2 2h7v-1.5h-7c-.27614 0-.5-.2239-.5-.5zm10.5 2h-9v1.5h9zm-5 3h-4v1.5h4zm3.5 1.5h-1v1h1zm-1-1.5h-1.5v1.5 1 1.5h1.5 1 1.5v-1.5-1-1.5h-1.5zm-2.5 2.5h-4v1.5h4zm6.5 1.25h1.5v2.25h2.25v1.5h-2.25v2.25h-1.5v-2.25h-2.25v-1.5h2.25z" fill-rule="evenodd"></path></svg> <span>Subscribe</span> </a> <a class="actnbr-action actnbr-actn-following no-display" href=""> <svg class="gridicon" height="20" width="20" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path fill-rule="evenodd" clip-rule="evenodd" d="M16 4.5H4V15C4 15.2761 4.22386 15.5 4.5 15.5H11.5V17H4.5C3.39543 17 2.5 16.1046 2.5 15V4.5V3H4H16H17.5V4.5V12.5H16V4.5ZM5.5 6.5H14.5V8H5.5V6.5ZM5.5 9.5H9.5V11H5.5V9.5ZM12 11H13V12H12V11ZM10.5 9.5H12H13H14.5V11V12V13.5H13H12H10.5V12V11V9.5ZM5.5 12H9.5V13.5H5.5V12Z" fill="#008A20"></path><path class="following-icon-tick" d="M13.5 16L15.5 18L19 14.5" stroke="#008A20" stroke-width="1.5"></path></svg> <span>Subscribed</span> </a> <div class="actnbr-popover tip tip-top-left actnbr-notice" id="follow-bubble"> <div class="tip-arrow"></div> <div class="tip-inner actnbr-follow-bubble"> <ul> <li class="actnbr-sitename"> <a href="https://blog.metabrainz.org"> <img loading='lazy' alt='' src='https://blog.metabrainz.org/wp-content/uploads/2018/11/cropped-metabrainz_logo.png?w=50' srcset='https://blog.metabrainz.org/wp-content/uploads/2018/11/cropped-metabrainz_logo.png?w=50 1x, https://blog.metabrainz.org/wp-content/uploads/2018/11/cropped-metabrainz_logo.png?w=75 1.5x, https://blog.metabrainz.org/wp-content/uploads/2018/11/cropped-metabrainz_logo.png?w=100 2x, https://blog.metabrainz.org/wp-content/uploads/2018/11/cropped-metabrainz_logo.png?w=150 3x, https://blog.metabrainz.org/wp-content/uploads/2018/11/cropped-metabrainz_logo.png?w=150 4x' class='avatar avatar-50' height='50' width='50' /> MetaBrainz Blog </a> </li> <div class="actnbr-message no-display"></div> <form method="post" action="https://subscribe.wordpress.com" accept-charset="utf-8" style="display: none;"> <div class="actnbr-follow-count">Join 359 other subscribers</div> <div> <input type="email" name="email" placeholder="Enter your email address" class="actnbr-email-field" aria-label="Enter your email address" /> </div> <input type="hidden" name="action" value="subscribe" /> <input type="hidden" name="blog_id" value="1935472" /> <input type="hidden" name="source" value="https://blog.metabrainz.org/2024/10/30/metabrainz-summit-2024/" /> <input type="hidden" name="sub-type" value="actionbar-follow" /> <input type="hidden" id="_wpnonce" name="_wpnonce" value="93630f3c2f" /> <div class="actnbr-button-wrap"> <button type="submit" value="Sign me up"> Sign me up </button> </div> </form> <li class="actnbr-login-nudge"> <div> Already have a WordPress.com account? <a href="https://wordpress.com/log-in?redirect_to=https%3A%2F%2Fr-login.wordpress.com%2Fremote-login.php%3Faction%3Dlink%26back%3Dhttps%253A%252F%252Fblog.metabrainz.org%252F2024%252F10%252F30%252Fmetabrainz-summit-2024%252F">Log in now.</a> </div> </li> </ul> </div> </div> </li> <li class="actnbr-ellipsis actnbr-hidden"> <svg class="gridicon gridicons-ellipsis" height="24" width="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><g><path d="M7 12c0 1.104-.896 2-2 2s-2-.896-2-2 .896-2 2-2 2 .896 2 2zm12-2c-1.104 0-2 .896-2 2s.896 2 2 2 2-.896 2-2-.896-2-2-2zm-7 0c-1.104 0-2 .896-2 2s.896 2 2 2 2-.896 2-2-.896-2-2-2z"/></g></svg> <div class="actnbr-popover tip tip-top-left actnbr-more"> <div class="tip-arrow"></div> <div class="tip-inner"> <ul> <li class="actnbr-sitename"> <a href="https://blog.metabrainz.org"> <img loading='lazy' alt='' src='https://blog.metabrainz.org/wp-content/uploads/2018/11/cropped-metabrainz_logo.png?w=50' srcset='https://blog.metabrainz.org/wp-content/uploads/2018/11/cropped-metabrainz_logo.png?w=50 1x, https://blog.metabrainz.org/wp-content/uploads/2018/11/cropped-metabrainz_logo.png?w=75 1.5x, https://blog.metabrainz.org/wp-content/uploads/2018/11/cropped-metabrainz_logo.png?w=100 2x, https://blog.metabrainz.org/wp-content/uploads/2018/11/cropped-metabrainz_logo.png?w=150 3x, https://blog.metabrainz.org/wp-content/uploads/2018/11/cropped-metabrainz_logo.png?w=150 4x' class='avatar avatar-50' height='50' width='50' /> MetaBrainz Blog </a> </li> <li class="actnbr-folded-follow"> <a class="actnbr-action actnbr-actn-follow " href=""> <svg class="gridicon" height="20" width="20" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path clip-rule="evenodd" d="m4 4.5h12v6.5h1.5v-6.5-1.5h-1.5-12-1.5v1.5 10.5c0 1.1046.89543 2 2 2h7v-1.5h-7c-.27614 0-.5-.2239-.5-.5zm10.5 2h-9v1.5h9zm-5 3h-4v1.5h4zm3.5 1.5h-1v1h1zm-1-1.5h-1.5v1.5 1 1.5h1.5 1 1.5v-1.5-1-1.5h-1.5zm-2.5 2.5h-4v1.5h4zm6.5 1.25h1.5v2.25h2.25v1.5h-2.25v2.25h-1.5v-2.25h-2.25v-1.5h2.25z" fill-rule="evenodd"></path></svg> <span>Subscribe</span> </a> <a class="actnbr-action actnbr-actn-following no-display" href=""> <svg class="gridicon" height="20" width="20" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path fill-rule="evenodd" clip-rule="evenodd" d="M16 4.5H4V15C4 15.2761 4.22386 15.5 4.5 15.5H11.5V17H4.5C3.39543 17 2.5 16.1046 2.5 15V4.5V3H4H16H17.5V4.5V12.5H16V4.5ZM5.5 6.5H14.5V8H5.5V6.5ZM5.5 9.5H9.5V11H5.5V9.5ZM12 11H13V12H12V11ZM10.5 9.5H12H13H14.5V11V12V13.5H13H12H10.5V12V11V9.5ZM5.5 12H9.5V13.5H5.5V12Z" fill="#008A20"></path><path class="following-icon-tick" d="M13.5 16L15.5 18L19 14.5" stroke="#008A20" stroke-width="1.5"></path></svg> <span>Subscribed</span> </a> </li> <li class="actnbr-signup"><a href="https://wordpress.com/start/">Sign up</a></li> <li class="actnbr-login"><a href="https://wordpress.com/log-in?redirect_to=https%3A%2F%2Fr-login.wordpress.com%2Fremote-login.php%3Faction%3Dlink%26back%3Dhttps%253A%252F%252Fblog.metabrainz.org%252F2024%252F10%252F30%252Fmetabrainz-summit-2024%252F">Log in</a></li> <li class="actnbr-shortlink"> <a href="https://wp.me/p87vi-38R"> <span class="actnbr-shortlink__text">Copy shortlink</span> <span class="actnbr-shortlink__icon"><svg class="gridicon gridicons-checkmark" height="16" width="16" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><g><path d="M9 19.414l-6.707-6.707 1.414-1.414L9 16.586 20.293 5.293l1.414 1.414"/></g></svg></span> </a> </li> <li class="flb-report"> <a href="https://wordpress.com/abuse/?report_url=https://blog.metabrainz.org/2024/10/30/metabrainz-summit-2024/" target="_blank" rel="noopener noreferrer"> Report this content </a> </li> <li class="actnbr-reader"> <a href="https://wordpress.com/reader/blogs/1935472/posts/12081"> View post in Reader </a> </li> <li class="actnbr-subs"> <a href="https://subscribe.wordpress.com/">Manage subscriptions</a> </li> <li class="actnbr-fold"><a href="">Collapse this bar</a></li> </ul> </div> </div> </li> </ul> </div> <script> window.addEventListener( "load", function( event ) { var link = document.createElement( "link" ); link.href = "https://s0.wp.com/wp-content/mu-plugins/actionbar/actionbar.css?v=20250116"; link.type = "text/css"; link.rel = "stylesheet"; document.head.appendChild( link ); var script = document.createElement( "script" ); script.src = "https://s0.wp.com/wp-content/mu-plugins/actionbar/actionbar.js?v=20250204"; script.defer = true; document.body.appendChild( script ); } ); </script> <div id="jp-carousel-loading-overlay"> <div id="jp-carousel-loading-wrapper"> <span id="jp-carousel-library-loading"> </span> </div> </div> <div class="jp-carousel-overlay" style="display: none;"> <div class="jp-carousel-container"> <!-- The Carousel Swiper --> <div class="jp-carousel-wrap swiper-container jp-carousel-swiper-container jp-carousel-transitions" itemscope itemtype="https://schema.org/ImageGallery"> <div class="jp-carousel swiper-wrapper"></div> <div class="jp-swiper-button-prev swiper-button-prev"> <svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <mask id="maskPrev" mask-type="alpha" maskUnits="userSpaceOnUse" x="8" y="6" width="9" height="12"> <path d="M16.2072 16.59L11.6496 12L16.2072 7.41L14.8041 6L8.8335 12L14.8041 18L16.2072 16.59Z" fill="white"/> </mask> <g mask="url(#maskPrev)"> <rect x="0.579102" width="23.8823" height="24" fill="#FFFFFF"/> </g> </svg> </div> <div class="jp-swiper-button-next swiper-button-next"> <svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <mask id="maskNext" mask-type="alpha" maskUnits="userSpaceOnUse" x="8" y="6" width="8" height="12"> <path d="M8.59814 16.59L13.1557 12L8.59814 7.41L10.0012 6L15.9718 12L10.0012 18L8.59814 16.59Z" fill="white"/> </mask> <g mask="url(#maskNext)"> <rect x="0.34375" width="23.8822" height="24" fill="#FFFFFF"/> </g> </svg> </div> </div> <!-- The main close buton --> <div class="jp-carousel-close-hint"> <svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <mask id="maskClose" mask-type="alpha" maskUnits="userSpaceOnUse" x="5" y="5" width="15" height="14"> <path d="M19.3166 6.41L17.9135 5L12.3509 10.59L6.78834 5L5.38525 6.41L10.9478 12L5.38525 17.59L6.78834 19L12.3509 13.41L17.9135 19L19.3166 17.59L13.754 12L19.3166 6.41Z" fill="white"/> </mask> <g mask="url(#maskClose)"> <rect x="0.409668" width="23.8823" height="24" fill="#FFFFFF"/> </g> </svg> </div> <!-- Image info, comments and meta --> <div class="jp-carousel-info"> <div class="jp-carousel-info-footer"> <div class="jp-carousel-pagination-container"> <div class="jp-swiper-pagination swiper-pagination"></div> <div class="jp-carousel-pagination"></div> </div> <div class="jp-carousel-photo-title-container"> <h2 class="jp-carousel-photo-caption"></h2> </div> <div class="jp-carousel-photo-icons-container"> <a href="#" class="jp-carousel-icon-btn jp-carousel-icon-info" aria-label="Toggle photo metadata visibility"> <span class="jp-carousel-icon"> <svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <mask id="maskInfo" mask-type="alpha" maskUnits="userSpaceOnUse" x="2" y="2" width="21" height="20"> <path fill-rule="evenodd" clip-rule="evenodd" d="M12.7537 2C7.26076 2 2.80273 6.48 2.80273 12C2.80273 17.52 7.26076 22 12.7537 22C18.2466 22 22.7046 17.52 22.7046 12C22.7046 6.48 18.2466 2 12.7537 2ZM11.7586 7V9H13.7488V7H11.7586ZM11.7586 11V17H13.7488V11H11.7586ZM4.79292 12C4.79292 16.41 8.36531 20 12.7537 20C17.142 20 20.7144 16.41 20.7144 12C20.7144 7.59 17.142 4 12.7537 4C8.36531 4 4.79292 7.59 4.79292 12Z" fill="white"/> </mask> <g mask="url(#maskInfo)"> <rect x="0.8125" width="23.8823" height="24" fill="#FFFFFF"/> </g> </svg> </span> </a> <a href="#" class="jp-carousel-icon-btn jp-carousel-icon-comments" aria-label="Toggle photo comments visibility"> <span class="jp-carousel-icon"> <svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <mask id="maskComments" mask-type="alpha" maskUnits="userSpaceOnUse" x="2" y="2" width="21" height="20"> <path fill-rule="evenodd" clip-rule="evenodd" d="M4.3271 2H20.2486C21.3432 2 22.2388 2.9 22.2388 4V16C22.2388 17.1 21.3432 18 20.2486 18H6.31729L2.33691 22V4C2.33691 2.9 3.2325 2 4.3271 2ZM6.31729 16H20.2486V4H4.3271V18L6.31729 16Z" fill="white"/> </mask> <g mask="url(#maskComments)"> <rect x="0.34668" width="23.8823" height="24" fill="#FFFFFF"/> </g> </svg> <span class="jp-carousel-has-comments-indicator" aria-label="This image has comments."></span> </span> </a> </div> </div> <div class="jp-carousel-info-extra"> <div class="jp-carousel-info-content-wrapper"> <div class="jp-carousel-photo-title-container"> <h2 class="jp-carousel-photo-title"></h2> </div> <div class="jp-carousel-comments-wrapper"> <div id="jp-carousel-comments-loading"> <span>Loading Comments...</span> </div> <div class="jp-carousel-comments"></div> <div id="jp-carousel-comment-form-container"> <span id="jp-carousel-comment-form-spinner"> </span> <div id="jp-carousel-comment-post-results"></div> <form id="jp-carousel-comment-form"> <label for="jp-carousel-comment-form-comment-field" class="screen-reader-text">Write a Comment...</label> <textarea name="comment" class="jp-carousel-comment-form-field jp-carousel-comment-form-textarea" id="jp-carousel-comment-form-comment-field" placeholder="Write a Comment..." ></textarea> <div id="jp-carousel-comment-form-submit-and-info-wrapper"> <div id="jp-carousel-comment-form-commenting-as"> <fieldset> <label for="jp-carousel-comment-form-email-field">Email (Required)</label> <input type="text" name="email" class="jp-carousel-comment-form-field jp-carousel-comment-form-text-field" id="jp-carousel-comment-form-email-field" /> </fieldset> <fieldset> <label for="jp-carousel-comment-form-author-field">Name (Required)</label> <input type="text" name="author" class="jp-carousel-comment-form-field jp-carousel-comment-form-text-field" id="jp-carousel-comment-form-author-field" /> </fieldset> <fieldset> <label for="jp-carousel-comment-form-url-field">Website</label> <input type="text" name="url" class="jp-carousel-comment-form-field jp-carousel-comment-form-text-field" id="jp-carousel-comment-form-url-field" /> </fieldset> </div> <input type="submit" name="submit" class="jp-carousel-comment-form-button" id="jp-carousel-comment-form-button-submit" value="Post Comment" /> </div> </form> </div> </div> <div class="jp-carousel-image-meta"> <div class="jp-carousel-title-and-caption"> <div class="jp-carousel-photo-info"> <h3 class="jp-carousel-caption" itemprop="caption description"></h3> </div> <div class="jp-carousel-photo-description"></div> </div> <ul class="jp-carousel-image-exif" style="display: none;"></ul> <a class="jp-carousel-image-download" href="#" target="_blank" style="display: none;"> <svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <mask id="mask0" mask-type="alpha" maskUnits="userSpaceOnUse" x="3" y="3" width="19" height="18"> <path fill-rule="evenodd" clip-rule="evenodd" d="M5.84615 5V19H19.7775V12H21.7677V19C21.7677 20.1 20.8721 21 19.7775 21H5.84615C4.74159 21 3.85596 20.1 3.85596 19V5C3.85596 3.9 4.74159 3 5.84615 3H12.8118V5H5.84615ZM14.802 5V3H21.7677V10H19.7775V6.41L9.99569 16.24L8.59261 14.83L18.3744 5H14.802Z" fill="white"/> </mask> <g mask="url(#mask0)"> <rect x="0.870605" width="23.8823" height="24" fill="#FFFFFF"/> </g> </svg> <span class="jp-carousel-download-text"></span> </a> <div class="jp-carousel-image-map" style="display: none;"></div> </div> </div> </div> </div> </div> </div> <link crossorigin='anonymous' rel='stylesheet' id='all-css-0-2' href='https://s2.wp.com/_static/??-eJydjEEKgCAQAD+UrR6KLtFbTJfQdJXWxe9HUB/oOMMw0KtyhRpSgyyqJjkCMURs1brzZWAhyMVLQgZnryKMCbiHipfahXzC0TEP8H/2NZ94fltezbxMxkx61vEGx+U/hQ==&cssminify=yes' type='text/css' media='all' /> <script id="coblocks-loader-js-extra"> var wpcom_coblocks_js = {"coblocks_masonry_js":"https:\/\/s2.wp.com\/wp-content\/plugins\/coblocks\/2.18.1-simple-rev.4\/dist\/js\/coblocks-masonry.min.js","coblocks_lightbox_js":"https:\/\/s2.wp.com\/wp-content\/plugins\/coblocks\/2.18.1-simple-rev.4\/dist\/js\/coblocks-lightbox.min.js","jquery_core_js":"\/wp-includes\/js\/jquery\/jquery.min.js","jquery_migrate_js":"\/wp-includes\/js\/jquery\/jquery-migrate.min.js","masonry_js":"\/wp-includes\/js\/masonry.min.js","imagesloaded_js":"\/wp-includes\/js\/imagesloaded.min.js"}; var coblocksLigthboxData = {"closeLabel":"Close Gallery","leftLabel":"Previous","rightLabel":"Next"}; </script> <script id="twentysixteen-script-js-extra"> var screenReaderText = {"expand":"expand child menu","collapse":"collapse child menu"}; </script> <script id="jetpack-carousel-js-extra"> var jetpackSwiperLibraryPath = {"url":"https:\/\/s2.wp.com\/wp-content\/mu-plugins\/jetpack-plugin\/sun\/_inc\/build\/carousel\/swiper-bundle.min.js"}; var jetpackCarouselStrings = {"widths":[370,700,1000,1200,1400,2000],"is_logged_in":"","lang":"en","ajaxurl":"https:\/\/blog.metabrainz.org\/wp-admin\/admin-ajax.php","nonce":"a2d7a55d43","display_exif":"1","display_comments":"1","single_image_gallery":"1","single_image_gallery_media_file":"","background_color":"black","comment":"Comment","post_comment":"Post Comment","write_comment":"Write a Comment...","loading_comments":"Loading Comments...","image_label":"Open image in full-screen.","download_original":"View full size <span class=\"photo-size\">{0}<span class=\"photo-size-times\">\u00d7<\/span>{1}<\/span>","no_comment_text":"Please be sure to submit some text with your comment.","no_comment_email":"Please provide an email address to comment.","no_comment_author":"Please provide your name to comment.","comment_post_error":"Sorry, but there was an error posting your comment. Please try again later.","comment_approved":"Your comment was approved.","comment_unapproved":"Your comment is in moderation.","camera":"Camera","aperture":"Aperture","shutter_speed":"Shutter Speed","focal_length":"Focal Length","copyright":"Copyright","comment_registration":"0","require_name_email":"1","login_url":"https:\/\/musicbrainz.wordpress.com\/wp-login.php?redirect_to=https%3A%2F%2Fblog.metabrainz.org%2F2024%2F10%2F30%2Fmetabrainz-summit-2024%2F","blog_id":"1935472","meta_data":["camera","aperture","shutter_speed","focal_length","copyright"],"stats_query_args":"blog=1935472&v=wpcom&tz=0&user_id=0&subd=musicbrainz","is_public":"1"}; </script> <script id="custom-content-types-data-js-before"> var CUSTOM_CONTENT_TYPE__INITIAL_STATE; typeof CUSTOM_CONTENT_TYPE__INITIAL_STATE === "object" || (CUSTOM_CONTENT_TYPE__INITIAL_STATE = JSON.parse(decodeURIComponent("%7B%22active%22%3Atrue%2C%22over_ride%22%3Afalse%7D"))); </script> <script id="verbum-settings-js-before"> window.VerbumComments = {"Log in or provide your name and email to leave a reply.":"Log in or provide your name and email to leave a reply.","Log in or provide your name and email to leave a comment.":"Log in or provide your name and email to leave a comment.","Receive web and mobile notifications for posts on this site.":"Receive web and mobile notifications for posts on this site.","Name":"Name","Email (address never made public)":"Email (address never made public)","Website (optional)":"Website (optional)","Leave a reply. (log in optional)":"Leave a reply. (log in optional)","Leave a comment. (log in optional)":"Leave a comment. (log in optional)","Log in to leave a reply.":"Log in to leave a reply.","Log in to leave a comment.":"Log in to leave a comment.","Logged in via %s":"Logged in via %s","Log out":"Log out","Email":"Email","(Address never made public)":"(Address never made public)","Instantly":"Instantly","Daily":"Daily","Reply":"Reply","Comment":"Comment","WordPress":"WordPress","Weekly":"Weekly","Notify me of new posts":"Notify me of new posts","Email me new posts":"Email me new posts","Email me new comments":"Email me new comments","Cancel":"Cancel","Write a comment...":"Write a comment...","Write a reply...":"Write a reply...","Website":"Website","Optional":"Optional","We'll keep you in the loop!":"We'll keep you in the loop!","Loading your comment...":"Loading your comment...","Discover more from":"Discover more from MetaBrainz Blog","Subscribe now to keep reading and get access to the full archive.":"Subscribe now to keep reading and get access to the full archive.","Continue reading":"Continue reading","Never miss a beat!":"Never miss a beat!","Interested in getting blog post updates? Simply click the button below to stay in the loop!":"Interested in getting blog post updates? Simply click the button below to stay in the loop!","Enter your email address":"Enter your email address","Subscribe":"Subscribe","Comment sent successfully":"Comment sent successfully","Save my name, email, and website in this browser for the next time I comment.":"Save my name, email, and website in this browser for the next time I comment.","siteId":1935472,"postId":12081,"mustLogIn":false,"requireNameEmail":true,"commentRegistration":false,"connectURL":"https:\/\/musicbrainz.wordpress.com\/public.api\/connect\/?action=request&domain=blog.metabrainz.org","logoutURL":"https:\/\/musicbrainz.wordpress.com\/wp-login.php?action=logout&_wpnonce=62da150e3f","homeURL":"https:\/\/blog.metabrainz.org\/","subscribeToBlog":true,"subscribeToComment":true,"isJetpackCommentsLoggedIn":false,"jetpackUsername":"","jetpackUserId":0,"jetpackSignature":"","jetpackAvatar":null,"enableBlocks":true,"enableSubscriptionModal":true,"currentLocale":"en","isJetpackComments":false,"allowedBlocks":["core\/paragraph","core\/list","core\/code","core\/list-item","core\/quote","core\/image","core\/embed","core\/quote","core\/code"],"embedNonce":"e252cd02bb","verbumBundleUrl":"https:\/\/s2.wp.com\/wp-content\/mu-plugins\/jetpack-mu-wpcom-plugin\/sun\/jetpack_vendor\/automattic\/jetpack-mu-wpcom\/src\/features\/verbum-comments\/dist\/index.js","isRTL":false,"vbeCacheBuster":1738686361,"iframeUniqueId":0,"colorScheme":false} </script> <script crossorigin='anonymous' type='text/javascript' src='https://s2.wp.com/_static/??-eJyVUdlywyAM/KFi4ibT9KXTT8lgwKlsJBgEOf6+SmN6T48nhtWujl19TMpGKp6KnlhjHCB4VdlnsxdMAY2xm/hGCw/Ihuo8X4gOuOiDJxfzpZRiOI8QQodAjd7aYlUp1D2QCH1Jxs5KoGOyEZeC5kqttluamloimlLAflFpzlYPFYKTDfJQUUYhyijWhtnL485kEKwK0TifPy/UtrFxCNHOrG+7/r7rFQMmOT77Q7e5Hji9kVqvbw4sTx7FlVQHXY4CnBlOxXu6yHmGpALQrMZoK6sRTv+Rj5VsgUj8B1PfebmTqBaHrMlR4gyvtAb8EpWZgdEXte5W13YNGPML2f2gbSOWuD5+RfeID/12vb3b9qv1ZnoGP2/w2A=='></script> <script type="text/javascript"> (function () { var wpcom_reblog = { source: 'toolbar', toggle_reblog_box_flair: function (obj_id, post_id) { // Go to site selector. This will redirect to their blog if they only have one. const postEndpoint = `https://wordpress.com/post`; // Ideally we would use the permalink here, but fortunately this will be replaced with the // post permalink in the editor. const originalURL = `${ document.location.href }?page_id=${ post_id }`; const url = postEndpoint + '?url=' + encodeURIComponent( originalURL ) + '&is_post_share=true' + '&v=5'; const redirect = function () { if ( ! window.open( url, '_blank' ) ) { location.href = url; } }; if ( /Firefox/.test( navigator.userAgent ) ) { setTimeout( redirect, 0 ); } else { redirect(); } }, }; window.wpcom_reblog = wpcom_reblog; })(); </script> <script src="//stats.wp.com/w.js?68" defer></script> <script type="text/javascript"> _tkq = window._tkq || []; _stq = window._stq || []; _tkq.push(['storeContext', {'blog_id':'1935472','blog_tz':'0','user_lang':'en','blog_lang':'en','user_id':'0'}]); _stq.push(['view', {'blog':'1935472','v':'wpcom','tz':'0','user_id':'0','post':'12081','subd':'musicbrainz'}]); _stq.push(['extra', {'crypt':'UE40eW5QN0p8M2Y/RE1mNzc2NTVTamdsd0xoLz9RQkM2K298TXY9bERQMXc2MjhEaVZfb2wwakRoSj0mUkp1THptM1NdbkV1WjZIcU9mVWQmPUIvMlN6Jk8wW3NYVEJ3dWZOWExuWD9VNTEucGUwVDREUEpscXB+Y21XfHZTPUZ+WV0/Nnl8WzRRL0oreG1XYVpiaUVMdGs4NnxUbS9pRTZ4N2hMeEVySXNPJUM/Y0VXbDlzRk93Ni04Q3xvWUNjSHRpLz9vSll3Ny90NVtGQXMweS1dTUMxbVFFMHRTY1NbMy8wP1ExS3ZfOXo/X1lueHQzRWZoUnBfLEFLPW9OK18yckRFenB3R01mMWxzNGkubVpFSEZrflZYaDc2QnIwLGN3RltMTThXLW1IP3dLOUNLMTMtOGN1PWNSWHZNNF1Na2ExVHxbfDYm'}]); _stq.push([ 'clickTrackerInit', '1935472', '12081' ]); </script> <noscript><img src="https://pixel.wp.com/b.gif?v=noscript" style="height:1px;width:1px;overflow:hidden;position:absolute;bottom:1px;" alt="" /></noscript> <script defer id="bilmur" data-customproperties="{"logged_in":"0","wptheme":"pub\/twentysixteen","wptheme_is_block":"0"}" data-provider="wordpress.com" data-service="simple" src="/wp-content/js/bilmur-3-4-combined.min.js?i=12&m=202508"></script><script> ( function() { function getMobileUserAgentInfo() { if ( typeof wpcom_mobile_user_agent_info === 'object' ) { wpcom_mobile_user_agent_info.init(); var mobileStatsQueryString = ''; if ( wpcom_mobile_user_agent_info.matchedPlatformName !== false ) { mobileStatsQueryString += '&x_' + 'mobile_platforms' + '=' + wpcom_mobile_user_agent_info.matchedPlatformName; } if ( wpcom_mobile_user_agent_info.matchedUserAgentName !== false ) { mobileStatsQueryString += '&x_' + 'mobile_devices' + '=' + wpcom_mobile_user_agent_info.matchedUserAgentName; } if ( wpcom_mobile_user_agent_info.isIPad() ) { mobileStatsQueryString += '&x_' + 'ipad_views' + '=' + 'views'; } if ( mobileStatsQueryString != '' ) { new Image().src = document.location.protocol + '//pixel.wp.com/g.gif?v=wpcom-no-pv' + mobileStatsQueryString + '&baba=' + Math.random(); } } } document.addEventListener( 'DOMContentLoaded', getMobileUserAgentInfo ); } )(); </script> <script type='disabled' id='wp-enqueue-dynamic-script:wp-i18n:after:1'> wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } ); </script> <script> (function() { 'use strict'; const fetches = {}; const promises = {}; const urls = { 'wp-hooks': 'https://s0.wp.com/wp-content/plugins/gutenberg-core/v20.0.1/build/hooks/index.min.js?m=1738846131i&ver=84e753e2b66eb7028d38', 'wp-i18n': 'https://s0.wp.com/wp-content/plugins/gutenberg-core/v20.0.1/build/i18n/index.min.js?m=1738846131i&ver=bd5a2533e717a1043151', 'verbum': 'https://s2.wp.com/wp-content/mu-plugins/jetpack-mu-wpcom-plugin/sun/jetpack_vendor/automattic/jetpack-mu-wpcom/src/build/verbum-comments/verbum-comments.js?m=1739372488i&minify=false&ver=9d441fa76e2f0f23ffc9' }; const loaders = { 'verbum': () => { fetchExternalScript('wp-hooks'); fetchExternalScript('wp-i18n'); fetchExternalScript('verbum'); promises['wp-hooks'] = promises['wp-hooks'] || loadWPScript('wp-hooks'); promises['wp-i18n'] = promises['wp-i18n'] || promises['wp-hooks'].then( () => loadWPScript('wp-i18n') ); promises['verbum'] = promises['verbum'] || promises['wp-i18n'].then( () => loadWPScript('verbum') ); return promises['verbum']; }, }; const scriptExtras = { 'wp-i18n': { translations: 0, before: 0, after: 1 }, }; window.WP_Enqueue_Dynamic_Script = { loadScript: (handle) => { if (!loaders[handle]) { console.error('WP_Enqueue_Dynamic_Script: unregistered script `' + handle + '`.'); } return loaders[handle](); } }; function fetchExternalScript(handle) { if (!urls[handle]) { return Promise.resolve(); } fetches[handle] = fetches[handle] || fetch(urls[handle], { mode: 'no-cors' }); return fetches[handle]; } function runExtraScript(handle, type, index) { const id = 'wp-enqueue-dynamic-script:' + handle + ':' + type + ':' + (index + 1); const template = document.getElementById(id); if (!template) { return Promise.reject(); } const script = document.createElement( 'script' ); script.innerHTML = template.innerHTML; document.body.appendChild( script ); return Promise.resolve(); } function loadExternalScript(handle) { if (!urls[handle]) { return Promise.resolve(); } return fetches[handle].then(() => { return new Promise((resolve, reject) => { const script = document.createElement('script'); script.onload = () => resolve(); script.onerror = (e) => reject(e); script.src = urls[handle]; document.body.appendChild(script); }); }); } function loadExtra(handle, pos) { const count = (scriptExtras[handle] && scriptExtras[handle][pos]) || 0; let promise = Promise.resolve(); for (let i = 0; i < count; i++) { promise = promise.then(() => runExtraScript(handle, pos, i)); } return promise; } function loadWPScript(handle) { // Core loads scripts in this order. See: https://github.com/WordPress/WordPress/blob/a59eb9d39c4fcba834b70c9e8dfd64feeec10ba6/wp-includes/class-wp-scripts.php#L428. return loadExtra(handle, 'translations') .then(() => loadExtra(handle, 'before')) .then(() => loadExternalScript(handle)) .then(() => loadExtra(handle, 'after')); } } )(); </script> </body> </html>