<img src> or <video src> and the CDN resizes, re-encodes, smart-crops, trims, and quality-tunes media at request time — every visitor gets the right size and format for their viewport and browser, served from a global edge cache.
In practice, you can choose either origin sources or Convertly Storage. If your images already live behind a public HTTPS URL, such as a deployed app’s public folder, a bucket, a CDN, or a web folder, point Convertly at that public origin and optimize those URLs in place. Convertly does not read local project folders or sync repo files. If you want Convertly to host and manage files directly, upload or import them into Convertly Storage.
CDN URLs transform at request time from Convertly Storage file IDs or configured origin sources — no pre-generated variant files required.
Storage or origin sources
The public Image CDN supports two source modes:- Convertly Storage:
/{deliveryKey}/{fileId}where{fileId}is a stored file UUID. - Source URLs / Origin Sources:
/{deliveryKey}/o/{originSlug}/{path...}where{originSlug}is a configured HTTPS origin such as your deployed website, an S3/R2/GCS/Azure public bucket endpoint, a custom CDN domain, or a web folder.
https://example.com/hero.jpg is public, create an origin source with slug site and base URL https://example.com. Convertly then fetches that deployed URL, transforms it, and caches the result through /{deliveryKey}/o/site/hero.jpg?w=1200&format=auto.
Origin sources support two access modes:
- Public HTTPS — a publicly readable bucket endpoint, CDN hostname, or web folder. Convertly stores the origin URL and optional path prefix only.
- Private bucket — S3, R2, GCS, or Azure credentials encrypted at rest. Convertly fetches objects with read credentials; the bucket does not need a public URL.
localhost, RFC1918, etc.). Private origins use signed object APIs instead of public HTTP.
Choose your starting point
Use it from your framework
Install
@convertly-sh/image and drop a one-prop <ConvertlyImage> into React, Next.js, Vue, Astro, Solid, or Svelte. Or use the framework-agnostic URL builder anywhere.URL transforms reference
Every URL parameter: width, height, quality (including
q=auto), fit, gravity (smart crop), format (including format=auto), video poster frames, text overlay, save-data quality.Advanced URL features
Named transformation presets (
?preset=hero) and HMAC-signed URLs for gated content.URL structure
Hostname, delivery alias, UUID vs slug, folders, and origin paths.
Delivery keys, purging, security
Create and revoke delivery keys, purge cached URLs through Cloudflare, replace files, response codes, security model.
Pricing and quotas
Per-plan monthly delivery allowances, what counts as a delivery, what doesn’t.
How it works
Three components:- Delivery key — a publishable
cvly_pub_…token or optional alias (marketing). Safe to embed in client markup. - Source — either a Convertly Storage file id (UUID), an optional CDN slug, or an origin-source slug + path.
- The CDN URL —
https://cdn.convertly.sh/{deliveryKey}/{fileId}?w=…orhttps://cdn.convertly.sh/{deliveryKey}/o/{originSlug}/{path}?w=…. Convertly transforms the source on the first request, caches the result globally, and serves repeats in milliseconds.
format=auto— modern browsers get AVIF or WebP, older browsers get JPEG.gravity=auto— entropy-based smart cropping picks the salient subject (works well on portraits and product photography).q=auto— content-aware quality (lower for photos, higher for graphics).loading="lazy"anddecoding="async"on the<img>(when using the SDK).
srcset for free — see Framework SDKs.
Quick example (Next.js)
site as an origin source for your deployed app’s public HTTPS URL, then existing public assets like /hero.jpg can route through Convertly in production. In Next.js, the loader can keep <Image src="/hero.jpg" width={1200} /> unchanged while it rewrites the rendered image URL to the configured origin-backed CDN URL. During local development, use passthrough behavior because Convertly’s public CDN cannot fetch localhost. For full CDN verification before launch, point the origin at a public preview deployment or HTTPS tunnel. UUID-looking src values still route to Convertly Storage, so managed storage remains an option rather than a required upload step.
Other frameworks: React, Vue, Astro, Solid, Svelte, plain HTML.
Pricing and quotas
The image CDN is included with every Convertly plan. Pricing is per CDN delivery — a request that reaches Convertly’s origin. Repeat hits served by an upstream CDN do not count against your meter. With the long-lived immutable cache headers the route sets, a typical site sees a 90–99% cache hit ratio.| Plan | Included deliveries / month | Overage |
|---|---|---|
| Free | 5,000 | Hard cap — upgrade to continue. |
| Starter ($9/mo) | 50,000 | Hard cap. |
| Pro ($19/mo) | 500,000 | $0.50 per 10,000 deliveries. |
| Business ($149/mo) | 5,000,000 | $0.40 per 10,000 deliveries. |
| Plan | Deliveries / mo | Approx. image views / mo at 95% cache ratio |
|---|---|---|
| Free | 5,000 | ~100,000 image views |
| Starter | 50,000 | ~1 million image views |
| Pro | 500,000 | ~10 million image views |
| Business | 5,000,000 | ~100 million image views |
Response codes
| Status | When |
|---|---|
200 | Success. Body is the transformed image or video with the matching Content-Type. Video poster URLs and format=mp4/webm/gif transforms also return 200. |
302 | Non-image file (PDF, video, audio) with no transform params — redirects to a signed download. |
400 | Missing deliveryKey or fileId, or malformed URL. |
403 | Signed URL signature failed verification. |
404 | Unknown delivery key, or the file does not belong to that key’s workspace. |
429 | Monthly delivery cap reached on a hard-capped plan (Free / Starter). Response carries Cache-Control: no-store. |
500 | Image transform failed (corrupt source, unsupported format). |
502 | Could not fetch the source image from storage. |