Everyframe · creative toolkit

The editing suite, as code.

The non-ML half of the SDK: 150+ typed operations for transitions, titles, grading, compositing, motion and audio finishing. The full FFmpeg toolbox without the FFmpeg strings, rendered on the Everyframe platform.

150+ non-ML operations transitions · titles · grading · compositing · audio

cut.ts

import { graph } from '@jtdigital/renderbox-sdk';

const g = graph();
const [intro] = g.open('clips/intro.mp4');
const [main]  = g.open('clips/main.mp4');

const joined = intro.xfade(main, {
  transition: 'circleopen',
  duration: 1.0,
  offset: 4.5,
});

g.writeVideo('renders/cut.mp4', joined);
01

Cut like an editor, ship like an engineer

Two clips in, one timeline out. Transitions are ops on streams: pick a style, set a duration and offset, and the compiler wires the rest.

Crossfades

xfade blends two clips through dozens of transition styles: dissolves, wipes, slides, circle and clock reveals, pixelize, zoom.

dissolve wipeleft circleopen slideup pixelize

Audio follows

acrossfade transitions the soundtrack in step with the picture; afade and fade handle in/out ramps on either stream.

acrossfade afade fade

Cuts & joins

trim and the snip recipe cut frame-accurately with timestamps reset; concat joins segments; tpad and loop stretch them.

trim snip concat tpad loop
02

Lower thirds, captions, boards

drawtext renders styled text with full expression positioning: centered, tracked to time, boxed. drawbox and drawgrid add graphics; subtitles burns SRT/ASS files.

titles.ts

import { graph } from '@jtdigital/renderbox-sdk';

const g = graph();
const [v, a] = g.open('clips/talk.mp4');

const titled = v
  .drawtext({
    text: 'Dr. Jane Kovac', x: 80, y: 'h-160',
    fontsize: 44, fontcolor: 'white', boxcolor: 'black@0.45',
  })
  .drawtext({
    text: 'Lead Researcher', x: 80, y: 'h-104',
    fontsize: 28, fontcolor: 'white@0.85',
  });

g.write('renders/titled.mp4', titled, a);
drawtext drawbox drawgrid subtitles
03

Grade with LUTs, curves and scopes

Load a .cube LUT, stack tone curves with photo-style presets, balance shadows and highlights, warm or cool by temperature, then check the result with waveform, vectorscope and histogram monitors.

grade.ts

import { graph } from '@jtdigital/renderbox-sdk';

const g = graph();
const graded = g.openVideo('clips/raw.mov')
  .lut3d({ file: 'kodak-2383.cube' })
  .eq({ contrast: 1.05, saturation: 1.15 })
  .vignette();

g.writeVideo('renders/graded.mp4', graded);
lut3d lut1d curves eq colorbalance colortemperature hue selectivecolor vignette waveform vectorscope histogram
04

Layer, key and stack streams

Every compositor is a typed combine op: watermarks, picture-in-picture, green-screen, split screens. Positions take FFmpeg expressions, so layouts stay resolution-independent.

brand.ts

import { graph } from '@jtdigital/renderbox-sdk';

const g = graph();
const [main, audio] = g.open('clips/main.mp4');
const logo = g.movie({ filename: 'logo.png' });

const branded = main.overlay(logo, {
  x: 'W-w-40', y: 40, alpha: 0.9,
});

g.write('renders/branded.mp4', branded, audio);

Layers

overlay positions any stream over another with expressions and opacity; blend mixes per-component; maskedmerge composites through a mask.

overlay blend maskedmerge scale2ref

Keying

Green-screen with chromakey, flat-color keying with colorkey, static-background removal with backgroundkey, selective desaturation with colorhold.

chromakey colorkey backgroundkey colorhold alphaextract

Grids & walls

hstack, vstack and free-form xstack tile any number of streams into split screens and video walls.

hstack vstack xstack
05

Ken Burns, slow motion, stabilization

zoompan animates stills, minterpolate synthesizes slow motion, vidstab stabilizes handheld footage in two passes, and the makeSlideshow recipe turns a folder of photos into a finished video with 12 motion presets, crossfades and a music bed.

slideshow.ts

import { makeSlideshow } from '@jtdigital/renderbox-sdk';

const g = makeSlideshow('renders/slideshow.mp4', {
  slides: [
    { path: 'photos/shoe-1.jpg', duration: 3, kenBurns: 'gentleZoomIn' },
    { path: 'photos/shoe-2.jpg', duration: 3, kenBurns: 'gentlePan' },
    { path: 'photos/shoe-3.jpg', duration: 3, kenBurns: 'zoomOut' },
  ],
  resolution: [1920, 1080],
  fps: 30,
  transition: { type: 'dissolve', duration: 1.0 },
  music: { path: 'audio/track.mp3', volume: 0.8, fadeIn: 1.5, fadeOut: 1.5 },
});
zoompan minterpolate reverse framestep deshake vidstabdetect vidstabtransform rotate transpose v360
06

Finish the sound, not just the picture

Broadcast loudness targets, limiting, compression, de-essing, silence removal and creative effects, plus visualizers that turn audio into video for waveform overlays.

polish.ts

import { graph } from '@jtdigital/renderbox-sdk';

const g = graph();
const [v, a] = g.open('clips/podcast.mp4');

const polished = a
  .silenceremove({ stop_periods: -1, stop_duration: 0.6 })
  .loudnorm({ I: -14 })
  .alimiter({ limit: 0.95 });

g.write('renders/polished.mp4', v, polished);
acompressor deesser dynaudnorm speechnorm aecho chorus flanger rubberband showwaves showspectrum

Every op typed. Every graph validated.

Browse the full reference, then describe your first cut. The SDK is free and open on npm.