Everyframe · TypeScript SDK
Describe video pipelines. We render them.
A TypeScript library for describing video and audio work: cuts, effects, transitions, subtitles and AI (face detection, object tracking, background removal). Your code builds a job description; the Everyframe engine runs it and hands back the finished file. No FFmpeg, no GPUs, no servers to manage.
redact.ts
import { graph } from '@jtdigital/renderbox-sdk';
// Read a clip, find every face, blur them, write the result.
const g = graph();
const [video, audio] = g.open('uploads/crowd.mp4');
const faces = video.detect({ model: 'retinaface_mv2' });
g.write('renders/redacted.mp4', video.redact(faces, { mode: 'blur', radius: 25 }), audio);
// g.json() is the job description. Submit it and the engine runs it.You describe the work. The engine does it
The SDK never opens a video file on your machine. You write TypeScript that describes a pipeline: read this input, blur the faces, encode the output. That description becomes a plain job object. You submit it, the Everyframe engine does the actual rendering and returns the result.
Describe
Write TypeScript that says what to do: read this file, blur the faces, add subtitles, save an MP4.
Submit
Your code turns that into a plain job description. Send it to the Everyframe platform.
Receive
The engine runs the actual processing and gives you back the finished file.
A pipeline is a few lines of code
Free and open on npm. Read an input, apply operations, write an output. Operations are methods you chain on a typed stream; common jobs ship as one-line recipes.
recipe.ts
import { faceRedact } from '@jtdigital/renderbox-sdk';
// The same job, as a one-line recipe.
const g = faceRedact('uploads/crowd.mp4', 'renders/redacted.mp4', { redactMode: 'blur' });222 operations, one typed API
Everything from a simple resize to green-screen compositing to AI analysis is a method you compose into a pipeline. Here's the shape of what's available.
Video
Resize, crop and trim; color grade with LUTs and curves; stabilize shaky footage; upscale, denoise and colorize with AI models.
Audio
Normalize loudness to broadcast levels, remove silence and noise, compress and limit, add fades, and turn sound into waveform visuals.
Transitions & effects
Crossfades and wipes between clips, lower-third titles, green-screen keying, picture-in-picture, split screens and Ken Burns slideshows.
AI analysis
Detect faces and objects, estimate depth and pose, read on-screen text, transcribe speech, then act on the results in the same pipeline.
AI, applied
Analysis feeds straight back into the picture: blur detected faces, auto-reframe around the subject, annotate tracks, render heatmaps.
Inputs & outputs
Read from files, live camera and RTSP/HLS streams, or screen capture. Write MP4/MOV/WebM, subtitles, or structured detection data.
One source, every platform
Shoot once, publish everywhere. From a single decode, export landscape for YouTube, vertical for TikTok and Reels, and square for Instagram. dynamicCrop tracks the subject, so reframing to 9:16 never cuts them out of the shot.
export.ts
import { graph } from '@jtdigital/renderbox-sdk';
const g = graph();
const [v, a] = g.open('uploads/source.mp4');
// Detect the subject once; the vertical crops keep it in frame.
const subject = v.detect({ model: 'retinaface_mv2' });
// One decode, three platform-ready exports:
g.write('renders/youtube.mp4', v.scale({ w: 1920, h: 1080 }), a);
g.write('renders/tiktok.mp4',
v.dynamicCrop(subject, { target_aspect_w: 9, target_aspect_h: 16 })
.scale({ w: 1080, h: 1920 }), a);
g.write('renders/instagram.mp4',
v.dynamicCrop(subject, { target_aspect_w: 1, target_aspect_h: 1 })
.scale({ w: 1080, h: 1080 }), a);YouTube, landscape
16:9 at 1080p. A straight resize keeps the full frame.
TikTok · Reels · Shorts
9:16 vertical, auto-reframed so the subject never leaves the crop.
Instagram, square
1:1, cropped around the action and scaled to spec.
A full editing suite, not just AI
Transitions, titles, color grading, compositing, Ken Burns and audio finishing all live in the same SDK. The non-ML half has its own walkthrough.
Mistakes show up as you type
The SDK knows a blur belongs on video and a volume change belongs on audio. Wire the wrong things together and your editor flags it immediately, long before you submit a job. Fewer failed renders, faster iteration.
types.ts
import { graph } from '@jtdigital/renderbox-sdk';
const [picture, sound] = graph().open('uploads/input.mp4');
sound.volume({ volume: 0.8 }); // turning down the audio: fine
picture.volume({ volume: 0.8 }); // your editor stops you here:
// "Property 'volume' does not exist on type 'VideoStream'"Common jobs, ready to go
Start from a recipe and adjust a few options, or drop down to individual operations when you need full control.
faceRedact
Find faces and blur, pixelate or black them out: privacy redaction in one call.
depthBlurPipeline
Estimate depth and blur the background: portrait mode for video.
makeSlideshow
Turn a folder of photos into a video with Ken Burns motion, crossfades and music.
letterbox
Fit any clip into a target frame with the right aspect ratio and padding.
snip
Cut a clip out of a longer video, frame-accurate.
Ready to run pipelines?
Build with the SDK for free. When you're ready to render, jobs run on the Everyframe platform: get in touch and we'll set you up.