Skip to main content

Cloudinary vs Imgix vs Cloudflare Images 2026

·APIScout Team
Share:

Every Image on the Web Needs Optimization

A 4MB product image served directly from S3 kills mobile conversion. The same image, resized, compressed, and converted to WebP, loads in under 100ms from a CDN edge node. Image optimization is not a nice-to-have — it's directly correlated with page load time, Core Web Vitals, and conversion rates.

Three platforms dominate developer-facing image optimization APIs in 2026: Cloudinary (the full-featured DAM with video support), Imgix (the real-time transformation specialist), and Cloudflare Images (the simplest and most cost-effective for teams already in the Cloudflare ecosystem). Each represents a different trade-off between features, pricing simplicity, and cost at scale.

TL;DR

Cloudinary is the most feature-complete — DAM, AI-powered transformations, video optimization, generative AI fill, 400+ transformation options. But pricing via credits is complex and can spike unexpectedly. Imgix is the real-time transformation specialist — connect your own storage, transform on-the-fly, no storage costs. Cloudflare Images is the simplest and cheapest — $0.50/1,000 transforms, straightforward pricing, no hidden costs, but fewer advanced features than Cloudinary.

Key Takeaways

  • Cloudinary's free tier includes 25 credits/month — a credit covers approximately 1GB bandwidth OR 1,000 transformations. Complex pricing makes cost prediction difficult.
  • Imgix has a $100/month minimum — no free tier; Imgix doesn't store images, you connect your existing S3/GCS/Azure storage.
  • Cloudflare Images costs $0.50/1,000 transforms — if you serve images from external origins (not Cloudflare storage), you only pay transform fees.
  • Cloudinary includes AI features — background removal, generative expand, auto-cropping with face detection, object recognition — that Imgix and Cloudflare don't offer.
  • All three convert to WebP/AVIF automatically — modern image formats are supported across all platforms.
  • Imgix and Cloudflare support URL-based transformations — transform parameters in the query string, no dashboard configuration required.
  • Cloudinary enterprise contracts range from $2,000 to $10,000+/month — enterprise pricing reflects the breadth of features.

Pricing Comparison

PlatformFree TierPaid StartingTransform Cost
Cloudinary25 credits/month~$89/monthCredit-based (complex)
ImgixNone$100/monthIncluded in plan
Cloudflare Images1,500 stored imagesN/A (pay-as-you-go)$0.50/1,000
ImageKitFree (10GB bandwidth)$9/monthVolume-based

Cloudflare Images pricing detail:

  • Storage: $5/100K images stored
  • Transforms: $0.50/1,000 transforms
  • Delivery: Free (uses Cloudflare's CDN with no bandwidth charge)

Cloudinary

Best for: Full-featured DAM, AI transformations, video optimization, enterprise teams

Cloudinary is the most feature-complete image and video optimization platform — used by Lyft, NBC, and thousands of enterprises. It's not just an image CDN; it's a digital asset management (DAM) platform with a UI for asset management, AI-powered transformation capabilities, and video optimization alongside images.

Pricing (Credit System)

Cloudinary uses a "credit" system that unifies bandwidth, storage, and transformations into one currency — but makes cost prediction complex:

  • 1 credit ≈ 1GB bandwidth
  • 1 credit ≈ 1,000 transformations
  • 1 credit ≈ 1GB storage
PlanMonthly CreditsCost
Free25$0
Plus225$89/month
Advanced1,000$249/month
EnterpriseCustomCustom

A high-traffic site serving 500GB of images per month with 10K transformations uses roughly 510 credits — requiring the Advanced plan.

URL-Based Transformations

<!-- Original image URL -->
https://res.cloudinary.com/demo/image/upload/sample.jpg

<!-- Resize to 800px wide, auto-crop, convert to WebP -->
https://res.cloudinary.com/demo/image/upload/w_800,c_auto,f_auto,q_auto/sample.jpg

<!-- Smart crop to face, add border radius, grayscale -->
https://res.cloudinary.com/demo/image/upload/w_400,h_400,c_fill,g_face,r_max,e_grayscale/sample.jpg

<!-- Generative background fill (AI) -->
https://res.cloudinary.com/demo/image/upload/w_1200,h_600,c_fill,g_auto,b_gen_fill/sample.jpg

SDK Integration

import { v2 as cloudinary } from "cloudinary";

cloudinary.config({
  cloud_name: process.env.CLOUDINARY_CLOUD_NAME,
  api_key: process.env.CLOUDINARY_API_KEY,
  api_secret: process.env.CLOUDINARY_API_SECRET,
});

// Upload with automatic optimization
const result = await cloudinary.uploader.upload("path/to/image.jpg", {
  folder: "products",
  transformation: [
    { quality: "auto", fetch_format: "auto" },  // Auto-convert to WebP/AVIF
  ],
  eager: [
    { width: 400, height: 400, crop: "fill", gravity: "face" },  // Thumbnail
    { width: 1200, height: 630, crop: "fill", gravity: "auto" }, // OG image
  ],
});

console.log(result.secure_url);

AI Transformation Features

# Background removal (AI-powered)
https://res.cloudinary.com/demo/image/upload/e_background_removal/sample.jpg

# Generative expand — AI extends the image canvas
https://res.cloudinary.com/demo/image/upload/ar_16:9,b_gen_fill,c_pad/sample.jpg

# Object recognition crop — crop to specific detected object
https://res.cloudinary.com/demo/image/upload/c_fill,g_auto:airplane/sample.jpg

When to Choose Cloudinary

Teams needing AI-powered image features (background removal, smart cropping), video optimization alongside images, enterprise DAM with non-technical team access, or applications with complex transformation pipelines where Cloudinary's 400+ transformation options are needed.

Imgix

Best for: Real-time transformations, existing S3/GCS storage, performance-critical applications

Imgix takes a different approach: it doesn't store images. You connect Imgix to your existing storage (AWS S3, Google Cloud Storage, Azure Blob, any HTTP origin), and Imgix transforms and delivers on-the-fly. This means you pay only for transformation and delivery — storage stays in your existing infrastructure where you're already paying.

Pricing

  • Minimum: $100/month
  • Sources (storage connections): Included
  • Bandwidth: Volume-based, included in plan tiers
  • Transformations: Included

No free tier — Imgix is aimed at production applications with real traffic.

URL-Based Transformations

<!-- Connect your S3 bucket as an Imgix source -->
<!-- Original: https://yourbucket.s3.amazonaws.com/products/chair.jpg -->
<!-- Imgix URL: https://your-subdomain.imgix.net/products/chair.jpg -->

<!-- Resize to 600px wide, auto WebP/AVIF -->
https://your-subdomain.imgix.net/products/chair.jpg?w=600&auto=format,compress

<!-- Smart crop to subject, square crop -->
https://your-subdomain.imgix.net/products/chair.jpg?w=400&h=400&fit=crop&crop=entropy

<!-- Blur background, focus on center subject -->
https://your-subdomain.imgix.net/products/chair.jpg?w=800&blend-mode=normal&blur=20

<!-- Progressive JPEG for slow connections -->
https://your-subdomain.imgix.net/products/chair.jpg?w=1200&fm=pjpg

SDK Integration

import ImgixClient from "@imgix/js-core";

const client = new ImgixClient({
  domain: "your-subdomain.imgix.net",
  secureURLToken: "your-token",  // Optional: secure signed URLs
});

// Build a transformed URL
const url = client.buildURL("products/chair.jpg", {
  w: 600,
  auto: "format,compress",
  fit: "crop",
  crop: "entropy",
});

// srcSet for responsive images
const srcSet = client.buildSrcSet("products/chair.jpg", { auto: "format,compress" });
// Returns: https://...?w=100&auto=format,compress 100w, ...?w=200&... 200w, ...

React Component with Responsive Images

import { buildURL, buildSrcSet } from "@imgix/js-core";

function ProductImage({ src, alt }) {
  const imgixDomain = "your-subdomain.imgix.net";

  const params = { auto: "format,compress", fit: "crop", crop: "entropy" };

  const src800 = buildURL(`${imgixDomain}/${src}`, { ...params, w: 800 });
  const srcSet = buildSrcSet(`${imgixDomain}/${src}`, params, {
    widths: [400, 800, 1200, 1600],
  });

  return (
    <img
      src={src800}
      srcSet={srcSet}
      sizes="(max-width: 768px) 100vw, 800px"
      alt={alt}
      loading="lazy"
    />
  );
}

When to Choose Imgix

Teams with existing S3/GCS storage that don't want to migrate files to a new platform, performance-critical applications where Imgix's optimized delivery network matters, or projects where the $100/month minimum is acceptable and avoiding storage migration is valuable.

Cloudflare Images

Best for: Simplest pricing, Cloudflare ecosystem, high-volume transforms, bandwidth-sensitive

Cloudflare Images is the image platform built into Cloudflare's network — the same infrastructure as Workers, Pages, and R2. The pricing is the simplest in the market: $5/100K stored images and $0.50/1,000 transforms. Delivery is free via Cloudflare's CDN. No credit system, no bandwidth billing (for most usage patterns).

Pricing

FeatureCost
Storage (images in Cloudflare)$5/100,000 images
Transformations$0.50/1,000
DeliveryFree (via Cloudflare CDN)
External origin transforms$0.50/1,000 (no storage fee)

External origin transforms are particularly interesting: if your images live on S3 or your own server, Cloudflare Images can transform them on-the-fly without storing them in Cloudflare's storage — you pay only the $0.50/1,000 transform fee.

URL-Based Transformations

<!-- Images stored in Cloudflare Images -->
https://imagedelivery.net/{account-id}/{image-id}/public
https://imagedelivery.net/{account-id}/{image-id}/w=600,h=400,fit=crop

<!-- Variants (pre-defined transforms) -->
https://imagedelivery.net/{account-id}/{image-id}/thumbnail
https://imagedelivery.net/{account-id}/{image-id}/og-image

API Integration

// Upload image to Cloudflare Images
const formData = new FormData();
formData.append("file", imageFile);
formData.append("id", "product-chair-001");  // Custom ID

const response = await fetch(
  `https://api.cloudflare.com/client/v4/accounts/${ACCOUNT_ID}/images/v1`,
  {
    method: "POST",
    headers: { Authorization: `Bearer ${CF_API_TOKEN}` },
    body: formData,
  }
);

const result = await response.json();
console.log(`Image URL: ${result.result.variants[0]}`);

Defining Variants (Pre-configured transforms)

# Create a variant (reusable transform configuration)
curl -X POST "https://api.cloudflare.com/client/v4/accounts/{account_id}/images/v1/variants" \
  -H "Authorization: Bearer $CF_API_TOKEN" \
  -d '{
    "id": "product-thumbnail",
    "options": {
      "width": 400,
      "height": 400,
      "fit": "cover",
      "metadata": "none",
      "sharpen": 1
    }
  }'

Workers Integration (Resize on Fetch)

// Cloudflare Worker — resize images from external origin
export default {
  async fetch(request: Request): Promise<Response> {
    const url = new URL(request.url);
    const imageUrl = url.searchParams.get("url");

    if (!imageUrl) return new Response("Missing url param", { status: 400 });

    // Use Cloudflare's image resizing (included with Workers Paid)
    const imageRequest = new Request(imageUrl, {
      headers: { accept: "image/avif,image/webp,image/jpeg" },
      cf: {
        image: {
          width: parseInt(url.searchParams.get("w") ?? "800"),
          quality: 80,
          format: "auto",
        },
      },
    });

    return fetch(imageRequest);
  },
};

When to Choose Cloudflare Images

Teams already using Cloudflare Workers, Pages, or R2, projects prioritizing pricing predictability over feature breadth, high-volume transform scenarios where $0.50/1,000 is cheaper than credit-based alternatives, or teams that don't need AI features (background removal, face detection) that Cloudinary offers.

Feature Comparison

FeatureCloudinaryImgixCloudflare Images
Free tierYes (25 credits)NoYes (1,500 images)
Min paid~$89/month$100/monthPay-as-you-go
Storage includedYesNo (bring own)Yes
AI featuresYes (extensive)LimitedNo
VideoYesNoNo
URL transformsYesYesYes (variants)
Dynamic transformsYesYesLimited
WebP/AVIFYesYesYes
Bandwidth feeVia creditsIncludedFree
Pricing complexityHigh (credits)MediumLow

Decision Framework

ScenarioRecommended
AI features (background removal)Cloudinary
Video + images togetherCloudinary
Existing S3/GCS storageImgix
Simplest pricingCloudflare Images
High volume, cost efficiencyCloudflare Images
Cloudflare ecosystemCloudflare Images
Enterprise DAMCloudinary
Performance-first, no storage migrationImgix
Free tier for small projectCloudinary or Cloudflare

Verdict

Cloudinary is justified when AI features and video optimization are requirements, or when non-technical teams need a polished DAM interface. The credit pricing is complex but the feature breadth is unmatched.

Imgix is the choice for teams with existing cloud storage that want the best real-time transformation performance without migrating assets. The $100/month minimum and no-storage model suit teams that are already paying for S3 and don't want a second storage vendor.

Cloudflare Images wins on simplicity and cost for most production applications. The straightforward $0.50/1,000 transform pricing, free delivery, and Cloudflare ecosystem integration make it the default recommendation for new projects that don't need Cloudinary's advanced AI or Imgix's storage flexibility.

Next.js and React Integration Patterns

All three platforms integrate with Next.js's next/image component, which handles lazy loading, responsive srcSet generation, and WebP conversion — but each requires different configuration.

For Cloudinary, the official next-cloudinary package provides a drop-in replacement for next/image with Cloudinary-specific optimization parameters baked in:

import { CldImage } from 'next-cloudinary';

<CldImage
  src="products/chair"
  width={800}
  height={600}
  alt="Product chair"
  sizes="(max-width: 768px) 100vw, 800px"
  crop="fill"
  gravity="auto"
/>

For Imgix, configure a custom loader in next.config.js. The loader converts Next.js's width and quality parameters into Imgix query parameters:

// imgix-loader.js
export default function imgixLoader({ src, width, quality }) {
  return `https://your-subdomain.imgix.net${src}?w=${width}&q=${quality || 75}&auto=format,compress`;
}

For Cloudflare Images, configure next/image with the Cloudflare delivery domain and a custom loader that maps to your account's variant URLs:

// next.config.js
module.exports = {
  images: {
    domains: ['imagedelivery.net'],
    loader: 'custom',
    loaderFile: './cf-images-loader.js',
  },
};

The next/image integration is most turnkey for Cloudinary via next-cloudinary. Imgix and Cloudflare Images both require custom loaders but offer full control over transformation parameters. For AI features (generative fill, background removal, smart cropping), only the Cloudinary integration exposes these capabilities natively — Imgix and Cloudflare require separate API calls outside the image component.

Migrating Between Image Platforms

Switching image platforms after launch requires updating URLs across your entire content layer and managing CDN cache invalidation — complex but doable with the right sequencing.

The most common migration path is Cloudinary → Cloudflare Images, motivated by pricing predictability at high volume. URLs change from res.cloudinary.com/demo/image/upload/... to imagedelivery.net/{account-id}/{image-id}/.... A pragmatic approach:

  1. Export all Cloudinary asset public IDs via the Admin API (GET /resources/image)
  2. Download each original and re-upload to Cloudflare Images via the batch upload API
  3. Build a mapping table from old Cloudinary URLs to new Cloudflare URLs in your database
  4. Deploy an edge redirect (Cloudflare Worker or Vercel middleware) that intercepts Cloudinary URL patterns and serves the new Cloudflare URL
  5. Run both platforms in parallel for 30 days to let CDN caches on Cloudinary URLs expire
  6. Once Cloudinary traffic drops to near-zero, remove the redirect

Migrating from Imgix is simpler because Imgix doesn't store images — source files remain in S3 or GCS unchanged, and only the serving URL prefix changes. No asset migration is needed; you only update the loader configuration.

For any migration involving transformation parameter translation (Cloudinary's c_fill,g_face,w_400 versus Imgix's w=400&fit=crop&crop=faces), audit your most-used transformation combinations and test each one on both platforms before cutover. Visual differences in crop behavior or compression quality occasionally require parameter tuning even when the documented behavior appears equivalent.

One often-overlooked migration risk is EXIF metadata handling. Cloudinary strips metadata by default and can be configured to retain it selectively. Cloudflare Images strips all metadata. Imgix strips metadata by default but supports fm=json to inspect metadata. If any downstream system reads EXIF data from your image URLs — camera make, copyright fields, GPS coordinates — verify your new platform's metadata handling before cutover, since restoring stripped metadata requires re-uploading from original sources. For most web delivery use cases, stripping metadata reduces file size and is the correct default, but it's worth confirming explicitly rather than discovering the issue after migration. As a general rule, budget two to four engineering days for a migration between any two major image platforms — the URL changes, loader updates, cache warm-up, and QA validation each take longer than they appear upfront.


Compare image CDN API pricing, features, and integration documentation at APIScout — find the right image optimization platform for your application.

Related: Cloudinary vs Cloudflare Images: Image CDN APIs, How to Add Image Optimization with Cloudinary, Best Document Processing APIs 2026

The API Integration Checklist (Free PDF)

Step-by-step checklist: auth setup, rate limit handling, error codes, SDK evaluation, and pricing comparison for 50+ APIs. Used by 200+ developers.

Join 200+ developers. Unsubscribe in one click.