Skip to content

About

Download full-resolution images from any public VSCO gallery. Uses Playwright to bypass Cloudflare, intercept API responses, and fetch originals at up to 2048px width.

Topics

Resources

Stars

6 stars

Watchers

1 watching

Forks

Latest commit

 

History

2 Commits

Folders and files

Repository files navigation

vsco-scraper

Download all images from any public VSCO gallery at full resolution.

How it works

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:

  1. Discovery -- Opens the gallery, clicks "Load More", and scrolls through VSCO's infinite scroll to intercept all /api/3.0/medias/profile responses
  2. Batch download -- Injects Image() elements with ?w=2048 to trigger full-resolution CDN responses and captures the binary bodies
  3. 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).

Requirements

  • Python 3.13+
  • uv -- fast Python package manager
  • Google Chrome installed (used instead of bundled Chromium to bypass Cloudflare)

Installation

git clone https://github.com/gr0esch/vsco-scraper
cd vsco-scraper
uv sync
uv run playwright install chrome

Usage

# 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

Options

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)

Output

<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.

Notes

  • Private galleries cannot be scraped (login required).
  • Rate limits: Increase --delay and --between if you see failures on large galleries.
  • Falls back to bundled Chromium if Chrome is not found, but Cloudflare may block it.

License

MIT

About

Download full-resolution images from any public VSCO gallery. Uses Playwright to bypass Cloudflare, intercept API responses, and fetch originals at up to 2048px width.

Topics

Resources

Stars

6 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages