Your Media Bill Is 80% Delivery Costs. Most Teams Optimize the Wrong 20%.
Here is a pattern we see in almost every media-heavy application: the team spends hours optimizing image compression, picking the perfect codec, tuning video bitrates. They save 15-20% on storage. Meanwhile, 80% of their media bill is egress and CDN delivery, and nobody has compared providers for that part.
The math is brutal. Store 10TB of media on S3: $230/month. Deliver that media to users at 50TB monthly bandwidth via CloudFront: $4,250/month. The delivery cost is 18x the storage cost. Every percentage point saved on delivery is worth 18x more than the same reduction on storage.
This is why the serverless media landscape has fragmented into specialized platforms. Some optimize storage (R2, B2). Some optimize delivery (Bunny CDN, Fastly). Some bundle everything with transformations (Cloudinary, imgix). Some specialize in video (Mux, api.video). The right choice depends entirely on your media type, access pattern, and whether you need processing or just storage + delivery.
We have optimized media infrastructure for several clients at LeanOps, particularly SaaS platforms and content-heavy applications where media costs were growing 20-30% quarterly. This post compares the real costs of 7 serverless media platforms in 2026, modeled at realistic volumes, so you can pick the one that actually fits your workload.
The 7 Platforms Compared
| Platform | Best For | Storage | Delivery | Transformations |
|---|---|---|---|---|
| AWS S3 + CloudFront | Full AWS ecosystem | $0.023/GB | $0.085/GB | Via Lambda/MediaConvert |
| Cloudflare R2 | Cost-optimized delivery | $0.015/GB | Free | Via Workers (custom) |
| Cloudinary | Image/video transformations | Included | Included | Built-in (resize, format, AI) |
| imgix | High-volume image processing | External | $0.08/GB | $0.0008/transformation |
| Bunny CDN + Storage | Budget media CDN | $0.005/GB | $0.01/GB | Basic (resize, WebP) |
| Mux | Video streaming | $0.007/min | $0.007/min | Encoding + adaptive bitrate |
| Backblaze B2 + CDN | Archival media | $0.006/GB | Free (via CF) | None (external) |
Platform-by-Platform Pricing Breakdown
1. AWS S3 + CloudFront
The default choice for AWS-native applications. Maximum flexibility, maximum ecosystem integration, maximum cost.
| Component | Rate | Notes |
|---|---|---|
| S3 Standard storage | $0.023/GB/month | Media source files |
| S3 PUT requests | $0.005/1,000 | Upload operations |
| S3 GET requests | $0.0004/1,000 | Origin fetches |
| CloudFront delivery (first 10TB) | $0.085/GB | To end users |
| CloudFront delivery (10-50TB) | $0.080/GB | Volume discount |
| CloudFront delivery (50-150TB) | $0.060/GB | Enterprise scale |
| CloudFront to S3 origin | Free | No origin fetch charge |
| Lambda@Edge (if used) | $0.60/M requests + compute | For transformations |
| MediaConvert (video) | $0.015-0.024/min | Encoding/transcoding |
Total cost at 10TB stored, 50TB delivered/month:
- Storage: 10TB x $0.023 x 1,024 = $236
- Delivery: 50TB x $0.080 x 1,024 = $4,096
- Requests (est. 100M): $40
- Total: ~$4,372/month
Strengths: Deepest integration with AWS services, most mature CDN (450+ PoPs), Lambda@Edge for edge compute, fine-grained access control (signed URLs, geo-restrictions), real-time logging.
Weaknesses: Most expensive at scale. CloudFront egress pricing is 8-85x more expensive than alternatives. No built-in image optimization (requires Lambda or third-party).
2. Cloudflare R2
The disruptor. S3-compatible storage with zero egress fees. Game-changing for media delivery.
| Component | Rate | Notes |
|---|---|---|
| Storage | $0.015/GB/month | S3-compatible API |
| Class A operations (writes) | $4.50/M | PUT, POST, LIST |
| Class B operations (reads) | $0.36/M | GET, HEAD |
| Egress/delivery | Free | Zero egress, unlimited |
| Free tier | 10GB storage, 1M class A, 10M class B | Monthly |
| Workers (optional processing) | $0.30/M requests (after 10M free) | Custom logic |
Total cost at 10TB stored, 50TB delivered/month:
- Storage: 10TB x $0.015 x 1,024 = $154
- Operations (est. 100M reads): $36
- Delivery: $0
- Total: ~$190/month
That is a 95% reduction compared to S3 + CloudFront ($4,372 vs $190) for the same workload.
Strengths: Zero egress makes delivery costs predictable and near-zero. S3-compatible API (easy migration from S3). Cloudflare's CDN network (300+ PoPs) included. Workers for edge transformations.
Weaknesses: No built-in image/video transformation pipeline (you build it with Workers). Fewer API features than S3 (no lifecycle policies, no versioning in all regions). Smaller ecosystem of tools and integrations. No native video encoding.
Best for: Static media delivery (images, downloads, video files) where you do not need on-the-fly processing. If you just store and serve, R2 is the obvious winner.
For a full R2 pricing deep-dive, see our Cloudflare R2 pricing guide 2026.
3. Cloudinary
The all-in-one media platform. Storage + delivery + transformations in one service.
| Plan | Monthly Cost | Transformations | Bandwidth | Storage |
|---|---|---|---|---|
| Free | $0 | 25K | 25 GB | 25 GB |
| Plus | $89/month | 225K | 225 GB | 75 GB |
| Advanced | $224/month | 800K | 1 TB | 225 GB |
| Enterprise | Custom | Custom | Custom | Custom |
| Overage (transforms) | ~$0.024/each | Per transformation | ||
| Overage (bandwidth) | ~$0.40/GB | Beyond plan |
Total cost at 10TB stored, 50TB delivered/month, 5M transformations:
- Enterprise plan (custom): approximately $3,000-5,000/month
- Or: Advanced plan + massive overages = $224 + $4,000 bandwidth + $100K transforms = impractical
Strengths: Built-in image optimization (format conversion, responsive breakpoints, AI crop). Video transcoding and adaptive streaming. Automatic format selection (WebP, AVIF, HEIC based on browser). Global CDN included. Easy URL-based transformation API.
Weaknesses: Extremely expensive at high volume. Overage pricing is punitive ($0.40/GB bandwidth beyond plan). Vendor lock-in (proprietary URL structure). Enterprise pricing is opaque. Not cost-effective for simple store-and-serve workloads.
Best for: Applications that need heavy image/video processing (e-commerce product images, user-uploaded content requiring moderation and resizing, media-rich marketing sites). Best when transformation count is moderate (under 1M/month).
4. imgix
Image processing as a service. You bring your own storage, imgix handles transformations and delivery.
| Component | Rate | Notes |
|---|---|---|
| Transformations | $0.0008/each | All processing (resize, format, crop) |
| Bandwidth | $0.08/GB | CDN delivery of processed images |
| Source storage | External (your S3/GCS/R2) | imgix does not store originals |
| Base plans | From $10/month | Includes some volume |
Total cost at 5M transformations/month, 10TB bandwidth:
- Transformations: 5M x $0.0008 = $4,000
- Bandwidth: 10TB x $0.08 x 1,024 = $819
- Total: ~$4,819/month (plus your storage on S3/R2)
Wait, that seems expensive. But compare to Cloudinary:
- 5M transformations on Cloudinary: 5M x $0.024 = $120,000 in overages
imgix is 30x cheaper per transformation than Cloudinary overages. At high volume, imgix wins massively on transformation cost.
Strengths: Cheapest per-transformation cost at scale. Real-time image processing via URL parameters. Works with any storage backend (S3, R2, GCS). Excellent image quality optimization. Fast CDN (Akamai-backed).
Weaknesses: Images only (no video). Requires separate storage (extra cost and complexity). Bandwidth pricing ($0.08/GB) is expensive compared to Bunny or R2. Base plan required on top of usage costs.
Best for: High-volume image-heavy applications (e-commerce catalogs with millions of SKUs, real estate listings, media publishers) where you need millions of transformations at the lowest per-unit cost.
5. Bunny CDN + Bunny Storage
Budget-friendly media CDN with integrated storage. Surprisingly capable for the price.
| Component | Rate | Notes |
|---|---|---|
| Bunny Storage | $0.005/GB/month | Per replication zone |
| Bunny CDN (NA/EU) | $0.01/GB | North America + Europe |
| Bunny CDN (Asia) | $0.03/GB | Asia-Pacific |
| Bunny CDN (SA/AF) | $0.045/GB | South America, Africa |
| Image optimization (Bunny Optimizer) | $9.50/month (unlimited) | Resize, WebP, AVIF |
| Video delivery (Stream) | $0.005/min | Adaptive bitrate included |
| Pull zone | $0 | Unlimited pull zones |
Total cost at 10TB stored (2 zones), 50TB delivered (NA/EU):
- Storage: 10TB x $0.005 x 2 zones x 1,024 = $102
- Delivery: 50TB x $0.01 x 1,024 = $512
- Optimizer: $9.50
- Total: ~$624/month
Comparison:
- S3 + CloudFront: $4,372
- Cloudflare R2: $190
- Bunny: $624
Bunny is between R2 and S3, but includes built-in image optimization and video streaming that R2 does not.
Strengths: Incredible price-to-performance ratio. Built-in image optimization ($9.50/month flat for unlimited). Video streaming with adaptive bitrate. Integrated storage with multi-zone replication. Simple, predictable pricing.
Weaknesses: Smaller CDN network (114 PoPs vs CloudFront 450+ or Cloudflare 300+). Less ecosystem tooling. No S3-compatible API (proprietary API). Less suitable for highly custom media pipelines.
Best for: Content-heavy websites, blogs, SaaS platforms that need affordable media delivery with basic image optimization. Excellent for startups and mid-size companies that find CloudFront too expensive but need more than raw R2 storage.
6. Mux (Video Specific)
The video platform for developers. Encoding, storage, streaming, and analytics in one API.
| Component | Rate | Notes |
|---|---|---|
| Video encoding | $0.015/min | Per minute of source video |
| Video storage | $0.007/min/month | Per minute stored |
| Video delivery | $0.007/min delivered | Adaptive bitrate streaming |
| Live streaming | $0.007/min (delivery) + $0.012/min (live encoding) | Real-time |
| Analytics (Mux Data) | From $0 (basic) to custom | Viewer insights |
| Free tier | None (pay-per-use from first minute) | No minimum |
Total cost for 100-hour video library, 10,000 hours monthly views:
- Encoding (one-time per video): 6,000 min x $0.015 = $90 (amortized)
- Storage: 6,000 min x $0.007 = $42/month
- Delivery: 600,000 min x $0.007 = $4,200/month
- Total: ~$4,242/month
Self-hosted alternative (S3 + CloudFront + MediaConvert):
- S3 storage (multiple bitrates, 5x source): 500GB x $0.023 = $12
- MediaConvert encoding (one-time): 6,000 min x $0.024 = $144
- CloudFront delivery (10TB estimated): 10TB x $0.080 x 1,024 = $819
- Total: ~$975/month (but requires building the entire adaptive bitrate pipeline)
Mux costs 4x more than DIY. The question is whether your engineering time to build and maintain a video pipeline (HLS packaging, adaptive bitrate, thumbnail generation, player SDK) is worth $3,000/month.
Strengths: Complete video platform (encoding, storage, delivery, player, analytics). Adaptive bitrate streaming out of the box. Excellent developer API. No infrastructure to manage. Automatic quality optimization.
Weaknesses: Expensive at scale ($0.007/min delivered adds up). No image support. Vendor lock-in (proprietary encoding). No free tier.
Best for: Developer-focused video platforms (SaaS with video features, educational platforms, streaming services) where engineering time is more expensive than Mux's premium. Not cost-effective for simple video hosting without streaming requirements.
7. Backblaze B2 + Cloudflare CDN
The budget king. Cheapest possible media storage with free delivery through Cloudflare's Bandwidth Alliance.
| Component | Rate | Notes |
|---|---|---|
| B2 storage | $0.006/GB/month | Per GB stored |
| B2 egress (to Cloudflare) | Free | Bandwidth Alliance partner |
| B2 egress (to internet) | $0.01/GB | Non-Cloudflare destinations |
| Cloudflare CDN | Free (included with any plan) | Free plan includes CDN |
| B2 downloads | Free (first 2,500/day) | Then $0.004/10K |
| Cloudflare Workers (optional) | $0.30/M requests | Image resizing, etc. |
Total cost at 10TB stored, 50TB delivered/month (via Cloudflare):
- Storage: 10TB x $0.006 x 1,024 = $61
- Egress to Cloudflare: $0 (Bandwidth Alliance)
- Cloudflare CDN: $0 (free tier)
- Total: ~$61/month
This is 98.6% cheaper than S3 + CloudFront ($4,372 vs $61). No, that is not a typo.
Strengths: Cheapest total cost for static media delivery. Free egress to Cloudflare (Bandwidth Alliance). Simple, predictable pricing. Decent S3-compatible API.
Weaknesses: No built-in transformations (requires external processing). Cloudflare free plan has limits on cache control. Less performant than premium CDNs for dynamic content. B2 does not support all S3 API features. Limited regions (US/EU only for primary storage).
Best for: Media archives, podcast hosting, large file distribution, backup/restore scenarios, and any workload where media is written once and served many times without transformation.
For more on B2 pricing, see our Backblaze B2 pricing guide 2026.
Cost Comparison Matrix: 10TB Stored, 50TB Delivered Monthly
| Platform | Storage Cost | Delivery Cost | Transform Cost | Total/Month |
|---|---|---|---|---|
| Backblaze B2 + Cloudflare | $61 | $0 | $0 | $61 |
| Cloudflare R2 | $154 | $0 | $0 | $190 |
| Bunny CDN + Storage | $102 | $512 | $10 | $624 |
| imgix (+ R2 storage) | $154 | $819 | Varies | $973+ |
| S3 + CloudFront | $236 | $4,096 | $0 | $4,372 |
| Cloudinary (Enterprise) | Included | Included | Included | ~$4,000-5,000 |
| Mux (video only) | $42 | $4,200 | Included | $4,242 |
The difference between cheapest (B2 + Cloudflare at $61) and most expensive (S3 + CloudFront at $4,372) is 71x. That is not a small optimization. That is a fundamental architecture decision.
Decision Framework: Which Platform for Which Media Type
Static Images (No Processing Needed)
Websites serving pre-optimized images (already resized, already in WebP/AVIF format):
- Cheapest: Backblaze B2 + Cloudflare ($0.006/GB stored, free delivery)
- Best balance: Cloudflare R2 ($0.015/GB stored, free delivery, S3 API)
- Avoid: Cloudinary, imgix (paying for transformation capability you do not use)
Dynamic Images (Resize, Crop, Format Conversion)
E-commerce, user-generated content, responsive images:
- High volume (1M+ transforms): imgix ($0.0008/transform) + R2/S3 storage
- Moderate volume (<500K transforms): Cloudinary (convenient all-in-one)
- Budget option: Bunny Optimizer ($9.50/month flat) + Bunny Storage
- DIY option: R2 + Cloudflare Workers (custom, requires development)
Video Streaming (Adaptive Bitrate)
Platforms with video content requiring HLS/DASH delivery:
- Developer-friendly: Mux ($0.007/min delivered, zero infra)
- Budget streaming: Bunny Stream ($0.005/min delivered)
- DIY (cheapest): S3 + MediaConvert + CloudFront (complex but 3-4x cheaper than Mux)
- Avoid: Storing raw video on R2 and hoping browsers handle it (they will not)
Mixed Media (Images + Video + Downloads)
SaaS platforms with various asset types:
- Best overall value: Cloudflare R2 (storage) + Workers (image transforms) + external video
- Simple setup: Bunny CDN + Storage + Optimizer + Stream
- Enterprise: S3 + CloudFront + MediaConvert + Lambda@Edge (most control, most cost)
Migration Strategies: Moving From S3 + CloudFront
If you are currently on S3 + CloudFront and want to reduce costs, here are the migration paths ordered by effort:
Low Effort: Add Cloudflare CDN in Front of CloudFront
Put a Cloudflare proxy in front of your CloudFront distribution. Cloudflare caches at their edge (300+ PoPs) and reduces CloudFront egress. Does not require moving data.
Savings: 20-40% on delivery (Cloudflare absorbs cache hits) Effort: DNS change + Cloudflare setup (1-2 hours)
Medium Effort: Move Storage to R2, Keep CloudFront
Migrate static assets from S3 to R2. Set CloudFront to use R2 as origin. Eliminates S3 costs but keeps CloudFront delivery.
Savings: 35% on storage ($0.015 vs $0.023/GB) Effort: Data migration + origin config change (1-2 days)
High Effort: Full Migration to R2 + Cloudflare CDN
Move everything to R2. Use Cloudflare's CDN (included free) instead of CloudFront. Eliminate both S3 and CloudFront.
Savings: 80-95% total cost reduction Effort: Data migration + CDN reconfiguration + testing (1-2 weeks) Risk: Losing CloudFront-specific features (Lambda@Edge, signed URLs, real-time logs)
The Bottom Line
Media storage and delivery is the area where we see the largest cost reduction potential in a single architecture change. Switching from S3 + CloudFront to R2 or B2 + Cloudflare CDN can cut media infrastructure costs by 80-95% with minimal functionality trade-off for static assets.
The key insight: optimize delivery first, storage second. A 50% storage reduction saves pennies per GB. Eliminating egress fees saves dollars per GB. At 50TB monthly delivery, the difference between $0.085/GB (CloudFront) and $0 (R2) is $4,000+ per month.
If your media infrastructure costs are growing faster than your user base, our team at LeanOps specializes in media delivery cost optimization. We have migrated several clients from S3+CloudFront to R2-based architectures and typically cut media costs by 70-90% within 30 days. Get a free Cloud Waste Assessment to see how much you could save.
Further reading:



