musicfetch/README.md
2025-06-09 17:10:05 -07:00

136 lines
2.8 KiB
Markdown

# 🎵 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