---
title: Cloudflare Images Changelog
image: https://edgetunnel-b2h.pages.dev/cf-twitter-card.png
---

> Documentation Index  
> Fetch the complete documentation index at: https://edgetunnel-b2h.pages.dev/changelog/llms.txt  
> Use this file to discover all available pages before exploring further. 

[Skip to content](#%5Ftop) 

# Changelog

New updates and improvements at Cloudflare.

[ Subscribe to RSS ](https://edgetunnel-b2h.pages.dev/changelog/rss/index.xml) [ View RSS feeds ](https://edgetunnel-b2h.pages.dev/fundamentals/new-features/available-rss-feeds/) 

Cloudflare Images

![hero image](https://edgetunnel-b2h.pages.dev/_astro/hero.CVYJHPAd_26AMqX.svg) 

Jul 01, 2026
1. ### [Images binding is now billed per unique transformation](https://edgetunnel-b2h.pages.dev/changelog/post/2026-07-01-binding-unique-transformations/)  
[ Cloudflare Images ](https://edgetunnel-b2h.pages.dev/images/)  
The [Images binding](https://edgetunnel-b2h.pages.dev/images/optimization/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, you can call the binding on hot paths without paying for each individual request.  
Calls to [.info()](https://edgetunnel-b2h.pages.dev/images/optimization/binding/#infostream) are no longer billed.  
For more information, refer to [Images pricing](https://edgetunnel-b2h.pages.dev/images/pricing/#images-transformed) and the [Images binding documentation](https://edgetunnel-b2h.pages.dev/images/optimization/binding/).

Jun 16, 2026
1. ### [New optimization features in Images](https://edgetunnel-b2h.pages.dev/changelog/post/2026-06-16-new-optimization-features/)  
[ Cloudflare Images ](https://edgetunnel-b2h.pages.dev/images/)  
These updates introduce new features for optimizing and manipulating with Images:

  * **New `composite` option:** Control how [overlays are blended](https://edgetunnel-b2h.pages.dev/images/optimization/draw-overlays/#composite) with the base image.
  * **Percentage widths:** Set the dimensions of an overlay as [a fraction of the dimensions](https://edgetunnel-b2h.pages.dev/images/optimization/draw-overlays/#width-and-height) of the base image.
  * **New `fit` modes:** Use [aspect-crop](https://edgetunnel-b2h.pages.dev/images/optimization/features/#aspect-crop) to always preserve the target aspect ratio or [scale-up](https://edgetunnel-b2h.pages.dev/images/optimization/features/#scale-up) to always enlarge images.
  * **New `upscale` parameter:** Apply [AI upscaling](https://edgetunnel-b2h.pages.dev/images/optimization/features/#upscale) to produce sharper, more detailed results when enlarging images.

Jun 10, 2026
1. ### [Manage hosted images with the Images binding](https://edgetunnel-b2h.pages.dev/changelog/post/2026-06-10-hosted-images-binding/)  
[ Cloudflare Images ](https://edgetunnel-b2h.pages.dev/images/)  
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)](https://edgetunnel-b2h.pages.dev/images/storage/binding/#uploadimage-options) — Upload a new image to your account.
  * [.list(options)](https://edgetunnel-b2h.pages.dev/images/storage/binding/#listoptions) — List images with pagination.
  * [.image(imageId).details()](https://edgetunnel-b2h.pages.dev/images/storage/binding/#imageimageiddetails) — Get image metadata.
  * [.image(imageId).bytes()](https://edgetunnel-b2h.pages.dev/images/storage/binding/#imageimageidbytes) — Stream the original image bytes.
  * [.image(imageId).update(options)](https://edgetunnel-b2h.pages.dev/images/storage/binding/#imageimageidupdateoptions) — Update metadata or access controls.
  * [.image(imageId).delete()](https://edgetunnel-b2h.pages.dev/images/storage/binding/#imageimageiddelete) — Delete an image.  
For example, you can upload an image from a request body and return its metadata:

**TypeScript**  
```ts  
const image = await env.IMAGES.hosted.upload(request.body, {  
  filename: "upload.jpg",  
  metadata: { source: "worker" },  
});  
return Response.json(image);  
```  
Or retrieve and serve the original bytes of a hosted image:

**TypeScript**  
```ts  
const bytes = await env.IMAGES.hosted.image("IMAGE_ID").bytes();  
return new Response(bytes);  
```  
For more information, refer to the [Images binding](https://edgetunnel-b2h.pages.dev/images/storage/binding/).

May 27, 2026
1. ### [Transformation flows in Images](https://edgetunnel-b2h.pages.dev/changelog/post/2026-05-27-transformation-flows/)  
[ Cloudflare Images ](https://edgetunnel-b2h.pages.dev/images/)  
![Custom flow configuration panel](https://edgetunnel-b2h.pages.dev/_astro/custom-flow.DeAGR8BY_iGLSK.webp)  
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](https://edgetunnel-b2h.pages.dev/images/optimization/transformations/flows/#set-up-a-provider-flow)** — Migrate from another image optimization service. Your existing URLs continue to work while Cloudflare rewrites provider-specific parameters to their Cloudflare equivalents. Currently, Cloudflare supports provider flows for Fastly Image Optimizer.
  * **[Custom flows](https://edgetunnel-b2h.pages.dev/images/optimization/transformations/flows/#set-up-a-custom-flow)** — Define your own conditions and actions for use cases like automatic format conversion, [responsive sizing](https://edgetunnel-b2h.pages.dev/images/optimization/make-responsive-images/#using-widthauto) with `width=auto`, or directory-based optimization.  
To get started, go to **Images** \> **Transformations** \> **Automation** in the [Cloudflare dashboard ↗](https://dash.cloudflare.com/?to=/:account/images/transformations).  
Learn more about [transformation flows](https://edgetunnel-b2h.pages.dev/images/optimization/transformations/flows/).

Jul 08, 2025
1. ### [HEIC support in Cloudflare Images](https://edgetunnel-b2h.pages.dev/changelog/post/heic-support/)  
[ Cloudflare Images ](https://edgetunnel-b2h.pages.dev/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](https://edgetunnel-b2h.pages.dev/images/storage/upload-images/methods/) or [transforming a remote image](https://edgetunnel-b2h.pages.dev/images/optimization/transformations/overview/).

Feb 24, 2025
1. ### [Bind the Images API to your Worker](https://edgetunnel-b2h.pages.dev/changelog/post/2025-02-21-images-bindings-in-workers/)  
[ Cloudflare Images ](https://edgetunnel-b2h.pages.dev/images/)  
You can now [interact with the Images API](https://edgetunnel-b2h.pages.dev/images/optimization/binding/) 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 project's directory:

  * [  wrangler.jsonc ](#tab-panel-3310)
  * [  wrangler.toml ](#tab-panel-3311)

**JSONC**  
```jsonc  
{  
  "images": {  
    "binding": "IMAGES", // i.e. available in your Worker on env.IMAGES  
  },  
}  
```

**TOML**  
```toml  
[images]  
binding = "IMAGES"  
```  
Within your Worker code, you can interact with this binding by using `env.IMAGES`.  
Here's how you can rotate, resize, and blur an image, then output the image as AVIF:

**TypeScript**  
```ts  
const info = await env.IMAGES.info(stream);  
// stream contains a valid image, and width/height is available on the info object  
const response = (  
  await env.IMAGES.input(stream)  
    .transform({ rotate: 90 })  
    .transform({ width: 128 })  
    .transform({ blur: 20 })  
    .output({ format: "image/avif" })  
).response();  
return response;  
```  
For more information, refer to [Images Bindings](https://edgetunnel-b2h.pages.dev/images/optimization/binding/).

```json
{"@context":"https://schema.org","@type":"BlogPosting","@id":"https://edgetunnel-b2h.pages.dev/changelog/product/images/#page","headline":"Cloudflare Images Changelog | Cloudflare Docs","url":"https://edgetunnel-b2h.pages.dev/changelog/product/images/","inLanguage":"en","image":"https://edgetunnel-b2h.pages.dev/cf-twitter-card.png","publisher":{"@type":"Organization","name":"Cloudflare","url":"https://www.cloudflare.com/"},"isPartOf":{"@type":"WebSite","@id":"https://edgetunnel-b2h.pages.dev/#website","name":"Cloudflare Docs","url":"https://edgetunnel-b2h.pages.dev/"}}
```
