| name | spotify-mp3-cli-downloader |
| description | CLI tool for downloading Spotify tracks and playlists as MP3 with embedded metadata and album artwork |
| triggers | ["how do I download Spotify tracks to MP3","extract music from Spotify playlists","save Spotify songs with metadata","convert Spotify to local audio files","download Spotify playlist as MP3","archive Spotify music offline","use streamscribe cli","backup Spotify library to disk"] |
Spotify MP3 CLI Downloader (StreamScribe CLI)
Skill by ara.so — Devtools Skills collection.
Overview
StreamScribe CLI (cli-sonic-harvester) is a command-line tool for extracting audio from Spotify, Deezer, Tidal, and Apple Music streams. It downloads tracks as MP3/FLAC files with full metadata preservation including ID3v2 tags, album artwork, track numbers, and genre information. Designed for archivists, DJs, and music collectors who need offline access with complete metadata integrity.
Primary Language: HTML (project page), but the tool itself runs via Python 3.10+ or Node.js 18+
Key Features:
- Single track and playlist downloads
- Automatic metadata extraction (artist, album, year, genre, composer)
- High-resolution album art embedding
- Multiple quality presets (128 kbps to lossless FLAC)
- Concurrent processing for playlists
- Unicode/multilingual metadata support
Installation
Prerequisites
python3 --version
node --version
Download and Setup
The tool is distributed via the project website:
chmod +x streamscribe
sudo mv streamscribe /usr/local/bin/
streamscribe --version
Environment Configuration
export STREAMSCRIBE_CACHE="$HOME/.cache/streamscribe"
export STREAMSCRIBE_PROXY="http://proxy.example.com:8080"
export STREAMSCRIBE_TIMEOUT=60
Basic Usage
Single Track Download
streamscribe --url "https://open.spotify.com/track/3n3Ppam7vgaVa1iaRUc9Lp"
Playlist Download
streamscribe --playlist "https://open.spotify.com/playlist/37i9dQZF1DXcBWIGoYBM5M"
streamscribe --playlist "https://open.spotify.com/playlist/37i9dQZF1DXcBWIGoYBM5M" \
--output "$HOME/Music/Spotify/Playlists"
Album Download
streamscribe --url "https://open.spotify.com/album/6DEjYFkNZh67HP7R9PSZvv" \
--metadata-extended
Quality Presets
Standard Quality (Default)
streamscribe --url "SPOTIFY_URL" --quality standard
High Quality
streamscribe --url "SPOTIFY_URL" --quality high
Archival/Lossless
streamscribe --url "SPOTIFY_URL" --quality archival
Metadata Options
Extended Metadata Extraction
streamscribe --url "SPOTIFY_URL" \
--metadata-extended \
--embed-artwork \
--overwrite
High-Resolution Artwork
streamscribe --playlist "PLAYLIST_URL" \
--embed-artwork \
--artwork-size 1400
Output Formats
Human-Readable (Default)
streamscribe --url "SPOTIFY_URL"
JSON Output
streamscribe --playlist "PLAYLIST_URL" --format json
YAML Output
streamscribe --playlist "PLAYLIST_URL" --format yaml
Quiet Mode
streamscribe --url "SPOTIFY_URL" --format quiet
Integration Patterns
Piping to JSON Processors
streamscribe --playlist "PLAYLIST_URL" --format json | \
jq '.tracks[] | {title, artist, album}'
streamscribe --playlist "PLAYLIST_URL" --format json | \
jq '.tracks[] | select(.year >= 2025)'
Batch Processing with Shell Scripts
#!/bin/bash
while IFS= read -r url; do
streamscribe --url "$url" \
--quality high \
--output "./Archive/$(date +%Y-%m)" \
--format quiet
done < spotify_urls.txt
Integration with Music Library Managers
streamscribe --playlist "PLAYLIST_URL" \
--output "$HOME/Music/Inbox" \
--format json > import.json
beet import "$HOME/Music/Inbox"
Advanced Configuration
Resume Interrupted Downloads
streamscribe --playlist "PLAYLIST_URL" --resume
Concurrent Processing Control
streamscribe --playlist "PLAYLIST_URL" \
--threads 4 \
--quality high
Custom Naming Templates
streamscribe --playlist "PLAYLIST_URL" \
--output-template "{artist}/{album}/{track:02d} - {title}"
Platform-Specific Usage
Spotify
streamscribe --url "https://open.spotify.com/track/[TRACK_ID]?si=..."
streamscribe --playlist "https://open.spotify.com/playlist/[PLAYLIST_ID]?si=..."
Deezer
streamscribe --url "https://www.deezer.com/track/[TRACK_ID]"
Tidal
streamscribe --url "https://tidal.com/browse/track/[TRACK_ID]"
Apple Music
streamscribe --url "https://music.apple.com/album/[ALBUM_ID]?i=[TRACK_ID]"
Troubleshooting
Authentication Issues
export SPOTIFY_CLIENT_ID="your_client_id_here"
export SPOTIFY_CLIENT_SECRET="your_client_secret_here"
streamscribe --url "SPOTIFY_URL"
Network Timeout Errors
export STREAMSCRIBE_TIMEOUT=120
streamscribe --url "SPOTIFY_URL"
Metadata Encoding Issues
streamscribe --url "SPOTIFY_URL" \
--encoding utf-8 \
--metadata-extended
Disk Space Warnings
df -h ./StreamScribe/Output/
streamscribe --playlist "PLAYLIST_URL" \
--dry-run \
--format json | jq '[.tracks[].estimated_size] | add'
Corrupted Downloads
streamscribe --url "SPOTIFY_URL" \
--verify-checksum \
--overwrite
Legal and Ethical Considerations
Important: This tool is for personal archival and educational use only. Users must:
- Have an active subscription or free-tier access to the streaming service
- Comply with local copyright laws and platform Terms of Service
- Not redistribute downloaded content
- Verify fair use exemptions in their jurisdiction
The tool does not bypass DRM or encryption — it captures streams already accessible through legitimate access.
Common Workflows
Create Local Backup of Spotify Library
#!/bin/bash
for playlist_url in $(cat my_playlists.txt); do
playlist_name=$(echo "$playlist_url" | sed 's/.*playlist\///' | cut -d'?' -f1)
streamscribe --playlist "$playlist_url" \
--output "./Backup/$playlist_name" \
--quality archival \
--metadata-extended \
--embed-artwork
done
DJ Sample Library Creation
streamscribe --playlist "https://open.spotify.com/playlist/DJ_CRATE" \
--quality high \
--output "./DJ/Samples/2026" \
--metadata-extended \
--output-template "{genre}/{bpm} - {artist} - {title}"
Academic Research Archive
streamscribe --playlist "ETHNOMUSICOLOGY_PLAYLIST" \
--quality archival \
--metadata-extended \
--encoding utf-8 \
--format yaml > research_metadata.yaml
Performance Optimization
Large Playlist Processing
streamscribe --playlist "LARGE_PLAYLIST" \
--threads 8 \
--rate-limit 10 \
--quality high \
--format quiet
Memory-Constrained Environments
export STREAMSCRIBE_BUFFER_SIZE=4096
streamscribe --playlist "PLAYLIST_URL" \
--no-cache \
--sequential
Version Information
Current stable version: v2.1.0 (as of 2026-03-15)
Check for updates:
streamscribe --check-updates
Support Resources
For bug reports, include:
streamscribe --url "PROBLEMATIC_URL" --debug > debug_report.log