# remotion > Remotion video rendering with motion design tokens. Use when creating programmatic videos, implementing motion token animations in Remotion, or building video templates. References Remotion documentation and M3 token integration. - Author: Edison - Repository: soilmass/motion-design-agent - Version: 20260124075058 - Stars: 1 - Forks: 0 - Last Updated: 2026-02-06 - Source: https://github.com/soilmass/motion-design-agent - Web: https://mule.run/skillshub/@@soilmass/motion-design-agent~remotion:20260124075058 --- --- name: remotion description: Remotion video rendering with motion design tokens. Use when creating programmatic videos, implementing motion token animations in Remotion, or building video templates. References Remotion documentation and M3 token integration. --- # Remotion Integration React-based video rendering with motion design tokens. ## Standards Reference | Standard | Documentation | |----------|---------------| | Remotion | remotion.dev/docs | | M3 Tokens | Integrated via tokens/ | ## Core Concepts ### Frame-Based Animation Remotion uses frames, not milliseconds. ```javascript // Convert ms to frames const msToFrames = (ms, fps = 30) => Math.round((ms / 1000) * fps); // medium-1 (250ms) at 30fps = 8 frames const frames = msToFrames(250, 30); ``` ### Token Integration ```javascript import tokens from '../tokens/motion.tokens.json'; const getDuration = (tokenName, fps = 30) => { const ms = parseInt(tokens.motion.duration[tokenName].$value); return msToFrames(ms, fps); }; const getEasing = (tokenName) => { const [x1, y1, x2, y2] = tokens.motion.easing[tokenName].$value; return Easing.bezier(x1, y1, x2, y2); }; ``` ## Interpolation ### Basic Usage ```javascript import { interpolate, useCurrentFrame, Easing } from 'remotion'; const MyComponent = () => { const frame = useCurrentFrame(); const opacity = interpolate( frame, [0, 8], // 8 frames = 250ms at 30fps [0, 1], { easing: Easing.bezier(0.05, 0.7, 0.1, 1) } ); return
; }; ``` ### With Tokens ```javascript import { interpolate, useCurrentFrame, Easing } from 'remotion'; import tokens from '../tokens/motion.tokens.json'; const MyComponent = () => { const frame = useCurrentFrame(); const fps = 30; const durationFrames = msToFrames( parseInt(tokens.motion.duration['medium-1'].$value), fps ); const [x1, y1, x2, y2] = tokens.motion.easing['emphasized-decelerate'].$value; const opacity = interpolate( frame, [0, durationFrames], [0, 1], { easing: Easing.bezier(x1, y1, x2, y2) } ); return ; }; ``` ## Spring Animation ```javascript import { spring, useCurrentFrame, useVideoConfig } from 'remotion'; import tokens from '../tokens/spring.tokens.json'; const MyComponent = () => { const frame = useCurrentFrame(); const { fps } = useVideoConfig(); const springConfig = tokens.motion.spring.enter.$value; const scale = spring({ frame, fps, config: { damping: springConfig.damping, stiffness: springConfig.stiffness, mass: springConfig.mass } }); return ; }; ``` ## Composition Structure ```jsx import { Composition } from 'remotion'; export const RemotionRoot = () => { return ( <>