hero-loop
remotionui/hero-loopFreeBlock
12-second seamless-looping website hero composition
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/hero-loop.jsonSource
1import { loadFont as loadBodyFont } from "@remotion/google-fonts/IBMPlexSans";2import { loadFont as loadMonoFont } from "@remotion/google-fonts/JetBrainsMono";3import { loadFont as loadDisplayFont } from "@remotion/google-fonts/Newsreader";4import type { CSSProperties, ReactNode } from "react";5import { useMemo } from "react";6import {7 AbsoluteFill,8 Sequence,9 interpolate,10 useCurrentFrame,11 useVideoConfig,12} from "remotion";13import { Counter } from "@/remotion/primitives/counter";14import { FadeIn } from "@/remotion/primitives/fade-in";15import { SlideUp } from "@/remotion/primitives/slide-up";16import { SpringIn } from "@/remotion/primitives/spring-in";17import { StaggerChildren } from "@/remotion/primitives/stagger-children";18import { Typewriter } from "@/remotion/primitives/typewriter";19import { getSafeAreaPadding, scaleFont } from "@/remotion/lib/layout";20import { EASING } from "@/remotion/lib/motion-tokens";21import { enterProgress } from "@/remotion/lib/timing";2223/**24 * hero-loop — the landing-page monitor composition.25 *26 * Four beats over 360 frames (12s @ 30fps):27 * title 0-50 · install 36-150 · catalog 136-258 · render 244-330 · title 316-36028 *29 * Every beat travels the same direction — it arrives from below and leaves30 * upward — so the overlapping handoffs read as one continuous roll instead of a31 * double exposure of two centred layouts.32 *33 * The title beat is a single element driven by the global frame, so its state34 * at the last frame is its state at frame 0 and the wrap is invisible. The only35 * moving thing that crosses the seam is the tally light, whose 30-frame period36 * divides 360 exactly. Everything else lives in a `<Sequence>` so off-screen37 * beats are unmounted.38 */3940const { fontFamily: displayFamily } = loadDisplayFont("normal", {41 weights: ["500"],42 subsets: ["latin"],43});4445const { fontFamily: bodyFamily } = loadBodyFont("normal", {46 weights: ["400", "500"],47 subsets: ["latin"],48});4950const { fontFamily: monoFamily } = loadMonoFont("normal", {51 weights: ["400", "500"],52 subsets: ["latin"],53});5455/** Edit Bay palette. No blue anywhere — phosphor amber is the only accent. */56const COLORS = {57 stage: "#050505",58 panel: "#0d0c0b",59 panelRaised: "#141210",60 hairline: "rgba(236, 236, 236, 0.09)",61 hairlineStrong: "rgba(236, 236, 236, 0.16)",62 ink: "#ececec",63 muted: "#8b857c",64 dim: "#575149",65 phosphor: "#e8b86d",66} as const;6768// … truncated
More from remotionui
All 127 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| ai-composer-showcaseai-composer-showcase | remotionui | Blocks | Free | no deps | |
| ai-generation-canvasai-generation-canvas | remotionui | Blocks | Free | no deps | |
| animated-bar-chartanimated-bar-chart | remotionui | Blocks | Free | no deps | |
| audiogram-sceneaudiogram-scene | remotionui | Blocks | Free | no deps | |
| auto-fit-titleauto-fit-title | remotionui | Blocks | Free | no deps | |
| b-roll-stackb-roll-stack | remotionui | Blocks | Free | no deps | |
| bento-panbento-pan | remotionui | Blocks | Free | no deps | |
| browser-flowbrowser-flow | remotionui | Blocks | Free | no deps |
