One API for generation, transcription, dubbing, and upscaling. Keyframe runs the GPUs, manages the queue, and retries the failures — your product just calls /v1/jobs.
curl https://api.keyframe.dev/v1/jobs \ -H "Authorization: Bearer $KEYFRAME_KEY" \ -d model="keyframe-gen-2" \ -d input.prompt="drone shot, foggy pine forest, dawn" \ -d output.captions=true \ -d output.dub="es,ja"
Powering video pipelines at
The pipeline
Footage moves through four stages on the way in. Use all of them, or call any stage directly from your own pipeline.
Upload a file, paste a URL, or stream raw frames straight into the API.
Keyframe transcribes audio, detects scenes, and tags objects automatically.
Generate, dub, upscale, or re-cut the footage with any model in the catalog.
Get a signed URL, a webhook event, or a live stream of finished frames.
The platform
Swap models without rewriting your integration. Every endpoint shares the same job, webhook, and billing format.
Generate clips from a text or image prompt on the latest video diffusion models.
Word-accurate transcripts and burned-in captions across more than fifty languages.
Translate and re-voice a video while keeping the original performance's timing.
Recover detail in old or low-resolution footage, up to native 4K.
Automatically cut footage into scenes, shots, and navigable chapters.
Get notified the moment a job changes state, or stream frames as they render.
Built for engineers
Idempotency keys, typed SDKs, and webhooks that retry themselves. The dashboard is there when you want it — most teams never open it.
curl https://api.keyframe.dev/v1/jobs \ -H "Authorization: Bearer $KEYFRAME_KEY" \ -d model="keyframe-gen-2" \ -d input.prompt="city street, rain, neon signs"
from keyframe import Client client = Client(api_key="...") job = client.jobs.create( model="keyframe-gen-2", input={"prompt": "city street, rain, neon signs"}, output={"resolution": "1080p", "captions": True}, )
import Keyframe from "keyframe"; const kf = new Keyframe(process.env.KEYFRAME_KEY); const job = await kf.jobs.create({ model: "keyframe-gen-2", input: { prompt: "city street, rain, neon signs" }, });
{
"event": "job.rendered",
"job_id": "jb_8f2ac1",
"duration_ms": 412300,
"output": { "url": "https://cdn.keyframe.dev/jb_8f2ac1.mp4" }
}Performance
Pricing
No infrastructure to provision. Every plan includes the full model catalog.
For testing pipelines and side projects.
For products shipping video features to real users.
For platforms with sustained, large-scale render volume.
Get started
Bring your own footage or prompt — Keyframe handles the GPUs, the queue, and the retries.
No credit card for the first 1,000 minutes processed.