Shopify Image CDN Compared: Shopify Default vs Cloudinary vs Bunny

Last updated
Expert reviewed
5 min read
Jacques Blom
Jacques Blom
CTO at Fudge.

Key takeaways

  • Most stores do not need a third-party image CDN. Shopify’s built-in CDN already resizes, crops, compresses, and format-negotiates AVIF, WebP or JPEG per request, at no extra cost.
  • The Liquid image_url filter handles width, height, crop, format and pad_color up to 5760px, and image_tag generates a responsive srcset with loading="lazy" by default.
  • A third-party image CDN earns its place when the problem is not delivery. Digital asset management, video, art direction at scale, images hosted outside Shopify, and multi-channel reuse are the real triggers.
  • Cloudinary is the DAM-plus-transformation option and prices on credits. Bunny Optimizer is the cheap transformation layer at $9.50 per month per website plus bandwidth.
  • Neither can replace cdn.shopify.com for native product images. Both sit alongside it, which is the maintenance cost people forget to price in.

A Shopify image CDN comparison usually starts from the wrong assumption: that Shopify’s image delivery is a gap you need to fill. It is not. Every Shopify plan ships with a global CDN that resizes, compresses and format-negotiates images on the fly, and you pay nothing extra for it.

So the useful question is narrower. What does the built-in CDN actually do, where does it stop, and does Cloudinary or Bunny Optimizer solve a problem you genuinely have? This guide covers the Shopify default in detail, then compares all three on cost, transformation API, format support, theme integration, Core Web Vitals and lock-in.

Why you can trust us

We have been in the Shopify space for over four years and have worked with hundreds of Shopify brands on their storefronts. Jacques has over 15 years of development experience. We build Fudge, an AI storefront editor with a 5.0 rating on the Shopify App Store and Built for Shopify status, so we work in the theme layer where image delivery is either won or lost.


The short answer: most stores should stay on Shopify’s CDN

If your images live in Shopify, your theme uses image_url and image_tag correctly, and you upload sensible source files, you will not get a meaningful speed win from a third-party image CDN. You will get another vendor, another bill and another failure point.

The stores that do benefit have a different problem. They are managing a large media library across channels, serving video at scale, doing per-audience art direction, or hosting images somewhere other than Shopify. Those are asset management problems, not delivery problems.

If your image issue is “my hero is 1.4 MB”, the fix is your source files and your Liquid, not a new CDN.


What Shopify’s built-in image CDN actually does

Shopify’s CDN is backed by Cloudflare, serves over HTTP/3 with TLS 1.3, and compresses text assets with Brotli and gzip.1 It is included on every plan, with unmetered hosting and unlimited bandwidth.2 There is no bandwidth meter to watch and no per-request charge.

Here is the part people underrate.

Automatic format negotiation: AVIF, WebP and JPEG

Shopify inspects each request and picks the best compatible format for that client, choosing between AVIF, WebP and JPEG based on quality and compressed bytes.3 You do not configure this and you do not pay for it. It has been the default behaviour since 2022.

This is the single feature most third-party image CDNs are sold on. Shopify already does it.

The image_url filter and its parameters

image_url is the current Liquid filter for building image URLs. img_url is deprecated and replaced by it.

It takes:

One rule catches people out: an image is never resized larger than its original dimensions. Ask for 3000px from a 1200px upload and you get 1200px back.

Note the deliberate split. The format parameter is for source conversion, not for forcing AVIF or WebP on the visitor. Format negotiation happens automatically at the edge, per request.

Responsive srcset with image_tag

image_tag generates the <img> element and does the tedious parts for you. It sets width and height attributes from the image’s real aspect ratio, which prevents layout shift, and it builds a srcset from a default set of widths up to the maximum in the URL.

It accepts widths, sizes, srcset, preload, alt, class and any other HTML attribute. Two defaults matter:

A correct hero looks roughly like this.

{{ section.settings.image
  | image_url: width: 2400
  | image_tag:
      widths: '600, 900, 1200, 1600, 2000, 2400',
      sizes: '100vw',
      preload: true,
      loading: 'eager',
      alt: section.settings.image.alt
}}

Most “we need an image CDN” conversations end here, once someone reads the theme code and finds a fixed-width <img> with no srcset.

Size limits and supported source formats

Product and collection images must be under 20 MB and up to 5000 x 5000 px, or 25 megapixels. Accepted types are PNG, JPEG, PSD, TIFF, BMP, GIF, SVG, HEIC and WebP, with animated GIF and WebP supported. Shopify suggests 2048 x 2048 px as the size that usually displays best for square product shots.5

Shopify compresses on upload, but it will not rescue a badly exported source. For the pre-upload half of the job, see our guide on how to compress images in Shopify.


When a third-party image CDN earns its place

There are real cases. They are narrower than the marketing suggests.

The pattern: you are buying asset management and transformation depth, not faster bytes. If none of those describe you, stop here.

Fix the theme code before you buy a CDN. Describe the change to Fudge.
Try Fudge for Free

Shopify default vs Cloudinary vs Bunny Optimizer

Cost model

Shopify’s CDN is included. Unmetered hosting, unlimited bandwidth, no separate line item.2

Cloudinary prices in credits. As listed on its pricing page today: Free at $0 per month with 25 monthly credits, Plus at $99 per month or $89 per month billed yearly with 225 credits, and Advanced at $249 per month or $224 per month billed yearly with 600 credits. Enterprise is custom. One credit equals 1,000 transformations, or 1 GB of managed storage, or 1 GB of viewing bandwidth.6

The Cloudinary AssetLink app on the Shopify App Store lists its own plans separately: a free tier that requires an external Cloudinary plan, Pro at $999 per month, and Pro Plus at $999 per month plus $0.30 per GB of CDN delivery. The listing shows a 5.0 rating from 3 reviews. Check the live listing before budgeting, since app plans change.

Bunny splits the bill. Bunny Optimizer is $9.50 per month per website, with unlimited requests, optimizations and transformations. CDN bandwidth is billed on top: on the standard network, $0.01/GB for Europe and North America, $0.03/GB for Asia and Oceania, $0.045/GB for South America, $0.06/GB for Middle East and Africa, with a $1 monthly minimum.

Bunny is the cheapest by a wide margin. Cloudinary is priced as a media platform, because that is what it is.

Transformation API

Shopify: width, height, crop, format, pad_color. Deliberately small.

Cloudinary: the deepest of the three. Chained transformations in the URL, f_auto for format selection and q_auto for quality selection, plus overlays, effects, cropping modes and video.

Bunny Optimizer: a middle tier. Its image processing docs list width, height, crop, aspect_ratio, crop_gravity, face_crop, focus_crop, blur, sharpen, brightness, contrast, saturation, hue, tint, sepia, gamma, flip, flop, rotate, quality and format. More than Shopify, well short of Cloudinary.

Format support

Shopify CDNCloudinaryBunny Optimizer
Automatic per-request negotiationYes, AVIF / WebP / JPEGYes, via f_autoWebP via a settings toggle
AVIF outputYes, automaticYesNot documented in the Optimizer image docs
Source formats acceptedPNG, JPEG, PSD, TIFF, BMP, GIF, SVG, HEIC, WebPBroad, including PDF and videoStandard web formats

Shopify’s format story is genuinely competitive here. The Bunny Optimizer image processing documentation lists conversion between JPEG, PNG, WebP and GIF and describes WebP auto-serve as a setting, and does not document AVIF output. Treat AVIF on Bunny as unconfirmed until you test your own pull zone.

Ease of integration with a Shopify theme

This is where the comparison turns.

Shopify: zero work. It is already how your theme renders images.

Cloudinary: its Shopify app adds Liquid snippets to your theme and gives you an embedded media library in admin for attaching Cloudinary assets to products, collections and blogs. Workable, but it means theme edits and a parallel asset workflow next to Shopify’s own.

Bunny: no first-party Shopify integration for native product images. A pull zone fronts an origin, and Shopify gives you no way to swap the storefront CDN for product media served from cdn.shopify.com. In practice Bunny is used for assets outside Shopify’s image pipeline: landing page media, downloadables, files hosted elsewhere. That is a real use case, but it is not “replace the Shopify image CDN.”

The blunt version: you cannot fully move off Shopify’s image CDN for native product images. Every third-party option is additive.

Effect on Core Web Vitals

Be sceptical of CDN-driven LCP claims. Once images are already AVIF or WebP, correctly sized, and served from an edge close to the visitor, a second CDN moves very little.

What actually moves LCP on a Shopify store:

A third CDN hop can add a DNS lookup, a TLS handshake and a cold-cache miss on the first request. That is a small regression, not an improvement, until your transformation needs justify it. For where Shopify stores actually stand on these metrics, see the state of Shopify performance in 2026, and for mobile specifically, our guide to Shopify mobile speed.

Maintenance and lock-in

Shopify: nothing to maintain, nothing to unwind. Image URLs are generated by Liquid filters that ship with the platform.

Cloudinary: your image URLs point at Cloudinary. Your transformation logic lives in Cloudinary’s URL syntax, embedded in theme snippets. Migrating away means rewriting those URLs and re-homing the assets. The DAM value is real, and so is the exit cost.

Bunny: lighter lock-in. The transform syntax is query parameters, and swapping the hostname back is straightforward. You are still maintaining a pull zone, cache rules and a second bill.

Every third-party option also adds a second place where an image can be wrong: stale cache, mismatched crop, an asset updated in one system and not the other.


Decision table

CriterionShopify CDNCloudinaryBunny Optimizer
CostIncluded on every planCredit-based: Free, Plus $99/mo, Advanced $249/mo$9.50/mo per website plus bandwidth from $0.01/GB
TransformationsResize, crop, pad, JPG/PJPGDeep, chained, plus videoMid-range, query-parameter based
Auto format negotiationAVIF / WebP / JPEGYes, f_autoWebP; AVIF unconfirmed
DAM featuresNoYesNo
VideoShopify-native hosting onlyYesSeparate Bunny Stream product
Theme integrationNative Liquid filtersApp plus theme snippetsManual, non-Shopify assets only
Likely CWV gainBaselineMarginalMarginal
Lock-inNoneHighLow

Verdict by store profile

Small to mid-size store, images in Shopify. Stay on the Shopify CDN. Spend the effort on source files, srcset, and preloading the LCP image. Our guide on how to speed up a Shopify theme covers more of that ground than any CDN swap will.

High-volume store with a creative team and a large media library. Cloudinary, and buy it for the DAM and transformation depth rather than for speed. Price the credits against your real transformation and bandwidth volume first.

Store with meaningful assets outside Shopify. Bunny Optimizer, for those assets only. At $9.50 per month per website plus a cent per gigabyte in Europe and North America, it is cheap enough to be worth it for a media-heavy microsite or a downloads library. Leave product images on Shopify.

Headless or multi-channel setup. Cloudinary if you need one asset source across storefront, app and marketing site. Bunny if you only need transformation and delivery.

Anyone whose actual complaint is a slow hero image. None of the above. Fix the Liquid.


Where Fudge fits

Fudge is an AI storefront editor that writes native theme code: Liquid, CSS and JavaScript, directly in your theme.

Most image performance problems on Shopify are theme problems. A hero without preload, a product grid without srcset, a section hard-coding a 2000px source into a 400px slot. You can describe the fix in plain language, and Fudge writes the image_url and image_tag calls properly into the section.

Because the output is native theme code, there is no extra script and no widget layer, and it survives uninstall. The same applies to anything else you build with the Shopify store editor.

That is usually the cheaper fix. A CDN cannot correct a theme that asks for the wrong image.


FAQ

Does Shopify already have an image CDN?

Yes. Every Shopify plan includes a global CDN backed by Cloudflare, with unmetered hosting and unlimited bandwidth at no extra cost. It resizes, crops and compresses images on request, and picks the best format for each client automatically.

Does Shopify serve WebP and AVIF automatically?

Yes. Shopify inspects each request and selects between AVIF, WebP and JPEG based on client support, quality and compressed size. This has been automatic since 2022 and needs no configuration or theme change from you.

Can I replace the Shopify CDN with Cloudinary or Bunny?

Not for native product images. Shopify has no setting to point storefront product media at a different CDN, so third-party image CDNs sit alongside cdn.shopify.com rather than replacing it. Cloudinary hosts its own copies of assets and links them into products via a Shopify app, and Bunny is generally used for assets outside Shopify's image pipeline.

Is Cloudinary worth it for a Shopify store?

It is worth it if you need digital asset management, deep transformations, or video across multiple channels. It is not worth it purely for delivery speed, since Shopify already handles format negotiation and edge delivery. Cloudinary prices in credits, with a free tier and paid plans listed at $99 and $249 per month at the time of writing.

How much does Bunny Optimizer cost?

Bunny Optimizer is listed at $9.50 per month per website with unlimited requests, optimizations and transformations. CDN bandwidth is charged separately, starting at $0.01 per GB for Europe and North America on the standard network, with a $1 monthly minimum. Check bunny.net for current pricing before committing.

What is the maximum image size Shopify accepts?

Product and collection images must be under 20 MB and no larger than 5000 x 5000 px, or 25 megapixels. Accepted formats include PNG, JPEG, PSD, TIFF, BMP, GIF, SVG, HEIC and WebP, with animated GIF and WebP supported. Shopify suggests 2048 x 2048 px for square product images.

Will an image CDN improve my Core Web Vitals score?

Rarely by much on Shopify. Once images are format-negotiated and served from a nearby edge, the remaining LCP problems are usually theme-side: a lazy-loaded hero, a missing srcset, or missing width and height attributes. Adding a second CDN can even cost you a DNS lookup and a TLS handshake on the first request.

Jacques's signature
Fix the image code in your theme.

Footnotes

  1. Shopify Dev, “The Shopify platform” - Shopify’s CDN is backed by Cloudflare, with Brotli and gzip compression, HTTP/3 and TLS 1.3. https://shopify.dev/docs/storefronts/themes/best-practices/performance/platform

  2. Shopify, “Unlimited web hosting, worldwide” - “Every plan includes quick, reliable and unmetered hosting for your online business.” https://shopify.com/website/hosting 2

  3. Shopify Dev Changelog, “Automatic image delivery in AVIF”, 29 August 2022 - Shopify examines the request and determines the best compatible file format, such as AVIF, WebP or JPEG. https://shopify.dev/changelog/automatic-image-delivery-in-avif

  4. Shopify Dev, “image_url” Liquid filter - width and height accept values up to 5760px, at least one is required, and images are never upscaled beyond their original dimensions. https://shopify.dev/docs/api/liquid/filters/image_url

  5. Shopify Help Center, “Product media types” - images must be under 20 MB and up to 5000 x 5000 px or 25 megapixels. https://help.shopify.com/en/manual/products/product-media/product-media-types

  6. Cloudinary, “Pricing” - one credit equals 1,000 transformations, or 1 GB of managed storage, or 1 GB of viewing bandwidth. Plan prices read from the live page. https://cloudinary.com/pricing

You might also be interested in

Migrate from WooCommerce to Shopify
Step-by-step migration from WooCommerce to Shopify - product/order/customer export, theme rebuild, redirect map, and what to test before cutover.
Price-Anchoring Patterns That Lift Shopify AOV
Price anchoring in Shopify frames value using compare-at pricing, decoy tiers, good-better-best, and bundles. How to build each honestly in your theme.
How to Design a Shopify Store for Jewellery Brands
Shopify store jewellery design, end to end: photography that shows scale, spec metafields, variant limits, gifting flows, and PDP trust signals.