snapcn
23 components
DocsComponentsTemplatesVideo EditorShowcaseMarketplaceRoadmapChangelog

Getting started

IntroductionInstallationAgent skill
GitHub

Star snapcn

Free, open-source components.

Production-ready Remotion animations, transitions and backgrounds — you own the code.

Star on GitHubXFollow

MIT licensed · own your code.

© 2026 snapcn

DocsComponentsTemplatesVideo EditorShowcaseMarketplaceRoadmapChangelog
Getting startedIntroductionInstallationAgent skill

Moodboard Reveal

A kinetic headline, a scattered photo gallery, a camera push from dark to light, landing on a hero image

Installation

pnpm
$ pnpm dlx shadcn@latest add @snapcn/moodboard-reveal

Component code

The exact file shadcn add copies into your project.

Usage

A four-beat, camera-drives-through montage:

  1. Headline — <leadIn> · an inline image that swaps · <emphasis> · <tailIn>, on a near-black dotted field.
  2. Gallery — the image cards fly in and scatter into a moodboard.
  3. Push — the camera dollies through the gallery (with motion blur) while the background lifts from near-black to off-white.
  4. Hero — it lands on a single image, held to the end, with thin wireframe markers drifting.

Pass your own images (used for both the intro swap and the gallery) and a heroImage. Everything is frame-driven, so scrubbing and rendering are deterministic.

// src/Root.tsx
import { Composition, staticFile } from "remotion";
import { MoodboardReveal } from "@/components/snap-cn/moodboard-reveal";

const Reel = () => (
  <MoodboardReveal
    leadIn="that lets you"
    emphasis="filter"
    tailIn="out AI."
    images={[
      staticFile("showcase-assets/438b9e6b50654a44d404fbf358c26e9f.webp"),
      staticFile("showcase-assets/821d815affa6496c39cbdeeec7a84603.jpg"),
      // …up to 8 look best
    ]}
  />
);

export const RemotionRoot = () => (
  <Composition
    id="MoodboardReveal"
    component={Reel}
    durationInFrames={150}
    fps={30}
    width={1280}
    height={720}
  />
);

Images take a root-relative /… path (served by Next in the Player, rewritten through staticFile() in a render) or an http(s)/data URL. Eight portrait images fill the gallery cleanly; fewer are tiled across the slots.

This is a slow camera scale over the whole gallery, which a live <Player> mispaces on a high-refresh display — so the docs preview plays the rendered mp4. Re-render after any change: pnpm run render:previews --only moodboard-reveal.

Props

PropTypeDefaultDescription
leadIn
string"that lets you"Text before the inline swapping image
emphasis
string"filter"The bold word right after the inline image
tailIn
string"out AI."Text after the emphasised word
images
string[]—Image URLs for the intro swap and the gallery. Defaults to the showcase assets
heroImage
string—The image the montage lands on. Defaults to images[3]
darkColor
stringdark theme backgroundNear-black starting background
lightColor
stringlight theme backgroundOff-white ending background
speed
number1Global playback multiplier applied to the whole sequence
className
string—Optional className passed to the outer wrapper
theme
Partial<SnapCnTheme>—Design-system token overrides. Anything you leave out falls back to the shadcn defaults
mode
"light" | "dark"—Which end of the design system to resolve tokens against