Loading...
Loading...
Build Remotion videos with snapcn — a shadcn registry of copy-paste animation components and timeline-driven UI primitives. Use when composing video scenes, adding text animations, transitions, backgrounds, UI blocks, brand/social cards, or full compositions in a Remotion project. Triggers include "snapcn", "video component", "add animation", "text reveal", "scene transition", "product demo video", "remotion component", "terminal simulator", "glass code block", and the UI-primitive tier: "video dialog", "video button", "command menu", "video select", "video tooltip". Even if the user doesn't mention snapcn, activate when they need polished video primitives for Remotion.
npx skill4agent add snapcndev/snapcn snapcnshadcncomponents/snap-cn/npx create-video@latest# Add any component (namespaced shadcn registry)
shadcn add @snap-cn/blur-out-up
# Component lands at components/snap-cn/blur-out-up.tsx@snap-cn/<name>registrieshttps://snapcn.dev/r/<name>.jsonregistryDependenciesshadcnshadcn add @snap-cn/claude-chat@snap-cn/snap-cn-ui@snap-cn/caret@snap-cn/snap-cn-uisnapcnspeedfontSizecolorfontWeightsnap-cn-uistatestylevariantthemespeed@snap-cn/snap-cn-uireferences/components/references/components/index.mdUse forAvoid forreferences/components/<name>.md| Category | Tier | Use for |
|---|---|---|
| Text Animations | | Reveal/replace/emphasize text ( |
| Backgrounds & Effects | | Animated foundations, one-shot effects ( |
| Shaders | | WebGL shader backdrops, frame-driven for deterministic renders ( |
| Transitions & Wipes | | Swap between two scenes ( |
| UI Blocks | | Interface sims for product demos ( |
| AI & Social Cards | | Brand/product card scenes ( |
| UI Primitives | | shadcn-style primitives for video ( |
snapcnPropsBlurOutUpPropsspeed?: number1frame * speedfontSizecolorfontWeightfromtoReactNodetransitionDurationclassName?: stringsnap-cn-uispeedstate"open""closed"stylevariantsizetheme?: Partial<SnapCnTheme>import { interpolate, spring, useCurrentFrame, useVideoConfig } from "remotion";
const opacity = interpolate(frame, [0, 30], [0, 1], { extrapolateRight: "clamp" });
const scale = spring({ fps, frame, config: { damping: 12, mass: 1, stiffness: 100 } });
// Deterministic randomness (NEVER Math.random())
import { random } from "@remotion/random";
const jitter = random(`seed-${frame}`);import { Sequence, Series } from "remotion";
<Sequence from={30} durationInFrames={60}>
<TextReveal text="Ship it in React" />
</Sequence>
<Series>
<Series.Sequence durationInFrames={60}><SceneA /></Series.Sequence>
<Series.Sequence durationInFrames={60}><SceneB /></Series.Sequence>
</Series>1280×720 @ 30fpsLengthcomponents/index.mdNatural lengthvibetechpremiumdatacleanplayfulsocialreferences/design.mdletter-spacingtext-transform: uppercaseLaunchLAUNCHblur > ~24pxtracking-inmesh-gradient-bgreferences/design.mdreferences/motion-principles.mdfromtoReactNodetranslateYoverflow: hiddenMath.floor(frame / 15) % 2 === 0public/staticFile('cursor.svg')avatarUrl=""coverUrl=""Math.random()setIntervaltransformtopleftremotion-best-practicesreferences/anatomy.mdreferences/anatomy.mdreferences/archetypes/index.md<TransitionSeries>references/components/index.mdvibe<Sequence durationInFrames>mesh-gradient-bgreferences/anatomy.mdreferences/anatomy.mdreferences/archetypes/index.mdreferences/components/index.mdUse forAvoid forreferences/components/<name>.mdreferences/design.mdreferences/motion-principles.mdreferences/anti-patterns.md