CLI Reference¶
Complete reference for all vinny commands, auto-generated from source.
Vinny — Vegas Nightlife Events Scraper
Table of Contents¶
syncscrapescrape-docspricingprocessexport-csvexport-mdexport-d1export-sqlitediffstatslist-runsvenuessitemap-statustablesdealsheatmapimagesenrich
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¶
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¶
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¶
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¶
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¶
Process storage data into a timestamped run.
Parameters:
--run, -r: Run ID (default: latest)
vinny export-csv¶
Export a run to CSV format.
Parameters:
--run, -r: Run ID [default: latest]--output, -o: Output file
vinny export-md¶
Export a run to Markdown format.
Parameters:
--run, -r: Run ID [default: latest]--output, -o: Output directory
vinny export-d1¶
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¶
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¶
Compare two runs and show differences.
Parameters:
RUN1, --run1: First run ID (older) [required]RUN2, --run2: Second run ID (newer) [required]
vinny stats¶
Show master database statistics.
vinny list-runs¶
List all stored runs.
vinny venues¶
List registered venue extractors.
vinny sitemap-status¶
Show sitemap index stats (indexed URLs, per-venue breakdown).
vinny tables¶
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¶
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¶
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¶
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¶
Show image download status for a run.
Parameters:
--run, -r: Run ID [default: latest]
vinny images retry¶
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¶
Validate downloaded images.
Parameters:
--run, -r: Run ID [default: latest]
vinny images upload-r2¶
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
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¶
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¶
Show image statistics across all runs.
vinny enrich¶
Artist and venue data enrichment
vinny enrich artists¶
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]