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

2.8 KiB

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

pip install requests

📼 External Tools

  • yt-dlp: YouTube downloader for audio/video.

Install via pip (recommended):

pip install -U yt-dlp

Or install system-wide (Debian/Ubuntu):

sudo apt install yt-dlp

⚙️ Configuration

Lidarr Setup

  • Ensure Lidarr is running and accessible (e.g., http://localhost:8686).
  • Create or retrieve your API key from Lidarr's settings.

Set your API key in the terminal session:

export LIDARR_API_KEY="your-lidarr-api-key"

Or run inline:

LIDARR_API_KEY="your-lidarr-api-key" ./musicfetch "Artist - Track"

🧑‍💻 Usage

🔉 Download by Search Term

./musicfetch "Artist - Track"

Example:

./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

./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:

/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:

      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