Skip to content

CLI Reference

Complete reference for all vinny commands, auto-generated from source.

vinny COMMAND

Vinny — Vegas Nightlife Events Scraper

Table of Contents

Commands:

  • enrich: Artist and venue data enrichment
  • images: Image download and management commands

Data Collection:

  • pricing: Enrich an existing run with table pricing data.
  • scrape: Run the scraper and collect event data.
  • scrape-docs: Scrape documentation sites and save as clean Markdown.
  • sync: Full pipeline: scrape → download images → upload to R2 → export to D1.

Export & Processing:

  • export-csv: Export a run to CSV format.
  • export-d1: Export a run to D1-compatible SQL and optionally import it.
  • export-md: Export a run to Markdown format.
  • export-sqlite: Export a run to a local SQLite database (same schema as D1).
  • process: Process storage data into a timestamped run.

Run Inspection:

  • diff: Compare two runs and show differences.
  • list-runs: List all stored runs.
  • sitemap-status: Show sitemap index stats (indexed URLs, per-venue breakdown).
  • stats: Show master database statistics.
  • venues: List registered venue extractors.

Table Pricing:

  • deals: Show best-value tables sorted by $/guest.
  • heatmap: Show a venue x date heatmap of average $/guest.
  • tables: Show all bookable tables, color-coded by value ($/guest).

vinny sync

vinny sync [OPTIONS] [ARGS]

Full pipeline: scrape → download images → upload to R2 → export to D1.

Pass --run latest (or a specific run ID) to skip the scrape step and resume the pipeline from an existing run.

D1 credentials are read from environment variables when not passed: D1_DATABASE, D1_API_TOKEN / CLOUDFLARE_API_TOKEN, D1_ACCOUNT_ID / CLOUDFLARE_ACCOUNT_ID

Parameters:

  • URLS, --urls:
  • --max-requests, -m: Max scrape requests [default: 150]
  • --with-pricing, --no-with-pricing: Enrich events with VIP table pricing [default: False]
  • --run, -r: Skip scrape and resume pipeline from an existing run ID (or 'latest')
  • --database: Cloudflare D1 database name (also from D1_DATABASE env var) [env: D1_DATABASE]
  • --api-token: Cloudflare API token [env: D1_API_TOKEN, CLOUDFLARE_API_TOKEN]
  • --account-id: Cloudflare account ID [env: D1_ACCOUNT_ID, CLOUDFLARE_ACCOUNT_ID]
  • --remote, --local: Execute against remote D1 (default: remote) [default: True]
  • --force, --no-force: Bypass incremental sitemap diff (re-scrape everything) [default: False]

vinny scrape

vinny scrape [OPTIONS] [ARGS]

Run the scraper and collect event data.

Parameters:

  • URLS, --urls: Venue aliases or sitemap URLs (see [bold]vinny venues[/bold])
  • --url, -u: Start URLs (alternative to positional args)
  • --max-requests, -m: Max requests [default: 150]
  • --date-filter, -d: Date filter
  • --process, --no-process: Auto-package run after scraping [default: True]
  • --with-pricing, --no-with-pricing: Enrich events with VIP table pricing from the map API [default: False]
  • --force, --no-force: Bypass incremental diff (re-scrape everything) [default: False]

vinny scrape-docs

vinny scrape-docs [OPTIONS] [ARGS...]

Scrape documentation sites and save as clean Markdown.

Arguments:

  • URLS: Documentation URLs to scrape

Parameters:

  • --output, -o: Output directory [default: docs]
  • --max-requests, -m: Max pages to scrape [default: 100]

vinny pricing

vinny pricing [OPTIONS]

Enrich an existing run with table pricing data.

Parameters:

  • --run, -r: Run ID to enrich [default: latest]
  • --concurrency, -c: Max concurrent browsers [default: 3]

vinny process

vinny process [OPTIONS]

Process storage data into a timestamped run.

Parameters:

  • --run, -r: Run ID (default: latest)

vinny export-csv

vinny export-csv [OPTIONS]

Export a run to CSV format.

Parameters:

  • --run, -r: Run ID [default: latest]
  • --output, -o: Output file

vinny export-md

vinny export-md [OPTIONS]

Export a run to Markdown format.

Parameters:

  • --run, -r: Run ID [default: latest]
  • --output, -o: Output directory

vinny export-d1

vinny export-d1 [OPTIONS]

Export a run to D1-compatible SQL and optionally import it.

Parameters:

  • --run, -r: Run ID [default: latest]
  • --output, -o: Output SQL file
  • --include-images, --no-include-images: Include image rows in SQL export (default: on) [default: True]
  • --execute, --no-execute: Execute SQL import via Wrangler after generating file [default: False]
  • --database: Cloudflare D1 database name or ID (required for --execute)
  • --remote, --local: Execute against remote D1 (default) or local wrangler state [default: True]
  • --api-token: Cloudflare API token (env: D1_API_TOKEN or CLOUDFLARE_API_TOKEN) [env: D1_API_TOKEN, CLOUDFLARE_API_TOKEN]
  • --account-id: Cloudflare account ID (env: D1_ACCOUNT_ID or CLOUDFLARE_ACCOUNT_ID) [env: D1_ACCOUNT_ID, CLOUDFLARE_ACCOUNT_ID]

vinny export-sqlite

vinny export-sqlite [OPTIONS]

Export a run to a local SQLite database (same schema as D1).

Parameters:

  • --run, -r: Run ID [default: latest]
  • --output, -o: Output .db file path
  • --include-images, --no-include-images: Include image rows in SQLite export [default: False]

vinny diff

vinny diff RUN1 RUN2

Compare two runs and show differences.

Parameters:

  • RUN1, --run1: First run ID (older) [required]
  • RUN2, --run2: Second run ID (newer) [required]

vinny stats

vinny stats

Show master database statistics.

vinny list-runs

vinny list-runs

List all stored runs.

vinny venues

vinny venues

List registered venue extractors.

vinny sitemap-status

vinny sitemap-status

Show sitemap index stats (indexed URLs, per-venue breakdown).

vinny tables

vinny tables [OPTIONS]

Show all bookable tables, color-coded by value ($/guest).

Parameters:

  • --date, -d: Date (YYYY-MM-DD)
  • --weekend, --no-weekend, -w: This weekend (Fri-Sun) [default: False]
  • --days: Next N days from today
  • --venue, -v: Filter by venue (partial)
  • --budget, -b: Max min_spend
  • --ppg-max, -p: Max $/guest
  • --guests, -g: Min party size
  • --all, --no-all: Include sold-out tables [default: False]
  • --sort: Sort key: ppg, price, date, venue [default: ppg]
  • --run, -r: Run ID (default: master DB)

vinny deals

vinny deals [OPTIONS]

Show best-value tables sorted by $/guest.

Parameters:

  • --date, -d: Date (YYYY-MM-DD)
  • --weekend, --no-weekend, -w: This weekend (Fri-Sun) [default: False]
  • --days: Next N days from today
  • --budget, -b: Max min_spend
  • --ppg-max, -p: Max $/guest
  • --guests, -g: Min party size
  • --top, -n: Show top N deals [default: 10]
  • --run, -r: Run ID (default: master DB)

vinny heatmap

vinny heatmap [OPTIONS]

Show a venue x date heatmap of average $/guest.

Parameters:

  • --weeks: Weeks ahead to show [default: 2]
  • --run, -r: Run ID (default: master DB)

vinny images

Image download and management commands

vinny images download

vinny images download [OPTIONS]

Download images for a run.

Parameters:

  • --run, -r: Run ID [default: latest]
  • --delay, -d: Delay between downloads (seconds) [default: 1.0]
  • --workers, -w: Max concurrent downloads [default: 3]
  • --retries: Max retry attempts [default: 3]
  • --size, -s: Size preset(s) to download. Can be used multiple times: --size main --size hd [default: ['main', 'hd']]
  • --upload-r2, --no-upload-r2: Upload to Cloudflare R2 [default: False]
  • --images-dir: Override images base directory

vinny images status

vinny images status [OPTIONS]

Show image download status for a run.

Parameters:

  • --run, -r: Run ID [default: latest]

vinny images retry

vinny images retry [OPTIONS]

Retry failed image downloads.

Parameters:

  • --run, -r: Run ID [default: latest]
  • --delay, -d: Delay between downloads [default: 1.0]
  • --workers, -w: Max concurrent downloads [default: 3]
  • --size, -s: Size preset(s) to retry [default: ['main', 'hd']]

vinny images validate

vinny images validate [OPTIONS]

Validate downloaded images.

Parameters:

  • --run, -r: Run ID [default: latest]

vinny images upload-r2

vinny images upload-r2 [OPTIONS]

Sync all local artist images to Cloudflare R2.

Scans data/images/artists/, checks each file against R2, and uploads only the ones that aren't already there.

Pass --sync-d1 (default) to also update events.json and D1 with the R2 URLs. Pass --database to push the SQL via wrangler.

Parameters:

  • --size, -s: Size preset(s) to sync. Can be used multiple times. Default: all sizes. [default: []]
  • --images-dir: Override images base directory
  • --run, -r: Run ID whose events.json to update with R2 URLs [default: latest]
  • --sync-d1, --no-sync-d1: Update events.json and D1 with R2 URLs after upload [default: True]
  • --database: D1 database name for wrangler
  • --remote, --local: Target remote D1 (default: remote) [default: True]
  • --api-token: Cloudflare API token
  • --account-id: Cloudflare account ID

vinny images sync-d1

vinny images sync-d1 [OPTIONS]

Update D1 with R2 URLs already present in events.json.

Use this when images were previously uploaded to R2 (via upload-r2) but D1 wasn't updated at the time. Reads r2_url values from the run's events.json and pushes UPDATE statements to D1.

Parameters:

  • --run, -r: Run ID [default: latest]
  • --database: D1 database name for wrangler
  • --remote, --local: Target remote D1 (default: remote) [default: True]
  • --api-token: Cloudflare API token
  • --account-id: Cloudflare account ID

vinny images stats

vinny images stats

Show image statistics across all runs.

vinny enrich

Artist and venue data enrichment

vinny enrich artists

vinny enrich artists [OPTIONS]

Enrich artist data in the master database.

Parameters:

  • --force, --no-force: Re-enrich all events, ignoring existing enrichment status [default: False]
  • --artist: Enrich only this artist name (exact match)
  • --dry-run, --no-dry-run: Preview which artists would be enriched, no changes [default: False]
  • --db: Path to master_events.json [default: data/master_events.json]
  • --save-dir: Directory to save per-artist JSON + images [default: data/artists]
  • --save, --no-save: Save raw JSON and images to disk [default: True]
  • --spotify-only, --no-spotify-only: Run only the Spotify enricher [default: False]