# 🎵 MusicFetch **MusicFetch** is a smart command-line utility that fetches music by querying Lidarr (a music collection manager) or, if no match is found or a timeout occurs, falls back to downloading using `yt-dlp`. It supports input in the form of either: - `"Artist - Track"` (e.g. `"Daft Punk - Harder Better Faster Stronger"`) - A full YouTube URL (e.g. `"https://www.youtube.com/watch?v=dQw4w9WgXcQ"`) The downloaded track is organized into your Lidarr media folder or a YouTube subfolder if it's a fallback. --- ## 🚀 Features - Searches for and adds artists to Lidarr. - Automatically triggers album searches in Lidarr. - Falls back to downloading via `yt-dlp` if no match is found. - Supports metadata extraction from YouTube URLs. - Handles Lidarr timeouts gracefully. --- ## 📦 Dependencies & Installation ### 🐍 Python Dependencies - Python 3.6+ - `requests` Install Python dependencies: ```bash pip install requests ``` ### 📼 External Tools - `yt-dlp`: YouTube downloader for audio/video. Install via pip (recommended): ```bash pip install -U yt-dlp ``` Or install system-wide (Debian/Ubuntu): ```bash sudo apt install yt-dlp ``` --- ## ⚙️ Configuration ### Lidarr Setup - Ensure Lidarr is running and accessible (e.g., [http://localhost:8686](http://localhost:8686)). - Create or retrieve your API key from Lidarr's settings. Set your API key in the terminal session: ```bash export LIDARR_API_KEY="your-lidarr-api-key" ``` Or run inline: ```bash LIDARR_API_KEY="your-lidarr-api-key" ./musicfetch "Artist - Track" ``` --- ## 🧑‍💻 Usage ### 🔉 Download by Search Term ```bash ./musicfetch "Artist - Track" ``` Example: ```bash ./musicfetch "ODESZA - Bloom" ``` If Lidarr finds the artist and album, it will trigger a download in Lidarr. If not, the song will be downloaded via yt-dlp using a YouTube search. ### 📺 Download by URL ```bash ./musicfetch "https://www.youtube.com/watch?v=xxxxxxxxxxx" ``` The script extracts metadata from the video and organizes the file under the artist's folder. ### 📁 Output Structure Music is saved in: ```text /base_dir/ ├── Artist Name/ │ ├── Album Name/ (if found via Lidarr) │ └── youtube/ (if fallback used) ``` --- ## ❓ Troubleshooting - **No results from Lidarr:** - Check to make sure your Lidarr installation is reachable and the artist exists or can be found in Lidarr's metadata sources. - **yt-dlp errors:** - Try updating it: ```bash yt-dlp -U ``` - **Permission denied or file not found?** - Ensure `/media/music` exists and is writable. --- ## 🛠️ Contributing PRs are welcome! Please make your changes easy to follow. This script is designed to act as middleware, not a replacement or plugin for Lidarr. Changes must also be compatible with Bash-based workflows. --- ## 📜 License GPL V3.0