Skip to main content

CLI tool for downloading Spotify tracks, playlists, and albums with organized folders and progress tracking

Project description

๐ŸŽต GroveGrab CLI

A powerful command-line tool for downloading Spotify tracks, playlists, albums, and artists using your own Spotify API credentials.

Python License

โœจ Features

  • ๐ŸŽต Download Everything - Tracks, playlists, albums, and artists
  • ๐Ÿ” Your API Credentials - Use your own Spotify API to avoid rate limits
  • ๐ŸŽจ Beautiful CLI - Rich terminal UI with progress bars and colors
  • ๐Ÿ“‹ Individual Song Progress - See each song's download progress in playlists/albums
  • ๐ŸŽง High Quality - Download in MP3 (up to 320kbps), FLAC, OGG, OPUS, or M4A
  • โšก Fast & Efficient - Concurrent downloads with real-time progress
  • ๐Ÿ“Š Task Management - List, cancel, retry, and view logs for all downloads
  • ๐Ÿ”„ Batch Downloads - Download multiple URLs from a file
  • ๐Ÿ’พ Smart Caching - Skip already downloaded tracks
  • ๐Ÿ’ป Windows Compatible - Full support for Windows console (no Unicode issues)

๐Ÿ“ฆ Installation

Option 1: Install from PyPI (Recommended)

pip install GroveGrabCLI

Option 2: Install from Source

git clone https://github.com/yourusername/grovegrab-cli.git
cd grovegrab-cli
pip install -e .

Prerequisites

  • Python 3.8+
  • FFmpeg - Required by SpotDL for audio conversion
    # Windows (Chocolatey)
    choco install ffmpeg
    
    # macOS
    brew install ffmpeg
    
    # Linux (Ubuntu/Debian)
    sudo apt install ffmpeg
    

๐Ÿš€ Quick Start

โš ๏ธ IMPORTANT: First Time Setup Required

Before downloading anything, you MUST configure Spotify API credentials:

grovegrab auth

This will guide you through getting free API credentials from Spotify.

How to get Spotify API credentials (FREE):

  1. Go to Spotify Developer Dashboard
  2. Log in with your Spotify account (free account works!)
  3. Click "Create an App"
  4. Give it any name (e.g., "My GroveGrab")
  5. Copy your Client ID and Client Secret
  6. Click "Edit Settings" and add redirect URI: http://localhost:8888/callback
  7. Save, then run grovegrab auth and paste your credentials

Download Your First Track

grovegrab dl "https://open.spotify.com/track/..."

That's it! ๐ŸŽ‰

๐Ÿ“– Usage

Basic Commands

# Download a track/playlist/album
grovegrab dl "spotify_url"

# Download with custom settings
grovegrab dl "url" --format flac --quality 320k --output ~/Music

# Watch progress in real-time
grovegrab dl "url" --watch

# Run in background
grovegrab dl "url" --detach

Configuration

# Run setup wizard
grovegrab auth

# Show current configuration
grovegrab config --show

# Reset configuration
grovegrab config --reset

Task Management

# List active downloads
grovegrab list

# List all downloads (including completed)
grovegrab list --all

# Cancel a download
grovegrab cancel <task-id>

# Retry a failed download
grovegrab retry <task-id>

# View logs
grovegrab logs <task-id>

# Follow logs in real-time
grovegrab logs <task-id> --follow

Batch Downloads

# Download from a file containing URLs
grovegrab batch urls.txt

# With custom worker count
grovegrab batch urls.txt --workers 5

Example urls.txt:

https://open.spotify.com/track/...
https://open.spotify.com/playlist/...
https://open.spotify.com/album/...

Other Commands

# Show version
grovegrab version

# Get help
grovegrab --help
grovegrab dl --help

๐ŸŽจ Screenshots

Single Track Download

Starting download: track
Downloading: Artist - Song Name โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 60%

Playlist Download (Individual Songs)

Starting download: playlist
Overall: 15/31 tracks (2 failed) โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 48%
Anirudh Ravichander - Pathala Pathala โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ 100%
The Weeknd - Blinding Lights โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ 100%
Drake - God's Plan โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ 75%
Ed Sheeran - Shape of You โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ 30%

Task List

โ”Œโ”€ Download Tasks โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ ID       Status         Progress  Current Track    Stats    โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ a1b2c3d4 > running     67%       Drake - Hotline  3/5       โ”‚
โ”‚ e5f6g7h8 OK completed  100%      -                10/10     โ”‚
โ”‚ i9j0k1l2 ERR failed    45%       -                5/12 (2)  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

โš™๏ธ Configuration

Configuration is stored at:

  • Linux/Mac: ~/.config/grovegrab/config.json
  • Windows: %APPDATA%\grovegrab\config.json

Environment Variables

You can also set credentials via environment variables:

export SPOTIFY_CLIENT_ID="your_client_id"
export SPOTIFY_CLIENT_SECRET="your_client_secret"
export GROVEGRAB_OUTPUT="~/Music"

Configuration Options

Setting Default Options
audio_format mp3 mp3, flac, ogg, opus, m4a
audio_quality 320k 128k, 192k, 256k, 320k
default_download_path ~/Music/GroveGrab Any valid path

๐Ÿ› ๏ธ Development

Setup Development Environment

# Clone the repository
git clone https://github.com/yourusername/grovegrab-cli.git
cd grovegrab-cli

# Install in editable mode with dev dependencies
pip install -e ".[dev]"

# Run tests
pytest

# Format code
black grovegrab/

# Lint code
flake8 grovegrab/

Project Structure

grovegrab-cli/
โ”œโ”€โ”€ grovegrab/
โ”‚   โ”œโ”€โ”€ __init__.py      # Package info
โ”‚   โ”œโ”€โ”€ __main__.py      # Entry point
โ”‚   โ”œโ”€โ”€ cli.py           # CLI commands
โ”‚   โ”œโ”€โ”€ core.py          # Download manager
โ”‚   โ”œโ”€โ”€ config.py        # Configuration
โ”‚   โ””โ”€โ”€ ui.py            # Terminal UI
โ”œโ”€โ”€ tests/               # Unit tests
โ”œโ”€โ”€ docs/                # Documentation
โ”œโ”€โ”€ requirements.txt     # Dependencies
โ”œโ”€โ”€ setup.py             # Setup script
โ””โ”€โ”€ pyproject.toml       # Project metadata

๐Ÿ› Troubleshooting

โŒ "No client_id. Pass it or set a SPOTIPY_CLIENT_ID environment variable"

This is the most common issue! You need to configure Spotify API credentials first:

# Run this command to set up your credentials:
grovegrab auth

Get free credentials from Spotify Developer Dashboard (see Quick Start section above).

FFmpeg not found

# Install FFmpeg first
# Windows: choco install ffmpeg
# Mac: brew install ffmpeg
# Linux: sudo apt install ffmpeg

No internet connection

# Check your network connection
ping google.com

Download fails

# View detailed logs
grovegrab logs <task-id>

# Retry the download
grovegrab retry <task-id>

Invalid credentials

# Re-run setup
grovegrab auth

# Or check your credentials at
# https://developer.spotify.com/dashboard

Config location

Your configuration is stored at:

  • Windows: C:\Users\YourName\AppData\Local\grovegrab\grovegrab\config.json
  • Linux/Mac: ~/.config/grovegrab/config.json

๐Ÿค Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/AmazingFeature)
  3. Commit your changes (git commit -m 'Add some AmazingFeature')
  4. Push to the branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

๐Ÿ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

โš ๏ธ Legal Notice

This tool is for personal use only. Please comply with:

  • Spotify's Terms of Service
  • YouTube's Terms of Service (SpotDL uses YouTube as audio source)
  • Copyright laws in your jurisdiction

Always support artists by using legitimate streaming services!

๐Ÿ™ Acknowledgments

  • SpotDL - The amazing tool that powers the downloads
  • Typer - Beautiful CLI framework
  • Rich - Gorgeous terminal formatting
  • GroveGrab Web - The original web version this CLI is based on

๐Ÿ“ž Support


Made with โค๏ธ for music lovers

If you enjoy this project, consider โญ starring the repository!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

grovegrabcli-1.0.2.tar.gz (18.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

grovegrabcli-1.0.2-py3-none-any.whl (20.5 kB view details)

Uploaded Python 3

File details

Details for the file grovegrabcli-1.0.2.tar.gz.

File metadata

  • Download URL: grovegrabcli-1.0.2.tar.gz
  • Upload date:
  • Size: 18.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for grovegrabcli-1.0.2.tar.gz
Algorithm Hash digest
SHA256 3ce00e89722b71def6b0def16f96c3a4ce3a31ace9634712604094cb1e847635
MD5 18bc1de15f0aafc2c39a8c3af7b4661b
BLAKE2b-256 74abba043cf5e196a59b3020a704a16bbba1b60d85d81be0a79e702b385afd32

See more details on using hashes here.

File details

Details for the file grovegrabcli-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: grovegrabcli-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 20.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for grovegrabcli-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 1eb3c378dd9f0aef1bd9ac1cbf0d36962f1e94f1ce08e6ecfee87c32cfb2b569
MD5 4bc2264f98e4f58f68b970e3d57df6d9
BLAKE2b-256 7a4ef29dba6af4ccb4ed8c30509ead89f0231e3fa84aad2e165ecc2824fb841e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page