diff --git a/webui/index.html b/webui/index.html
index f37694e5..a0844baa 100644
--- a/webui/index.html
+++ b/webui/index.html
@@ -2960,28 +2960,31 @@
Download Settings
+
+ These are container-internal paths. Only modify them if you know what you're doing — incorrect values will break downloads.
+
diff --git a/webui/static/script.js b/webui/static/script.js
index a011dde4..5a9810b3 100644
--- a/webui/static/script.js
+++ b/webui/static/script.js
@@ -2733,8 +2733,26 @@ async function authenticateTidal() {
}
}
-function browsePath(pathType) {
- showToast(`Path browser not available in web interface. Please enter path manually.`, 'error');
+const PATH_INPUT_IDS = {
+ download: 'download-path',
+ transfer: 'transfer-path',
+ staging: 'staging-path'
+};
+
+function togglePathLock(pathType, btn) {
+ const input = document.getElementById(PATH_INPUT_IDS[pathType]);
+ if (!input) return;
+ const isLocked = input.hasAttribute('readonly');
+ if (isLocked) {
+ input.removeAttribute('readonly');
+ input.focus();
+ btn.textContent = 'Lock';
+ btn.classList.remove('locked');
+ } else {
+ input.setAttribute('readonly', '');
+ btn.textContent = 'Unlock';
+ btn.classList.add('locked');
+ }
}
@@ -10917,7 +10935,7 @@ window.autoDetectSlskd = autoDetectSlskd;
window.toggleServer = toggleServer;
window.authenticateSpotify = authenticateSpotify;
window.authenticateTidal = authenticateTidal;
-window.browsePath = browsePath;
+window.togglePathLock = togglePathLock;
window.selectResult = selectResult;
window.startStream = startStream;
window.streamTrack = streamTrack;
diff --git a/webui/static/style.css b/webui/static/style.css
index 0cbbff8e..87c89e03 100644
--- a/webui/static/style.css
+++ b/webui/static/style.css
@@ -1744,6 +1744,15 @@ body {
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
}
+.path-input-group input[readonly] {
+ opacity: 0.55;
+ cursor: not-allowed;
+}
+
+.browse-button.locked {
+ opacity: 0.7;
+}
+
/* Auth Button - gradient */
.auth-button {
background: linear-gradient(135deg, #1db954, #1ed760);