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.

222 built-in operations 5 one-line recipes 0 servers you run 100% TypeScript

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.
01

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.

1

Describe

Write TypeScript that says what to do: read this file, blur the faces, add subtitles, save an MP4.

2

Submit

Your code turns that into a plain job description. Send it to the Everyframe platform.

3

Receive

The engine runs the actual processing and gives you back the finished file.

02

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.

$ npm install @jtdigital/renderbox-sdk View on npm →

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' });
03

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.

scale crop lut3d upscale stabilize

Audio

Normalize loudness to broadcast levels, remove silence and noise, compress and limit, add fades, and turn sound into waveform visuals.

loudnorm denoise silence removal limiter

Transitions & effects

Crossfades and wipes between clips, lower-third titles, green-screen keying, picture-in-picture, split screens and Ken Burns slideshows.

xfade drawtext chromakey overlay

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.

detect transcribe depth segment OCR

AI, applied

Analysis feeds straight back into the picture: blur detected faces, auto-reframe around the subject, annotate tracks, render heatmaps.

redact dynamicCrop annotate

Inputs & outputs

Read from files, live camera and RTSP/HLS streams, or screen capture. Write MP4/MOV/WebM, subtitles, or structured detection data.

files rtsp hls mp4 srt
04

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.

16:9 1920×1080

TikTok · Reels · Shorts

9:16 vertical, auto-reframed so the subject never leaves the crop.

9:16 1080×1920 reframed

Instagram, square

1:1, cropped around the action and scaled to spec.

1:1 1080×1080
05

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.

Explore rendering & effects →
06

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'"
07

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.

View on npm →

Let's get you set up

The SDK is free to build with. Running jobs happens on the Everyframe platform: email us and we'll get you access, quotas and onboarding.

info@everyframe.eu