Infrastructure·Guide
Cloudflare Images explained
People say “Cloudflare Images” when they mean two different products. ArtInStack keeps masters in object storage and derives public sizes through Cloudflare Image Resizing (`format=auto` and width candidates). That path is billed around unique transformations, not a vault of stored Cloudflare Images originals. Figures below are directional as of July 2026; confirm on Cloudflare’s current pricing page.
What to check before you self-host transforms
Four facts the pricing page buries
Name the product
Resizing on your own origin (R2 or similar) meters unique transformations. Storing inside Cloudflare Images meters stored + delivered images. Same brand, different invoice.
Unique = every combo
Each distinct width, format, quality, and crop is its own transformation. Adding AVIF beside WebP, or one more breakpoint, multiplies the count.
Free-tier cliff
Free accounts historically get about 5,000 unique transformations per month. Over the line, cached ones may keep serving while new ones error instead of quietly billing.
Grids burn budget
A 1,500-image gallery with three responsive sizes is already ~4,500 uniques before new formats. Platforms that bake thumbs for grids avoid that tax.
Two products wearing one name
Cloudflare Image Resizing transforms files that already live outside the Images product (for example on an R2 custom domain) through URLs like `/cdn-cgi/image/width=1200,format=auto/...`. Billing attention goes to unique transformations and related delivery.
Cloudflare Images (the vault) stores originals inside Cloudflare’s Images product. There you care about images stored and images delivered. Once an original is in that vault, generating many size and format variants does not multiply the stored-image count the same way self-managed derivative folders would, and the product bundles transform with delivery.
Most photographer DIY guides blur these. ArtInStack’s path is the first one: masters in R2-style storage, on-demand resizing at the edge.
| Path | Where the master lives | What gets metered |
|---|---|---|
| Image Resizing on your origin | Your bucket / custom domain (e.g. R2) | Unique transformations (and delivery on that path) |
| Cloudflare Images vault | Inside Cloudflare Images | Images stored + images delivered |
The free-tier cliff, in gallery math
Independent write-ups and billing threads keep repeating the same surprise: free accounts are limited to roughly 5,000 unique transformations per month. After that, existing cached transformations can keep answering, but new combinations return errors instead of opening a gentle overage invoice.
Walk a modest launch: 1,500 gallery frames × three widths = 4,500 uniques before you add a fourth breakpoint or a second codec. Mid-launch is a bad time to discover the cliff. Treat the number as a planning tool, then re-check Cloudflare’s current free allowance because this product’s billing shape has moved before (including the 2023 merge of Images and Image Resizing pricing stories).
What counts as a unique transformation
A unique transformation is a distinct request signature: width, height, fit, format, quality, gravity, and similar options. `width=800,format=webp` and `width=800,format=avif` are two uniques. So are two crops of the same file.
That is why “just add AVIF” or “just add a retina width” is not free on the transformation meter. Cached repeats of the same signature do not keep burning new uniques the way first-seen combinations do.
What ArtInStack absorbs for you
ArtInStack stores the display master in object storage and serves lightbox and detail views from that master through Cloudflare Image Resizing with `format=auto` and responsive width candidates. That matches the surface-aware story in Resolution vs performance for portfolio images.
Portfolio grids prefer a generated thumbnail object when one exists, so a 40-image page does not open forty fresh transform signatures by default. That is the practical answer to the free-tier cliff: bake the cheap tile, transform the master when someone is actually looking closely.
Client galleries and private delivery use platform auth and signed media access, not Cloudflare Images private/signed delivery as the product feature. Do not DIY “private CF Images URLs” and assume it matches portal behavior.
If you wire resizing yourself, you own variant planning, cache behavior, the monthly unique budget, and the day Cloudflare changes the meter again. The platform’s job is to keep masters, thumbs, and edge transforms on one spine so you publish instead of counting transformation signatures.
Where each option actually fits
Use a platform path like ArtInStack when you want masters, thumbs, and edge formats without running the transformation budget as a second job.
Self-host R2 + Image Resizing when you are comfortable owning URLs, monitoring unique counts, and reading Cloudflare changelogs.
Use the Cloudflare Images vault when you want originals inside that product’s stored/delivered meter. That is a different architecture than ArtInStack’s R2 master model.
Transforms should be a platform detail
Keep the master. Bake the grid thumb. Let the edge pick modern formats when someone opens the frame.
Also in Guides: Resolution vs performance for portfolio images · Photography storage estimator · Video transcoding at scale
