{"_id":"@alexberriman/screenshotter","_rev":"2-e40661fd9ba0ba7b95a83b99b974d18f","name":"@alexberriman/screenshotter","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@alexberriman/screenshotter","version":"0.1.0","keywords":["screenshot","cli","website","capture","viewport","playwright"],"author":{"name":"Alex Berriman"},"license":"MIT","_id":"@alexberriman/screenshotter@0.1.0","maintainers":[{"name":"alexberriman","email":"alexb@bezz.com.au"}],"homepage":"https://github.com/alexberriman/screenshotter#readme","bugs":{"url":"https://github.com/alexberriman/screenshotter/issues"},"bin":{"screenshotter":"bin/screenshotter"},"dist":{"shasum":"ae03d5e4d060178bacbff7a88e622d285f6bdf22","tarball":"https://registry.npmjs.org/@alexberriman/screenshotter/-/screenshotter-0.1.0.tgz","fileCount":4,"integrity":"sha512-jDp0dK9j+oRfEk1ArRuCwdC7CkqNoRKtuw7NB3NzIEPN5wyv1J1iKV3xd43Bxq/VMwEU/iwT6UxzX0buYatNkg==","signatures":[{"sig":"MEQCIECtCwI4CP8EKiY+jIOAMN7zVP7ibaHB3Gnj7WQPA0deAiB1UfRBQ/rlFnP0XqGBk8FCQ03bHpVSkasqgQ9GFir0yA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":21135},"main":"dist/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"4642a8ee3111041750458f5c4a058946365f5ae6","scripts":{"dev":"tsx watch src/index.ts","lint":"eslint src/","test":"vitest run","build":"tsup","check":"npm run lint && npm run typecheck && npm run test","format":"prettier --write \"src/**/*.ts\"","prepack":"npm run build","prepare":"husky","lint:fix":"eslint src/ --fix","postbuild":"chmod +x bin/screenshotter","typecheck":"tsc --noEmit","docker:run":"docker run --rm -v $(pwd)/screenshots:/output screenshotter:latest","test:watch":"vitest --watch","build:watch":"tsup --watch","lint-staged":"lint-staged","docker:build":"docker build -t screenshotter:latest .","format:check":"prettier --check src/","test:coverage":"vitest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"alexberriman","email":"alexb@bezz.com.au"},"repository":{"url":"git+https://github.com/alexberriman/screenshotter.git","type":"git"},"_npmVersion":"10.9.2","description":"CLI tool for taking full-page screenshots of websites with multiple viewports","directories":{},"_nodeVersion":"23.11.1","dependencies":{"commander":"^12.0.0","playwright":"^1.52.0","ts-results":"^3.3.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","tsup":"^8.5.0","husky":"^9.1.7","tslib":"^2.8.1","eslint":"^9.26.0","vitest":"^3.1.3","prettier":"^3.5.3","@eslint/js":"^9.26.0","typescript":"^5.8.3","@types/node":"^22.15.17","lint-staged":"^16.0.0","@vitest/coverage-v8":"^3.1.3","eslint-plugin-sonarjs":"^3.0.2","eslint-plugin-unicorn":"^59.0.1","eslint-config-prettier":"^10.1.5","@typescript-eslint/parser":"^8.32.1","@typescript-eslint/eslint-plugin":"^8.32.1"},"_npmOperationalInternal":{"tmp":"tmp/screenshotter_0.1.0_1747654631222_0.24958000971688032","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@alexberriman/screenshotter","version":"0.1.1","description":"CLI tool for taking full-page screenshots of websites with multiple viewports","main":"dist/index.js","bin":{"screenshotter":"bin/screenshotter"},"type":"module","engines":{"node":">=18.0.0"},"scripts":{"dev":"tsx watch src/index.ts","build":"tsup","build:watch":"tsup --watch","test":"vitest run","test:watch":"vitest --watch","test:coverage":"vitest --coverage","prepare":"husky","lint":"eslint src/","lint:fix":"eslint src/ --fix","format":"prettier --write \"src/**/*.ts\"","format:check":"prettier --check src/","typecheck":"tsc --noEmit","check":"npm run lint && npm run typecheck && npm run test","lint-staged":"lint-staged","prepublishOnly":"npm run build","prepack":"npm run build","postbuild":"chmod +x bin/screenshotter","docker:build":"docker build -t screenshotter:latest .","docker:run":"docker run --rm -v $(pwd)/screenshots:/output screenshotter:latest"},"repository":{"type":"git","url":"git+https://github.com/alexberriman/screenshotter.git"},"author":{"name":"Alex Berriman"},"license":"MIT","bugs":{"url":"https://github.com/alexberriman/screenshotter/issues"},"homepage":"https://github.com/alexberriman/screenshotter#readme","dependencies":{"commander":"^12.0.0","playwright":"^1.52.0","ts-results":"^3.3.0","tslib":"^2.8.1"},"devDependencies":{"@eslint/js":"^9.26.0","@types/node":"^22.15.17","@typescript-eslint/eslint-plugin":"^8.32.1","@typescript-eslint/parser":"^8.32.1","@vitest/coverage-v8":"^3.1.3","eslint":"^9.26.0","eslint-config-prettier":"^10.1.5","eslint-plugin-sonarjs":"^3.0.2","eslint-plugin-unicorn":"^59.0.1","husky":"^9.1.7","lint-staged":"^16.0.0","prettier":"^3.5.3","tsup":"^8.5.0","tsx":"^4.7.0","typescript":"^5.8.3","vitest":"^3.1.3"},"keywords":["screenshot","cli","website","capture","viewport","playwright"],"_id":"@alexberriman/screenshotter@0.1.1","gitHead":"4642a8ee3111041750458f5c4a058946365f5ae6","_nodeVersion":"23.11.1","_npmVersion":"10.9.2","dist":{"integrity":"sha512-DFMw7kFYWe5ui8Mxxettg06gR3euBFeQDDjBusUtzCGEYvFOK1Q0cFQgNlmLQe3ctN8mpAr8OLLQJq8dsQpoww==","shasum":"773019202b2165cfe1ab96ecdd51e014d643dd99","tarball":"https://registry.npmjs.org/@alexberriman/screenshotter/-/screenshotter-0.1.1.tgz","fileCount":4,"unpackedSize":21333,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDS8wRaHpKZS/2cj9PHxfVAw671+3hy75TVD8XoVJ4COQIhANdGPgPKvHG02NUg2l1QkQ64pvYMJWRBTpDoSBCwkJ/R"}]},"_npmUser":{"name":"alexberriman","email":"alexb@bezz.com.au"},"directories":{},"maintainers":[{"name":"alexberriman","email":"alexb@bezz.com.au"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/screenshotter_0.1.1_1747654788442_0.8508352209002663"},"_hasShrinkwrap":false}},"time":{"created":"2025-05-19T11:37:11.122Z","modified":"2025-05-19T11:39:48.743Z","0.1.0":"2025-05-19T11:37:11.414Z","0.1.1":"2025-05-19T11:39:48.601Z"},"bugs":{"url":"https://github.com/alexberriman/screenshotter/issues"},"author":{"name":"Alex Berriman"},"license":"MIT","homepage":"https://github.com/alexberriman/screenshotter#readme","keywords":["screenshot","cli","website","capture","viewport","playwright"],"repository":{"type":"git","url":"git+https://github.com/alexberriman/screenshotter.git"},"description":"CLI tool for taking full-page screenshots of websites with multiple viewports","maintainers":[{"name":"alexberriman","email":"alexb@bezz.com.au"}],"readme":"# 📸 Screenshotter CLI\n\nA fast, reliable command-line tool for taking screenshots of websites. Built with TypeScript and Playwright, designed for automation and CI/CD environments.\n\n## Features\n\n- 🚀 **Fast & Reliable** - Built on Playwright for consistent results\n- 🖼️ **Multiple Formats** - Support for PNG and JPEG with quality settings\n- 📐 **Viewport Control** - Preset sizes or custom dimensions\n- ⏱️ **Wait Strategies** - Network idle, custom selectors, or fixed delays\n- 🎯 **Full Page Capture** - Capture entire pages or just the viewport\n- 🔧 **Template Support** - Dynamic filename generation with placeholders\n- 🌐 **Headless Operation** - Perfect for servers and automation\n\n## Installation\n\n```bash\nnpm install -g @alexberriman/screenshotter\n```\n\nOr run directly with Bun:\n\n```bash\nbun install\nbun run build\nbun ./dist/index.js https://example.com\n```\n\nOr use Docker:\n\n```bash\ndocker pull alexberriman/screenshotter:latest\ndocker run -v $(pwd):/output alexberriman/screenshotter:latest https://example.com -o /output/screenshot.png\n```\n\n## Usage\n\n```bash\nnpx @alexberriman/screenshotter <url> [options]\n```\n\n### Basic Examples\n\nTake a full-page screenshot with default settings:\n```bash\nnpx @alexberriman/screenshotter https://example.com\n```\n\nCapture with specific output path:\n```bash\nnpx @alexberriman/screenshotter https://example.com -o ./screenshots/homepage.png\n```\n\nUse mobile viewport:\n```bash\nnpx @alexberriman/screenshotter https://example.com -v mobile\n```\n\n### Advanced Examples\n\nCapture JPEG with custom quality:\n```bash\nnpx @alexberriman/screenshotter https://example.com --format jpeg --quality 90\n```\n\nWait for specific element before capturing:\n```bash\nnpx @alexberriman/screenshotter https://example.com --wait-for \".content-loaded\"\n```\n\nUse filename template with placeholders:\n```bash\nnpx @alexberriman/screenshotter https://example.com --template \"{domain}-{date}-{time}.{format}\"\n```\n\nCombined options:\n```bash\nnpx @alexberriman/screenshotter https://example.com \\\n  -v tablet \\\n  --format jpeg \\\n  --quality 85 \\\n  -w 2 \\\n  --wait-for \"#main-content\" \\\n  --template \"screenshots/{domain}/{date}-{time}.{format}\"\n```\n\n### All Options\n\n| Option | Description | Default |\n|--------|-------------|---------|\n| `-o, --output <path>` | Output file path | `screenshot-{timestamp}.png` |\n| `-t, --timeout <seconds>` | Page load timeout in seconds | `30` |\n| `-w, --wait <seconds>` | Additional wait after page load | - |\n| `--wait-for <selector>` | Wait for specific CSS selector | - |\n| `--no-full-page` | Capture only viewport | Full page |\n| `--format <format>` | Output format (png or jpeg) | `png` |\n| `--quality <number>` | JPEG quality (0-100) | `80` |\n| `-v, --viewport <size>` | Viewport size | `1920x1080` |\n| `--template <template>` | Filename template | - |\n\n### Viewport Presets\n\n- `desktop`: 1920x1080\n- `tablet`: 768x1024\n- `mobile`: 375x667\n- Custom: Any `WIDTHxHEIGHT` format (e.g., `1280x720`)\n\n### Template Placeholders\n\n- `{timestamp}`: ISO timestamp with safe characters\n- `{date}`: Current date (YYYY-MM-DD)\n- `{time}`: Current time (HH-MM-SS)\n- `{domain}`: URL domain with dots replaced by underscores\n- `{format}`: File format (png or jpeg)\n\n## Exit Codes\n\n- `0`: Success\n- `1`: Error (invalid options, timeout, network failure, etc.)\n\n## Automation Examples\n\n### CI/CD Pipeline\n\n```yaml\n# GitHub Actions example\n- name: Take screenshot\n  run: npx @alexberriman/screenshotter https://myapp.com -o artifacts/screenshot.png\n```\n\n### Batch Processing\n\n```bash\n#!/bin/bash\nurls=(\"https://example.com\" \"https://google.com\" \"https://github.com\")\n\nfor url in \"${urls[@]}\"; do\n  npx @alexberriman/screenshotter \"$url\" --template \"screenshots/{domain}-{date}.png\"\ndone\n```\n\n### Error Handling\n\n```bash\nif npx @alexberriman/screenshotter https://example.com -o screenshot.png; then\n  echo \"Screenshot saved successfully\"\nelse\n  echo \"Failed to capture screenshot\"\n  exit 1\nfi\n```\n\n## Docker Usage\n\n### Building the Docker Image\n\n```bash\n# Build the image locally\nnpm run docker:build\n\n# Or use docker directly\ndocker build -t screenshotter:latest .\n```\n\n### Running with Docker\n\n```bash\n# Basic usage - output to current directory\ndocker run --rm -v $(pwd):/output screenshotter:latest https://example.com -o /output/screenshot.png\n\n# With custom viewport\ndocker run --rm -v $(pwd):/output screenshotter:latest https://example.com -v mobile -o /output/mobile.png\n\n# Using docker-compose\ndocker-compose run screenshotter https://example.com -o /output/screenshot.png\n```\n\n### Docker-Compose Configuration\n\nThe included `docker-compose.yml` provides a convenient way to run the screenshotter:\n\n```yaml\n# docker-compose.yml\nservices:\n  screenshotter:\n    build: .\n    volumes:\n      - ./screenshots:/output\n```\n\n### Volume Mounting\n\nWhen using Docker, you need to mount a volume to access the generated screenshots:\n\n```bash\n# Mount current directory\ndocker run -v $(pwd):/output screenshotter:latest https://example.com -o /output/shot.png\n\n# Mount specific directory\ndocker run -v /home/user/screenshots:/output screenshotter:latest https://example.com -o /output/shot.png\n```\n\n## Development\n\n```bash\n# Clone the repository\ngit clone https://github.com/yourusername/screenshotter.git\ncd screenshotter\n\n# Install dependencies\nbun install\n\n# Run in development\nbun run dev\n\n# Run tests\nnpm run test\n\n# Type check\nbun run typecheck\n\n# Lint code\nbun run lint\n\n# Build for production\nbun run build\n```\n\n## Requirements\n\n- Node.js 18+ or Bun\n- Playwright (automatically installed)\n\n## Contributing\n\nPull requests are welcome! Please ensure:\n\n1. All tests pass\n2. Code follows the existing style\n3. Commit messages follow conventional commits\n4. No linting or type errors\n\n## License\n\nMIT © [Alex Berriman]","readmeFilename":"README.md"}