ProdKit vs Vercel Image Optimization for Supabase images

Updated . Prices checked against the sources below.

If your Next.js app runs on Vercel, next/image can optimize Supabase Storage images once the bucket is in remotePatterns. It's inexpensive per transformation, but it bills on cache misses rather than images, and it only covers apps deployed on Vercel.

Which one fits

Choose Vercel Image Optimization if

  • Your Next.js app is on Vercel Pro and images only appear on the web.
  • You can set a long minimumCacheTTL. In the best case, 4,000 images at 3 sizes in 2 formats cost about $1.97 a month in transformations and cache writes.

Choose ProdKit if

  • You also show images in a mobile app, or on a site not hosted on Vercel.
  • You need crops that follow faces, blur, or background removal.
  • You want a bill that depends on images, not cache expiry. With the default one-hour TTL, a popular image is transformed again each hour it's viewed.
  • Your app is commercial but on Vercel Hobby, which is for non-commercial use.

What it costs each month

An app serving each image at 3 sizes, as AVIF and WebP, averaging 60 KB per optimized image.

Origin images a monthVercel Image OptimizationProdKit
1,000$0.49$0 (Free)
4,000$1.97$9 (Starter)
15,000$7.38$29 (Pro)
100,000$49.20$241.50 (Pro)

Vercel Image Optimization: Best case on Pro at the lowest regional rates: each size and format transformed once and cached all month. Excludes cache reads, Fast Data Transfer, and Edge Requests. ProdKit: the cheapest plan that covers the volume, including overage.

Side by side

FeatureProdKitVercel Image Optimization
Where it worksAny app: web, React Native, Swift, plain HTMLApps deployed on Vercel, through the framework's Image component
Billing unitOrigin images per monthA transformation per cache miss or stale revalidation, plus cache reads and writes
FormatsAVIF or WebP; formats never count extraEach Accept variant is cached and billed separately
Cache lifetimeRechecked against your bucket daily, so a replaced file shows within a dayThe source's max-age or minimumCacheTTL (default 1 hour), whichever is larger, up to 31 days
Crops and effectsFace and focal-point crops, blur, sharpen, background removal (beta)Width and quality
Free tier1,000 images a month, commercial use allowedHobby: 5,000 transformations, non-commercial use only
DeliveryIncludedBilled as Fast Data Transfer and Edge Requests

Why cache lifetime matters on Vercel

Vercel bills a transformation on every cache miss and every stale revalidation. For remote images, the cache lifetime is the source's max-age or minimumCacheTTL, whichever is larger. Supabase Storage's default cache lifetime is one hour, so without a longer minimumCacheTTL a frequently viewed image is transformed again every hour.

Raising minimumCacheTTL keeps costs down, with a trade-off: replacing a file at the same path shows the old image until the cache expires or you purge it.

next.config.ts

// next.config.ts
const nextConfig = {
  images: {
    remotePatterns: [new URL("https://xyz.supabase.co/storage/v1/object/public/**")],
    minimumCacheTTL: 2678400, // 31 days
  },
}

export default nextConfig

Using ProdKit with next/image

ProdKit works as a next/image loader, so you keep the Image component and its lazy loading and srcset. Images are then served from Cloudflare instead of your Vercel project, wherever the app is deployed.

Custom loader

// prodkit-loader.ts
export default function prodkitLoader({ src, width, quality }: { src: string; width: number; quality?: number }) {
  const url = new URL(`https://img.prodkit.cloud/acme/${src.replace(/^\//, "")}`)
  url.searchParams.set("width", String(width))
  if (quality) url.searchParams.set("quality", String(quality))
  return url.toString()
}

// next.config.ts: images: { loader: "custom", loaderFile: "./prodkit-loader.ts" }

Questions

Does ProdKit replace Vercel?

No. It only handles images. Your app stays wherever it's deployed.

What does Vercel count as a transformation?

Every cache miss and every stale revalidation. The cache key includes the source URL, width, quality, and the browser's Accept header, so AVIF and WebP versions are separate entries.

Can I use ProdKit on Vercel?

Yes. Use a custom next/image loader that points at your ProdKit endpoint. Next.js stops calling Vercel's optimizer for those images.

Try it on your bucket

The free plan covers 1,000 origin images a month and never bills. Connect a public bucket and replace one URL.

Sources

Checked on September 28, 2026. Prices change, so confirm against the source before deciding.