Generates wsrv.nl (weserv) transformation URLs. Free, public image processing service. Can also be self-hosted.
use Timber\Chainsaw\Provider\Wserv\WservProvider;
$provider = new WservProvider(
host: 'https://wsrv.nl',
);
Output: {host}/?url={source}&w=800&h=600&fit=cover
Manipulation support
Legend: ✅ = implemented in Chainsaw, 🟦 = available on the CDN, not exposed by Chainsaw, ❌ = not available on this CDN.
Resize & crop
| Manipulation |
Chainsaw |
Availability |
| Width |
✅ |
Free |
| Height |
✅ |
Free |
| Scale |
❌ |
No scale-by-factor primitive; use width()/height() |
| Cover |
✅ |
Free (fit=cover; crop() alias; compass / focal / smart / attention / entropy anchors via a=) |
| ManualCrop |
✅ |
Free |
| Contain |
✅ |
Free |
| Pad |
✅ |
Free |
| Stretch |
✅ |
Free |
| CropToRatio |
❌ |
No aspect-ratio-only crop; use cover() with absolute dims |
| PadToRatio |
❌ |
No aspect-ratio-only pad; use pad() with absolute dims |
| Trim |
✅ |
Free (tolerance, background color) |
| Precrop |
🟦 |
Free (pre-resize crop) |
| Without enlargement |
🟦 |
Free (we) |
Filters & effects
| Manipulation |
Chainsaw |
Availability |
| Blur |
✅ |
Free |
| Sharpen |
✅ |
Free |
| Brightness |
✅ |
Free |
| Contrast |
✅ |
Free |
| Gamma |
✅ |
Free |
| Pixelate |
❌ |
|
| Greyscale |
✅ |
Free (via filt=greyscale) |
| Sepia |
✅ |
Free (via filt=sepia) |
| Saturation |
✅ |
Free (sat) |
| Hue rotation |
✅ |
Free (hue) |
| Modulate |
🟦 |
Free (combined brightness/saturation/hue) |
| Tint |
🟦 |
Free |
| Negate |
✅ |
Free (filt=negate) |
| Duotone |
🟦 |
Free (filt=duotone with start/stop colors) |
| Sharpen flat/jagged |
🟦 |
Free (sharpf, sharpj – fine-grained control) |
Decoration & orientation
| Manipulation |
Chainsaw |
Availability |
| Background |
✅ |
Free |
| Border |
❌ |
|
| Flip |
✅ |
Free |
| Rotate |
✅ |
Free; arbitrary angles supported with optional bg= fill |
| AutoOrient |
✅ |
Free; EXIF orientation applied implicitly by default |
| Watermark |
❌ |
|
| Mask shapes |
🟦 |
Free (circle, ellipse, triangle, pentagon, hexagon, square, star, heart) |
| Mask trim |
🟦 |
Free (remove whitespace from mask) |
Special
| Manipulation |
Chainsaw |
Availability |
| BlurHash |
❌ |
|
| ThumbHash |
❌ |
|
| Dither |
❌ |
|
| Page selection |
🟦 |
Free (multi-page documents) |
| Number of pages |
🟦 |
Free (animated frames) |
| Progressive / interlace |
🟦 |
Free (il) |
| Adaptive filter (PNG) |
🟦 |
Free (af) |
| Lossless |
🟦 |
Free (JXL/TIFF/WebP) |
| Base64 encoding |
🟦 |
Free (encoding=base64) |
| Default / fallback image |
🟦 |
Free |
| Filename |
🟦 |
Free (Content-Disposition) |
Encoding
| Format |
Supported |
| JPEG |
✅ |
| PNG |
✅ |
| WebP |
✅ |
| AVIF |
✅ |
| GIF |
✅ |
| TIFF |
🟦 |
| Auto format |
❌ |
| Quality |
✅ |
Notes
- Free public service – no API key or account required. Can also be self-hosted.
- Blur – range mapped from 0…100 to sigma (multiply by 0.5, minimum 1).
- Mask shapes – wsrv.nl offers a unique mask feature with predefined shape cutouts.
- Duotone – two-color effect with configurable start and stop colors, unique among free services.
- Pixelate, Border, Watermark are not available.
- Format::Auto is silently ignored — set an explicit format (emitted as
output={value}) or compose a <picture> with typed sources.
- No URL signing; the public endpoint is open to anyone.