diff --git a/webui/index.html b/webui/index.html
index 7ff29dc5..b22dd056 100644
--- a/webui/index.html
+++ b/webui/index.html
@@ -4372,6 +4372,7 @@
Drag to reorder source priority. Enable sources you want to use. Downloads try each enabled source in order.
+ The first source can use album-level downloads when supported; later sources stay track-level fallback.
diff --git a/webui/static/settings.js b/webui/static/settings.js
index 0d3888c1..7c3a127d 100644
--- a/webui/static/settings.js
+++ b/webui/static/settings.js
@@ -600,6 +600,7 @@ const HYBRID_SOURCES = [
{ id: 'torrent', name: 'Torrent', icon: null, emoji: '🧲' },
{ id: 'usenet', name: 'Usenet', icon: null, emoji: '📰' },
];
+const ALBUM_LEVEL_HYBRID_SOURCES = new Set(['soulseek', 'torrent', 'usenet']);
let _hybridSourceOrder = ['soulseek', 'youtube'];
let _hybridSourceEnabled = { soulseek: true, youtube: true, tidal: false, qobuz: false, hifi: false, deezer_dl: false, amazon: false, lidarr: false, soundcloud: false, torrent: false, usenet: false };
@@ -625,6 +626,13 @@ function buildHybridSourceList() {
const enabled = _hybridSourceEnabled[srcId] !== false;
const isInOrder = _hybridSourceOrder.includes(srcId);
const priorityNum = isInOrder && enabled ? _hybridSourceOrder.indexOf(srcId) + 1 : '';
+ const canOwnAlbum = enabled && priorityNum === 1 && ALBUM_LEVEL_HYBRID_SOURCES.has(srcId);
+ const sourceLevel = canOwnAlbum ? 'Album-level' : 'Track-level';
+ const sourceLevelClass = canOwnAlbum ? 'album' : 'track';
+ const sourceLevelTitle = canOwnAlbum
+ ? 'This first source can download a whole album release before per-track fallback.'
+ : 'This source runs as per-track fallback in the current hybrid order.';
+ const sourceLevelBadge = `${sourceLevel} `;
const item = document.createElement('div');
item.className = `hybrid-source-item${enabled ? '' : ' disabled'}`;
@@ -641,6 +649,7 @@ function buildHybridSourceList() {
: `${src.emoji} `
}
${src.name}
+ ${sourceLevelBadge}
${priorityNum}
diff --git a/webui/static/style.css b/webui/static/style.css
index a6ef10e9..cb2d5bf4 100644
--- a/webui/static/style.css
+++ b/webui/static/style.css
@@ -52933,6 +52933,23 @@ tr.tag-diff-same {
color: rgba(255, 255, 255, 0.85);
font-weight: 500;
}
+.hybrid-source-badge {
+ flex-shrink: 0;
+ font-size: 0.68em;
+ line-height: 1;
+ font-weight: 700;
+ letter-spacing: 0.01em;
+ padding: 4px 7px;
+ border-radius: 6px;
+ border: 1px solid rgba(125, 211, 252, 0.24);
+ background: rgba(125, 211, 252, 0.1);
+ color: #7dd3fc;
+}
+.hybrid-source-badge-track {
+ border-color: rgba(255, 255, 255, 0.12);
+ background: rgba(255, 255, 255, 0.05);
+ color: rgba(255, 255, 255, 0.48);
+}
.hybrid-source-priority {
font-size: 0.75em;
color: rgba(255, 255, 255, 0.3);