A bridge between Lidarr, Slskd and Subsonic server
This project contains a variety of scripts to help with organising your music library.
This project currently makes a lot of assumptions about how you manage your music library. Please read this carefully to ensure you don't lose any media
- The starred or favourited feature in subsonic/navidrome is used to determine which songs or albums are wanted and should be kept.
- Starred albums will automatically get their missing songs requested and downloaded
- Lidarr should be set to NOT automatically move any files, as this interferes with sorting between Incomplete and Not Owned
Displays the progress and status of slskd downloads
Displays the search results from slskd and which files were selected for download
Displays a list of specific actions run by various scripts
Displays how long each album in your library that is not starred has until it is removed
Automatically organises media files based on music you own, and music you haven't bought yet but still want available. An additional organisation layer can be added to keep albums that have every song separate from albums containing just a few songs from playlists
I use this to keep 3 different libraries available in my subsonic player. So I can easily see full albums in my library when deciding what to listen to
Gets tracks from a spotify playlist and requests them for download from Slskd, and ensures the playlist is synced to your subsonic library
Remove tracks/albums after x days if they are not starred in subsonic. Expiry time can be managed with the env variable CLEANUP_DAYS
This is useful for downloading new releases to check out, or recommended albums without hoarding a bunch of un-needed music. Think of it like renting a new album
More info to add later
A modern Lidarr-style web interface for managing your music automation scripts with real-time monitoring, persistent execution history, and professional arr-style design.
- ๐จ Professional arr-style UI - Clean, dark interface inspired by Lidarr/Sonarr/Radarr
- ๐ Persistent execution queue - Survives container restarts with SQLite database
- ๐ Live log viewing - Real-time script output with modal viewer
- ๐ Dynamic script discovery - Automatically detects scripts in
/scriptsfolder - โก Real-time status updates - Live progress tracking and status badges
- ๏ฟฝ Download logs - Export execution logs as timestamped files
- ๐ท๏ธ Script metadata system - Rich descriptions, tags, and version info
- ๐๏ธ Organized sections - Commands and Tests automatically categorized
-
Start SoulSeekarr:
docker-compose up -d
-
Access the web interface: Open your browser and go to:
http://localhost:5000 -
Run scripts: Click "Run" or "Dry Run" for any script. Click any queue item to view detailed logs.
Scripts are automatically discovered from the /scripts folder with support for metadata:
#!/usr/bin/env python3
"""
Your Script Description
Name: Display Name
Author: SoulSeekarr
Version: 1.0
Section: commands # or 'tests'
Tags: lidarr, automation, music
Supports dry run: true
"""Checks all albums in Lidarr for completeness and tags complete albums as "Complete". Also removes the tag from albums that become incomplete. Recently fixed - currently being tested.
Automatically tracks all favorited albums from Navidrome in Lidarr with Standard quality profile. Adds missing artists and albums. Defaults to DRY-RUN mode for safety. New feature - needs testing.
Monitors playback queue to automatically queue multipart songs together (Pt. 1/2, Part I/II, etc.). Ensures song suites play continuously without interruption. Coming soon - placeholder only.
Tests Navidrome API connectivity and basic functions. Basic API test - needs validation.
Automatically processes downloaded music files with audio fingerprinting and MusicBrainz metadata fixing before matching with Lidarr. Uses acoustic analysis to identify tracks even with missing metadata, then groups files by album, checks completeness, and organizes into appropriate directories. Features dual-strategy identification (audio + metadata) for maximum accuracy. Recently enhanced with AcoustID integration.
- โ Tested - Thoroughly tested and production ready
- ๐งช Testing - Functional but needs user testing
- ๐ง Refinement - Works but could use improvements
- ๐ Enhanced - Recently improved with new features
- โ Untested - Needs initial user testing and validation
- ๐ง Planned - Feature planned but not yet implemented
โ ๏ธ Experimental - Use with caution, may have issues
All configuration is done through environment variables in the docker-compose.yml file:
environment:
- USER=your_navidrome_username
- PASS=your_navidrome_password
- BASE_URL=http://your-navidrome-ip:4533/rest
- MUSIC_DIR=/music
- CLEANUP_DAYS=1
- DRY_RUN=true
# Lidarr Configuration
- LIDARR_URL=http://your-lidarr-ip:8686
- LIDARR_API_KEY=your_lidarr_api_key- USER/PASS: Your Navidrome login credentials
- BASE_URL: Your Navidrome API endpoint
- MUSIC_DIR: Path to your music directory inside the container
- CLEANUP_DAYS: How many days old songs must be before cleanup
- DRY_RUN: Set to
falseto actually delete files (default:truefor safety) - LIDARR_URL: Your Lidarr base URL
- LIDARR_API_KEY: Your Lidarr API key (found in Settings โ General)
- ๐ฎ One-Click Script Execution: Run any script with a single button click
- ๐ Real-Time Status: See which scripts are running, completed, or failed
- ๐บ Live Output: Watch script output in real-time with auto-scrolling
- ๐ Log Management: Download and browse historical log files
- ๐ฑ Responsive Design: Works on desktop, tablet, and mobile devices
- ๐ Auto-Refresh: Status updates automatically every 2 seconds
Always test your configuration first:
environment:
- DRY_RUN=trueOnce you're confident in your setup:
environment:
- DRY_RUN=falseTo run on a different port:
ports:
- "8080:5000" # Access via http://localhost:8080navidrome-cleanup/
โโโ app.py # Flask web application
โโโ templates/
โ โโโ index.html # Web interface template
โโโ requirements.txt # Python dependencies
โโโ entrypoint.sh # Container startup script
โโโ docker-compose.yml # Container configuration
โโโ navidrome_cleanup_docker.sh # Main cleanup script
โโโ import_playlists.sh # Playlist import script
โโโ star_all_songs.sh # Star all songs script
โโโ monitor_artists.sh # Artist monitoring script
โโโ tag_complete_albums_mood.sh # Complete album tagging script
โโโ navidrome_to_lidarr_track.sh # Track starred albums in Lidarr
โโโ test_api.sh # API testing script
โโโ PLAYLIST_IMPORT.md # Playlist import documentation
โโโ TRACK_STARRED.md # Track starred albums documentation
โโโ logs/ # Log files directory
- Check Docker logs:
docker-compose logs music-management-tools - Verify file permissions:
chmod +x *.sh - Check Python dependencies in
requirements.txt
- Verify your Navidrome is running and accessible
- Check the
BASE_URLsetting - Confirm your
USERandPASScredentials - Use the "Test API" script to diagnose connectivity
- Check script permissions:
ls -la *.sh - Verify paths in the scripts match your setup
- Check logs in the web interface or container logs
- Ensure port 5000 is available:
netstat -tulpn | grep :5000 - Check firewall settings
- Try accessing via container IP directly
- The web interface runs on port 5000 by default
- No authentication is built-in - restrict network access as needed
- Scripts run with the same permissions as the container user
- Consider using Docker secrets for sensitive credentials in production
All script outputs are logged to the /logs directory and can be:
- Viewed in real-time through the web interface
- Downloaded via the web interface
- Accessed directly from the host filesystem
Log files are automatically organized by script and timestamp for easy tracking.