Frame extraction API
Every frame has an address.
Register a video or PDF once. After that, any frame is a URL — pick a timecode, pick a width, get a JPEG. Derivatives are cached, so the second request costs you nothing.
Pick a frame to see its delivery URL
GET https://framepine.com/v1/f/k3d9xq2m/t4s-w640.jpg GET https://framepine.com/v1/f/k3d9xq2m/t8.25s-w640.jpg GET https://framepine.com/v1/f/k3d9xq2m/t12.5s-w640.jpg GET https://framepine.com/v1/f/k3d9xq2m/t19.75s-w640.jpg GET https://framepine.com/v1/f/k3d9xq2m/t26s-w640.jpg
How it works
Three calls, and you are done.
-
Register the source
Post the URL of a video or PDF. Framepine reads the container, indexes keyframes and returns an asset id.
-
Take the delivery token
Each asset gets an unguessable token. Delivery URLs carry it, so your API key never leaves your servers.
-
Request any frame
Ask for a timecode and a width. First request renders and caches it; every later request is served straight from cache.
Register a source
One POST to get started.
curl -X POST https://framepine.com/v1/assets \
-H "Authorization: Bearer fp_live_9c2ad41f7b6e" \
-H "Content-Type: application/json" \
-d '{"source":"https://cdn.example.com/reel.mp4"}'
# 201 Created
{
"id": "as_7f31c0",
"status": "ready",
"duration": 34.2,
"token": "k3d9xq2m",
"delivery": "https://framepine.com/v1/f/k3d9xq2m/"
}
Sources up to 2 GB. MP4, MOV, WebM, MKV and PDF. Full parameter list in the API reference.
Why teams use it
Built for the boring part.
Nobody wants to run FFmpeg in a request handler, keep a render queue alive, or explain to the team why the thumbnail service fell over during a launch. Framepine does one job: it turns a timecode into an image, and it keeps that image around so you only pay for the first render.
Delivery runs on plain HTTP caching — ETag, Cache-Control,
conditional requests. Your CDN, your browser and your mobile client all already know
how to talk to it.