editframe-api/SKILL.md
JavaScript/TypeScript SDK for Editframe's video rendering API. Create renders, upload video and image files, manage assets, and sign URLs for playback.
npx skillsauth add editframe/skills editframe-apiInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
JavaScript/TypeScript client for Editframe's video rendering API. Render videos from HTML compositions, upload and process media files, and manage authenticated access to CDN resources.
import { Client, createRender, getRenderProgress, downloadRender } from "@editframe/api";
// Initialize client with API key
const client = new Client(process.env.EDITFRAME_API_KEY);
// Create a render from HTML composition
const render = await createRender(client, {
html: `<ef-timegroup mode="contain" class="w-[1920px] h-[1080px]">
<ef-video src="https://assets.editframe.com/bars-n-tone.mp4"></ef-video>
</ef-timegroup>`,
width: 1920,
height: 1080,
fps: 30,
});
// Poll for completion
for await (const event of await getRenderProgress(client, render.id)) {
console.log(`Progress: ${event.progress}%`);
}
// Download the result
const response = await downloadRender(client, render.id);
const buffer = await response.arrayBuffer();
createRender(client, payload) → CreateRenderResult — Create a render job from HTML compositionuploadRender(client, renderId, fileStream) → Promise<void> — Upload pre-rendered video filegetRenderProgress(client, id) → CompletionIterator — Stream render progress via SSEgetRenderInfo(client, id) → LookupRenderByMd5Result — Get render metadatalookupRenderByMd5(client, md5) → LookupRenderByMd5Result | null — Find existing render by hashdownloadRender(client, id) → Response — Download completed rendercreateFile(client, payload) → CreateFileResult — Register a file (video, image, or caption)uploadFile(client, uploadDetails, fileStream) → IteratorWithPromise<UploadChunkEvent> — Upload file content with progressgetFileDetail(client, id) → FileDetail — Get file metadata and trackslookupFileByMd5(client, md5) → LookupFileByMd5Result | null — Find existing file by hashdeleteFile(client, id) → { success: boolean } — Delete a filegetFileProcessingProgress(client, id) → ProgressIterator — Stream processing progress for video filestranscribeFile(client, id, options?) → TranscribeFileResult — Start audio transcriptiongetFileTranscription(client, id) → FileTranscriptionResult | null — Get transcription statusupload(client, filePath) → { file, uploadIterator } — Upload a file from disk (auto-detects type)createURLToken(client, url) → string — Generate signed JWT for browser access to media endpointsAll file types (video, image, caption) use a single set of endpoints:
| Endpoint | Method | Purpose | |----------|--------|---------| | /api/v1/files | POST | Create file record | | /api/v1/files/:id | GET | Get file detail | | /api/v1/files/:id/upload | GET/POST | Check upload status or upload chunk | | /api/v1/files/:id/delete | POST | Delete file | | /api/v1/files/:id/index | GET | Get fragment index (video only) | | /api/v1/files/:id/tracks/:trackId | GET | Get track data (video only) | | /api/v1/files/:id/transcribe | POST | Start transcription (video only) | | /api/v1/files/:id/transcription | GET | Get transcription status | | /api/v1/files/:id/progress | GET | Stream processing progress (SSE) | | /api/v1/files/md5/:md5 | GET | Lookup file by MD5 hash |
The file type field determines processing behavior:
"video" — uploaded files are automatically processed to ISOBMFF format"image" — uploaded files are immediately ready"caption" — uploaded files are immediately readyOptional expires_at on createFile (ISO 8601, max 30 days ahead) schedules automatic removal; omit for permanent retention. File webhooks and getFileDetail include expires_at (null when permanent).
Reference uploaded files using the file-id attribute:
<ef-configuration api-host="https://editframe.com">
<ef-timegroup mode="contain" class="w-[1920px] h-[1080px]">
<ef-video file-id="uuid-of-processed-video"></ef-video>
<ef-image file-id="uuid-of-uploaded-image" class="w-24 h-24"></ef-image>
</ef-timegroup>
</ef-configuration>
The file-id is a stable UUID assigned at file creation time and remains the same throughout upload, processing, and playback.
If your application renders Editframe compositions in a browser, you need URL signing. The browser needs authenticated access to transcode endpoints, but cannot hold your API key.
URL signing creates short-lived, scoped tokens that authorize the browser to access specific media URLs. Set up a server route that calls createURLToken, then configure <ef-configuration signingURL="/your-route"> in your frontend.
See references/url-signing.md for implementation details and integration with elements-composition and react-composition.
development
Webhook notifications for render completion and file processing events. Configure endpoints, verify HMAC signatures, and handle real-time status payloads.
tools
Vite integration for Editframe development with local video transcoding, asset serving, file API endpoints, and visual regression testing.
development
Build video editing interfaces with Editframe's GUI components. Assemble timeline, scrubber, filmstrip, preview, playback controls, and transform handles.
tools
Scaffold new Editframe video projects from templates. Generates project structure, installs dependencies, and sets up composition tooling to start immediately.