{
  "$schema": "https://ui.shadcn.com/schema/registry.json",
  "name": "framecn",
  "homepage": "https://framecn.dev",
  "items": [
    {
      "name": "blur-reveal",
      "type": "registry:component",
      "title": "Blur Reveal",
      "description": "Text fades in from a heavy blur into sharp focus.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/blur-reveal/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/blur-reveal.tsx"
        }
      ]
    },
    {
      "name": "typewriter",
      "type": "registry:component",
      "title": "Typewriter",
      "description": "Character-by-character text reveal with a deterministic blinking cursor.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/typewriter/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/typewriter.tsx"
        }
      ]
    },
    {
      "name": "inline-highlight",
      "type": "registry:component",
      "title": "Inline Highlight",
      "description": "Animates one word inside a sentence from a base color to a brand color.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/inline-highlight/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/inline-highlight.tsx"
        }
      ]
    },
    {
      "name": "text-fade-replace",
      "type": "registry:component",
      "title": "Text Fade Replace",
      "description": "Cross-fades between two strings on the same line without layout shift.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/text-fade-replace/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/text-fade-replace.tsx"
        }
      ]
    },
    {
      "name": "strikethrough-replace",
      "type": "registry:component",
      "title": "Strikethrough Replace",
      "description": "Draws a strike line across old text then reveals new text in its place.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/strikethrough-replace/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/strikethrough-replace.tsx"
        }
      ]
    },
    {
      "name": "staggered-fade-up",
      "type": "registry:component",
      "title": "Staggered Fade Up",
      "description": "Words fade in and slide up one after another with a configurable delay.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/staggered-fade-up/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/staggered-fade-up.tsx"
        }
      ]
    },
    {
      "name": "masked-slide-reveal",
      "type": "registry:component",
      "title": "Masked Slide Reveal",
      "description": "Words slide up out of an invisible horizontal mask, one after another.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/masked-slide-reveal/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/masked-slide-reveal.tsx"
        }
      ]
    },
    {
      "name": "tracking-in",
      "type": "registry:component",
      "title": "Tracking In",
      "description": "Letter-spacing collapses and blur clears with a springy motion.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/tracking-in/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/tracking-in.tsx"
        }
      ]
    },
    {
      "name": "shimmer-sweep",
      "type": "registry:component",
      "title": "Shimmer Sweep",
      "description": "Light shine sweeps across muted text via background-clip:text.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/shimmer-sweep/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/shimmer-sweep.tsx"
        }
      ]
    },
    {
      "name": "marker-highlight",
      "type": "registry:component",
      "title": "Marker Highlight",
      "description": "Colored marker block draws behind a phrase as the text color shifts.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/marker-highlight/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/marker-highlight.tsx"
        }
      ]
    },
    {
      "name": "slot-machine-roll",
      "type": "registry:component",
      "title": "Slot Machine Roll",
      "description": "Vertical reel scrolls characters from one value to another.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/slot-machine-roll/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/slot-machine-roll.tsx"
        }
      ]
    },
    {
      "name": "matrix-decode",
      "type": "registry:component",
      "title": "Matrix Decode",
      "description": "Random scramble resolves left-to-right into the target text.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/matrix-decode/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/matrix-decode.tsx"
        }
      ]
    },
    {
      "name": "rgb-glitch-text",
      "type": "registry:component",
      "title": "RGB Glitch Text",
      "description": "Three RGB-offset text copies jitter for a brief glitch window.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/rgb-glitch-text/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/rgb-glitch-text.tsx"
        }
      ]
    },
    {
      "name": "infinite-marquee",
      "type": "registry:component",
      "title": "Infinite Marquee",
      "description": "Seamlessly looping horizontal text strip with optional stroke style.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/infinite-marquee/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/infinite-marquee.tsx"
        }
      ]
    },
    {
      "name": "mesh-gradient-bg",
      "type": "registry:component",
      "title": "Mesh Gradient Background",
      "description": "Living gradient with amorphous color blobs slowly drifting across the frame.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/mesh-gradient-bg/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/mesh-gradient-bg.tsx"
        }
      ]
    },
    {
      "name": "dynamic-grid",
      "type": "registry:component",
      "title": "Dynamic Grid",
      "description": "Subtle moving grid background with configurable cell size and direction.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/dynamic-grid/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/dynamic-grid.tsx"
        }
      ]
    },
    {
      "name": "spring-pop-in",
      "type": "registry:component",
      "title": "Spring Pop In",
      "description": "Elastic spring-driven scale-in wrapper for any child element.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/spring-pop-in/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/spring-pop-in.tsx"
        }
      ]
    },
    {
      "name": "simulated-cursor",
      "type": "registry:component",
      "title": "Simulated Cursor",
      "description": "Animated mouse cursor moving between waypoints with click ripple feedback.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/simulated-cursor/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/simulated-cursor.tsx"
        }
      ]
    },
    {
      "name": "pulsing-indicator",
      "type": "registry:component",
      "title": "Pulsing Indicator",
      "description": "Continuous pulsing dot with ping ring for loading or live states.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/pulsing-indicator/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/pulsing-indicator.tsx"
        }
      ]
    },
    {
      "name": "directional-wipe",
      "type": "registry:component",
      "title": "Directional Wipe",
      "description": "Slide one scene in while pushing the other out.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/directional-wipe/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/directional-wipe.tsx"
        }
      ]
    },
    {
      "name": "device-mockup-zoom",
      "type": "registry:component",
      "title": "Device Mockup Zoom",
      "description": "Pull back from a UI to reveal it inside a device frame.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/device-mockup-zoom/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/device-mockup-zoom.tsx"
        }
      ]
    },
    {
      "name": "zoom-through-transition",
      "type": "registry:component",
      "title": "Zoom Through Transition",
      "description": "Aggressively scale into the center of an element.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/zoom-through-transition/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/zoom-through-transition.tsx"
        }
      ]
    },
    {
      "name": "staggered-bento-grid",
      "type": "registry:component",
      "title": "Staggered Bento Grid",
      "description": "Cards pop into a bento grid one after another with a spring.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/staggered-bento-grid/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/staggered-bento-grid.tsx"
        }
      ]
    },
    {
      "name": "chat-to-preview-layout",
      "type": "registry:component",
      "title": "Chat to Preview Layout",
      "description": "Two-column layout where chat shrinks and preview expands.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/chat-to-preview-layout/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/chat-to-preview-layout.tsx"
        }
      ]
    },
    {
      "name": "bounding-box-selector",
      "type": "registry:component",
      "title": "Bounding Box Selector",
      "description": "Figma-style selection rectangle appears around any element.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/bounding-box-selector/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/bounding-box-selector.tsx"
        }
      ]
    },
    {
      "name": "animated-line-chart",
      "type": "registry:component",
      "title": "Animated Line Chart",
      "description": "Line chart whose SVG path draws on from left to right with a leading dot.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/animated-line-chart/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/animated-line-chart.tsx"
        }
      ]
    },
    {
      "name": "animated-bar-chart",
      "type": "registry:component",
      "title": "Animated Bar Chart",
      "description": "Bars spring up from the baseline in a staggered cascade.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/animated-bar-chart/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/animated-bar-chart.tsx"
        }
      ]
    },
    {
      "name": "terminal-simulator",
      "type": "registry:component",
      "title": "Terminal Simulator",
      "description": "Terminal window that types out commands and rolls old lines off the top.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/terminal-simulator/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/terminal-simulator.tsx"
        }
      ]
    },
    {
      "name": "code-diff-wipe",
      "type": "registry:component",
      "title": "Code Diff Wipe",
      "description": "Before/after code reveal via clip-path wipe with a handle marker.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/code-diff-wipe/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/code-diff-wipe.tsx"
        }
      ]
    },
    {
      "name": "toast-notification",
      "type": "registry:component",
      "title": "Toast Notification",
      "description": "System-style toast pops in, holds, then slides out.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/toast-notification/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/toast-notification.tsx"
        }
      ]
    },
    {
      "name": "drag-and-drop-flow",
      "type": "registry:component",
      "title": "Drag and Drop Flow",
      "description": "Simulated file drag into a dropzone followed by upload progress.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/drag-and-drop-flow/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/drag-and-drop-flow.tsx"
        }
      ]
    },
    {
      "name": "progress-steps",
      "type": "registry:component",
      "title": "Progress Steps",
      "description": "Multi-step pipeline with sequentially activating nodes and filling lines.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/progress-steps/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/progress-steps.tsx"
        }
      ]
    },
    {
      "name": "morphing-modal",
      "type": "registry:component",
      "title": "Morphing Modal",
      "description": "A bento card lifts off the grid and blooms into a full-screen modal driven by a single heavy spring.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/morphing-modal/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/morphing-modal.tsx"
        }
      ]
    },
    {
      "name": "data-flow-pipes",
      "type": "registry:component",
      "title": "Data Flow Pipes",
      "description": "Glowing data packets travel along SVG bezier pipes between system nodes, leaving fading trails.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/data-flow-pipes/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/data-flow-pipes.tsx"
        }
      ]
    },
    {
      "name": "cursor-flow",
      "type": "registry:component",
      "title": "Cursor Flow",
      "description": "A realistic mouse that arcs along cubic Bezier paths, pauses, and clicks targets that dip in response.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/cursor-flow/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/cursor-flow.tsx"
        }
      ]
    },
    {
      "name": "code-accordion",
      "type": "registry:component",
      "title": "Code Accordion",
      "description": "A code window that springs a range of lines closed and replaces them with a \"N lines collapsed\" placeholder.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/code-accordion/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/code-accordion.tsx"
        }
      ]
    },
    {
      "name": "glass-code-block",
      "type": "registry:component",
      "title": "Glass Code Block",
      "description": "A premium frosted-glass code editor window with a regex tokenizer and line-by-line stagger reveal.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/glass-code-block/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/glass-code-block.tsx"
        }
      ]
    },
    {
      "name": "spotlight-card",
      "type": "registry:component",
      "title": "Spotlight Card",
      "description": "A card with a moonlight-cool radial spotlight that follows a synthetic cursor and lights up its microborder.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/spotlight-card/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/spotlight-card.tsx"
        }
      ]
    },
    {
      "name": "perspective-marquee",
      "type": "registry:component",
      "title": "Perspective Marquee",
      "description": "A 3D-tilted infinite marquee with depth-of-field blur on items rolling toward the horizon.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/perspective-marquee/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/perspective-marquee.tsx"
        }
      ]
    },
    {
      "name": "success-confetti",
      "type": "registry:component",
      "title": "Success Confetti",
      "description": "Deterministic seeded confetti burst with optional headline.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/success-confetti/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/success-confetti.tsx"
        }
      ]
    },
    {
      "name": "frosted-glass-wipe",
      "type": "registry:component",
      "title": "Frosted Glass Wipe",
      "description": "Elegant scene transition through a sliding pane of frosted glass.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/frosted-glass-wipe/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/frosted-glass-wipe.tsx"
        }
      ]
    },
    {
      "name": "kinetic-type-mask",
      "type": "registry:component",
      "title": "Kinetic Type Mask",
      "description": "Use giant typography as a window into the next scene.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/kinetic-type-mask/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/kinetic-type-mask.tsx"
        }
      ]
    },
    {
      "name": "spatial-push",
      "type": "registry:component",
      "title": "Spatial Push",
      "description": "A new scene physically presses the old one back into the frame.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/spatial-push/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/spatial-push.tsx"
        }
      ]
    },
    {
      "name": "grid-pixelate-wipe",
      "type": "registry:component",
      "title": "Grid Pixelate Wipe",
      "description": "Dissolve from one scene to the next through a deterministic grid of mask cells.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/grid-pixelate-wipe/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/grid-pixelate-wipe.tsx"
        }
      ]
    },
    {
      "name": "chromatic-aberration-wipe",
      "type": "registry:component",
      "title": "Chromatic Aberration Wipe",
      "description": "An ultra-fast slide transition with an RGB glitch on the peak frames.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/chromatic-aberration-wipe/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/chromatic-aberration-wipe.tsx"
        }
      ]
    },
    {
      "name": "hero-device-assemble",
      "type": "registry:component",
      "title": "Hero Device Assemble",
      "description": "Floating device layers spring together into a laptop or phone mockup, then the screen wakes with a shimmer.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/hero-device-assemble/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/hero-device-assemble.tsx"
        }
      ]
    },
    {
      "name": "ecosystem-constellation",
      "type": "registry:component",
      "title": "Ecosystem Constellation",
      "description": "A central logo orbited by integration satellites with pulsing data lines.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/ecosystem-constellation/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/ecosystem-constellation.tsx"
        }
      ]
    },
    {
      "name": "ai-generation-canvas",
      "type": "registry:component",
      "title": "AI Generation Canvas",
      "description": "A prompt input transforms into a header, then a skeleton dashboard flips into populated cards.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/ai-generation-canvas/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/ai-generation-canvas.tsx"
        }
      ]
    },
    {
      "name": "live-code-compilation",
      "type": "registry:component",
      "title": "Live Code Compilation",
      "description": "Split-screen where typed code on the left snaps a live UI preview on the right, HMR-style.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/live-code-compilation/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/live-code-compilation.tsx"
        }
      ]
    },
    {
      "name": "landing-code-showcase",
      "type": "registry:component",
      "title": "Landing Code Showcase",
      "description": "Magical split-screen: code types itself on the left while the preview reactively re-renders on the right with sparks and tactile bounce.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/landing-code-showcase/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/landing-code-showcase.tsx"
        }
      ]
    },
    {
      "name": "pipeline-journey",
      "type": "registry:component",
      "title": "Pipeline Journey",
      "description": "A Kanban ticket arcs across columns triggering landings and a final confetti burst.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/pipeline-journey/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/pipeline-journey.tsx"
        }
      ]
    },
    {
      "name": "dashboard-populate",
      "type": "registry:component",
      "title": "Dashboard Populate",
      "description": "An empty dashboard cascades to life with KPI count-ups, bar bounces, line traces, and a donut fill.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/dashboard-populate/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/dashboard-populate.tsx"
        }
      ]
    },
    {
      "name": "terminal-to-browser-deploy",
      "type": "registry:component",
      "title": "Terminal to Browser Deploy",
      "description": "A CLI deploy completes, the terminal blurs back, and a browser window springs from the deploy URL.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/terminal-to-browser-deploy/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/terminal-to-browser-deploy.tsx"
        }
      ]
    },
    {
      "name": "browser-flow",
      "type": "registry:component",
      "title": "Browser Flow",
      "description": "Full Safari/Chrome simulation: typed URL, progress bar, page render, scroll, and a virtual cursor click.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/browser-flow/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/browser-flow.tsx"
        }
      ]
    },
    {
      "name": "pricing-tier-focus",
      "type": "registry:component",
      "title": "Pricing Tier Focus",
      "description": "Three pricing cards where the focused tier rises and brightens while siblings dim and blur.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/pricing-tier-focus/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/pricing-tier-focus.tsx"
        }
      ]
    },
    {
      "name": "infinite-bento-pan",
      "type": "registry:component",
      "title": "Infinite Bento Pan",
      "description": "A camera diagonally drifts across an oversized bento grid behind a soft vignette.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/infinite-bento-pan/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/infinite-bento-pan.tsx"
        }
      ]
    },
    {
      "name": "ai-generate-overlay",
      "type": "registry:component",
      "title": "AI Generate Overlay",
      "description": "Source image blurs under a shimmering dot grid and a pulsing 'Generating…' pill before a new image fades in.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/ai-generate-overlay/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/ai-generate-overlay.tsx"
        }
      ]
    },
    {
      "name": "image-expand-to-fullscreen",
      "type": "registry:component",
      "title": "Image Expand To Fullscreen",
      "description": "An image lifts out of a feed post and morphs into a fullscreen editor with toolbars sliding in.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/image-expand-to-fullscreen/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/image-expand-to-fullscreen.tsx"
        }
      ]
    },
    {
      "name": "swipe-transition-wipe",
      "type": "registry:component",
      "title": "Swipe Transition Wipe",
      "description": "Two scenes laid out side-by-side flick across the screen with a parallax background and a darkening outgoing layer.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/swipe-transition-wipe/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/swipe-transition-wipe.tsx"
        }
      ]
    },
    {
      "name": "product-launch-trailer",
      "type": "registry:component",
      "title": "Product Launch Trailer",
      "description": "Cinematic Product Hunt teaser: pulsing logo, zoom-through transition, 3D bento fly-over, and a confetti version drop.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/product-launch-trailer/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/product-launch-trailer.tsx"
        }
      ]
    },
    {
      "name": "caption-highlight",
      "type": "registry:component",
      "title": "Caption Highlight",
      "description": "Word-by-word captions with an accent-colored highlight background that sweeps in behind each spoken word.",
      "dependencies": ["@editframe/react"],
      "files": [
        {
          "path": "registry/bases/editframe/components/caption-highlight/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/caption-highlight.tsx"
        }
      ]
    },
    {
      "name": "caption-pill-karaoke",
      "type": "registry:component",
      "title": "Caption Pill Karaoke",
      "description": "Karaoke-style captions where each word sits inside a pill-shaped background.",
      "dependencies": ["@editframe/react"],
      "files": [
        {
          "path": "registry/bases/editframe/components/caption-pill-karaoke/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/caption-pill-karaoke.tsx"
        }
      ]
    },
    {
      "name": "caption-kinetic-slam",
      "type": "registry:component",
      "title": "Caption Kinetic Slam",
      "description": "Dynamic word-by-word captions: each word pops in with a springy scale/opacity entrance, then drops out in an overlapping ripple.",
      "dependencies": ["@editframe/react"],
      "files": [
        {
          "path": "registry/bases/editframe/components/caption-kinetic-slam/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/caption-kinetic-slam.tsx"
        }
      ]
    },
    {
      "name": "caption-clip-wipe",
      "type": "registry:component",
      "title": "Caption Clip Wipe",
      "description": "Words reveal left-to-right via clip-path; keywords turn gold on speak; the group exits with a wipe.",
      "dependencies": ["@editframe/react"],
      "files": [
        {
          "path": "registry/bases/editframe/components/caption-clip-wipe/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/caption-clip-wipe.tsx"
        }
      ]
    },
    {
      "name": "caption-editorial-emphasis",
      "type": "registry:component",
      "title": "Caption Editorial Emphasis",
      "description": "Headline-style captions that emphasise specific words using accent colors and weight shifts.",
      "dependencies": ["@editframe/react"],
      "files": [
        {
          "path": "registry/bases/editframe/components/caption-editorial-emphasis/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/caption-editorial-emphasis.tsx"
        }
      ]
    },
    {
      "name": "caption-emoji-pop",
      "type": "registry:component",
      "title": "Caption Emoji Pop",
      "description": "Captions with emoji that pop in alongside words.",
      "dependencies": ["@editframe/react"],
      "files": [
        {
          "path": "registry/bases/editframe/components/caption-emoji-pop/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/caption-emoji-pop.tsx"
        }
      ]
    },
    {
      "name": "caption-glitch-rgb",
      "type": "registry:component",
      "title": "Caption Glitch RGB",
      "description": "Captions with a glitchy RGB-split effect on each word.",
      "dependencies": ["@editframe/react"],
      "files": [
        {
          "path": "registry/bases/editframe/components/caption-glitch-rgb/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/caption-glitch-rgb.tsx"
        }
      ]
    },
    {
      "name": "caption-gradient-fill",
      "type": "registry:component",
      "title": "Caption Gradient Fill",
      "description": "Captions where words fill with a horizontal gradient from left to right.",
      "dependencies": ["@editframe/react"],
      "files": [
        {
          "path": "registry/bases/editframe/components/caption-gradient-fill/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/caption-gradient-fill.tsx"
        }
      ]
    },
    {
      "name": "caption-matrix-decode",
      "type": "registry:component",
      "title": "Caption Matrix Decode",
      "description": "Matrix-style green text decodes from blur to sharp on each word.",
      "dependencies": ["@editframe/react"],
      "files": [
        {
          "path": "registry/bases/editframe/components/caption-matrix-decode/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/caption-matrix-decode.tsx"
        }
      ]
    },
    {
      "name": "caption-neon-accent",
      "type": "registry:component",
      "title": "Caption Neon Accent",
      "description": "Captions where words glow with a bright neon accent border and subtle glow.",
      "dependencies": ["@editframe/react"],
      "files": [
        {
          "path": "registry/bases/editframe/components/caption-neon-accent/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/caption-neon-accent.tsx"
        }
      ]
    },
    {
      "name": "caption-neon-glow",
      "type": "registry:component",
      "title": "Caption Neon Glow",
      "description": "Captions with a neon glow effect on each word.",
      "dependencies": ["@editframe/react"],
      "files": [
        {
          "path": "registry/bases/editframe/components/caption-neon-glow/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/caption-neon-glow.tsx"
        }
      ]
    },
    {
      "name": "caption-parallax-layers",
      "type": "registry:component",
      "title": "Caption Parallax Layers",
      "description": "Multi-layer captions where background and foreground words move at different depths, creating a parallax depth effect.",
      "dependencies": ["@editframe/react"],
      "files": [
        {
          "path": "registry/bases/editframe/components/caption-parallax-layers/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/caption-parallax-layers.tsx"
        }
      ]
    },
    {
      "name": "caption-particle-burst",
      "type": "registry:component",
      "title": "Caption Particle Burst",
      "description": "Captions where each word explodes into particles as it exits.",
      "dependencies": ["@editframe/react"],
      "files": [
        {
          "path": "registry/bases/editframe/components/caption-particle-burst/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/caption-particle-burst.tsx"
        }
      ]
    },
    {
      "name": "caption-texture",
      "type": "registry:component",
      "title": "Caption Texture",
      "description": "Captions filled with a rich gradient texture that animates across words.",
      "dependencies": ["@editframe/react"],
      "files": [
        {
          "path": "registry/bases/editframe/components/caption-texture/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/caption-texture.tsx"
        }
      ]
    },
    {
      "name": "caption-weight-shift",
      "type": "registry:component",
      "title": "Caption Weight Shift",
      "description": "Font weight animates from 100 to 900 when each word is spoken, back to thin after.",
      "dependencies": ["@editframe/react"],
      "files": [
        {
          "path": "registry/bases/editframe/components/caption-weight-shift/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/caption-weight-shift.tsx"
        }
      ]
    },
    {
      "name": "confetti",
      "type": "registry:component",
      "title": "Confetti",
      "description": "Deterministic CSS-animated particle burst celebration effect.",
      "dependencies": ["@editframe/react"],
      "files": [
        {
          "path": "registry/bases/editframe/components/confetti/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/confetti.tsx"
        }
      ]
    },
    {
      "name": "logo-enter",
      "type": "registry:component",
      "title": "Logo Enter",
      "description": "Row of overlapping logo circles that spring in one by one.",
      "dependencies": ["@editframe/react"],
      "files": [
        {
          "path": "registry/bases/editframe/components/logo-enter/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/logo-enter.tsx"
        }
      ]
    },
    {
      "name": "backdrop",
      "type": "registry:component",
      "title": "Backdrop",
      "description": "Layout wrapper providing a background fill with optional padding, radius, and shadow.",
      "dependencies": ["@editframe/react"],
      "files": [
        {
          "path": "registry/bases/editframe/components/backdrop/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/backdrop.tsx"
        }
      ]
    },
    {
      "name": "top-down-letters",
      "type": "registry:component",
      "title": "Top Down Letters",
      "description": "Letters animate in from top to bottom.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/top-down-letters/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/top-down-letters.tsx"
        }
      ]
    },
    {
      "name": "blur-out-up",
      "type": "registry:component",
      "title": "Blur Out Up",
      "description": "Words blur and drift upward while fading out, staggered per word.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/blur-out-up/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/blur-out-up.tsx"
        }
      ]
    },
    {
      "name": "focus-blur-resolve",
      "type": "registry:component",
      "title": "Focus Blur Resolve",
      "description": "Text resolves into focus from a blurred, shifted state, then blurs back out on exit.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/focus-blur-resolve/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/focus-blur-resolve.tsx"
        }
      ]
    },
    {
      "name": "per-character-rise",
      "type": "registry:component",
      "title": "Per Character Rise",
      "description": "Characters rise from below with a smooth spring-like easing, staggered one frame apart.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/per-character-rise/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/per-character-rise.tsx"
        }
      ]
    },
    {
      "name": "scale-down-fade",
      "type": "registry:component",
      "title": "Scale Down Fade",
      "description": "Text enters scaling down into place with a fade, then shrinks and fades out.",
      "dependencies": ["remotion"],
      "files": [
        {
          "path": "registry/bases/editframe/components/scale-down-fade/index.tsx",
          "type": "registry:component",
          "target": "components/framecn/scale-down-fade.tsx"
        }
      ]
    },
    {
      "dependencies": ["@editframe/react", "@paper-design/shaders-react"],
      "description": "Overlapping translucent color panels sliding past each other.",
      "files": [
        {
          "path": "registry/bases/editframe/components/shader-color-panels/index.tsx",
          "target": "components/framecn/shader-color-panels.tsx",
          "type": "registry:component"
        }
      ],
      "name": "shader-color-panels",
      "title": "Shader Color Panels",
      "type": "registry:component"
    },
    {
      "dependencies": ["@editframe/react", "@paper-design/shaders-react"],
      "description": "Ordered-dither shading over an animated gradient field.",
      "files": [
        {
          "path": "registry/bases/editframe/components/shader-dithering/index.tsx",
          "target": "components/framecn/shader-dithering.tsx",
          "type": "registry:component"
        }
      ],
      "name": "shader-dithering",
      "title": "Shader Dithering",
      "type": "registry:component"
    },
    {
      "dependencies": ["@editframe/react", "@paper-design/shaders-react"],
      "description": "Dots orbiting on concentric paths across the frame.",
      "files": [
        {
          "path": "registry/bases/editframe/components/shader-dot-orbit/index.tsx",
          "target": "components/framecn/shader-dot-orbit.tsx",
          "type": "registry:component"
        }
      ],
      "name": "shader-dot-orbit",
      "title": "Shader Dot Orbit",
      "type": "registry:component"
    },
    {
      "dependencies": ["@editframe/react", "@paper-design/shaders-react"],
      "description": "Volumetric light rays radiating from an off-screen source.",
      "files": [
        {
          "path": "registry/bases/editframe/components/shader-god-rays/index.tsx",
          "target": "components/framecn/shader-god-rays.tsx",
          "type": "registry:component"
        }
      ],
      "name": "shader-god-rays",
      "title": "Shader God Rays",
      "type": "registry:component"
    },
    {
      "dependencies": ["@editframe/react", "@paper-design/shaders-react"],
      "description": "Grainy multi-stop gradient that drifts slowly with film-grain texture over the blend.",
      "files": [
        {
          "path": "registry/bases/editframe/components/shader-grain-gradient/index.tsx",
          "target": "components/framecn/shader-grain-gradient.tsx",
          "type": "registry:component"
        }
      ],
      "name": "shader-grain-gradient",
      "title": "Shader Grain Gradient",
      "type": "registry:component"
    },
    {
      "dependencies": ["@editframe/react", "@paper-design/shaders-react"],
      "description": "Molten metallic surface with flowing specular highlights.",
      "files": [
        {
          "path": "registry/bases/editframe/components/shader-liquid-metal/index.tsx",
          "target": "components/framecn/shader-liquid-metal.tsx",
          "type": "registry:component"
        }
      ],
      "name": "shader-liquid-metal",
      "title": "Shader Liquid Metal",
      "type": "registry:component"
    },
    {
      "dependencies": ["@editframe/react", "@paper-design/shaders-react"],
      "description": "WebGL mesh gradient backdrop driven per-frame for deterministic Editframe renders.",
      "files": [
        {
          "path": "registry/bases/editframe/components/shader-mesh-gradient/index.tsx",
          "target": "components/framecn/shader-mesh-gradient.tsx",
          "type": "registry:component"
        }
      ],
      "name": "shader-mesh-gradient",
      "title": "Shader Mesh Gradient",
      "type": "registry:component"
    },
    {
      "dependencies": ["@editframe/react", "@paper-design/shaders-react"],
      "description": "Organic blobs merging and splitting like lava.",
      "files": [
        {
          "path": "registry/bases/editframe/components/shader-metaballs/index.tsx",
          "target": "components/framecn/shader-metaballs.tsx",
          "type": "registry:component"
        }
      ],
      "name": "shader-metaballs",
      "title": "Shader Metaballs",
      "type": "registry:component"
    },
    {
      "dependencies": ["@editframe/react", "@paper-design/shaders-react"],
      "description": "Organic neural-web noise field that slowly morphs.",
      "files": [
        {
          "path": "registry/bases/editframe/components/shader-neuro-noise/index.tsx",
          "target": "components/framecn/shader-neuro-noise.tsx",
          "type": "registry:component"
        }
      ],
      "name": "shader-neuro-noise",
      "title": "Shader Neuro Noise",
      "type": "registry:component"
    },
    {
      "dependencies": ["@editframe/react", "@paper-design/shaders-react"],
      "description": "Classic Perlin noise clouds drifting across the frame.",
      "files": [
        {
          "path": "registry/bases/editframe/components/shader-perlin-noise/index.tsx",
          "target": "components/framecn/shader-perlin-noise.tsx",
          "type": "registry:component"
        }
      ],
      "name": "shader-perlin-noise",
      "title": "Shader Perlin Noise",
      "type": "registry:component"
    },
    {
      "dependencies": ["@editframe/react", "@paper-design/shaders-react"],
      "description": "Glowing border frame that pulses around the edges.",
      "files": [
        {
          "path": "registry/bases/editframe/components/shader-pulsing-border/index.tsx",
          "target": "components/framecn/shader-pulsing-border.tsx",
          "type": "registry:component"
        }
      ],
      "name": "shader-pulsing-border",
      "title": "Shader Pulsing Border",
      "type": "registry:component"
    },
    {
      "dependencies": ["@editframe/react", "@paper-design/shaders-react"],
      "description": "Simplex noise flow field, smoother than Perlin.",
      "files": [
        {
          "path": "registry/bases/editframe/components/shader-simplex-noise/index.tsx",
          "target": "components/framecn/shader-simplex-noise.tsx",
          "type": "registry:component"
        }
      ],
      "name": "shader-simplex-noise",
      "title": "Shader Simplex Noise",
      "type": "registry:component"
    },
    {
      "dependencies": ["@editframe/react", "@paper-design/shaders-react"],
      "description": "Soft smoke ring curling and dissipating in place.",
      "files": [
        {
          "path": "registry/bases/editframe/components/shader-smoke-ring/index.tsx",
          "target": "components/framecn/shader-smoke-ring.tsx",
          "type": "registry:component"
        }
      ],
      "name": "shader-smoke-ring",
      "title": "Shader Smoke Ring",
      "type": "registry:component"
    },
    {
      "dependencies": ["@editframe/react", "@paper-design/shaders-react"],
      "description": "Rotating spiral arms radiating from the center.",
      "files": [
        {
          "path": "registry/bases/editframe/components/shader-spiral/index.tsx",
          "target": "components/framecn/shader-spiral.tsx",
          "type": "registry:component"
        }
      ],
      "name": "shader-spiral",
      "title": "Shader Spiral",
      "type": "registry:component"
    },
    {
      "dependencies": ["@editframe/react", "@paper-design/shaders-react"],
      "description": "Concentric bands swirling around a center point.",
      "files": [
        {
          "path": "registry/bases/editframe/components/shader-swirl/index.tsx",
          "target": "components/framecn/shader-swirl.tsx",
          "type": "registry:component"
        }
      ],
      "name": "shader-swirl",
      "title": "Shader Swirl",
      "type": "registry:component"
    },
    {
      "dependencies": ["@editframe/react", "@paper-design/shaders-react"],
      "description": "Animated Voronoi cells shifting and re-tessellating.",
      "files": [
        {
          "path": "registry/bases/editframe/components/shader-voronoi/index.tsx",
          "target": "components/framecn/shader-voronoi.tsx",
          "type": "registry:component"
        }
      ],
      "name": "shader-voronoi",
      "title": "Shader Voronoi",
      "type": "registry:component"
    },
    {
      "dependencies": ["@editframe/react", "@paper-design/shaders-react"],
      "description": "Domain-warped color field that folds and stretches like liquid.",
      "files": [
        {
          "path": "registry/bases/editframe/components/shader-warp/index.tsx",
          "target": "components/framecn/shader-warp.tsx",
          "type": "registry:component"
        }
      ],
      "name": "shader-warp",
      "title": "Shader Warp",
      "type": "registry:component"
    },
    {
      "dependencies": ["@editframe/react", "@paper-design/shaders-react"],
      "description": "Caustic water-surface ripples with subtle refraction.",
      "files": [
        {
          "path": "registry/bases/editframe/components/shader-water/index.tsx",
          "target": "components/framecn/shader-water.tsx",
          "type": "registry:component"
        }
      ],
      "name": "shader-water",
      "title": "Shader Water",
      "type": "registry:component"
    }
  ]
}
