CodeOX Logo
CodeOX Logo
Vol. I — No. 1
Featured Article
Sep 2, 2026

Amazon S3 vs Cloudinary: A Complete Comparison

Amazon S3 vs Cloudinary: A Complete Comparison
Figure 1. Amazon S3 vs Cloudinary: A Complete Comparison · Original Photography for The Chronicle

Amazon S3 vs Cloudinary: The Complete Comparison

Amazon S3 and Cloudinary show up side by side in almost every "where should I store my images/videos" discussion, but they're not really competitors in the traditional sense. S3 is raw, durable object storage. Cloudinary is a full media pipeline — upload, transform, optimize, and deliver — that in many setups runs on top of S3 rather than instead of it. This guide breaks down where each one wins, where they overlap, and how teams typically combine them.

01. What Each Product Actually Is

Before comparing features, it helps to place these two products correctly on the map. They're often marketed against each other, but they occupy different layers of the stack.

📦 Amazon S3

A general-purpose object storage service. It stores any file type — images, videos, backups, logs, static websites, data lake files — durably and cheaply, at near-unlimited scale. It has no opinion about what's inside the file.

🎬 Cloudinary

A media management platform specializing in images and video. It handles upload, on-the-fly transformation (resize, crop, format conversion), optimization, and delivery via its own CDN. Cloudinary needs somewhere to persist the originals — often its own storage, sometimes an S3 bucket you own.

💡 The Real Question

It's rarely "S3 or Cloudinary" — it's "do I need media-specific processing on top of storage, or just storage?" Most production apps that use Cloudinary still have an S3 bucket somewhere for non-media files or backups.

02. Where Each One Sits in Your Stack

S3-Only Architecture
User uploads file
Your app server
S3 bucket
CloudFront CDN
End user
Any transformation (resizing, format conversion) has to be built and run yourself — usually via Lambda@Edge or a Sharp/ImageMagick pipeline

Cloudinary Architecture
User uploads file
Cloudinary upload API
Stored (Cloudinary or your S3)
Transformed on request
Cloudinary CDN
Transformations are expressed as URL parameters and applied on the fly, then cached

03. Core Feature Comparison

CapabilityAmazon S3Cloudinary
Primary purposeGeneric object storageMedia upload, transform & delivery
File type awarenessNone — stores any bytesDeep — images, video, PDFs, raw files
On-the-fly image resizingNo (native)Yes, via URL params
Automatic format conversion (WebP/AVIF)NoYes (f_auto)
Video transcodingNo (needs MediaConvert)Built in
AI-based cropping / taggingNo (needs Rekognition)Built in
Built-in CDNVia CloudFront (separate)Included
Storage durability99.999999999%Backed by cloud storage under the hood
Non-media file storage (backups, logs, data)ExcellentNot designed for this
Static website hostingYesNo

04. Image & Video Transformations

This is Cloudinary's core differentiator. Instead of pre-generating every image size you might need, you describe the transformation in the URL and Cloudinary generates and caches it on first request.

// Cloudinary: resize, crop to face, convert format, optimize quality — all in the URL
https://res.cloudinary.com/demo/image/upload/
  w_400,h_400,c_fill,g_face,f_auto,q_auto/
  sample_product.jpg

// S3: you get exactly the bytes you uploaded, nothing more
https://your-bucket.s3.amazonaws.com/sample_product.jpg
ℹ️ What "Doing This Yourself" on S3 Looks Like

Teams that stay on S3-only typically build a Lambda function triggered on upload (using Sharp or ImageMagick) to pre-generate a fixed set of sizes, or use CloudFront + Lambda@Edge to transform on request. Both approaches work but require you to build and maintain the pipeline — Cloudinary ships it as a product.

Where Cloudinary Pulls Ahead

  • Responsive images: generate every breakpoint size from a single upload
  • Format negotiation: serves AVIF/WebP to browsers that support it, JPEG as fallback, automatically
  • AI cropping: face/object-aware cropping so thumbnails don't cut off subjects
  • Video: adaptive bitrate streaming, thumbnail extraction, format transcoding without a separate service
  • Overlays & effects: watermarks, text overlays, background removal via URL parameters

05. Pricing Models

The pricing philosophies are fundamentally different, which is often the deciding factor at scale.

DimensionAmazon S3Cloudinary
Billed onStorage (GB/month), requests, data transfer outStorage, transformations, bandwidth, credits
Free tier5 GB (12 months, AWS Free Tier)~25 monthly credits on the free plan
Cost driver at scaleStorage volume + egress bandwidthNumber of unique transformations + bandwidth
PredictabilityVery predictable, linearCan spike if transformation variety is high
Typical cost for pure storageLower — no markup for processingHigher — includes processing/delivery value
⚠️ Common Cost Trap

Cloudinary bills "transformations" per unique combination of parameters requested. If your app generates arbitrary crop dimensions per user (instead of a fixed set of breakpoints), you can rack up far more billable transformations than expected. Standardize on a small set of named transformation presets to keep costs predictable.

06. Head-to-Head Scorecard

Amazon S3 Cloudinary
Raw storage cost
S3
Image/video processing
Cldy
Ease of setup
Cldy
Durability & SLA maturity
S3
Ecosystem & integrations (AWS)
S3
Developer experience for media
Cldy
Cost control at massive scale
S3
Non-media file storage
S3
Scores reflect general fit for the category, not an absolute quality ranking — a team optimizing purely for storage cost will weight this differently than one optimizing for shipping speed.

07. Integration & Developer Experience

1

Uploading a file

S3: use the AWS SDK's PutObject call or a presigned URL from your backend. Cloudinary: call the Upload API directly from the client with an unsigned upload preset, or use their SDK server-side — no need to manage bucket permissions for basic use cases.

2

Serving the file

S3: the object URL, ideally fronted by CloudFront for caching and HTTPS. Cloudinary: a generated delivery URL that already includes CDN caching and can encode transformations directly.

3

Access control

S3: bucket policies, IAM roles, and presigned URLs for private content — powerful but requires understanding AWS IAM. Cloudinary: signed URLs and access control lists at the asset level, generally simpler to reason about for media-only use cases.

4

SDKs and ecosystem

S3: deeply integrated with the rest of AWS — Lambda, CloudFront, Rekognition, Athena, and every major backend language. Cloudinary: SDKs for major frameworks (React, Next.js, Node, Python, PHP, Android, iOS) with widgets purpose-built for upload UIs and responsive image components.

08. Using Them Together

A common and often overlooked pattern: keep S3 as your durable source of truth, and point Cloudinary at that bucket as its storage backend. This is supported via Cloudinary's "auto-upload" and remote-fetch mapping features.

Combined Setup — S3 as Source of Truth
Upload arrives
S3 bucket (original stored)
Cloudinary fetches & transforms on demand
Cloudinary CDN delivers
You keep full ownership of the originals in S3 while getting Cloudinary's transformation pipeline for delivery
🎯 When This Pattern Makes Sense

If you're already deep in the AWS ecosystem (compliance requirements, existing backup/lifecycle policies on S3) but still want on-the-fly image/video transforms without building that pipeline yourself, fetching from your own S3 bucket via Cloudinary gives you both — at the cost of paying for two services instead of one.

09. When to Choose Which

📦 Choose S3 (alone) if…

You're storing backups, logs, data lake files, documents, or static site assets that don't need transformation. You need the lowest possible storage cost at very large scale. You're already deep in AWS and want tight IAM-based access control. You're comfortable building your own resizing pipeline if you ever need one.

🎬 Choose Cloudinary if…

Your product is image- or video-heavy (e-commerce, social, marketplaces) and responsive, optimized delivery matters. You want to ship fast without building a transformation pipeline. You need AI features (auto-crop, background removal, moderation) out of the box. Your team doesn't want to own CDN and format-negotiation logic.

10. Final Verdict

There isn't a universal winner because the two products aren't fully substitutable. S3 is close to unbeatable as a durable, cheap, general-purpose storage layer — it's the backbone many other services (including Cloudinary itself, for some customers) are built on. Cloudinary wins decisively the moment your product needs to look good across screen sizes, formats, and connection speeds without your team hand-building that logic.

For a small app with a handful of static images, S3 plus CloudFront is often enough and meaningfully cheaper. For a media-heavy product where images and video are core to the experience, the engineering time saved by Cloudinary's transformation pipeline usually justifies its higher per-GB cost. Many mature products end up running both, each doing the job it's actually good at.