From 1f0ef08b48dc90d6b64037fdd7a03748508b25ae Mon Sep 17 00:00:00 2001 From: Broque Thomas <26755000+Nezreka@users.noreply.github.com> Date: Fri, 10 Apr 2026 22:01:27 -0700 Subject: [PATCH] Add Music Videos directory setting for Plex music video support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit New configurable path for storing music videos separately from audio files, following Plex's global music video folder convention. - Settings: library.music_videos_path (default: ./MusicVideos) - UI: Music Videos Dir field on Settings Downloads tab with lock/unlock - Docker: /app/MusicVideos volume mount in Dockerfile and docker-compose - Added 'library' to settings save whitelist (was missing — music_paths also wasn't persisting through main settings save) - No download functionality yet — path infrastructure only --- Dockerfile | 4 ++-- config/settings.py | 3 ++- docker-compose.yml | 1 + web_server.py | 2 +- webui/index.html | 8 ++++++++ webui/static/script.js | 7 +++++-- 6 files changed, 19 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index a8c246b9..97437292 100644 --- a/Dockerfile +++ b/Dockerfile @@ -35,7 +35,7 @@ COPY . . # Create necessary directories with proper permissions # NOTE: /app/data is for database FILES, /app/database is the Python package -RUN mkdir -p /app/config /app/data /app/logs /app/downloads /app/Transfer /app/scripts && \ +RUN mkdir -p /app/config /app/data /app/logs /app/downloads /app/Transfer /app/MusicVideos /app/scripts && \ chown -R soulsync:soulsync /app # Create defaults directory and copy template files @@ -47,7 +47,7 @@ RUN mkdir -p /defaults && \ # Create volume mount points # NOTE: Changed /app/database to /app/data to avoid overwriting Python package -VOLUME ["/app/config", "/app/data", "/app/logs", "/app/downloads", "/app/Transfer", "/app/scripts"] +VOLUME ["/app/config", "/app/data", "/app/logs", "/app/downloads", "/app/Transfer", "/app/MusicVideos", "/app/scripts"] # Copy and set up entrypoint script COPY entrypoint.sh /entrypoint.sh diff --git a/config/settings.py b/config/settings.py index 85272c93..af1844b3 100644 --- a/config/settings.py +++ b/config/settings.py @@ -461,7 +461,8 @@ class ConfigManager: "poll_interval": 30 }, "library": { - "music_paths": [] + "music_paths": [], + "music_videos_path": "./MusicVideos" }, "scripts": { "path": "./scripts", diff --git a/docker-compose.yml b/docker-compose.yml index 15f0a61d..d51b278c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -30,6 +30,7 @@ services: - ./logs:/app/logs - ./downloads:/app/downloads - ./Staging:/app/Staging + - ./MusicVideos:/app/MusicVideos - ./scripts:/app/scripts # Use named volume for database persistence (separate from host database) # NOTE: Changed from /app/database to /app/data to avoid overwriting Python package diff --git a/web_server.py b/web_server.py index b029d03c..488b32c1 100644 --- a/web_server.py +++ b/web_server.py @@ -5184,7 +5184,7 @@ def handle_settings(): if 'active_media_server' in new_settings: config_manager.set_active_media_server(new_settings['active_media_server']) - for service in ['spotify', 'plex', 'jellyfin', 'navidrome', 'soulseek', 'download_source', 'settings', 'database', 'metadata_enhancement', 'file_organization', 'playlist_sync', 'tidal', 'tidal_download', 'qobuz', 'hifi_download', 'deezer_download', 'listenbrainz', 'acoustid', 'lastfm', 'genius', 'import', 'lossy_copy', 'listening_stats', 'ui_appearance', 'youtube', 'content_filter', 'itunes', 'm3u_export', 'musicbrainz', 'deezer', 'audiodb', 'metadata', 'hydrabase', 'security', 'discogs']: + for service in ['spotify', 'plex', 'jellyfin', 'navidrome', 'soulseek', 'download_source', 'settings', 'database', 'metadata_enhancement', 'file_organization', 'playlist_sync', 'tidal', 'tidal_download', 'qobuz', 'hifi_download', 'deezer_download', 'listenbrainz', 'acoustid', 'lastfm', 'genius', 'import', 'lossy_copy', 'listening_stats', 'ui_appearance', 'youtube', 'content_filter', 'itunes', 'm3u_export', 'musicbrainz', 'deezer', 'audiodb', 'metadata', 'hydrabase', 'security', 'discogs', 'library']: if service in new_settings: for key, value in new_settings[service].items(): config_manager.set(f'{service}.{key}', value) diff --git a/webui/index.html b/webui/index.html index 051f90f1..d2783f65 100644 --- a/webui/index.html +++ b/webui/index.html @@ -4595,6 +4595,14 @@ +