This component no longer exists. It was in remotionui’s manifest when we first indexed it and is not there now — the registry served its inventory on 2026-08-11 and this item was not on it. The install command below will fail. It is kept here because a tutorial somewhere still tells people to run it.
ai-composer-showcase
remotionui/ai-composer-showcaseRemovedBlock
Showcase reel cutting through five AI composer interfaces with title and end cards
Live preview
live · rendered by the registry
Rendered by remotionui on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://remotionui.com/r/ai-composer-showcase.jsonSource
1import { loadFont } from "@remotion/google-fonts/Inter";2import {3 AbsoluteFill,4 Easing,5 Img,6 interpolate,7 spring,8 staticFile,9 useCurrentFrame,10 useVideoConfig,11} from "remotion";12import { TransitionSeries } from "@remotion/transitions";13import { transitionFade } from "@/remotion/primitives/transition-fade";14import { getSafeAreaPadding, scaleFont } from "@/remotion/lib/layout";15import { ChatGpt } from "@/remotion/scenes/chat-gpt";16import { ClaudeChat } from "@/remotion/scenes/claude-chat";17import { V0Composer } from "@/remotion/scenes/v0";18import { ClaudeCode } from "@/remotion/scenes/claude-code";19import { Opencode } from "@/remotion/scenes/opencode";2021const { fontFamily } = loadFont("normal", {22 weights: ["400", "500", "600", "700"],23 subsets: ["latin"],24});2526const BG = "#080810";27const PHOSPHOR = "#e8b86d";28const ENTER_EASE = Easing.bezier(0.16, 1, 0.3, 1);29const EXIT_EASE = Easing.in(Easing.cubic);3031const FADE = transitionFade({ durationInFrames: 12 });3233const TITLE_DUR = 50;34const SCENE_DUR = 100;35const END_DUR = 55;36const END_EXIT_DUR = 18;3738/* ─── shared pieces ─── */3940const Logo: React.FC<{ size: number }> = ({ size }) => (41 <Img src={staticFile("logo.svg")} style={{ width: size, height: size }} />42);4344const GlowDot: React.FC<{ delay: number; size: number }> = ({ delay, size }) => {45 const frame = useCurrentFrame();46 const { fps } = useVideoConfig();47 const progress = spring({ frame, fps, delay, config: { damping: 20 } });48 return (49 <div50 style={{51 width: size,52 height: size,53 borderRadius: "50%",54 background: PHOSPHOR,55 opacity: progress,56 boxShadow: `0 0 ${size * 2}px ${size * 0.5}px ${PHOSPHOR}55`,57 }}58 />59 );60};6162/* ─── title card ─── */6364const TitleCard: React.FC = () => {65 const frame = useCurrentFrame();66 const { fps, width } = useVideoConfig();6768 const logoProgress = spring({ frame, fps, delay: 4, config: { damping: 14 } });69 const titleProgress = spring({ frame, fps, delay: 10, config: { damping: 16 } });70 const subProgress = spring({ frame, fps, delay: 18, config: { damping: 18 } });71 const exitProgress = interpolate(frame, [TITLE_DUR - 14, TITLE_DUR], [1, 0], {72 extrapolateLeft: "clamp",73 extrapolateRight: "clamp",74 easing: EXIT_EASE,75 });7677 return (78 <AbsoluteFill79 style={{80 backgroundColor: BG,81 justifyContent: "center",82 alignItems: "center",83 backgroundImage:84// … truncated
