Skip to content

midrender/revideo

Repository files navigation


Revideo

npm version MIT license discord


Revideo

Revideo is a rendering engine for creating videos in code. You describe a scene in TypeScript — shapes, text, media, and animation — and Revideo renders it to a video file. It ships a headless render API for generating videos programmatically and a React player for previewing scenes in the browser.

A scene is plain TypeScript, so Claude or Codex can produce one from a prompt.

Revideo borrows concepts from Remotion and Rive, but is, in its core, zero dep.

It's the engine behind Midrender.


Getting Started

Create a project:

npm init @revideo@latest

A scene is a generator function. The example below adds a <RubiksCube/> component and animates a scramble:

import {makeScene2D} from '@revideo/2d';
import {createRef, waitFor} from '@revideo/core';

import {RubiksCube} from './rubiks-cube';

export default makeScene2D('scramble', function* (view) {
  view.fill('#0d0d12');

  const cube = createRef<RubiksCube>();
  view.add(<RubiksCube ref={cube} size={620} />);

  yield* waitFor(0.5);
  yield* cube().scramble(18); // 18 animated quarter-turns
});

The cube is a single self-contained component (rubiks-cube.tsx): 54 stickers in 3D, orthographically projected in a custom draw(), with each quarter-turn animated by interpolating a rotation about the turning layer's axis.

A Rubik's cube scrambling itself

Render it from the command line with renderVideo().


Capabilities

  • Headless rendering — render a project to a file with renderVideo(), or expose a rendering endpoint from your project with the CLI. It runs anywhere Node and a headless browser run, including serverless platforms like Google Cloud Run (example).
  • Parallelized rendering — split a render across workers to cut wall-clock time (details).
  • Browser preview — the React <Player/> renders scenes in the browser and accepts dynamic inputs, so the same project drives both preview and final render.
  • Media and audio<Video/> and <Audio/> components with audio export and frame-accurate synchronization.

See the documentation for the full API.


Telemetry

Revideo anonymously counts how many videos are rendered, via PostHog. The implementation is in packages/telemetry. Disable it with an environment variable:

DISABLE_TELEMETRY=true

License

MIT — see LICENSE.

Links

Documentation · Midrender · Discord

About

Create Videos with Code

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages