Docs

Preview, URLs, cache purge, and cost analysis

This page covers the delivery side of the product: previewing assets, generating URLs, purging cache paths, and reading cost or metrics views without inventing precision.

WindowsmacOSLinux
PreviewURLsCacheCost

How asset preview works, how public and signed delivery workflows work, how cache purge is enabled, and what the cost and metrics views are actually showing.

  • Inline preview eligibility
  • Public URL and signed URL behavior
  • Cloudflare cache purge requirements
  • Cost analysis and live metrics model
Applies to
WindowsmacOSLinux
Covers
PreviewURLsCacheCost

Preview, URLs, cache purge, and cost analysis

Inline preview support

The app supports inline preview for selected image and text formats.

Image preview candidates:

  • jpg
  • jpeg
  • png
  • webp
  • gif
  • svg
  • avif

Text preview candidates include:

  • plain text
  • json
  • md
  • html
  • css
  • js
  • ts
  • tsx
  • yml
  • yaml
  • xml

Preview eligibility also depends on the configured maximum preview file size. If the object is larger than the preview threshold, the app reports that preview is disabled for size, not that the object is broken.

Preview settings that matter

Preview behavior is controlled from Settings > Preview:

  • Enable image preview
  • Enable inline text preview
  • Max preview file size
  • Signed URL preview expiry

If inline preview is disabled in settings, the product reports that directly. It does not silently fall back to frontend-side credential use.

Signed URLs

Signed URLs are generated in the backend.

Important boundaries:

  • object-level signed URL generation is an R2 backend operation
  • preview signed URLs are also backend-generated
  • the frontend does not sign URLs itself

Supported signed URL verbs include:

  • GET
  • HEAD
  • PUT
  • DELETE

Signed URL expiry is clamped for safety:

  • preview URL generation uses a short-lived expiry window
  • object action signed URLs can use a longer expiry, but still within bounded limits

Use signed URLs when the object is private and you need time-limited access, upload, delete, or sharing behavior from the delivery workflow.

Public URLs

Public URL generation is mapping logic, not a permission grant.

Current mapping order:

  1. profile CDN domain, if configured
  2. profile public base URL, if configured
  3. raw R2 endpoint path

If no CDN or public base URL exists, the app can still return an endpoint-based URL. That does not mean the object is publicly readable. It only means the product can construct a URL shape.

Public URL copy flows belong in the same workflow as object selection, domain mapping, and purge.

Cache purge requirements

Cache purge is available only when the active profile includes:

  • Cloudflare Zone ID
  • Cloudflare API token with purge permission
  • a public URL mapping that resolves the selected object to the actual public URL

If any of those are missing, purge actions are unavailable by design.

The product supports:

  • purging selected object URLs
  • purging arbitrary URLs from the cache tools area
  • validating whether the active profile has enough purge configuration

Use purge only when the selected URL maps to the real public asset path. If the object cannot be mapped to a public URL, the product blocks purge instead of guessing.

Preview and delivery workflow

A reliable delivery workflow usually looks like this:

  1. Upload or sync the asset.
  2. Confirm metadata and cache-control in object details.
  3. Preview the asset if the file type is supported.
  4. Copy the public URL or generate a signed URL.
  5. Purge the public URL if you are replacing cached content.

That keeps storage, delivery, and cache operations attached to the same object context.

Cost analysis is an estimate layer

The cost view is not pretending to be authoritative Cloudflare billing data.

Current purpose:

  • show bucket footprint
  • show prefix footprint
  • highlight largest prefixes
  • highlight largest objects
  • estimate monthly storage cost from your configured storage price

Use it for operational visibility and prioritization, not for invoice reconciliation.

Live R2 metrics

The metrics view uses Cloudflare GraphQL to surface live R2 telemetry in the desktop workflow.

Use it for:

  • current operational visibility
  • verifying whether a bucket or prefix is active
  • pairing transfer or delivery work with real metrics context

Treat this as live operator telemetry, not as a billing export or long-term analytics warehouse.

Cost settings that matter

In Settings > Cost Analysis, the current operator-facing controls are:

  • currency
  • storage price per GB per month

Those values shape how the estimate is rendered. If your pricing assumptions are wrong, the estimate will also be wrong.

Common mistakes

"Public URL" does not work in the browser

Check:

  • whether the object is actually served publicly
  • whether the CDN domain or public base URL is correct
  • whether the copied URL shape matches the public delivery path

Preview is unavailable for a supported file type

Check:

  • preview file size threshold
  • preview settings toggles
  • object content type and extension

Purge is unavailable

Check:

  • Zone ID
  • API token
  • token scope
  • URL mapping for the selected object

Cost numbers look low or high

Check:

  • storage price setting
  • whether you are reading bucket vs prefix scope
  • whether you expected invoice-grade billing instead of a storage estimate

Metrics do not appear

Check:

  • whether the active profile has the required Cloudflare access for metrics
  • whether the GraphQL path is available for the account
  • whether you are treating a live metrics view like a historical billing report