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-concurrencyto 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)
| 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)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| 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 logRelease 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 logSecurity 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.
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 logA 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.