dogado / mugshot
A small service that helps you take screenshots of web pages.
1.0.0
2026-03-11 22:36 UTC
Requires
- php: ^8.4
- ext-exif: *
- ext-json: *
- guzzlehttp/guzzle: ^7.10
- laravel/framework: ^12.0
- laravel/sanctum: ^4.0
- laravel/tinker: ^2.11
- league/mime-type-detection: ^1.16
- sentry/sentry-laravel: *
- spatie/browsershot: ^5.2.3
- spatie/laravel-health: ^1.39
Requires (Dev)
- fakerphp/faker: ^1.24
- friendsofphp/php-cs-fixer: ^3.94
- larastan/larastan: ^3.9
- laravel/pail: ^1.2.2
- laravel/pint: ^1.24
- laravel/sail: 1.53
- mockery/mockery: ^1.6.12
- nunomaduro/collision: ^8.9
- phpunit/phpunit: ^12
- spatie/laravel-ignition: ^2.0
README
A small service that helps you take screenshots of web pages and generate PDFs from HTML content.
Requirements
- PHP 8.4+
- MariaDB / MySQL
- Node.js for Puppeteer
Installation
Clone the repository and install dependencies:
git clone https://github.com/dogado-group/mugshot.git mugshot
cd mugshot
composer install --no-dev -o
Set up your environment and generate an application key:
cp .env.example .env php artisan key:generate php artisan migrate php artisan storage:link
Install Puppeteer:
npm install puppeteer --global
Docker / Laravel Sail
The project ships with a docker-compose.yml for local development via Laravel Sail:
./vendor/bin/sail up -d ./vendor/bin/sail artisan migrate
Authentication
API endpoints are protected with Laravel Sanctum. Include a Bearer token in every request:
Authorization: Bearer <your-token>
Usage
Capture Screenshot
POST /api/v1/screenshot Authorization: Bearer <token> Content-Type: application/json
| Parameter | Type | Required | Description |
|---|---|---|---|
url |
string |
yes | URL of the page to capture (http / https) |
width |
integer |
no | Viewport width in pixels |
height |
integer |
no | Viewport height in pixels |
fullPage |
boolean |
no | Capture the full scrollable page |
deviceScale |
integer |
no | Device scale factor, between 1 and 3 |
quality |
integer |
no | JPEG quality, between 30 and 100 (ignored for PNG) |
delay |
integer |
no | Seconds to wait before capturing (useful for JS-heavy pages) |
fileExtension |
string |
no | Output format: jpeg (default) or png |
response |
string |
no | Response mode: inline (default), download, or json |
Generate PDF
POST /api/v1/pdf Authorization: Bearer <token> Content-Type: application/json
| Parameter | Type | Required | Description |
|---|---|---|---|
content |
string |
yes | Raw HTML content to render as a PDF |
response |
string |
no | Response mode: inline (default) or download |
Health Check
GET /api/v1/_healthz
Returns application health status. No authentication required.
Development
Running tests
composer test # or directly ./vendor/bin/phpunit
Contributing
Please see CONTRIBUTING for details.
Security Vulnerabilities
Please review our security policy on how to report security vulnerabilities.
License
The MIT License (MIT). Please see License File for more information.