Releases
All published releases from the GitHub repository.
- Deploy 1.0.1 to Cloudflare Workers
Sharper AVIF output via Lanczos3 downscaling
This release overhauls the resize pipeline to produce noticeably cleaner AVIF and WebP output, especially at the smaller size steps where aliasing used to be most obvious.
What changed
Previously, every downscale was handled by
wasm-image-optimization's built-in Skia resize, whose sampling filter isn't exposed. The result was stair-stepped diagonals and grainy fine detail that no amount ofquality=100could recover - AVIF is particularly unforgiving of aliased input because each stair-step becomes its own block to encode.Downscaling now runs through photon with a Lanczos3 filter, and
wasm-image-optimizationis only responsible for the final AVIF/WebP encode. The practical effect:- Diagonals and curved edges stay smooth instead of going blocky
- Fine textures (hair, grass, fabric) keep their character instead of turning grainy
- AVIF files get measurably smaller at the same perceptual quality, because the encoder isn't spending bits representing aliasing artifacts
Memory safety
The new pipeline runs two separate WASM instances (photon + WIO), so this release also adds proper memory accounting to keep the worker under its 128 MB limit:
- AVIF and WebP encoder ceilings are now derived from the libaom / libwebp memory models (≈2.9 MP and ≈10.3 MP respectively) rather than hardcoded guesses
- Sources larger than 3 MP skip photon entirely and fall back to Skia resize (aliased but memory-safe) - a 4K raster alone is 33 MB in WASM linear memory, which doesn't shrink after free
- Targets above the WebP encoder ceiling serve origin bytes unchanged with
X-Cache: BYPASSinstead of failing.
- Deploy 1.0.0 to Cloudflare Workers
Worker Image CDN 1.0.0
First stable release. The worker is feature-complete for its intended scope and has been hardened against the Cloudflare Workers 128MB memory limit.
What it does
A Cloudflare Worker that proxies images from an origin, transforms them on the fly, and caches the results in R2. Runs entirely on Cloudflare's edge - no servers, no per-image build step.
Features
- Automatic format conversion - serves AVIF or WebP based on the browser's
Acceptheader, with automatic WebP fallback when AVIF would exceed the worker's memory budget - On-the-fly resizing -
?w=and?h=preserve aspect ratio and never upscale - Quality control -
?quality=with configurable steps - Step snapping - dimensions and quality snap to configured values, keeping the R2 cache small and hit rates high
- R2 caching - transformed images are stored and reused; every response carries
X-Cache: HIT/MISS - Safe by default - canonical cache keys (not raw query strings), client headers stripped before hitting origin, top-level error boundary that falls back to the original image on any transform failure
Deploy
One click from the docs site. You only need a Cloudflare account with R2 enabled.
- Automatic format conversion - serves AVIF or WebP based on the browser's
- 0.0.3 pre-releaseDeploy 0.0.3 to Cloudflare Workers
What's Changed
- docs: complete and update documentation pages by @Heyaka1 in https://github.com/FrancescoCiannavei/cloudflare-worker-image-cdn/pull/2
New Contributors
- @Heyaka1 made their first contribution in https://github.com/FrancescoCiannavei/cloudflare-worker-image-cdn/pull/2
Full Changelog: https://github.com/FrancescoCiannavei/cloudflare-worker-image-cdn/compare/0.0.2...0.0.3
- 0.0.2 pre-releaseDeploy 0.0.2 to Cloudflare Workers
Full Changelog: https://github.com/FrancescoCiannavei/cloudflare-worker-image-cdn/compare/0.0.1...0.0.2
- 0.0.1 pre-releaseDeploy 0.0.1 to Cloudflare Workers
First release: still pre-relase.