Products · Developer platform

Cloudflare Images

Store, transform, optimize, and deliver images at scale

Pricing and limits

Pricing

as of Nov 3, 2026

As of Nov 3, 2026, from Cloudflare's docs, last updated there Oct 19, 2026. Licensed CC BY 4.0; navigation removed.

By default, all users are on the Images Free plan. The Free plan includes access to the transformations feature, which lets you optimize images stored outside of Images, like in R2.

The Paid plan allows transformations, as well as access to storage in Images.

Pricing is dependent on which features you use. The table below shows which metrics are used for each use case.

Use case Metrics Availability
Optimize images stored outside of Images Images Transformed Free and Paid plans
Optimize images that are stored in Cloudflare Images Images Stored, Images Delivered Only Paid plans

Images Free

On the Free plan, you can request up to 5,000 unique transformations each month for free.

Once you exceed 5,000 unique transformations:

  • Existing transformations in cache will continue to be served as expected.
  • New transformations will return a 9422 error. If your source image is from the same domain where the transformation is served, then you can use the onerror parameter to redirect to the original image.
  • You will not be charged for exceeding the limits in the Free plan.

To request more than 5,000 unique transformations each month, you can purchase an Images Paid plan.

Images Paid

When you purchase an Images Paid plan, you can choose your own storage or add storage in Images.

Metric Pricing
Images Transformed First 5,000 unique transformations included + $0.50 / 1,000 unique transformations / month
Images Stored $5 / 100,000 images stored / month
Images Delivered $1 / 100,000 images delivered / month

If you optimize an image stored outside of Images, then you will be billed only for Images Transformed.

Images Stored and Images Delivered apply only to images that are stored in your Images bucket. When you optimize a hosted image through the image delivery URL, then this counts toward Images Delivered — not Images Transformed. However, if you optimize a hosted image through the Images binding, then this counts toward Images Transformed.

Metrics

Images Transformed

When using the Images binding or optimizing images stored outside of Images, you will incur $0.50 for every 1,000 unique transformations.

A transformation is a request to optimize an original image based on a set of supported parameters. Billing follows these rules:

  • Each combination of a source image and optimization parameters counts as a unique transformation. For example, serving thumbnail.jpg as 100x100 pixels and 200x200 pixels count as two unique transformations.
  • Cloudflare counts the number of unique transformations requested in each calendar month.
  • Repeated requests for the same transformation within the same calendar month count only once, regardless of how many times the transformed image is served.
  • Cloudflare excludes format and quality when determining whether a transformation is unique. Requests with different format and quality settings count as one unique transformation. For example, width=100,format=auto/thumbnail.jpg counts as one unique transformation whether Cloudflare serves the image as AVIF or WebP.
  • Calls to the Images binding's .info() method are not billed.

Example #1

If you serve 2,000 remote images in five different sizes each month, then this results in 10,000 unique transformations. Your estimated cost for the month would be:

Usage Included Billable quantity Price
Transformations 10,000 unique transformations 1 5,000 5,000 $2.50 2

Example #2

If you use R2 for storage then your estimated monthly costs will be the sum of your monthly Images costs and monthly R2 costs.

For example, if you upload 5,000 images to R2 with an average size of 5 MB, and serve 2,000 of those images in five different sizes, then your estimated cost for the month would be:

Usage Included Billable quantity Price
Storage 25 GB 3 10 GB 15 GB $0.22 4
Class A operations 5,000 writes 5 1 million 0 $0.00 6
Class B operations 10,000 reads 7 10 million 0 $0.00 8
Transformations 10,000 unique transformations 9 5,000 5,000 $2.50 10
Total $2.72

Images Stored

Storage in Images is available only with an Images Paid plan. You can purchase storage in increments of $5 for every 100,000 images stored per month.

You can create predefined variants to specify how an image should be resized, such as thumbnail as 100x100 and hero as 1600x500.

Only uploaded images count toward Images Stored; defining variants will not impact your storage limit.

Images Delivered

For images that are stored in Images, you will incur $1 for every 100,000 images delivered per month. This metric does not include transformed images that are stored in remote sources.

Cloudflare counts an image delivery as a billable request only when the response has an HTTP 200 status code and is larger than 1,024 bytes. Responses with another status code or a size of 1,024 bytes or less are not billed.

Example

A retail website has a product page that uses Images to serve 10 images. If the page was visited 10,000 times this month, then this results in 100,000 images delivered — or $1.00 in billable usage.

Footnotes

  1. 2,000 original images × 5 sizes ↩
  2. (5,000 transformations / 1,000) × $0.50 ↩
  3. 5,000 objects × 5 MB per object ↩
  4. 15 GB × $0.015 / GB-month ↩
  5. 5,000 objects × 1 write per object ↩
  6. 0 × $4.50 / million requests ↩
  7. 2,000 objects × 5 reads per object ↩
  8. 0 × $0.36 / million requests ↩
  9. 2,000 original images × 5 sizes ↩
  10. (5,000 transformations / 1,000) × $0.50 ↩

Limits and formats

as of Nov 3, 2026

As of Nov 3, 2026, from Cloudflare's docs, last updated there Jun 16, 2026. Licensed CC BY 4.0; navigation removed.

This section covers limits and supported formats for Images.


Limits

Here are limits to keep in mind when optimizing with Images.

On an Enterprise plan, you can reach out to our account team to ensure that the limits align with your needs.

Remote images

The following limits apply when transforming a remote image stored outside of Images:

Attribute Limit
Image file size 100 MB
Image area, excluding animated GIFs 100 MP (e.g. 10,000x10,000 pixels)
Image area for animated GIFs 100 MP*
Image dimension, excluding WebP and AVIF 12,000 pixels
Image dimension, AVIF 1,200 pixels

Hosted images

The following limits apply when uploading to your Images storage:

Attribute Limit
Image file size 10 MB
Image area, excluding animated GIFs 100 MP (e.g. 10,000x10,000 pixels)
Image area, animated GIFs 100 MP*
Image dimension, excluding WebP and AVIF 12,000 pixels
Image dimension, AVIF 1,200 pixels
Image metadata 1024 bytes

Limits for animated images

GIF/WebP animations are limited to the total megapixels across all frames, or the sum of areas of all frames. For example, a GIF with 500x500 dimensions and 10 frames has an image area of 2,500,000 pixels or 2.5 megapixels.

The limit to deliver an animated GIF/WebP animation is 100 megapixels. However, any animations over 50 megapixels will be delivered without applying any transformations.

When serving animations, we recommend using video formats like MP4 and WebM for best performance. As the GIF format has inefficient compression, high resolution animations typically have larger file sizes and take longer to compress.

To optimize remote videos, you can use media transformations ↗︎.

Limits for the Images binding

When optimizing with the Images binding, the maximum input size for .input() is 20 MB.

Supported formats

Input formats

Images supports a wide range of input formats for both remote and hosted images:

  • PNG
  • JPEG
  • GIF (including animations)
  • WebP (including animations)
  • SVG
  • AVIF*
  • HEIC

*Available on an Enterprise plan.

Output formats

You can serve images in the following output formats:

  • PNG
  • JPEG
  • GIF (including animations)
  • WebP (including animations)
  • SVG
  • AVIF

When detecting the most optimal output format for the requesting browser, Cloudflare balances the time to generate an image with the time to serve the image to the browser.

In particular, AVIF encoding can be an order of magnitude slower than encoding to other formats. If the image is too large to be quickly encoded to AVIF, then Cloudflare will fall back to WebP or JPEG.

Progressive JPEG

When transcoding to JPEG, Cloudflare generates images in an interlaced progressive JPEG format.

You can use the format parameter to specify whether progressive or baseline JPEG should be used.

However, we will always fall back to the baseline JPEG format — even when progressive JPEG is specified — if either:

  • The output image area dimensions are less than 50x50.
  • The output image area dimensions are greater than 3000x3000.

SVG

Cloudflare does not resize SVG files and will ignore any optimization parameters.

If you store in Images, then you can use any predefined variant as a placeholder to deliver a sanitized SVG. For example, applying the default public variant allows the SVG to be delivered without resizing or cropping:

imagedelivery.net/account_hash/svg_id/public

Similarly, you can use Images to serve a sanitized SVG that is stored in your own origin, like in R2.

When SVG files are served, they are sanitized using svg-hush ↗︎, an open-source tool developed by Cloudflare to make SVGs as safe as possible. It streams the files without buffering, enabling us to quickly filter them on the fly. SVG files are XML documents and can contain links or Javascript features that may pose a security concern.

The svg-hush tool filters SVGs and removes potentially risky features, such as:

  • Scripting. We prevent SVGs from being used for cross-site scripting attacks. Although browsers do not allow scripts in <img> tags, they do allow scripting when SVGs are opened directly as a top-level document.
  • Hyperlinks to other documents. Removing hyperlinking makes SVG files less attractive for SEO spam and phishing.
  • References to cross-origin resources. We stop third parties from tracking who is viewing the image.

Timeline

8 entries since February 2024.

September 2026

  • View transformation analytics in Images

    You can now view account-level analytics for your Images transformation usage. Go to Images & Stream > Transformations > Analytics to view sampled estimates of image transformation request traffic, including: Requests by source, split between URL-based transformations and Images binding transformations Top zones, transformation configurations, and origin hosts for URL-based requests Top Worker sc…

  • New in Images: text rasterization and updates to the binding

    We've added more ways to manage and manipulate images with the Images binding. Here's what's new: Render text into an image. Output a string of text into its own image or draw it over another image. Use the .text() method to rasterize text with the Images binding. Style content using the font, size, and color options. The draw array in cf.image now accepts a text key. Manage hosted images without…

July 2026

  • Images binding is now billed per unique transformation

    The Images binding is now billed per unique transformation, matching the model already used for URL-based transformations. Repeat requests for the same combination of source image and parameters within the same calendar month are counted only once. Previously, every call to the binding counted as a separate transformation regardless of whether the image or parameters were unique. With this change…

June 2026

  • New optimization features in Images

    These updates introduce new features for optimizing and manipulating with Images: New composite option: Control how overlays are blended with the base image. Percentage widths: Set the dimensions of an overlay as a fraction of the dimensions of the base image. New fit modes: Use aspect-crop to always preserve the target aspect ratio or scale-up to always enlarge images. New upscale parameter: App…

  • Manage hosted images with the Images binding

    Use the Images binding to upload, list, retrieve, update, and delete images stored in Images directly from your Worker without managing API tokens or making HTTP requests. The env.IMAGES.hosted namespace supports the following storage and management operations: .upload(image, options) — Upload a new image to your account. .list(options) — List images with pagination. .image(imageId).details() — G…

May 2026

  • Transformation flows in Images

    Flows are automated rules that pair conditions (such as file extension, URL path, or query parameter) with parameters. Set up a flow to automatically apply image optimization to matching requests on your zone without writing code or changing URLs. There are two modes for transformation flows: Provider flows — Migrate from another image optimization service. Your existing URLs continue to work whi…

July 2025

  • HEIC support in Cloudflare Images

    You can use Images to ingest HEIC images and serve them in supported output formats like AVIF, WebP, JPEG, and PNG. When inputting a HEIC image, dimension and sizing limits may still apply. Refer to our documentation to see limits for uploading to Images or transforming a remote image.

February 2025

  • Bind the Images API to your Worker

    You can now interact with the Images API directly in your Worker. This allows more fine-grained control over transformation request flows and cache behavior. For example, you can resize, manipulate, and overlay images without requiring them to be accessible through a URL. The Images binding can be configured in the Cloudflare dashboard for your Worker or in the Wrangler configuration file in your…