import {Composition} from 'remotion'; import {Sequence} from 'remotion'; import {fade} from '@remotion/transitions/fade'; import {slide} from '@remotion/transitions/slide'; import {TransitionSeries} from '@remotion/transitions'; import {ScreenSlide} from './ScreenSlide'; import screensManifest from '../screens.json'; // Calculate total duration in frames const calculateDuration = () => { const totalSeconds = screensManifest.screens.reduce( (sum, screen) => sum + screen.duration, 0 ); return totalSeconds * screensManifest.videoConfig.fps; }; export const WalkthroughComposition: React.FC = () => { const {fps, width, height} = screensManifest.videoConfig; return ( {screensManifest.screens.map((screen, index) => { const durationInFrames = screen.duration * fps; // Select transition based on screen config const transition = screen.transitionType === 'slide' ? slide() : screen.transitionType === 'zoom' ? fade() // Can customize with zoom effect : fade(); return ( {index < screensManifest.screens.length - 1 && ( )} ); })} ); }; // Register composition export const RemotionRoot: React.FC = () => { const {fps, width, height} = screensManifest.videoConfig; const durationInFrames = calculateDuration(); return ( <> ); };