snipify
Version:
A production-ready tool for capturing and processing web screenshots with Puppeteer and Sharp.
232 lines (172 loc) β’ 5.75 kB
Markdown
# Snipify πΈ
[](https://www.npmjs.com/package/snipify)
[](https://www.npmjs.com/package/snipify)
[](LICENSE)
[](https://www.typescriptlang.org/)
**Snipify is a production-ready toolkit for capturing, resizing, and exporting high-quality web screenshots using Puppeteer and Sharp.**
_"From page to pixel-perfect screenshotβautomate it all."_ π
## π Features
- **Full & Viewport Modes** β Capture the entire page or just the visible area
- **Custom Device Emulation** β Desktop, mobile, tablet & more with custom user-agents
- **Smart Resource Blocking** β Skip heavy/irrelevant assets like analytics & media
- **Image Processing with Sharp** β Resize, crop, compress effortlessly
- **Pure TypeScript** β Strictly typed and modern API
- **No Bloat** β Minimal dependencies, fast and efficient
## π¦ Installation
```bash
# Install globally for CLI usage
npm install -g snipify
# Install locally for programmatic usage
npm install snipify
```
## π₯οΈ CLI Usage
Snipify comes with a powerful CLI for quick screenshots and batch production exports right from your terminal.
### Usage
```bash
snipify [URL] [OPTIONS]
```
#### Arguments
- `URL` Website URL (default: http://example.com/)
#### Options
- `--device=DEVICE` Device preset (see list below; default: `mobile`)
- `--size=SIZE` Production size preset (see table below)
- `--production` Generate all common production sizes
- `--output=DIR` Output directory (default: `./screenshots`)
- `--help`, `-h` Show help
#### Device Presets
- desktop
- laptop
- tablet
- mobile
- mobile-large
#### Production Sizes
| Name | Dimensions |
|--------------------|----------------|
| thumbnail | 300x200 |
| card | 400x300 |
| social-media | 1200x630 |
| instagram-post | 1080x1080 |
| instagram-story | 1080x1920 |
| youtube-thumbnail | 1280x720 |
| blog-header | 800x400 |
| email-banner | 600x200 |
| preview-small | 200x150 |
| preview-medium | 400x300 |
| preview-large | 800x600 |
### Examples
```bash
snipify # Basic mobile screenshot
snipify https://example.com --device=desktop # Desktop screenshot
snipify https://example.com --device=mobile --size=thumbnail # Mobile thumbnail
snipify https://example.com --device=desktop --production # All production sizes
```
> Screenshots are saved to the output directory (default: `./screenshots`).
## π Quick Start
### 1. Single Screenshot: `captureScreenshot`
```ts
import { captureScreenshot } from "snipify";
const result = await captureScreenshot({
url: "https://example.com",
device: "desktop",
options: {
format: "jpeg",
quality: 80,
},
});
console.log(result);
// {
// base64: 'data:image/jpeg;base64,...',
// size: 'original',
// device: 'desktop',
// type: 'jpeg'
// }
```
### 2. Batch/Production Screenshots: `captureProductionScreenshots`
```ts
import { captureProductionScreenshots } from "snipify";
const results = await captureProductionScreenshots({
url: "https://example.com",
sizes: ["blog-header", "instagram-post"],
options: {
format: "jpeg",
quality: 80,
},
});
console.log(results);
// [
// { base64: 'data:image/jpeg;base64,...', size: 'blog-header', type: 'jpeg' },
// { base64: 'data:image/jpeg;base64,...', size: 'instagram-post', type: 'jpeg' }
// ]
```
## β¨ Core API
### πΈ `captureScreenshot(url, device?, options?)`
Capture a screenshot and get a base64 string.
```ts
const result = await captureScreenshot({
url: "https://example.com",
device: "mobile",
options: {
mode: "viewport",
format: "png",
},
});
```
#### Parameters
| Name | Type | Description |
| --------- | ----------------------------------- | --------------------- |
| `url` | `string` | Web page URL |
| `device` | `"desktop" \| "mobile" \| "tablet"` | default - `"desktop"` |
| `options` | `{ mode, format, quality, ... }` | Screenshot options |
## π Resize Options
You can resize screenshots automatically:
```ts
await captureScreenshot({
url: "https://example.com",
device: "mobile",
options: {
fixedSize: { width: 800, height: 600 },
},
});
```
## βοΈ Options
```ts
interface ScreenshotOptions {
format?: "png" | "jpeg";
quality?: number;
fullPage?: boolean;
waitForSelector?: string;
delay?: number;
headless?: boolean;
blockResources?: boolean;
clip?: { x: number; y: number; width: number; height: number };
fixedSize?: { width: number; height: number };
}
```
## π§ Why Snipify?
- **Production Ready** β Battle-tested setup with error handling
- **Fast** β Puppeteer + Sharp combo for fast, clean output
- **Zero UI Dependency** β Works anywhere Node.js runs
- **Typed First** β Built for TypeScript users
- **Modular** β Customize device presets, screenshot settings & more
## π οΈ Contributing
```bash
git clone https://github.com/kiron0/snipify.git
cd snipify
bun install
bun run build
```
Issues and PRs are warmly welcome π€
## π License
MIT Β© Toufiq Hasan Kiron
> _βSnip it. Sharpen it. Ship it.β_ β Snipify Motto πΈ