Serverless-native media API

ffmpeg for serverless, as an API.

Watermark, trim, extract audio, and generate thumbnails with a single API call. No 250MB bundle limit, no child_process, no timeout wall — the heavy encoding never touches your function at all.

curl -X POST https://api.fotovid.co/v1/video/watermark \
  -H "Authorization: Bearer p6_YOUR_KEY_ID:YOUR_SECRET" \
  -H "Content-Type: application/json" \
  -d '{
    "source_url": "https://cdn.yoursite.com/clip.mp4",
    "params": {
      "type": "image",
      "watermark_image_url": "https://cdn.yoursite.com/logo.png",
      "position": "bottom-right",
      "opacity": 0.7,
      "scale": 0.2
    }
  }'

Drop it into any serverless runtime

Next.jsVercelNetlifyRemixNuxtSvelteKitAstroCloudflare WorkersAWS Lambda
Why you can't just npm install ffmpeg

Serverless was never built to process media

The 250MB bundle limit

Bundling ffmpeg and its codecs blows past the serverless function size limit before you've written a line of logic.

No child_process

Serverless runtimes don't give you a shell. You can't spawn ffmpeg, and the WASM builds are slow and memory-hungry.

The timeout wall

Even if it ran, encoding a video blows past the function timeout. Fotovid runs the heavy work off-platform and hands you back a URL.

Built for real product work

What people build with Fotovid

Watermark user uploads

Stamp your brand or a per-user tag on every video and image your users upload — inline in the request that handles the upload.

Auto-generate social clips

Trim long recordings into shareable segments and pull a thumbnail for the preview card, all from your API route.

Extract audio for transcription

Strip the audio track off uploaded video and hand the MP3 to your transcription or AI pipeline.

Thumbnails for a video feed

Generate cover frames on demand so your gallery and feed load fast without shipping ffmpeg.

Designed for the way you deploy

Serverless-native from the first request

Sync + webhook

Small jobs return the finished file synchronously in the same request. Long jobs run async and call your webhook when they're done — no polling required.

Runs from any runtime

No ffmpeg binary in your bundle and no cold-start layer. The same HTTPS call works from Vercel, Cloudflare Workers, Lambda, or Deno.

Hosted results, no temp files

Every job returns a presigned URL to the finished file — stream it, store it, or pull the bytes. Nothing to write to your function's read-only disk.

Simple, usage-based pricing

Pay for what you process

Start free — no card required. Then buy credits and spend them per operation. $1 = 100 credits, flat — no subscriptions, no seat fees.

$10
1,000 credits
$50
5,000 credits
$100
10,000 credits

Häufig gestellte Fragen

Ship media processing this afternoon

Grab a free API key and make your first watermark call in under five minutes.