No description
- TypeScript 99.9%
- Consolidate download cache into ROMs_ALL folder - Update both cli.ts default and browse.ts fallback |
||
|---|---|---|
| input | ||
| src | ||
| .gitignore | ||
| biome.json | ||
| bun.lock | ||
| commitlint.config.js | ||
| lefthook.yml | ||
| mise.toml | ||
| package-lock.json | ||
| package.json | ||
| PLAN.md | ||
| README.md | ||
| tsconfig.json | ||
Game Downloader
TypeScript + Playwright CLI for downloading ROMs from vimm.net.
Quick Start
# Install dependencies (uses Bun for speed)
bun install
# Install Playwright browsers
bunx playwright install chromium
# Run with defaults
bun run src/index.ts
# Dry-run to test metadata extraction without downloading
bun run src/index.ts --dry-run
# Custom input and output
bun run src/index.ts -i my-urls.txt -o ~/roms
# Visible browser for debugging anti-adblock issues
bun run src/index.ts --headed
# Verify archives after download (requires p7zip)
bun run src/index.ts --verify
# Be polite — add delay between downloads
bun run src/index.ts --delay-ms 5000
Input File Format
One URL per line. Blank lines and # comments are ignored.
# PlayStation 2
https://vimm.net/vault/9053
# GameCube
https://vimm.net/vault/7271
# Nintendo 64
https://vimm.net/vault/1234
CLI Options
| Flag | Description | Default |
|---|---|---|
-i, --input <path> |
URL list file | input/urls.txt |
-o, --output-dir <path> |
ROM output root | /Volumes/Kingston SNVS1000G/Syncthing/AYN Odin 3/roms |
-d, --dry-run |
Extract metadata only | false |
--headed |
Visible browser | false |
--delay-ms <ms> |
Delay between downloads | 0 |
--verify |
Test archives with 7z t |
false |
-l, --log-file <path> |
Log file path | logs/download.log |
Features
- Sequential downloads — one at a time to avoid overwhelming the server
- Parallel dry-run — fast metadata extraction without downloading
- Partial resume — HTTP range requests to resume interrupted downloads
- Anti-adblock bypass — automatic detection and bypass of vimm.net's adblock wall
- File integrity — optional p7zip verification of downloaded archives
- Real-time progress — shows download size as it grows
- Rate limiting — configurable delay between downloads
Project Structure
game-downloader/
├── src/
│ ├── index.ts # Entry point
│ ├── cli.ts # Argument parsing
│ ├── downloader.ts # Core download logic
│ ├── platforms.ts # Platform name mapping
│ └── types.ts # TypeScript interfaces
├── input/
│ └── urls.txt # Default URL list
├── logs/
│ └── download.log # Execution logs
└── PLAN.md # Implementation plan