/** * AdVideo — ad composition with optional background music. * * Formats: * AdFeed — 1080×1080 (Instagram/LinkedIn square) * AdReels — 1080×1920 (Reels/Shorts/Stories vertical) * * Slide count is dynamic (5-7 slides from Claude). Duration = slides.length × 90 frames. */ import React from 'react'; import { AbsoluteFill, Sequence } from 'remotion'; import { Slide } from './Slide'; import type { SlideData } from './Slide'; import { BackgroundMusic } from './BackgroundMusic'; import type { AudioConfig } from '../renderer'; export interface AdVideoProps { slides: SlideData[]; format: 'feed' | 'reels'; audio?: AudioConfig; } const FRAMES_PER_SLIDE = 90; // 3 seconds at 30fps export const AdVideo: React.FC = ({ slides, audio }) => { return ( {slides.map((slide, i) => ( ))} {audio && } ); };