mcpField
H
hifi-download

hifi-download

github.com/psylchCreative & media580 installsUpdated 35w ago
Repository

About hifi-download

hifi-download is a CLI-based music discovery and high-resolution audio download skill for people managing listening research and downloads. It combines Spotify and Last.fm discovery with Qobuz and TIDAL download workflows.

Key features

  1. 01Spotify catalog and library search
  2. 02Last.fm artist and track discovery
  3. 03Qobuz and TIDAL catalog search
  4. 04Background downloads with status tracking
  5. 05Download progress dashboard

Use cases

  1. 01Find artists similar to a favorite
  2. 02Review listening-history taste profiles
  3. 03Search catalogs before downloading albums
  4. 04Monitor queued audio downloads

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/psylch/media-master --skill hifi-download

After installing, type/hifi-downloadin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

.env.example
.gitignore
.preferences.json
run.sh
references/
musicmaster.md
setup_guide.md
scripts/
_download_worker.py
disable_service.py
download_status.py
download_ui.py
enable_service.py
lastfm_artists.py
lastfm_taste.py
lastfm_tracks.py
platform_download.py
platform_search.py
setup_config.py
setup_env.py
setup.sh
spotify_auth.py
spotify_info.py
spotify_search.py
spotify_user.py
scripts/lib/
__init__.py
config.py
download_state.py
lastfm.py
platform.py
preferences.py
spotify.py

Details

From the project README

MusicMaster

Music discovery (Spotify, Last.fm) and Hi-Res audio downloads (Qobuz, TIDAL) through a unified CLI.

Language

Match user's language: Respond in the same language the user uses.

All commands use bash ${SKILL_PATH}/run.sh <script> [args...], which activates the venv and runs the corresponding Python script. Output is human-readable by default; use --json where supported for structured output.

First-Time Setup

Step 1: Check Dependencies
bash ${SKILL_PATH}/scripts/setup.sh check

Output is key=value pairs. If VENV=missing, run install first.

Step 2: Install
bash ${SKILL_PATH}/scripts/setup.sh install [--with-qobuz] [--with-tidal]

Creates .venv, installs core dependencies (spotipy, pylast, requests, python-dotenv), and optionally installs download backends.

Step 3: Configure Credentials

IMPORTANT: Do NOT ask the user for credentials in chat. Instead:

  1. Create .env from template if not exists: cp ${SKILL_PATH}/.env.example ${SKILL_PATH}/.env
  2. Tell user to edit ${SKILL_PATH}/.env with their credentials
  3. Wait for confirmation, then verify with Step 4

Where to get credentials:

Step 4: Verify
bash ${SKILL_PATH}/run.sh status

Shows which services are READY, DISABLED, or need setup. Only use services marked READY.

Preflight Check → Fix Table
CheckFix (macOS)Fix (Linux)
PYTHON=missingbrew install python3sudo apt install python3
VENV=missingbash ${SKILL_PATH}/scripts/setup.sh installSame
Core deps missing (SPOTIPY, PYLAST, etc.)bash ${SKILL_PATH}/scripts/setup.sh install --forceSame
ENV_FILE=missingcp ${SKILL_PATH}/.env.example ${SKILL_PATH}/.env then editSame
Spotify: NOT CONFIGUREDEdit .env: set SPOTIFY_CLIENT_ID and SPOTIFY_CLIENT_SECRETSame
Last.fm: NOT CONFIGUREDEdit .env: set LASTFM_API_KEYSame
Qobuz: NOT CONFIGUREDEdit .env: set QOBUZ_EMAIL and QOBUZ_PASSWORDSame
TIDAL: NOT CONFIGUREDRun tiddl auth login inside the venvSame
Spotify/Last.fm/Qobuz: ERROR (validation failed)Check credentials in .env are correct, re-obtain from dashboard if neededSame
TIDAL: ERROR (token expired)Run tiddl auth refresh or tiddl auth login inside the venvSame

Service Types

TypeServicesPurpose
DiscoverySpotify, Last.fmSearch, recommendations, similar artists
DownloadsQobuz, TIDALHigh-quality audio (FLAC, Hi-Res)

Degradation Strategy

All 4 services (Spotify, Last.fm, Qobuz, TIDAL) are optional. After running status, apply this table:

ScenarioStrategy
No Last.fmSkip & continue — Use Spotify only for discovery
No SpotifySkip & continue — Use Last.fm only for discovery
No discovery services at allHalt & guide — Tell user at least one discovery service is needed and guide setup
No QobuzAuto-fallback — Use TIDAL for downloads
No TIDALAuto-fallback — Use Qobuz for downloads
No download services at allDiscovery only — Inform user that downloads are unavailable, continue with discovery features only

When a fallback is used, tell the user which service is being used and why.

Discovery Commands

Last.fm — Similar Artists
bash ${SKILL_PATH}/run.sh lastfm_artists "Radiohead"

Returns a list of similar artists with match scores.

Last.fm — Similar Tracks
bash ${SKILL_PATH}/run.sh lastfm_tracks "Karma Police" "Radiohead"

Arguments: track name, then artist name.

Last.fm — Taste Profile
bash ${SKILL_PATH}/run.sh lastfm_taste

Returns the user's top artists and tracks from listening history.

Spotify — Search
bash ${SKILL_PATH}/run.sh spotify_search "OK Computer"

Searches Spotify catalog for tracks, albums, and artists.

Spotify — User Library
bash ${SKILL_PATH}/run.sh spotify_user tracks|artists

Gets the user's saved tracks or followed artists (requires OAuth).

Spotify — Track/Album Info
bash ${SKILL_PATH}/run.sh spotify_info SPOTIFY_URI_OR_ID

Download Commands

Search Platform Catalog
bash ${SKILL_PATH}/run.sh platform_search "Album Name" -p qobuz|tidal

Searches the download platform's catalog. Returns IDs for use with download command.

Download (async — returns immediately)
bash ${SKILL_PATH}/run.sh platform_download ID -p qobuz|tidal -t album|track

Queues the download in a background process and returns a download_id immediately. The agent is free to continue other work. Use download_status to poll progress.

To block until the download completes (legacy behavior):

bash ${SKILL_PATH}/run.sh platform_download ID -p qobuz -t album --sync
Check Download Status
bash ${SKILL_PATH}/run.sh download_status DOWNLOAD_ID
bash ${SKILL_PATH}/run.sh download_status --all
bash ${SKILL_PATH}/run.sh download_status --active
bash ${SKILL_PATH}/run.sh download_status --json

Poll the status of a specific download or list all downloads. Use --active to show only pending/in_progress tasks. Use --json for structured output.

Open Download Dashboard
bash ${SKILL_PATH}/run.sh download_ui

Opens a web dashboard at http://localhost:8765 showing real-time download status with progress bars. Auto-refreshes every 3 seconds.

Service Management

Disable a Service
bash ${SKILL_PATH}/run.sh disable_service spotify --reason "No account"
Enable a Service
bash ${SKILL_PATH}/run.sh enable_service spotify

Workflow — Music Discovery

  1. Run status to check available services
  2. Use lastfm_artists or lastfm_tracks to find similar music
  3. Use spotify_search to look up specific tracks/albums
  4. Present results to user in a clear table format
  5. If user wants to download, use platform_search → platform_download

Workflow — Download Hi-Res Audio

Print this checklist at the start, update as you go:

Download Progress:
- [ ] Step 1: Check service status
- [ ] Step 2: Search platform catalog
- [ ] Step 3: Present results to user
- [ ] Step 4: Start download
- [ ] Step 5: Monitor progress
- [ ] Step 6: Verify completion
- [ ] Step 7: Report results
  1. Run status to confirm download service is READY
  2. Search: platform_search "Album Name" -p qobuz
  3. Present results with quality info
  4. Download: platform_download ID -p qobuz -t album (returns download_id immediately)
  5. Tell user download is queued, optionally open download_ui for visual monitoring
  6. Poll with download_status DOWNLOAD_ID until completed
  7. Report using the completion report template below

Completion Report

After a download finishes, present this report to the user:

MusicMaster Download Complete!

Input: [album/track] - [title] by [artist]
Platform: [Qobuz/TIDAL]
Quality: [Hi-Res 24-bit / FLAC 16-bit / etc.]

Result:
- Track count: [N tracks]
- Total size: [X MB]
- Download path: [/path/to/files]

Files:
- [file1.flac] (XX MB)
- [file2.flac] (XX MB)
- ...

Next Steps:
- Open folder: open "[download path]"
- Download more: "download [another album]"

Gather file paths and sizes from the download_status output and by listing the download directory.

Error Handling

ErrorDetectionResolution
Venv missingrun.sh exits with venv_missingRun bash ${SKILL_PATH}/scripts/setup.sh install
Service not configuredstatus shows NOT CONFIGUREDGuide user to edit ${SKILL_PATH}/.env (see Preflight Check -> Fix Table)
Spotify OAuth expiredSpotify commands fail with auth errorRun bash ${SKILL_PATH}/run.sh spotify_auth to re-authorize
TIDAL token expiredstatus shows ERROR for TIDALRun tiddl auth refresh or tiddl auth login in venv
Service disabled by userstatus shows DISABLEDRun enable_service if user wants to re-enable
No resultsSearch returns emptyTry different keywords or check service availability

Important Notes

  • Spotify requires OAuth browser flow on first use (spotify_auth script handles this)
  • TIDAL auth is managed by tiddl CLI tool, not stored in .env
  • Qobuz credentials are stored in .env (sensitive — ensure file is in .gitignore)
  • Download paths default to ~/Music/Qobuz and ~/Music/TIDAL
  • Quality settings: Qobuz 27=Hi-Res 24-bit (highest), TIDAL HiFi=lossless

Comments

Markdown supported