Desktop Pricing Docs Blog About GitHub View as Markdown (Agent) Get started
Human Agent
← Back to blog

Cloudinary vs ImageKit vs S3 + CloudFront: an honest comparison

These four aren't competing for the same job, which is why "which is best" has no answer and "which is cheapest" has a different answer for every workload. The useful question is what each one meters — because that, not the sticker price, is what your bill tracks. Here's the comparison, including the cases where we're the wrong choice.

The short version

  • Cloudinary if transformations are the product you're buying. Nothing else here matches its depth, and the credit model is reasonable if transforms are what you spend them on.
  • ImageKit if you want real transforms with a bill you can predict. Bandwidth is the meter, overage is published, entry tier is $9.
  • S3 + CloudFront if you already live in AWS, have the IAM and Terraform muscle, and want the lowest lock-in available. You will build the ergonomics yourself.
  • PixelVault if the job is "turn this file into a permanent URL from code or an agent" and you want traffic growth to not move the bill. We're not a Cloudinary replacement.

The comparison

  Cloudinary ImageKit S3 + CloudFront PixelVault
What you're billed on One credit pool, spent interchangeably across storage, bandwidth and transformations Bandwidth delivered, plus separate video-unit and extension-unit allowances Storage per GB, requests, and egress per GB past CloudFront's free 1 TB/mo Storage and uploads. Egress is never billed, though each plan includes a bandwidth allowance
Free tier $0 — 25 credits/mo, 3 users $0 — 20 GB bandwidth, 3 GB storage, 2 users AWS's free plan, then pay-as-you-go. CloudFront's 1 TB/mo egress is always-free $0 — 200 MB storage, 500 uploads/mo, 1 GB bandwidth
Entry paid tier $99/mo (or $89/mo annual) — 225 credits $9/mo (Lite) — 40 GB bandwidth, 10 GB storage. Not capability-comparable to Cloudinary Plus; the like-for-like pair is ImageKit Pro $89 vs Plus $89 billed annually No tier. The bill is whatever you used $9/mo (Starter — not yet purchasable)
Can you forecast the bill? Hard. Three different things draw down one pool, and overage rates past your credits aren't published Yes, mostly — bandwidth is the meter that moves, and per-GB overage is published Yes if you model traffic. The arithmetic is on you, across three or four line items Yes — traffic growth doesn't change the bill, only your library does
Image transformations The deepest set on the market, and the reason to pick it Strong URL-based transforms, plus AI extras on the extension-unit meter None. CloudFront Functions or Lambda@Edge, which you build and own Resize, crop (face-aware), format, quality, background removal, watermark and basic effects via URL params. Not a Cloudinary-depth pipeline
Setup to first hosted URL Account, SDK, upload preset Account, URL endpoint, SDK Bucket, public-access or OAC decision, IAM policy, CloudFront distribution, ~15 min deploy One POST. Keyless works with no account at all
Getting out Your URLs are Cloudinary URLs. Leaving means rewriting every embed Same shape — ImageKit-hosted URLs, rewritten on exit It's your bucket. Lowest lock-in of the four One-command bulk export. Manual export is free on every plan, deliberately

Why the metering model matters more than the price

Every real surprise on an image-hosting bill comes from the same place: the thing that grew wasn't the thing you were watching.

Cloudinary's credit is one unit spent three ways — 1 credit buys 1,000 transformations, or 1 GB of storage, or 1 GB of image bandwidth, interchangeably. That's elegant when transforms dominate. It's awkward when they don't: the free plan's 25 credits is "25 GB of bandwidth" only if you store nothing and transform nothing, and the public pricing page doesn't publish per-unit overage rates past your credit allowance, so what you pay for exceeding it isn't something you can work out in advance.

ImageKit meters bandwidth, which is the honest meter for a delivery product — it scales with traffic rather than with how much you own. Overage is published ($0.50/GB on Lite, $0.45/GB on Pro), which makes it forecastable. Watch the two side allowances: video units and extension units are separate monthly pools that don't convert into bandwidth if you don't use them.

S3 + CloudFront meters egress, past CloudFront's always-free 1 TB/month. That tier is generous enough that plenty of sites never pay for delivery at all — the real cost of DIY is not the invoice, it's the bucket policy, the Origin Access Control decision, the IAM, the distribution deploy, and the upload plumbing you now maintain. We wrote that up in detail in image hosting vs raw S3 + CloudFront.

PixelVault never bills for egress, because it runs on R2, where egress is free. That's not generosity, it's the underlying cost structure. Be precise about what it buys you, though: egress is never invoiced, but it is still metered — every plan carries a bandwidth allowance (1 GB free, 25 GB Starter, 50 GB Pro). The difference is what happens at the limit. There is no overage charge and no surprise bill; on a paid plan images keep serving, and on the free plan they're replaced by a placeholder until the month resets or you upgrade. So traffic growth can cost you a plan upgrade, never an invoice you didn't see coming.

Where we're the wrong answer

Three cases, stated plainly:

  • You need real transformation depth. Named and stored transformations, chained transformation URLs, generative fill, video pipelines. Use Cloudinary. We do cover more than the basics on the URL — resize, face-aware crop, background removal, watermarking, format and quality — but it's a fixed parameter set, not a composable pipeline.
  • You need a DAM. Cloudinary and ImageKit both sell asset management — folders, tagging, approvals, non-technical users. We're an API with a dashboard attached, not a media library.
  • Your org mandates your own cloud. If the data must sit in an account you own, S3 is the answer today. Bring-your-own-bucket is on our roadmap, not shipped.

Where we do win: the time from "I have a file" to "I have a permanent URL" is one API call with no bucket, no distribution, and no SDK — and it works from an agent, a CI job, or a curl with no account at all.

Pick by job, not by table

Serving a high-traffic marketing site with heavy art direction? Cloudinary or ImageKit. Already running infrastructure-as-code in AWS? S3. Hosting screenshots out of CI, images from a coding agent, or user uploads where you just need a URL that keeps working? That's the job we built for — try it without an account, or read the API overview.

Deeper on the numbers: Cloudinary pricing explained, ImageKit pricing explained, and the Cloudinary alternatives roundup.

Cloudinary figures read from cloudinary.com/pricing on 5 September 2026; ImageKit figures from imagekit.io/plans on 17 September 2026 — these are ImageKit's Media Processing + DAM plans, and it also sells DAM-only tiers. Both vendors change plans without notice and neither publishes enterprise pricing — check their pages before you commit. AWS figures are structural, not quoted, so treat them as a shape rather than a quote. PixelVault's Starter tier is priced but not yet purchasable. This post is published by PixelVault, which competes with every product named in it.