Loading...
Loading...
Senior Specialist in Remotion v4.0+, React 19, and Next.js 16. Expert in programmatic video generation, sub-frame animation precision, and AI-driven video workflows for 2026.
npx skill4agent add yuniorglez/gemini-elite-core remotion-expertuseCurrentFrameinterpolatebun create video@latest my-video
cd my-video
bun startimport { AbsoluteFill, interpolate, useCurrentFrame, useVideoConfig } from 'remotion';
export const MyVideo = () => {
const frame = useCurrentFrame();
const { fps, durationInFrames } = useVideoConfig();
// Animate from 0 to 1 over the first second
const opacity = interpolate(frame, [0, fps], [0, 1], {
extrapolateRight: 'clamp',
});
return (
<AbsoluteFill style={{
backgroundColor: 'white',
justifyContent: 'center',
alignItems: 'center'
}}>
<h1 style={{ opacity, fontSize: 100 }}>Remotion 2026</h1>
</AbsoluteFill>
);
};@keyframestransitioninterpolate()spring()frameMath.random()Date.now()defaultPropsstaticFile()const frame = useCurrentFrame();
const scale = interpolate(frame, [0, 20], [0, 1], { easing: Easing.bezier(0.25, 0.1, 0.25, 1) });<Composition
id="Main"
component={MyComponent}
durationInFrames={300}
fps={60}
width={1920}
height={1080}
defaultProps={{ title: 'Hello' }}
/>// Pattern: Instruction-driven prop updates
export const aiUpdateHandler = async (instruction: string, currentProps: Props) => {
// Logic to map LLM output to Remotion props
return updatedProps;
};export const calculateMetadata = async ({ props }) => {
const response = await fetch(`https://api.v2.com/video-data/${props.id}`);
const data = await response.json();
return {
durationInFrames: data.duration * 60,
props: { ...props, content: data.content }
};
};setTimeoutsetIntervalnpmbun<Sequence>useStateframeuseMemowindow.requestAnimationFrame2 * fps