← Blog

Remotion vs Framer Motion

Framer Motion, now called Motion, animates your app's UI in real time. Remotion renders React to a video file, frame by frame. They solve different problems, and Motion's animations do not render inside Remotion. Here is why, and how to use both.

Short answer: they do different jobs. Motion (formerly Framer Motion) animates your app's UI live in the browser. Remotion renders React components into a video file. Motion's animations run on real time, so they do not render correctly inside Remotion — in a video, every value has to come from the frame number.

Side by side

Motion (Framer Motion)Remotion
OutputAnimation in a live web pageMP4 and other video files
ClockReal time (Web Animations API, JS fallback)The frame number, useCurrentFrame()
Triggered byState, gestures, scroll, layout changesNothing — frame N is a pure function
Packagemotion, import from motion/reactremotion
LicenseMITRemotion license (free for individuals and small companies)
Use it forHover, enter/exit, layout, gesturesDemo videos, launch videos, social clips

Why Motion does not work inside a Remotion render

This looks fine in the Remotion Player:

import { motion } from "motion/react";

// Don't: runs on wall-clock time, not on the video's frame.
export const Title = () => (
  <motion.h1 initial={{ opacity: 0, y: 20 }} animate={{ opacity: 1, y: 0 }}>
    Ship faster
  </motion.h1>
);

Then you render, and it is wrong. A Remotion render does not play the video: it opens the page, jumps to a frame, takes a screenshot, and does that for every frame — across several browser tabs, in any order. Motion's animation starts when the element mounts and advances with real time, so each screenshot catches it at whatever moment the tab happened to be at. Remotion's docs call this out: animations not driven by useCurrentFrame(), such as CSS transitions, cause flickering in renders.

The Remotion version reads the frame instead:

import { interpolate, spring, useCurrentFrame, useVideoConfig } from "remotion";

export const Title = () => {
  const frame = useCurrentFrame();
  const { fps } = useVideoConfig();
  const enter = spring({ frame, fps, config: { damping: 200 } });

  return (
    <h1
      style={{
        opacity: enter,
        transform: `translateY(${interpolate(enter, [0, 1], [20, 0])}px)`,
      }}
    >
      Ship faster
    </h1>
  );
};

A spring with damping: 200 settles without overshoot, and frame 45 is always the same picture, on any machine.

When you want both

Most product sites use both, for different things:

  • Motion on the site. Hover states, menus, page transitions, scroll reveals — anything that responds to the person using it.
  • Remotion for the video. The launch video, the demo on the landing page, the clip for X. Embed it with @remotion/player or export an MP4.

If a design exists as a Motion animation and you want it in a video, port the values, not the code: the durations, the spring stiffness, the offsets. Then drive them from useCurrentFrame().

Skip the porting

snapcn's components are written from scratch on Remotion's frame clock, so they render exactly as they preview. Text animations, prompts, device frames:

npx shadcn@latest add @snapcn/text-build

See how to animate text in Remotion for the rules that keep scaled type from juddering in a render.

Next: Remotion vs Motion Canvas.

FAQ

What is the difference between Remotion and Framer Motion?

Framer Motion, now called Motion, is a React library for animating user interfaces in the browser as people use them. Remotion is a framework for rendering React components into video files such as MP4. One animates your app; the other makes videos.

Can I use Framer Motion inside Remotion?

Not for anything that has to render. Motion runs animations on real time through the Web Animations API or JavaScript, but a Remotion render captures frames out of order and in parallel. Remotion's docs warn that animations not driven by useCurrentFrame, such as CSS transitions, cause flickering in renders.

Is Framer Motion renamed?

Yes. Motion's docs describe Motion for React as previously Framer Motion. The package is motion and the React import path is motion/react.

Should I use Remotion or Motion for my landing page?

Both, for different jobs. Use Motion for interactive UI animation on the page, and Remotion to make the demo video, which you can embed with the Remotion Player or export as an MP4.