diff --git a/webui/index.html b/webui/index.html
index 218ed21a..066ae278 100644
--- a/webui/index.html
+++ b/webui/index.html
@@ -3855,6 +3855,15 @@
• Discogs — needs a personal access token.
Tip: if you pick Spotify Free and later connect a real Spotify account, it uses the official account normally and only falls back to free while Spotify is rate-limited — then switches back automatically.
+
diff --git a/webui/static/settings.js b/webui/static/settings.js
index f0defa8f..d9d1e33c 100644
--- a/webui/static/settings.js
+++ b/webui/static/settings.js
@@ -1061,6 +1061,8 @@ async function loadSettingsData() {
const _metaSel = (_fbSrc === 'spotify' && settings.metadata?.spotify_free === true)
? 'spotify_free' : _fbSrc;
document.getElementById('metadata-fallback-source').value = _metaSel;
+ const _efEl = document.getElementById('metadata-spotify-free-enrichment');
+ if (_efEl) _efEl.checked = settings.metadata?.spotify_free_enrichment === true;
// Populate Hydrabase settings
const hbConfig = settings.hydrabase || {};
@@ -2886,7 +2888,10 @@ async function saveSettings(quiet = false) {
// 'Spotify Free' is stored as the spotify source + a flag, so all
// downstream 'spotify' routing is unchanged.
fallback_source: metadataSource === 'spotify_free' ? 'spotify' : metadataSource,
- spotify_free: metadataSource === 'spotify_free'
+ spotify_free: metadataSource === 'spotify_free',
+ // Independent opt-in: run the enrichment worker on Spotify Free even
+ // when an official account is connected (spares the official quota).
+ spotify_free_enrichment: document.getElementById('metadata-spotify-free-enrichment')?.checked || false
},
hydrabase: {
url: document.getElementById('hydrabase-url').value,