Loading source
Pulling the file list, source metadata, and syntax-aware rendering for this listing.
Source from repo
Generate walkthrough videos from Stitch design screens using Remotion with smooth transitions, zoom effects, and text overlays.
Files
Skill
Size
Entrypoint
Format
Open file
Syntax-highlighted preview of this file as included in the skill package.
examples/WalkthroughComposition.tsx
1import {Composition} from 'remotion';2import {Sequence} from 'remotion';3import {fade} from '@remotion/transitions/fade';4import {slide} from '@remotion/transitions/slide';5import {TransitionSeries} from '@remotion/transitions';6import {ScreenSlide} from './ScreenSlide';7import screensManifest from '../screens.json';89// Calculate total duration in frames10const calculateDuration = () => {11const totalSeconds = screensManifest.screens.reduce(12(sum, screen) => sum + screen.duration,13014);15return totalSeconds * screensManifest.videoConfig.fps;16};1718export const WalkthroughComposition: React.FC = () => {19const {fps, width, height} = screensManifest.videoConfig;2021return (22<TransitionSeries>23{screensManifest.screens.map((screen, index) => {24const durationInFrames = screen.duration * fps;2526// Select transition based on screen config27const transition =28screen.transitionType === 'slide'29? slide()30: screen.transitionType === 'zoom'31? fade() // Can customize with zoom effect32: fade();3334return (35<TransitionSeries.Sequence36key={screen.id}37durationInFrames={durationInFrames}38>39<ScreenSlide40imageSrc={screen.imagePath}41title={screen.title}42description={screen.description}43width={screen.width}44height={screen.height}45/>46{index < screensManifest.screens.length - 1 && (47<TransitionSeries.Transition48presentation={transition}49timing={{50durationInFrames: 20, // 20 frames for transition51}}52/>53)}54</TransitionSeries.Sequence>55);56})}57</TransitionSeries>58);59};6061// Register composition62export const RemotionRoot: React.FC = () => {63const {fps, width, height} = screensManifest.videoConfig;64const durationInFrames = calculateDuration();6566return (67<>68<Composition69id="WalkthroughComposition"70component={WalkthroughComposition}71durationInFrames={durationInFrames}72fps={fps}73width={width}74height={height}75/>76</>77);78};79