Download all images from any public VSCO gallery at full resolution.
VSCO's gallery is protected by Cloudflare and requires JavaScript to render, so a plain HTTP scraper won't work. This tool uses a real Chrome browser (via Playwright) in three phases:
- Discovery -- Opens the gallery, clicks "Load More", and scrolls through VSCO's infinite scroll to intercept all
/api/3.0/medias/profileresponses - Batch download -- Injects
Image()elements with?w=2048to trigger full-resolution CDN responses and captures the binary bodies - Individual page fallback -- Any images missed by the CDN edge cache are fetched by visiting each image's individual page, achieving ~94% full-resolution coverage (remainder saved as thumbnails)
Full-res images are typically 1--5 MB each (compared to ~50--80 KB thumbnails).
- Python 3.13+
- uv -- fast Python package manager
- Google Chrome installed (used instead of bundled Chromium to bypass Cloudflare)
git clone https://github.com/gr0esch/vsco-scraper
cd vsco-scraper
uv sync
uv run playwright install chrome# Single user
uv run scraper.py <username>
# Full gallery URL
uv run scraper.py https://vsco.co/<username>/gallery
# Multiple users
uv run scraper.py user1 user2 user3 --output ./downloads
# Show browser window
uv run scraper.py <username> --visible
# Slower scrolling (for large galleries / rate limits)
uv run scraper.py <username> --delay 2.5| Flag | Default | Description |
|---|---|---|
usernames |
-- | One or more VSCO usernames or gallery URLs |
--output, -o |
./<username> |
Output directory |
--visible |
headless | Show Chrome browser window |
--delay, -d |
1.5 |
Seconds between scroll steps |
--between, -b |
5.0 |
Seconds between users (multi-user mode) |
<username>/
├── 0001_<image-id>_filename.jpg
├── 0002_<image-id>_filename.jpg
├── ...
└── image_urls.txt
Files are numbered in gallery order. Re-running skips already-downloaded files.
- Private galleries cannot be scraped (login required).
- Rate limits: Increase
--delayand--betweenif you see failures on large galleries. - Falls back to bundled Chromium if Chrome is not found, but Cloudflare may block it.
MIT