Skip to main content

Artsy Tiled Image Downloader

Download high-resolution tiled artwork images from Artsy artwork pages for personal study and technical research.

Features

  • Uses a reusable HTTPX async client with connection pooling and HTTP/2 support.
  • Validates input URL/slug, metadata fields, tile dimensions, output size limits, retry counts, timeouts, and concurrency.
  • Uses a bounded download window and overlaps network I/O with parallel tile decoding, while serializing canvas writes for deterministic, thread-safe assembly.
  • Streams every response through configurable byte limits and keeps tile memory bounded by concurrency instead of retaining the entire compressed tile set.
  • Writes final files with an atomic temporary file in the output directory, so a failed save does not leave a partial image at the final path.
  • Splits CLI, metadata parsing, downloading, image assembly, paths, config, and exceptions into testable modules.

Installation

Install from PyPI:

pip install artsy-tiled-image-downloader

The installed console command is:

artsy-downloader [artsy-artwork-url]

For local development:

python3 -m venv .venv
source .venv/bin/activate
pip install -e .

Usage

python -m artsy_tiled_image_downloader [artsy-artwork-url]

After installation, the same CLI is also available as:

artsy-downloader [artsy-artwork-url]

Example:

python -m artsy_tiled_image_downloader https://www.artsy.net/artwork/yayoi-kusama-stars-11

Useful options:

python -m artsy_tiled_image_downloader --metadata-only https://www.artsy.net/artwork/yayoi-kusama-stars-11
python -m artsy_tiled_image_downloader --output-dir ~/Downloads --concurrency 24 --timeout 30 [url]
python -m artsy_tiled_image_downloader --skip-direct [url]
python -m artsy_tiled_image_downloader --png-compression 1 [url]

Sample output:

URL: https://www.artsy.net/artwork/yayoi-kusama-stars-11
Fetching metadata...
Images: 1
Image 1/1: 2547x3543, 7x5 (35 tiles)
Downloading...
Saved: /Users/you/Downloads/output_yayoi-kusama-stars-11_0.jpg (direct)
Elapsed: 1.0s

Testing

pip install -e ".[dev]"
pytest
pytest --cov --cov-report=term-missing
ruff check .

The test suite covers URL and limit validation, metadata parsing, filename safety, Deep Zoom boundary math, retry and response-size behavior, bounded concurrency, pipelined assembly, direct-image fallback, packaging, and a local HTTP end-to-end CLI run. See TEST_REPORT.md and QUALITY_CHECKLIST.md for the release evidence.

PyPI Release

Package name: artsy-tiled-image-downloader

Build and validate the release artifacts:

rm -rf build dist *.egg-info
python -m pip install -e ".[dev]"
python -m build
python -m twine check --strict dist/*

Upload with a PyPI project or account token:

TWINE_USERNAME=__token__ TWINE_PASSWORD=pypi-... python -m twine upload dist/*

This repository also includes .github/workflows/publish.yml for PyPI Trusted Publishing. Configure the pypi environment as a trusted publisher for this repository. Publishing a vX.Y.Z GitHub release then checks that the tag exactly matches the package version before building and uploading both the wheel and sdist.

Temporary Data

The downloader does not store tiles in a process-wide temporary directory. Only a concurrency-bounded set of compressed and decoded tiles is held while the download/decode/stitch pipeline is active. Decoded images are closed immediately after they are pasted. The only temporary files are short-lived files created beside the final output for atomic replacement.

If a future very-large-image mode needs disk-backed tile caching, prefer tempfile.TemporaryDirectory() as a scoped context manager rather than a fixed folder under ~/Downloads.

Disclaimer

This project is independent and is not affiliated with Artsy.

Use it only for personal learning, interoperability research, and lawful technical analysis. You are responsible for respecting Artsy's terms of use, robots policies, copyright restrictions, and any applicable laws. Do not use this project for commercial redistribution, copyright infringement, abusive automation, or any unauthorized access.

The software is provided as-is, without warranty. The maintainers are not responsible for misuse or for any direct or indirect loss caused by using this tool.

Download files

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

Source Distribution

artsy_tiled_image_downloader-2.1.0.tar.gz (35.1 kB view details)

Uploaded Source

Built Distribution

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

artsy_tiled_image_downloader-2.1.0-py3-none-any.whl (21.9 kB view details)

Uploaded Python 3

File details

Details for the file artsy_tiled_image_downloader-2.1.0.tar.gz.

File metadata

File hashes

Hashes for artsy_tiled_image_downloader-2.1.0.tar.gz
Algorithm Hash digest
SHA256 479f96ad806e1b66e48e4172609fa1ac0c760842f7a62ec79ae4c882a90d2c7c
MD5 abb974840be92fa5fbdae90e6d1e269a
BLAKE2b-256 1df577cfc263cf29ff35885ba29730f63ff580226fdb4da8636a8c588c5071d5

See more details on using hashes here.

Provenance

The following attestation bundles were made for artsy_tiled_image_downloader-2.1.0.tar.gz:

Publisher: publish.yml on inostarlin-passion/ArtsyTiledImageDownloader

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file artsy_tiled_image_downloader-2.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for artsy_tiled_image_downloader-2.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7280b62367cfc989531a6827b3c9e3fb3cc63bb38e98632c213523c2c5f1c03d
MD5 023ba582ba42dd0a2fec6be4be208190
BLAKE2b-256 5cf89399d6fbb519b2eb023cc7fd87c2fcda33f5bd96ccd178b75b82066a8f72

See more details on using hashes here.

Provenance

The following attestation bundles were made for artsy_tiled_image_downloader-2.1.0-py3-none-any.whl:

Publisher: publish.yml on inostarlin-passion/ArtsyTiledImageDownloader

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

2.1.0 This release

2 files

2.0.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page