A modern web application for capturing full-page screenshots of any website. Built with Next.js, it uses Puppeteer and Chromium to generate high-quality screenshots in batch.
- Batch Screenshot Capture - Process multiple URLs simultaneously
- Full-Page Screenshots - Captures entire page content, not just viewport
- Multiple Input Methods - Paste URLs directly or upload CSV files
- Real-time Progress Tracking - Monitor each screenshot's status with visual indicators
- Download Management - Download individual screenshots or all at once
- Dark Mode Support - Built with next-themes for seamless theme switching
- Server-Side Rendering - Optimized with Next.js App Router and Server Actions
- Production-Ready - Docker support with Chromium bundled
- Framework: Next.js 16 (App Router)
- UI Components: Radix UI + Tailwind CSS
- Screenshot Engine: Puppeteer Core + Chromium
- Language: TypeScript
- Styling: Tailwind CSS with custom theme support
- Package Manager: pnpm
- Node.js 20 or later
- pnpm (recommended) or npm
- Clone the repository:
git clone <repository-url>
cd page-screenshot- Install dependencies:
pnpm install- Run the development server:
pnpm dev- Open http://localhost:3000 in your browser
- Paste URLs: Enter one URL per line in the text area
- Upload CSV: Upload a CSV or text file with URLs (one per line)
- Click "Capture Screenshots" to start the batch process
- Monitor progress with real-time status indicators
- Download individual screenshots or use "Download All" for batch download
URLs can be entered with or without protocol:
https://example.com
github.com
vercel.com
The application automatically adds https:// to URLs without a protocol.
Build and run with Docker:
docker build -t pageshot .
docker run -p 3000:3000 pageshotThe Dockerfile includes:
- Multi-stage build for optimized image size
- Chromium and required fonts pre-installed
- Non-root user for security
- Production-optimized configuration
NODE_ENV- Set toproductionfor production buildsVERCEL- Automatically set by Vercel, triggers production Chromium path
Default configuration in app/actions/screenshot.ts:
- Viewport: 1920x1080
- Format: PNG
- Full page capture enabled
- 30-second timeout
├── app/
│ ├── actions/
│ │ └── screenshot.ts # Server action for screenshot capture
│ ├── layout.tsx # Root layout with theme provider
│ └── page.tsx # Main application page
├── components/
│ ├── screenshot-tool.tsx # Main screenshot UI component
│ ├── theme-provider.tsx # Theme management
│ └── ui/ # Reusable UI components
├── lib/
│ └── utils.ts # Utility functions
└── public/ # Static assets
pnpm dev- Start development serverpnpm build- Build for productionpnpm start- Start production serverpnpm lint- Run ESLint
- Server actions go in
app/actions/ - UI components go in
components/ - Shared utilities go in
lib/ - Use shadcn/ui for new components
The application uses modern web APIs and is compatible with:
- Chrome/Edge (latest)
- Firefox (latest)
- Safari (latest)
MIT
Contributions are welcome! Please feel free to submit a Pull Request.