Download your bandcamp collection using this python script.

Overview

bandcamp-downloader

Download your Bandcamp collection using this python script.

It requires you to have a browser with a logged in session of bandcamp open. Cookies from the browser will be used to authenticate with Bandcamp.

Supported browsers are the same as in browser_cookie3: Chrome, Chromium, Firefox, Brave, Opera, and Edge

Albums will be downloaded into their zip files and singles will just be plain files. Downloads are organized by Artist name. Already existing files of the same name will have their file sizes checked against what it should be, and if they are the same, the download will be skipped, otherwise it will be over-written. You can use the --force flag to always overwrite existing files.

Downloads will happen in parallel, by default using a pool of 5 threads. You can configure how many threads to use with the --parallel-downloads/-p flag. After each download a thread will wait 1 second before trying the next download. This is to try and not overwhelm (and be rejected by) the bandcamp servers. This can be configured with the --wait-after-download flag.

If a download should fail because of an HTTP/network error, it will be retried again after a short wait. By default a file download will be attempted at most 5 times. This can be configured with the --max-download-attempts flag. By default, a failed download will wait 5 seconds before trying again. This can be configured by the --retry-wait flag.

By default, files are downloaded in mp3-320 format, but that can be changed with the --format/-f flag.

Known Issues

Failure to read cookies on Windows for Chrome/Chromium/Brave

This is a known issue with the browser-cookie3 module. I've submitted a PR to fix it here. In the meantime, firefox should still work fine, and I have created a branch here with a patched browser_cookie3 module that should work.

Running the script on WSL crashes with a DBUS_SESSION_BUS_ADDRESS error

This is seems to be a WSL issue. The browser_cookie3 module tries to get a secret from your keyring via dbus, but WSL may not have dbus installed, or may not have it set up as expected. As such, you may see the following error:

secretstorage.exceptions.SecretServiceNotAvailableException: Environment variable DBUS_SESSION_BUS_ADDRESS is unset

Please either check your WSL dbus installation/configuration, or run the script nativity on windows.

Manual Setup

Install the script dependencies by running:

pip install -r requirements.txt

Run the program:

./bandcamp-downloader.py [arguments]

Setup via Poetry

Install requirements using Python Poetry. Installation instructions here.

poetry install

Run the script within the poetry shell:

poetry shell
python bandcamp-downloader.py [arguments]

or directly through poetry run:

poetry run python bandcamp-downloader.py [arguments]

Usage

usage: bandcamp-downloader.py [-h]
                              [--browser {firefox,chrome,chromium,brave,opera,edge}]
                              [--directory DIRECTORY]
                              [--format {aac-hi,aiff-lossless,alac,flac,mp3-320,mp3-v0,vorbis,wav}]
                              [--parallel-downloads PARALLEL_DOWNLOADS]
                              [--force]
                              [--wait-after-download WAIT_AFTER_DOWNLOAD]
                              [--max-download-attempts MAX_DOWNLOAD_ATTEMPTS]
                              [--retry-wait RETRY_WAIT] [--verbose]
                              username

Download your collection from bandcamp. Requires a logged in session in a
supported browser so that the browser cookies can be used to authenticate with
bandcamp. Albums are saved into directories named after their artist. Already
existing albums will have their file size compared to what is expected and re-
downloaded if the sizes differ. Otherwise already existing albums will not be
re-downloaded.

positional arguments:
  username              Your bandcamp username

optional arguments:
  -h, --help            show this help message and exit
  --browser {firefox,chrome,chromium,brave,opera,edge}, -b {firefox,chrome,chromium,brave,opera,edge}
                        The browser whose cookies to use for accessing
                        bandcamp. Defaults to "firefox"
  --directory DIRECTORY, -d DIRECTORY
                        The directory to download albums to. Defaults to the
                        current directory.
  --format {aac-hi,aiff-lossless,alac,flac,mp3-320,mp3-v0,vorbis,wav}, -f {aac-hi,aiff-lossless,alac,flac,mp3-320,mp3-v0,vorbis,wav}
                        What format do download the songs in. Default is
                        'mp3-320'.
  --parallel-downloads PARALLEL_DOWNLOADS, -p PARALLEL_DOWNLOADS
                        How many threads to use for parallel downloads. Set to
                        '1' to disable parallelism. Default is 5. Must be
                        between 1 and 32
  --force               Always re-download existing albums, even if they
                        already exist.
  --wait-after-download WAIT_AFTER_DOWNLOAD
                        How long, in seconds, to wait after successfully
                        completing a download before downloading the next
                        file. Defaults to '1'.
  --max-download-attempts MAX_DOWNLOAD_ATTEMPTS
                        How many times to try downloading any individual files
                        before giving up on it. Defaults to '5'.
  --retry-wait RETRY_WAIT
                        How long, in seconds, to wait before trying to
                        download a file again after a failure. Defaults to
                        '5'.
  --verbose, -v

Development and Contributing

When modifying required packages, please:

  • Add to Poetry (poetry add)
  • Then update the requirements.txt (poetry run pip freeze > requirements.txt)
  • Commit all updated files

Notes

If you have a logged in session in the browser, have used the --browser/-b flag correctly, and still are being told that the script isn't finding any albums, check out the page for browser_cookie3, you might need to do some configuring in your browser to make the cookies available to the script.

If you are downloading your collection in multiple formats, the script can't tell if an already downloaded zip file is the same format or not, and will happily overwrite it. So make sure to use different directories for different formats, either by running the script somewhere else or by supplying directories to the --directory/-d flag.

A very fast file streaming bot used for streaming and downloading movies

FileStreamBot GIVE A STAR AND FORK ELSE NO MORE OPENSOURCE A Telegram bot to turn all media and documents files to web link . Report a Bug | Request F

Code X Mania a.k.a Adarsh Goel 190 Jan 04, 2023
Automatically download and crop key information from the arxiv daily paper. (cpu version)

Automatically download and crop key information from the arxiv daily paper. (cpu version)

HeoLis 4 Jul 30, 2022
This is a simple Python Script to download Imgur Pictures with the short url!

Imgur Downloader This is a simple Python Script that runs a process with progress bar that downloads an Imgur Picture! Code Example Features Progress

OGMatrix 1 Nov 18, 2021
Noto fonts go universal! Download Noto fonts combined to suit your region (South Asia, SE Asia, Africa-MiddleEast, Europe-Americas).

Go Noto Universal Noto fonts go universal! Download Noto fonts combined to suit your region (South Asia, SE Asia, East Asia, Africa-MiddleEast, Europe

Satish B 67 Jan 06, 2023
Jocomol 16 Dec 12, 2022
A python script that discovers hidden YouTube API clients. Just a research project.

YouTube-Internal-Clients A script that discovers hidden internal clients of the YouTube (Innertube) API using bruteforce methods. The script tries cli

David 97 Jan 02, 2023
๐ด ๐‘ก๐‘’๐‘™๐‘’๐‘”๐‘Ÿ๐‘Ž๐‘š ๐‘๐‘œ๐‘ก ๐‘กโ„Ž๐‘Ž๐‘ก ๐‘๐‘Ž๐‘› ๐‘‘๐‘œ๐‘ค๐‘›๐‘™๐‘œ๐‘Ž๐‘‘ ๐‘ฃ๐‘–๐‘‘๐‘’๐‘œ ๐‘Ž๐‘›๐‘‘ ๐‘Ž๐‘ข๐‘‘๐‘–๐‘œ ๐‘“๐‘Ÿ๐‘œ๐‘š ๐‘ฆ๐‘œ๐‘ข๐‘ก๐‘ข๐‘๐‘’ ๐‘Ž๐‘›๐‘‘ ๐‘ฃ๐‘–๐‘‘๐‘’๐‘œ ๐‘ค๐‘’๐‘๐‘ ๐‘–๐‘ก๐‘’๐‘  ๐‘ž๐‘ข๐‘–๐‘๐‘˜๐‘™๐‘ฆ

๐ด ๐‘ก๐‘’๐‘™๐‘’๐‘”๐‘Ÿ๐‘Ž๐‘š ๐‘๐‘œ๐‘ก ๐‘กโ„Ž๐‘Ž๐‘ก ๐‘๐‘Ž๐‘› ๐‘‘๐‘œ๐‘ค๐‘›๐‘™๐‘œ๐‘Ž๐‘‘ ๐‘ฃ๐‘–๐‘‘๐‘’๐‘œ ๐‘Ž๐‘›๐‘‘ ๐‘Ž๐‘ข๐‘‘๐‘–๐‘œ ๐‘“๐‘Ÿ๐‘œ๐‘š ๐‘ฆ๐‘œ๐‘ข๐‘ก๐‘ข๐‘๐‘’ ๐‘Ž๐‘›๐‘‘ ๐‘ฃ๐‘–๐‘‘๐‘’๐‘œ ๐‘ค๐‘’๐‘๐‘ ๐‘–๐‘ก๐‘’๐‘  ๐‘ž๐‘ข๐‘–๐‘๐‘˜๐‘™๐‘ฆ

SOCIAL MECHANIC 2 Aug 04, 2022
Twayback: Downloading deleted Tweets from the Wayback Machine, made easy

Finding and downloading deleted Tweets takes a lot of time. Thankfully, with this tool, it becomes a piece of cake! ๐ŸŽ‚

126 Dec 27, 2022
A toolkit to automatically crawl the paper list and download paper pdfs of ACL Ahthology.

ACL-Anthology-Crawler A toolkit to automatically crawl the paper list and download paper pdfs of ACL Anthology

Ray GG 9 Oct 09, 2022
Python script to download all images/webms of a 4chan thread

Python3 script to continuously download all images/webms of multiple 4chan thread simultaneously - without installation

Micha Fink 208 Jan 04, 2023
ๅ‘ฝไปค่กŒ็‰ˆๆœฌ็š„HLS/DASHๆตไธ‹่ฝฝๅ™จ๏ผŒๆ”ฏๆŒๆ ‡ๅ‡†AES-128-CBC่งฃๅฏ†

XstreamDL-CLI ๅŸบไบŽpython 3.7.4+็š„๏ผŒๅ‘ฝไปค่กŒ็‰ˆๆœฌ็š„๏ผŒHLS/DASHๆตไธ‹่ฝฝๅ™จ๏ผŒๆ”ฏๆŒๆ ‡ๅ‡†AES-128-CBC่งฃๅฏ† ไฝฟ็”จ ้ฆ–ๅ…ˆๅฎ‰่ฃ…ๅฟ…่ฆ็š„ๅบ“

xhlove 239 Dec 31, 2022
The lyrics module of the repository apple-playlist-downloader

This is the lyrics module of the repository apple-playlist-downloader. With this code you can download the .lrc file (time synced lyrics) from yours t

Antoine Bollengier 6 Oct 07, 2022
Python based YouTube video Downloader GUI Application.

Youtube video Downloader Python based Youtube video Downloader GUI Application. Installation Python Dependencies Import pytube pip install pytube Im

Naem Azam 1 Jan 03, 2022
A Python script to download PDB files associated with a Portable Executable (PE)

A Python script to download PDB files associated with a Portable Executable (PE)

Podalirius 33 Jan 03, 2023
A growing collection of search plugins for the qBittorrent, an awesome and opensource torrent client

qBittorrent Search Plugins This is a still growing collection of search plugins for qBittorent, an amazing and open source torrent client, maintained

Alessio Tudisco 59 Dec 26, 2022
Smule Video Downloader

Smule Video Downloader Using Requests,Re & Urllib Installation - apt install git (for vps) or pkg install git (for termux)

Hansen Gianto 4 Aug 31, 2022
A Celery application to collect data, download media and extract information from social media APIs

Project IBEX A Celery application to collect data, download media and extract information from social media APIs. Requirements You must have a Redis D

ibex 4 Dec 15, 2022
Noto fonts go universal! Download Noto fonts combined to suit your region

noto-cjk Noto CJK fonts Noto Serif CJK update was released on 25 October 2021. We moved the release history and other notes into both Sans and Serif s

Google Fonts 2k Jan 02, 2023
Script for YouTube creators to share dislike count with their viewers.

Stahovรกnรญ dislikลฏ z YouTube - milafon Tento skript slouลพรญ jako moลพnost zobrazit divรกkลฏm poฤet dislikลฏ u YouTube videรญ. Vyลพaduje implementaci ze strany

4 Sep 28, 2022
Tkinter based YouTube video downloader works on pytube 11.0.2. Can download YouTube videos in 720p(HD), 144p and even only audio.

YouTube-Downloader Tkinter based YouTube video downloader works on pytube 11.0.2. Can download YouTube videos in 720p(HD), 144p and even only audio. G

Manav Grover 2 Dec 27, 2021