Skip to main content

Download full DeviantArt galleries using the official public API

Project description

DeviantArt Downloader

CI codecov PyPI Python versions Downloads License: MIT

Download the full gallery of any DeviantArt profile using the official public API.

  • Downloads the original file when the author allows it, or the highest publicly available resolution image.
  • Downloads mature content unblurred when you log in with your account (--login, see below). Without login, --unblur/DA_UNBLUR=true strips the blur where possible: works uploaded since ~mid-2021 have their URL token pinned to the blurred version, so for those the blurred preview is downloaded instead.
  • Parallel downloads with retries and API rate-limit handling.
  • Detects duplicates across runs (even if the artwork's title has changed), so it is safe to re-run to sync new works.
  • Run it with no arguments to re-sync every user already present in the output folder with their latest works.
  • Files you delete manually stay deleted: the download record (_downloaded.json) is authoritative, so deleted works are not downloaded again unless you pass --redownload-missing.
  • Saves the full metadata of every work to _metadata.json.

Installation

pip install deviantart-gallery-downloader

Credentials

  1. Create a DeviantArt account.
  2. Register an application (confidential type) at https://www.deviantart.com/developers/register.
  3. Copy the client_id and client_secret from https://www.deviantart.com/developers/apps.

Export them as environment variables or put them in a .env file in the directory you run the command from:

DA_CLIENT_ID=your_client_id
DA_CLIENT_SECRET=your_client_secret
# Optional: simultaneous downloads (default: 4, recommended not to exceed 8)
DA_WORKERS=4
# Optional: strip the blur filter the API applies to mature-content previews
# (default: false, images are kept as the API serves them)
DA_UNBLUR=false
# Optional: output folder, absolute or relative ("~" is expanded)
DA_OUTPUT=~/Pictures/deviantart

Usage

deviantart-downloader https://www.deviantart.com/username
deviantart-downloader username

# Passing the credentials as arguments:
deviantart-downloader username --client-id XXX --client-secret YYY

# Useful options:
deviantart-downloader username -o my_folder   # output folder (default: DA_OUTPUT or downloads)
deviantart-downloader username -w 8           # simultaneous downloads
deviantart-downloader username --delay 1.0    # pause after each download, per thread
deviantart-downloader username --redownload-missing  # restore manually deleted files
deviantart-downloader username --unblur       # strip the blur on mature-content previews

Files are saved to <output>/<username>/.

Sync every downloaded user

With no profile argument, the tool scans the output folder for the users you already downloaded (their subdirectories) and fetches whatever they published since:

deviantart-downloader                # sync everyone under DA_OUTPUT (or ./downloads)
deviantart-downloader -o my_folder   # sync everyone under my_folder

Only subdirectories created by a previous run are considered (they are recognised by the _downloaded.json / _metadata.json files inside), so unrelated folders in the output directory are ignored. Users whose gallery comes back empty (deactivated accounts) are skipped with a notice instead of aborting the run.

Unblurred mature content (--login)

Without a logged-in user, the API serves mature works as an anonymous visitor would see them: blurred, and with the image URL cryptographically pinned to the blurred version for works uploaded since ~mid-2021 (--unblur cannot help there). To get the real images, log in with your DeviantArt account:

  1. In your account settings, enable mature content.
  2. In https://www.deviantart.com/developers/apps, edit your application and add http://127.0.0.1:8721/callback to the OAuth2 Redirect URI Whitelist.
  3. Run:
deviantart-downloader --login            # one-time browser authorization
deviantart-downloader username           # subsequent runs use the saved session

The browser opens once to authorize the app; the session is stored in ~/.config/deviantart-downloader/token.json and renewed automatically. If it ever expires (about 3 months without use), run --login again. While a session is saved, mature works are downloaded unblurred and --unblur is unnecessary.

Development

git clone https://github.com/Nibblex/DeviantartDownloader
cd DeviantartDownloader
python -m venv .venv && source .venv/bin/activate
pip install -e .[dev]
pytest   # runs the test suite with a coverage report

License

MIT

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

deviantart_gallery_downloader-1.4.0.tar.gz (21.1 kB view details)

Uploaded Source

Built Distribution

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

deviantart_gallery_downloader-1.4.0-py3-none-any.whl (13.8 kB view details)

Uploaded Python 3

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