spatie/laravel-screenshot
Driver-based Laravel package for taking web page screenshots with great defaults. Use Browsershot (Chromium) or Cloudflare Browser Rendering, customize viewport/format/quality, save to files, and easily fake/assert screenshots in tests.
You can install the package via composer:
composer require spatie/laravel-screenshot
This package supports multiple screenshot drivers. You can set the driver via the LARAVEL_SCREENSHOT_DRIVER environment variable, or in the config file.
The Browsershot driver requires the spatie/browsershot package:
composer require spatie/browsershot
You'll also need to install the required dependencies for Browsershot to work. You can find the instructions here.
The Cloudflare driver uses Cloudflare's Browser Rendering API to take screenshots. It does not require Node.js or a Chrome binary, making it a great choice for cloud-hosted Laravel apps.
To get started with Cloudflare:
.env file:LARAVEL_SCREENSHOT_DRIVER=cloudflare
CLOUDFLARE_API_TOKEN=your-api-token
CLOUDFLARE_ACCOUNT_ID=your-account-id
That's it. No other dependencies are required since the Cloudflare driver uses Laravel's built-in HTTP client.
This package ships with a Laravel Boost skill. After installing the package, run php artisan boost:install to register the skill. This will help AI agents in your project generate correct screenshot code.
Optionally, you can publish the config file with:
php artisan vendor:publish --tag=screenshot-config
This is the content of the published config file:
return [
'driver' => env('LARAVEL_SCREENSHOT_DRIVER', 'browsershot'),
'job' => Spatie\LaravelScreenshot\Jobs\GenerateScreenshotJob::class,
'defaults' => [
'width' => 1280,
'height' => 800,
'device_scale_factor' => 2,
'type' => 'png',
'wait_until' => 'networkidle2',
],
'browsershot' => [
'node_binary' => env('LARAVEL_SCREENSHOT_NODE_BINARY'),
'npm_binary' => env('LARAVEL_SCREENSHOT_NPM_BINARY'),
'include_path' => env('LARAVEL_SCREENSHOT_INCLUDE_PATH'),
'chrome_path' => env('LARAVEL_SCREENSHOT_CHROME_PATH'),
'node_modules_path' => env('LARAVEL_SCREENSHOT_NODE_MODULES_PATH'),
'bin_path' => env('LARAVEL_SCREENSHOT_BIN_PATH'),
'temp_path' => env('LARAVEL_SCREENSHOT_TEMP_PATH'),
'write_options_to_file' => env('LARAVEL_SCREENSHOT_WRITE_OPTIONS_TO_FILE', false),
'no_sandbox' => env('LARAVEL_SCREENSHOT_NO_SANDBOX', false),
],
'cloudflare' => [
'api_token' => env('CLOUDFLARE_API_TOKEN'),
'account_id' => env('CLOUDFLARE_ACCOUNT_ID'),
],
];
How can I help you explore Laravel packages today?