CrazyGLCrazyGLHomeExploreGitHubBrowse heroesLoading hero…← Back to gallery@crazygl/vhs-product-screen

VHS Product Demo Screen

Your product image or video plays inside a floating retro CRT/VHS-style screen with subtle barrel curvature, scanlines, chromatic aberration, vignette and occasional tracking-noise glitch bursts. Nostalgic but polished.

ReactWebGL3DImageVideoInteractiveFont#three#3d#vhs#crt#retro#screen#video#scanlines#glitch#product#creative#music

Usage

import VhsProductScreen from '@crazygl/hero-vhs-product-screen';

export default function Page() {
  return (
    <VhsProductScreen
      heading="Press play on your roadmap."
      screenMedia="https://yoursite.com/demo.mp4"
      curvature={0.18}
      scanlineStrength={0.35}
      glitchFrequency={0.2}
    />
  );
}

Customise

  • ContentcontentType, heading, subheading, column1, column2, content.
  • MonitortvModel (GLB), modelScale, modelTilt, monitorX, monitorY, pointerParallax.
  • Screen mediascreenMedia (image/video), screenFit, screenOffsetX/Y, screenSizeScale, screenEmissive, turnOnAnimation.
  • CRT lookcurvature, scanlineStrength, scanlineFrequency, chromaticEdgeIntensity, vignetteStrength.
  • Glitch & glowglitchFrequency, glitchIntensity, glowColor, glowStrength, backgroundColor, headingFontFamily.

Best for

  • Product demos and feature reveals with retro/nostalgic branding.
  • Music, gaming, and creator-tool launches.
  • Showing a screen recording inside a tactile, characterful frame.
01 · Install the package

One command, zero config.

npm install @crazygl/hero-vhs-product-screen
02 · Render the component

Import once, drop it in.

The component takes the same props you see in the live customizer on the right — every default ships poster-quality.

hero.tsx
import VHSProductDemoScreen from '@crazygl/hero-vhs-product-screen';

export default function Landing() {
  return (
    <VHSProductDemoScreen />
  );
}
03 · Use it in a page

SSR-safe by default.

The wrapper renders static HTML on the server and only initialises the canvas after hydration, so search engines see your copy.

page.tsx
// app/page.tsx — works in SSR-first frameworks (Next, Remix, Astro, etc.)
'use client';

import VHSProductDemoScreen from '@crazygl/hero-vhs-product-screen';

export default function Page() {
  return (
    <section>
      <VHSProductDemoScreen
        heading="Say hi."
        subheading="Your new hero."
      />
      <article>
        <h2>Welcome</h2>
        <p>Your content keeps its own voice below the hero.</p>
      </article>
    </section>
  );
}
You might also like

Similar heroes

Retro-Future Product Tunnel

Your screenshot or video sits at the centre of an 80s sci-fi tunnel — stacked rings of glowing colour flow toward the camera against deep black. Energetic, fun, memorable.

Stage Screen

A keynote-stage hero: your product screenshot lives on a massive floating screen, lit by sweeping volumetric spotlights through a low-lying carpet of theatre fog.

Floating Movie Scene

Your product demo presented like a launch trailer: a floating screen drifts on a dark 3D stage while volumetric spotlights sweep across it, dust hangs in the beams, and a soft reflection pools on the floor. Slow cinematic camera drift; scroll pushes the camera in.

Floating Screen Recording

A product demo screenshot or video floats on a screen panel with an animated cursor, a glowing motion trail, expanding click ripples, and a zoom-lens magnifier that highlights UI moments.

Product Pedestal

A 3D product model rests on a minimal floating pedestal under studio HDRI lighting. Slow turntable rotation, soft contact shadow, drifting dust, subtle mouse parallax, and press-and-drag to free-spin the product.

Hero Video on Curved LED Wall

Your image or video plays across the inner concave surface of a large, cinematic curved LED wall, lit like a virtual production stage with a subtle LED-pixel grid, floor reflection, and pointer parallax.
Live customizer

VHS Product Demo Screen

TV monitorWhich TV monitor to display. Each model ships with its own calibrated screen mapping so you can swap monitors without the picture drifting off the glass.TV Monitor scale1Overall size of the TV monitor within the canvas. 1.0 fills roughly 70% of the frame height.TV Monitor tilt-3°Slight resting tilt of the TV monitor, separate from pointer parallax. A small negative tilt reads as a TV set on a low table.TV Monitor X0worldHorizontal world-space offset for the whole TV monitor. Useful for shoving the cabinet left or right so the heading copy can sit opposite.TV Monitor Y0worldVertical world-space offset for the whole TV monitor.Screen content (image or video)Image or video shown ON the TV screen. MP4/WebM auto-loop and play.Screen fitHow the image is fit on the screen. Contain preserves the aspect ratio and adds black bars; Cover fills the screen and crops the edges.Screen trim X0relFinal horizontal trim after the TV monitor's built-in calibration.Screen trim Y0relFinal vertical trim after the TV monitor's built-in calibration.Screen trim size1Final overscan trim inside the calibrated screen area. 1.0 = authored fit.Tube curvature0.15Barrel distortion strength. 0 = flat panel, 0.15 = subtle 90s monitor bulge, 0.35+ exaggerated cabinet TV.Scanline strength0.4Visibility of the horizontal scanline mask. 0.3-0.5 reads as crisp CRT; above 0.7 starts to crush midtones.Scanline density800Lines per screen height. ~800 gives tight, near-pixel CRT lines; 300-500 reads as low-res monitor.Chromatic aberration0.6Per-channel R/G/B UV split at the edges. 0.4-0.8 is the photographic sweet spot; above 1.5 turns into a 90s music-video effect.Vignette0.55Corner darkening of the screen. 0.4-0.6 frames the tube cinematically.Screen glow1.15How brightly the CRT phosphor reads. 1.0-1.3 = real backlit picture; above 1.8 blows out.TV turn-on animationPlay a ~600ms CRT warmup sequence (black → bright line collapse → static noise → picture) each time the model or screen content changes.Glitch frequency8/minHow many tracking-glitch bursts per minute. 0 = perfectly clean signal, 6-12 = occasional VHS tracking hiccup, 25+ = degraded tape.Glitch intensity0.7How violent each burst is — band displacement + chromatic split. 0.5-0.8 = polished retro tribute; above 1.2 = trashed tape.BackgroundDeep room colour behind the floating tube. Navy / charcoal reads as a dim listening room.Screen glow tintWarm light bleeding out from the picture into the surrounding room. Amber for warmth; cyan for VHS-cold; white for neutral.Glow bleed0.6How much warm light spills around the TV monitor from the screen. 0.4-0.7 reads as a TV in a dark room.Pointer parallax0.6How much the screen yaws/pitches with pointer movement. 0 = locked, 1 = full ±3° yaw / ±2° pitch follow.Heading FontInteractivityWhich input drives the hero — try Scroll if you want the page to drive motion.
CrazyGL · crazygl.comProgrammable hero sections for real websites.