| Crates.io | rustifydl |
| lib.rs | rustifydl |
| version | 0.1.21 |
| created_at | 2025-08-10 18:50:00.598273+00 |
| updated_at | 2025-08-12 14:45:05.995384+00 |
| description | A fast, no-fuss Spotify downloader built in Rust. |
| homepage | https://github.com/ThePangel/RustifyDL |
| repository | https://github.com/ThePangel/RustifyDL |
| max_upload_size | |
| id | 1789188 |
| size | 1,142,131 |
Turn any Spotify track/album/playlist URL into properly tagged audio files. RustifyDL pairs Spotify metadata with audio from YouTube, then writes tidy tags and artwork so your library looks right everywhere.

RustifyDL in action: downloading a Spotify album
cargo install rustifydl
Prerequisites:
git clone https://github.com/ThePangel/RustifyDL.git
cd RustifyDL
cargo install --path . --force
rustifydl "https://open.spotify.com/album/..." -v info --format mp3 --bitrate 192k --concurrent-downloads 8
Common options (see rustifydl --help for full list):
-o, --output-dir <PATH> Output folder (default: ./output)--concurrent-downloads <N> Parallel downloads (e.g., 6 or 10)--bitrate <RATE> FFmpeg bitrate, e.g., 192k, 256k, 320k--format <EXT> Output format, e.g., mp3, m4a, opus, flac-v, --verbosity <LEVEL> none, info, debug, full--no-dupes Skip duplicate track names when collectingAdd to your Cargo.toml:
[dependencies]
rustifydl = "0.1"
tokio = { version = "1", features = ["full"] }
Example usage:
use rustifydl::{download_spotify, DownloadOptions};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
let opts = DownloadOptions {
url: "https://open.spotify.com/album/xxxxxxxx".into(),
client_id: "<your_spotify_client_id>".into(),
client_secret: "<your_spotify_client_secret>".into(),
output_dir: "./downloads".into(),
concurrent_downloads: 6,
no_dupes: true,
bitrate: "192k".into(),
format: "mp3".into(),
verbosity: "info".into(),
no_tag: false,
timeout: 60,
};
download_spotify(opts).await?;
Ok(())
}
RustifyDL manages Spotify API credentials automatically. On first use it creates a config file and reuses it next timeβno need to pass credentials on the command line.
Config location examples:
%APPDATA%/RustifyDL/config.toml~/.config/RustifyDL/config.toml~/Library/Application Support/RustifyDL/config.tomlTo reset, delete the file and run again.
src/
βββ lib.rs # Library API & orchestration
βββ metadata.rs # Tag writing (lofty)
βββ spotify.rs # Spotify fetch (spotify-rs)
βββ youtube.rs # YouTube download (rustypipe + ffmpeg)
Contributions are welcome! Please feel free to submit a Pull Request.
π§ Active development
This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.
If you encounter issues or have questions, please open an issue.
Built with Rust π¦ and π by thepangel ^_____^