--- paths: - "remotion_service/**" --- # Remotion Service Rules ## Animations - ONLY use Remotion interpolate()/spring() for all animations - NEVER use CSS transitions, CSS animations, or Framer Motion - All timing must be frame-based, not time-based ## Compositions - Deterministic frame rendering: no Date.now(), no Math.random(), no network calls during render - All data must be passed via inputProps from the server - useCurrentFrame() and useVideoConfig() for all timing calculations ## Server - ElysiaJS, single POST /api/render endpoint - Flow: receive S3 path + transcription -> Remotion CLI render -> upload to S3 -> return path - Health check: GET /health ## Captions - All caption presets live in src/components/captions/ - Caption data format: Word[] with start/end timestamps from transcription module ## Video Inspection - Use ffprobe (installed) to validate input video codec/resolution/fps before render - Use ffprobe to verify output after render - Use ffmpeg to extract single frames for visual caption verification - Use mediainfo for detailed container metadata