snapcn
41 components
DocsComponentsTemplatesVideo EditorNewShowcaseMarketplaceRoadmapChangelog

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

Loading
snapcn
41 components
DocsComponentsTemplatesVideo EditorNewShowcaseMarketplaceRoadmapChangelog

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 EditorNewShowcaseMarketplaceRoadmapChangelog
Getting startedIntroductionInstallationAgent skill

Logo Collapse

A stack of shots flicked through, collapsing into your mark, and the wordmark landing beside it — each card smaller and held for less time than the last, cutting rather than tweening, until the stack resolves into a logo

One card holds the middle of the frame and cuts to the next shot, each one smaller and each held for less time than the last, so the sequence winds itself up rather than running at a constant clip. At the end of the run the card does not shrink away — it collapses onto a plain tile, the mark overshoots its resting size and settles, the tile goes, and the mark steps aside to make room for the word.

The cuts are cuts

Nothing cross-fades and nothing tweens between shots. The reference holds each card at a fixed size for its whole beat — measured, the box is constant to the pixel across every frame of a hold, and then a different size on the next one. A card that eased between sizes would read as a zoom; a card that cuts reads as a stack of prints being dealt, which is the whole idea.

That is why sizes and holds are parallel lists of literals rather than a ratio and a duration. Neither series is geometric, and a formula fitted to one would miss the other.

The collapse, frame by frame

The beat that is easy to miss and impossible to unsee: the photo card does not shrink into the mark. It cuts to a plain light tile with the mark sitting on it, holds two frames, and only then does the tile go. In the reference that tile is luma 233 against a page of 247 — faint enough that nothing thresholded at 200 finds it, and it is what makes the collapse read as a stack resolving into a logo rather than as a card that got small.

Then the mark lands: 32px, 25, 24, 23, on four consecutive frames. Two frames of overshoot is the difference between a mark that arrives and a mark that is simply smaller than the card was — and it is the only place in the scene where anything moves between frames instead of cutting.

Room for the word

The mark is centred alone, then steps to a waypoint for four frames, then to its place in the lockup as the word appears whole. Two steps, held, not an ease — the same grammar as the cards. Last, two brackets ping in above and below: each lands at 7px in full accent and settles to 4px and about a third of its ink over five frames, so by the time the lower one arrives the upper one has already quietened.

Notes

images and the two lists beside it are parallel — one entry each per shot. A size is a share of the frame height: 0.48 is a square card, 0.82x0.461 a 16:9 one. Real photo sets are not all one shape, and forcing a portrait print square crops it.

Cards cut at their own aspect and fill their box, so pick shots that read at the smallest size in the run — the last card is on screen for a sixth of a second at a third of the frame.

The default stack is the registry's own preview posters, so the sting says the thing snapcn says: a great many scenes, and one library they all came out of.

Installation

pnpm
$ pnpm dlx shadcn@latest add @snapcn/logo-collapse

Needs an existing Remotion project and a components.json. Two-minute setup if this is your first snapcn component.

Component code

The exact file shadcn add copies into your project.

Usage

// src/Root.tsx
import { Composition } from "remotion";
import { LogoCollapse } from "@/components/snap-cn/logo-collapse";

const Sting = () => (
  <LogoCollapse mark="/logo/acme.png" wordmark="Acme" />
);

export const RemotionRoot = () => (
  <Composition
    id="LogoCollapse"
    component={Sting}
    durationInFrames={52}
    fps={30}
    width={1280}
    height={720}
  />
);

Props

PropTypeDefaultDescription
images
string—The stack, split by `|`. The card cuts through them in order — not by comma, because a data: URL has one of its own
sizes
string—Each shot's card, as a share of the frame height. `0.48` is square; `0.82x0.461` is 16:9
holds
string"1,5,5,4,2,5"Frames each shot is held for
mark
string"/logo/snapcn.png"The mark the stack collapses into
wordmark
string"snapcn"The word that lands beside it
background
string—Optional plate behind everything — a paper, a gradient, a still
accent
string—The colour the two brackets ping in. Blank uses the theme's accent
fontFamily
string"Default"Inter Tight unless you name one of the loaded faces
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

More in this category

  • Logo DriftA field of stack tiles drifting past a headline while the camera pulls steadily back, so the wall of things-it-works-with keeps arriving from every edge
  • Logo AssembleA ring of image cards revolves and drains to the centre, giving birth to a simple logo that slides left as the brand name reveals to its right
  • Logo FlickerImages flip across the screen very fast, the flicker decelerates and fades, and the logo and brand name resolve underneath
  • Block WordmarkA square scales in, a deck of coloured cards fans out around it and winds back, then the stack stretches into one block per letter and each block flashes a colour and swaps for its real letterform

Get the next component in your inbox

New free components as they ship, and the pro pack first when it lands. One email a week at most, never a sponsored one.