Stop Serving Full-Size Images. Build a Smarter Edge.
I set up Cloudflare R2 as your image CDN with on-demand resizing. Your WordPress site stops generating dozens of thumbnail sizes on upload. Instead, R2 generates exactly the size each visitor needs, caches it at the edge, and serves it in under 50ms globally.
Your Media Library Is a Bandwidth Sinkhole
Every time someone uploads a 3MB image, WordPress generates 6-10 thumbnail sizes. That's 18-30MB of disk space per image.
Multiply that by a few thousand posts, and you're looking at 50-100GB of origin-killing dead weight.
Origin overload Every request hits PHP and your bandwidth allocation. Images alone can easily saturate a busy server.
Wasted storage WordPress pre-generates thumbnails nobody requests. It sits there, eating disk space and slowing down backups.
Missing sizes When a requested size doesn't exist, WordPress serves the massive original, tanking Core Web Vitals.
The Modern R2 Edge Toolkit
Generate any size, instantly
Request hero-800×600.webp . If it doesn't exist, the Worker detects the WxH pattern, commands your server to process the original, stores it to R2 permanently, and serves it. The first visitor waits 1s. Every subsequent request is instant.
Zero Plugin Bloat
We use a lightweight mu-plugin. No settings, no DB tables—just one PHP file with a secure, secret-protected endpoint.
Pull-Through Cache
Your CSS, JS, fonts, and PDFs all run through R2. If it's missing, the Worker pulls it, caches it, and serves from edge next time.
Implementation Workflow
Audit & Baseline
I review your hosting, CDN, media library size, and existing thumbnail footprints to measure current wasted storage.
R2 & Worker Setup
I provision the custom R2 bucket attached to your domain and write the Edge Worker for on-demand image processing.
WordPress Integration
I attach the mu-plugin that rewrites all assets to your R2 domain and exposes the private resize endpoint.
Migration & Validation
I sync existing uploads to R2, verify global CDN hits, and deliver a before/after report detailing the improvements.
Implementation Pricing
Common questions
Why offload to Cloudflare R2 instead of S3?
R2 has zero egress fees. AWS S3 charges $0.09/GB out — for a media-heavy WordPress site serving 500GB/month, that’s $45 in egress alone, before bandwidth at the CDN layer. R2 charges $0 for egress. You pay only for storage ($0.015/GB/month) and operations. For most WordPress sites, R2 cuts the media-storage bill by 70–95%.
Does R2 work as a CDN by itself?
R2 is object storage. For CDN-grade delivery, you front it with Cloudflare’s CDN (which is automatic if you proxy R2 through a custom domain on Cloudflare). The combination is a global CDN with zero egress fees — which is the actual win.
How are images served — WebP, AVIF, original?
Cloudflare Image Resizing or Cloudflare Polish is enabled at the edge. Visitors get WebP if their browser supports it, AVIF if their browser supports the better format, original PNG/JPEG as fallback. All transformations happen on the edge, no plugin overhead, no extra storage cost. Average image weight drops 40–70%.
What plugin do you use to offload media to R2?
WP Offload Media (Pro tier with R2 support) or a custom S3-API integration via plugins like Media Cloud. The plugin is configured to upload to R2, rewrite URLs in the database, and clean up the local upload folder after sync. Existing media gets migrated as a one-time job.
What if I’m already on AWS S3 — should I migrate?
If your S3 egress bill is over $20/month, yes. Migration is a single rclone or aws s3 sync command, plus a database URL update. Most migrations take 2–6 hours of work depending on media size. Payback period is usually 1–3 months on the cost difference alone.
Will this slow down my WordPress backend?
No. Uploads still go through PHP first, then sync to R2 in the background. Editing posts, regenerating thumbnails, and admin operations all stay fast. The only change visitors notice is faster image loads.
Do you handle migration from existing S3, DigitalOcean Spaces, or Bunny?
Yes. Any S3-compatible storage migrates to R2 in a single sync operation. DNS update points the media subdomain to the new bucket. Old storage is kept for 30 days as a safety net, then decommissioned. Zero downtime for visitors.
What’s included in the package?
R2 bucket created, custom domain configured, Cloudflare Image Resizing or Polish enabled, WP Offload Media installed and configured, existing media synced, database URLs updated, WebP/AVIF delivery verified, and a one-month monitoring window to catch any edge cases. From $999.
Let's Offload Your Media Library
Fill out the brief with your domain and estimated media library size. We'll outline precisely how much origin load and storage you can eliminate.