diff --git a/webui/index.html b/webui/index.html
index 48268eb0..92fe0871 100644
--- a/webui/index.html
+++ b/webui/index.html
@@ -5133,12 +5133,23 @@
-
+
Video Source
+
+ Movies Library:
+ Loading...
+ TV Shows Library:
+ Loading...
+
+ Which libraries the video side scans.
+
+
API Configuration Expand All
@@ -5300,21 +5311,6 @@
Select which music library to use (doesn't affect config file)
-
-
- Movies Library:
-
- Loading...
-
- TV Shows Library:
-
- Loading...
-
-
- Which libraries the video side scans.
-
-
Clear Configuration
diff --git a/webui/static/video/video-settings.js b/webui/static/video/video-settings.js
index 4b5d1dda..7f70caf5 100644
--- a/webui/static/video/video-settings.js
+++ b/webui/static/video/video-settings.js
@@ -28,24 +28,27 @@
.then(function (d) { renderServer(host, d || {}); })
.catch(function () { renderServer(host, {}); });
}
- function srvBtn(id, label, active) {
- return '' + label +
+ ' (not connected) ';
+ }
+ return '' + label + ' ';
}
function renderServer(host, d) {
var plex = !!d.plex, jelly = !!d.jellyfin;
+ var html = '' +
+ srvOpt('plex', 'Plex', plex, d.server) + srvOpt('jellyfin', 'Jellyfin', jelly, d.server) + '
';
if (!plex && !jelly) {
- host.innerHTML = 'No video server connected. ' +
- 'Connect Plex or Jellyfin under Server Connections ' +
- 'below to scan and browse your video library. (Navidrome and Standalone are music-only.)
';
- } else if (plex && jelly) {
- host.innerHTML = '' +
- srvBtn('plex', 'Plex', d.server) + srvBtn('jellyfin', 'Jellyfin', d.server) + '
' +
- 'Both are connected — pick which one the video side uses.
';
+ html += 'Neither is connected yet. Set up Plex or Jellyfin in ' +
+ 'Music → Settings → Server Connections — the video side reuses those credentials.
';
} else {
- host.innerHTML = '✓ ' +
- 'Video uses ' + (plex ? 'Plex' : 'Jellyfin') + '
';
+ html += 'The video side uses this server, independent of Music. ' +
+ 'Greyed-out options aren\'t connected — set them up in Music settings.
';
}
+ host.innerHTML = html;
}
function pickServer(id) {
fetch(SERVER_URL, {
diff --git a/webui/static/video/video-side.css b/webui/static/video/video-side.css
index 48163c35..484e7ba9 100644
--- a/webui/static/video/video-side.css
+++ b/webui/static/video/video-side.css
@@ -140,6 +140,12 @@ body[data-side="video"] [data-music-only] {
body[data-side="video"] [data-stg="library"]:not([data-video-only]) {
display: none !important;
}
+/* The video side has its OWN server section (Video Source above) and reuses the
+ shared Plex/Jellyfin credentials — so hide music's Server Connections group
+ entirely on the video side. Video never configures or selects the MUSIC server. */
+body[data-side="video"] .settings-group[data-stg="connections"]:not([data-video-only]) {
+ display: none !important;
+}
/* ── Dashboard header: match music, minus the sweep animation ──────────── */
/* The header reuses music's .dashboard-header markup/CSS for an identical look;
@@ -1479,6 +1485,9 @@ a.vd-guest:hover .vd-guest-name { color: rgb(var(--vd-accent-rgb)); }
}
.vid-source-btn:hover { background: rgba(255, 255, 255, 0.12); color: #fff; }
.vid-source-btn.active { background: rgba(56, 189, 248, 0.9); border-color: transparent; color: #fff; }
+.vid-source-btn--off { opacity: 0.45; cursor: not-allowed; }
+.vid-source-btn--off:hover { background: rgba(255, 255, 255, 0.06); color: rgba(255, 255, 255, 0.8); }
+.vid-source-off { font-size: 11px; opacity: 0.85; }
/* library: no-server gate banner */
.video-noserver {