CueFrame API
Video editing and rendering API.
Create and edit videos from your code. Add motion graphics, captions, and titles, then render in the cloud. Start with the Yosemite example below.
Set up your API connection
Create an API key, then add it to your server environment.
export CUEFRAME_API_KEY="YOUR_API_KEY"Requests use Authorization: Bearer YOUR_API_KEY.
$20 free cloud creditsNo card required. Paid operations use credits; top up when you need more.
Your application controls the edit.
Build personalized videos, branded variations, or a repeatable production workflow.
Keep every layer editable
Change text, media, timing, and styling without rebuilding the project.
Render in the cloud
Submit a job, follow its progress, and download the finished MP4.
Use the same project everywhere
Let an agent make a change or open the composition in the desktop editor for a human pass.
Use the TypeScript SDK or REST.
The TypeScript SDK provides a typed client for the public API. The SDK and CLI toolkit require Node.js 24 or newer. The standalone REST example below runs on Node.js 22 or newer.
Install the SDK
npm install @cueframe/sdkFind client setup, authentication and error handling in the SDK documentation.
Inspect the public contract
Use the published @cueframe/api-contract package for OpenAPI and composition schemas.
Choose another entry point
Connect your agent with MCP, run the CLI, or browse developer resources.
Your first render · API
Render Yosemite. Then change one word.
Make the PHENOMENAL version first. Replace the title with EXTRAORDINARY and render again.
Download the full original NPS video as yosemite-peregrines.mp4. The template selects 83.616–93.359 seconds and includes the prepared subject matte.
Cloud steps upload your source and use credits. Both renders and other paid processing are billed separately. See rates.
Download the JavaScript example
The script uploads your source, creates the Yosemite project, and downloads both renders using the REST API. Requires Node.js 22 or newer.
Download yosemite-api.mjsRun it with your source video
Use the API key configured above. Put the script and original video in the same folder.
node yosemite-api.mjs ./yosemite-peregrines.mp4Open your two renders
The script waits for each job and saves
phenomenal.mp4andextraordinary.mp4. It prints the media, project, and render IDs as it runs.
For an existing Yosemite project, set CUEFRAME_PROJECT_ID and run this as edit.mjs to start an updated render.
const projectId = process.env.CUEFRAME_PROJECT_ID;
const base = "https://api.cueframe.ai/v1/projects/" + projectId;
const headers = {
Authorization: "Bearer " + process.env.CUEFRAME_API_KEY,
"Content-Type": "application/json",
};
async function request(path, options = {}) {
const response = await fetch(base + path, { headers, ...options });
if (!response.ok) throw new Error(await response.text());
return response;
}
// 1. Read your Yosemite project.
const response = await request("/composition");
const composition = await response.json();
const title = composition.tracks
.flatMap(track => track.contents)
.find(clip => clip.id === "peregrines-phenomenal-title");
if (!title) throw new Error("Yosemite title not found");
// 2. Change one word and save the edit.
title.source.params.text = "EXTRAORDINARY";
const etag = response.headers.get("ETag");
if (!etag) throw new Error("Missing composition ETag");
await request("/composition", {
method: "PUT",
headers: { ...headers, "If-Match": etag },
body: JSON.stringify(composition),
});
// 3. Start the new render.
const render = await request("/renders", {
method: "POST", body: "{}",
});
console.log(await render.json());Build your next workflow.
Swap text, reuse a treatment, or create a new composition. Cloud operations are billed by usage.