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

Announce Title

A four-shot announcement title — the eyebrow rushes past the camera on a receding type plane, the name assembles on paper, and a macro pan cuts wide as the tagline builds itself last word first

Installation

pnpm
$ pnpm dlx shadcn@latest add @snapcn/announce-title

Component code

The exact file shadcn add copies into your project.

Usage

Three strings and it is a launch film. Everything else has a measured default.

// src/Root.tsx
import { Composition } from "remotion";
import { AnnounceTitle } from "@/components/snap-cn/announce-title";

const Launch = () => (
  <AnnounceTitle
    eyebrow="Introducing"
    title="snapcn 1.0"
    tagline="Ready-made scenes for Remotion, in one command."
  />
);

export const RemotionRoot = () => (
  <Composition
    id="AnnounceTitle"
    component={Launch}
    durationInFrames={170}
    fps={30}
    width={1280}
    height={720}
  />
);

Four shots, three cuts

Nothing here crossfades, and nothing is continuous across a cut.

The rush (frames 0–17). The eyebrow is laid on a plane raked away from the viewer and thrown past the camera. It starts 53× its resting size with the plane's horizon inside the frame — one letter fills the screen — and lands at 4× as the horizon leaves and the plane flattens to face-on. Magnification and rake are both frame-by-frame tables rather than curves, because the move slows to a near-hold around frame 12 and then speeds up again into the cut, which no single easing does.

The field (18–40). The same word, flat, finishing the move: 1.530× down to rest, its excess shrinking 24% per frame. Then it is torn off to the left, displacement tripling every frame, staggered about a fifth of a frame per letter — by frame 38 the first letter has travelled 56px and the last one five.

The paper (41–79). Each word of the name slides in from the right into a slot that is already laid out. They never push each other around, they all close at the same 0.82 per frame, and the lead word travels 1.63× as far as the rest. Each pops in at partial opacity rather than fading up from nothing.

The macro pan and the close (80–169). A macro shot of the middle of the tagline pans left — decelerating from 52px/frame to 9 at the hold, then accelerating out to 105 — with the symbol crossing the other way at the same speed. It cuts wide, and the line builds itself last word first while a white sweep crosses it left to right and drains the colour out of it.

Making it yours

The symbol

The mark that leads the closing line is a path in a 0 0 100 100 box — it ships as the snapcn mark, and any other drops straight in: your logo, a bullet, a glyph you traced.

<AnnounceTitle
  symbolPath="M50 5 L61 39 L96 39 L68 60 L79 95 L50 74 L21 95 L32 60 L4 39 L39 39 Z"
  symbolColors={["#3072db", "#7c3aed"]}
  symbolScale={1.2}
/>

symbolColors are gradient stops spaced evenly from the mark's first tip to the last — two give a plain ramp, one a flat fill, and leaving it out keeps the ten measured stops of the default spark. The customizer's text field takes the same thing comma-separated. symbolPath="" removes the mark entirely.

Colour

A title sequence is burned-in film type, not app chrome, so its palette is the design rather than the design system — every ground and ink is a prop:

<AnnounceTitle
  fieldColor="#3072db"
  titleColor="#1b3fb8"
  nightColor="#05070f"
  glowColor="#3072db"
  glowStrength={0.12}
  taglineColor="#f7fbff"
/>

Length

Type sizes are measured to the pixel, and a size fixed to one sentence clips the moment you write a longer one. So each line is drawn once into a hidden probe, its real width read off it, and its size scaled down only if it would overrun its share of the frame — a line that already fits renders at exactly the measured size. A character count cannot do this: the default tagline is one character longer than the one everything was measured against and 14% wider, because Ready-made and Remotion, carry wider glyphs than Perfect and massive.

Measured

Every number below came off rendered frames, not taste.

measured
cutsframes 18, 41, 80, 110
opening magnification53× → 4×, rake 81° → 14°
eyebrow settle1.530×, decaying 0.7605 per frame
eyebrow exit×3.2 per frame, leftward, 0.215 frames per letter
title words0.82 per frame; lead word travels 1.63× the others
macro pan52 → 9 → 105 px/frame
closing slide0.792 per frame
word revealone word every 2.833 frames, right to left
white sweep31.7 px/frame, left to right, 0.21 W soft edge

The settles are all the same curve — a first-order exponential lag, not a cubic-bezier — normalised over a fixed window so it lands instead of spending its last five frames moving less than half a pixel.

Props

PropTypeDefaultDescription
eyebrow
string"Introducing"The word that rushes past the camera and lands on the colour field
title
string"snapcn 1.0"The name, assembled word by word on the paper card. Any number of words
tagline
string"Ready-made scenes for Remotion, in one command."The closing line — revealed last word first, then drained to white
symbolPath
stringthe snapcn markSVG path for the mark that leads the closing line, drawn in a 0 0 100 100 box. "" removes it
symbolColors
string[] | stringthe ten measured spark stopsGradient stops for the mark, spaced evenly tip to tip. Also accepts a comma-separated string
symbolScale
number1Multiplier on the mark's size, in both the macro shot and the close
voidColor
string"#100022"Ground behind the opening rush
fieldColor
string"#5600f5"The colour field the eyebrow lands on
paperColor
string"#fcfcfa"Paper the title is set on
titleColor
string"#4800c9"Ink the title is set in
nightColor
string"#000028"Ground behind the macro shot and the close, under the glow
glowColor
string"#08ff4b"The glow lifting that ground off the base, low and centre
glowStrength
number0.139How far it lifts, 0–1. Above about 0.3 the ground stops reading black
taglineColor
string"#f2f8ff"Where the tagline settles once the white has swept through
speed
number1Timeline multiplier. Minimum 1 — the colour drain finishes at frame 147 of 170, and below 1 it never gets there

This scene plays as a rendered mp4 rather than a live <Player>. Type is under a moving scale for most of the run — a receding 3D plane, a 1.5× settle, then a whole line panned at 14× — and the first two shots are each drawn up to 44 times a frame for the shutter. A browser has an 8ms budget for all of that; a render has none, and the difference is the whole read of the opening. Touch any control and the customizer hands you the live Player back.