This component no longer exists. It was in remotionui’s manifest when we first indexed it and is not there now — the registry served its inventory on 2026-08-11 and this item was not on it. The install command below will fail. It is kept here because a tutorial somewhere still tells people to run it.
frosted-glass-wipe
remotionui/frosted-glass-wipeRemovedComponent
A pane of frosted glass crosses the frame and leaves the next scene behind it
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/frosted-glass-wipe.jsonSource
1import type { TransitionPresentation } from "@remotion/transitions";2import { useMemo } from "react";3import { AbsoluteFill, interpolate } from "remotion";4import {5 resolveTransitionTiming,6 transitionPhase,7 type TransitionVariant,8} from "@/remotion/lib/transition-timing";910export type FrostedGlassDirection =11 | "from-left"12 | "from-right"13 | "from-top"14 | "from-bottom";1516export type FrostedGlassWipeProps = {17 blur?: number;18 /** Panel width as a share of the frame, 0→1. */19 panelWidth?: number;20 direction?: FrostedGlassDirection;21 frostColor?: string;22};2324const AXIS: Record<25 FrostedGlassDirection,26 { vertical: boolean; gradient: string; near: "left" | "right" | "top" | "bottom" }27> = {28 "from-left": { vertical: false, gradient: "to right", near: "left" },29 "from-right": { vertical: false, gradient: "to left", near: "right" },30 "from-top": { vertical: true, gradient: "to bottom", near: "top" },31 "from-bottom": { vertical: true, gradient: "to top", near: "bottom" },32};3334const FrostedGlassWipePresentation: React.FC<35 React.ComponentProps<36 NonNullable<TransitionPresentation<FrostedGlassWipeProps>["component"]>37 >38> = ({39 children,40 presentationProgress,41 presentationDirection,42 passedProps: {43 blur = 20,44 panelWidth = 0.14,45 direction = "from-left",46 frostColor = "rgba(255,255,255,0.12)",47 },48}) => {49 const phase = transitionPhase(presentationProgress, presentationDirection, {50 lead: 1,51 });52 const { vertical, gradient, near } = AXIS[direction];53 const swept = 1 - phase.displace;5455 const revealStyle = useMemo(() => {56 // The glass panel covers the frame edge it is crossing, so the scene under57 // it can be cut hard: the panel is what hides the seam. Only the arriving58 // scene is clipped — the outgoing one holds whole beneath it.59 if (!phase.isEntering) {60 return undefined;61 }6263 const hidden = `${(1 - swept) * 100}%`;6465 return {66 clipPath: vertical67 ? direction === "from-top"68 ? `inset(0 0 ${hidden} 0)`69 : `inset(${hidden} 0 0 0)`70 : direction === "from-left"71 ? `inset(0 ${hidden} 0 0)`72 : `inset(0 0 0 ${hidden})`,73 };74 }, [direction, phase.isEntering, swept, vertical]);7576 const panelStyle = useMemo(() => {77 const widthPct = panelWidth * 100;78 // Rides the seam, and is parked off-frame at both ends so it never sits79 // over a scene that is not moving.80 const offset = swept * (100 + widthPct) - widthPct;81// … truncated
