Remotion logo

Remotion

A framework that allows you to create videos programmatically using React, CSS, and standard web technologies.

npm install remotion
24.8K128.0K/weekv4.0.379795.85 KBSEE LICENSE IN LICENSE.md79 issues
Last updated: 2025-11-28
Star history chart for remotion-dev/remotion

TL;DR

A robust framework for creating videos programmatically using React components. It treats video frames as a function of state, enabling you to render MP4s directly from React code.

Perfect for developers needing to automate video production, create data-driven content, or build parameterized video tools without touching traditional video editors.

Why Remotion?

Remotion fundamentally shifts video creation from a manual, timeline-based process to a code-driven, declarative workflow. By treating video frames as UI states, it unlocks capabilities that traditional tools like After Effects cannot match, specifically regarding automation and dynamic data.

  • Programmatic Video: Generate thousands of personalized videos (e.g., "Year in Review") by simply mapping over data and rendering components.
  • Web Tech Stack: Leverage your existing knowledge of CSS (Flexbox, Grid), SVG, and Canvas to design complex animations and layouts.
  • Live Preview: The "Remotion Player" provides a browser-based studio where you can scrub through your timeline, inspect frames, and debug instantly.
  • Server-Side Rendering: Render videos in the cloud using Remotion Lambda, allowing for massive concurrency and scale without local GPU bottlenecks.
  • React Ecosystem: Use libraries like Three.js (via React Three Fiber), Lottie, or even data visualization libraries like D3 directly inside your video.

Code Snippet

This example shows how to create a simple fading animation. Remotion drives the animation using the current frame number rather than time.

import { AbsoluteFill, useCurrentFrame, useVideoConfig } from 'remotion';

export const MyVideo = () => {
  const frame = useCurrentFrame();
  const { fps, durationInFrames } = useVideoConfig();

  // Calculate opacity based on the current frame
  // Fade in over 1 second (fps frames)
  const opacity = Math.min(1, frame / fps);

  return (
    <AbsoluteFill
      style={{
        justifyContent: 'center',
        alignItems: 'center',
        backgroundColor: 'white',
        fontSize: 80,
      }}
    >
      <div style={{ opacity }}>
        Hello, World!
      </div>
      <div style={{ fontSize: 40, marginTop: 20 }}>
        Frame: {frame} / {durationInFrames}
      </div>
    </AbsoluteFill>
  );
};

In this snippet, useCurrentFrame acts as the heartbeat of the video. As the video renders, this hook returns the incrementing frame number, driving the opacity calculation. AbsoluteFill is a helper component that ensures the content covers the video canvas.

Pros and Cons

No library is perfect; understanding the trade-offs is key to selecting the right tool.

Pros

  • Automation & Scale: The primary killer feature. You can generate infinite variations of a video template programmatically.
  • Developer Experience: Hot reloading, component reuse, and the ability to use standard CSS for layout make video design feel just like web design.
  • Data Driven: Ideal for visualizations, dashboards, or personalized content where the video content depends on an API response or database.

Cons

  • Learning Curve: Thinking in "frames" and avoiding side effects (randomness, network calls inside render) requires a shift in mental model compared to standard React apps.
  • Render Performance: Complex scenes with heavy CSS filters or massive SVG trees can render slowly compared to native tools like After Effects.
  • Browser Limitations: You are bound by what a browser can render. Some advanced video effects available in dedicated software are hard to replicate with CSS/Canvas.

Comparison with Other Animation Tools

The table below outlines the positioning differences between Remotion and other animation approaches:

LibraryDesign PhilosophyBest ForPain Points
RemotionCode-as-Video
Full video production pipeline using React.
Bulk Video Generation
Personalized marketing videos, automated social clips.
Not Real-Time
It is a renderer, not a real-time animation library for UI interactions.
Framer MotionInteraction-First
Declarative animations for UI elements.
App Interactions
Micro-interactions, page transitions, and UI polish.
No Video Output
Designed for the DOM, not for exporting MP4/WebM files.
GSAPImperative Power
High-performance, timeline-based animation script.
Complex Sequences
Award-winning websites with complex, chained animations.
Imperative API
Requires manual management of timeline instances, less "React-native".

Ecosystem & Extensions

Remotion has built a strong ecosystem around the core library to handle various production needs:

  • @remotion/player: Embed a Remotion video player directly in your React app, allowing users to preview and customize videos on the client side.
  • @remotion/lambda: A serverless rendering architecture that deploys your video code to AWS Lambda for massive parallel rendering.
  • @remotion/three: Helpers to integrate React Three Fiber scenes, synchronizing the Three.js clock with the Remotion timeline.
  • @remotion/lottie: First-class support for rendering Lottie animations, allowing you to control playback speed and direction via code.