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 64-request download window by default and overlaps network I/O with parallel tile decoding, while serializing canvas writes for deterministic, thread-safe assembly.
  • Downloads up to four images from one artwork concurrently while sharing the same request budget; use --image-concurrency to tune that limit.
  • 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 64 --image-concurrency 4 --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. The current download-time optimization evidence is in reports/technical_design_document.md, reports/test_case_specification.md, and reports/test_completion_report.md.

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.

Metadata

Release files for artsy-tiled-image-downloader 2.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for artsy-tiled-image-downloader 2.1.1
File Size Uploaded Provenance Actions
artsy_tiled_image_downloader-2.1.1.tar.gz 41.6 kB With provenance Details for artsy_tiled_image_downloader-2.1.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for artsy-tiled-image-downloader 2.1.1
File Interpreter ABI Platform Actions
artsy_tiled_image_downloader-2.1.1-py3-none-any.whl Python 3 none any Details for artsy_tiled_image_downloader-2.1.1-py3-none-any.whl

Total release size: 64.5 kB

Release files / artsy_tiled_image_downloader-2.1.1.tar.gz

Download URL artsy_tiled_image_downloader-2.1.1.tar.gz
Size 41.6 kB
Tags Source
SHA-256 checksum
How to use checksums
6ebd6ebfee4d599767c323693e8fff2c91ee5d3ea4dc9fcc577685762ca72751
BLAKE2b-256 checksum
How to use checksums
487968cb8f165ceee76690cc5d2a70e27dc4caca34fdba9705a27f4f1a98f61f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 20, 2026.

Transparency log

Release files / artsy_tiled_image_downloader-2.1.1-py3-none-any.whl

Download URL artsy_tiled_image_downloader-2.1.1-py3-none-any.whl
Size 22.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7e9982c9029180025f7a5510a1390a077c662746a9db7de3e29e7633e3d4837d
BLAKE2b-256 checksum
How to use checksums
5795c7fd9707f47b3520e3f4a949cfd5ffdfb6a5813659586e8e4657a432ceb0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 20, 2026.

Transparency log

Security for artsy-tiled-image-downloader 2.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for artsy_tiled_image_downloader-2.1.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 20, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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