Skip to content
Projects

midrender/revideo has 4,187 GitHub stars and 219 forks. GitHot measured +5 stars in 24 hours. Last checked 2026-11-07 16:29 UTC. Last push 2026-07-15.

How these counts are measured

Create Videos with Code

What you can do

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

Measured star growth

in 24h
+5
in 7 days
Collecting history
in 15 days
Collecting history
in 1 month
Collecting history

Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.

README.md

Original

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

Explore related projects