{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "product-launch-trailer",
"title": "Product Launch Trailer",
"description": "Cinematic Product Hunt teaser: pulsing logo, zoom-through transition, 3D bento fly-over, and a confetti version drop.",
"dependencies": [
"remotion"
],
"files": [
{
"path": "registry/remocn/product-launch-trailer/index.tsx",
"content": "\"use client\";\n\nimport {\n AbsoluteFill,\n Easing,\n interpolate,\n random,\n Sequence,\n spring,\n useCurrentFrame,\n useVideoConfig,\n} from \"remotion\";\n\nexport interface ProductLaunchTrailerProps {\n logoLabel?: string;\n productName?: string;\n versionLabel?: string;\n accentPeach?: string;\n accentLavender?: string;\n accentMint?: string;\n background?: string;\n speed?: number;\n className?: string;\n}\n\nconst FONT_FAMILY =\n \"var(--font-geist-sans), -apple-system, BlinkMacSystemFont, sans-serif\";\nconst MONO_FAMILY =\n \"var(--font-geist-mono), ui-monospace, SFMono-Regular, Menlo, monospace\";\n\n// Soft \"Tactile\" easing — used for every camera move and reveal.\nconst SOFT = Easing.bezier(0.16, 1, 0.3, 1);\n\n// Sequence anchors (frames). All later math is derived from these so the\n// trailer is easy to retime in one place.\nconst T = {\n pulseStart: 0,\n pulseEnd: 50,\n zoomStart: 38,\n zoomEnd: 78,\n shellStart: 70,\n flyStart: 110,\n flyEnd: 200,\n outroStart: 190,\n outroEnd: 240,\n};\n\nexport function ProductLaunchTrailer({\n logoLabel = \"R\",\n productName = \"Remocn\",\n versionLabel = \"v1.0 is live\",\n accentPeach = \"#FFB38E\",\n accentLavender = \"#D4B3FF\",\n accentMint = \"#A1EEBD\",\n background = \"#141318\",\n speed = 1,\n className,\n}: ProductLaunchTrailerProps) {\n return (\n