CrazyGLCrazyGLHomeExploreGitHubBrowse heroesLoading hero…← Back to gallery@crazygl/torn-poster

Torn Poster Hero

Layered torn posters build a premium campaign collage with depth, shadows, and a subtle peel-away motion.

ReactWebGL3DImageInteractiveFont#three#3d#layers#screenshot#depth#parallax#design#editorial#portfolio

Usage

import TornPoster from '@crazygl/hero-torn-poster';

export default function Page() {
  return (
    <TornPoster
      heading={'Paste it\nup loud.'}
      hoverSpread={1.7}
      cameraParallax={1.15}
    />
  );
}

Customise

  • OveralloverallOffsetX / overallOffsetY, overallScale, overallRotation (transform the whole set).
  • ImagesbackgroundImage plus layer1Imagelayer5Image (any JPG/PNG/WebP/AVIF; empty hides a layer), each with X / Y / Z (depth) / Scale.
  • MotionloadDelay (entrance stagger), hoverSpread, cameraParallax.
  • LayoutcontentAlign, paddingX / paddingY.

Best for

  • Event and festival pages, fashion and music drops
  • Design-studio and agency portfolios
  • Editorial product launches where a layered system is the story
01 · Install the package

One command, zero config.

npm install @crazygl/hero-torn-poster
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 TornPosterHero from '@crazygl/hero-torn-poster';

export default function Landing() {
  return (
    <TornPosterHero />
  );
}
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 TornPosterHero from '@crazygl/hero-torn-poster';

export default function Page() {
  return (
    <section>
      <TornPosterHero
        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

Magazine Cover Product Hero

A product visual plays like a moving magazine cover, with large type sharing the frame and layered imagery adding subtle editorial depth.

Screenshot Torn Into Layers

A background screenshot plus up to five overlay images, each placed on its own depth plane with X / Y / Z / scale controls. On load each layer slides in from depth with a staggered easeOutBack overshoot; hover spreads them further apart along Z.

Collage in Zero Gravity

Images, textures, and product screens float together in a controlled zero-gravity collage around the hero copy.

Exhibition Poster Hero

A single campaign image becomes a 3D museum poster with soft paper folds, a slow specular light sweep across the surface, and a film-grade animated grain. Slow camera drift and pointer parallax keep it breathing.

Glitch Hero Poster

A cyberpunk poster: any screenshot or photograph is overlaid with RGB channel splitting, horizontal slice glitches, soft CRT scanlines, and digital grain. The pointer ramps the chaos up — perfect for launch campaigns, agencies, gaming, and music.

Cinematic Contact Sheet

Multiple frames behave like a cinematic contact sheet, bending through depth and holding a warm editorial mood.
Live customizer

Torn Poster Hero

Overall X offset1.65worldHorizontal position of the entire screenshot set (background + all layers). 0 = centered.Overall Y offset0worldVertical position of the entire screenshot set.Overall scale0.6Scale multiplier for the entire screenshot set.Overall rotation-10°Rotation of the entire screenshot set around its center.Background imageFull-frame image rendered on a fixed plane behind every layer.ImageLeave empty to hide this layer.X-1.85worldHorizontal position of this layer. 0 = centered.Y-0.8worldVertical position of this layer. 0 = centered.Scale0.35Size of this layer. At 1.0 it fits the background.Z (depth)0.4Depth offset. Higher = closer to camera.ImageLeave empty to hide this layer.X-1.45worldHorizontal position of this layer. 0 = centered.Y0.7worldVertical position of this layer. 0 = centered.Scale0.3Size of this layer. At 1.0 it fits the background.Z (depth)-0.3Depth offset. Higher = closer to camera.ImageLeave empty to hide this layer.X-0.5worldHorizontal position of this layer. 0 = centered.Y-0.05worldVertical position of this layer. 0 = centered.Scale0.3Size of this layer. At 1.0 it fits the background.Z (depth)1.45Depth offset. Higher = closer to camera.ImageLeave empty to hide this layer.X0.15worldHorizontal position of this layer. 0 = centered.Y-0.15worldVertical position of this layer. 0 = centered.Scale0.45Size of this layer. At 1.0 it fits the background.Z (depth)0.7Depth offset. Higher = closer to camera.ImageLeave empty to hide this layer.X0worldHorizontal position of this layer. 0 = centered.Y0worldVertical position of this layer. 0 = centered.Scale1Size of this layer. At 1.0 it fits the background.Z (depth)1Depth offset. Higher = closer to camera.Load stagger0.15s/layerStaggered delay between each layer's entrance. 0 = simultaneous, 0.15 = classic cascade.Hover spread1.5How much the layers push apart on hover. 1 = no spread, 1.5 = pleasant pop.Camera parallax1.15Pointer-driven camera offset. 0 = locked, 1 = aggressive, 3 = exaggerated parallax sweep.Heading fontInteractivityWhich input drives the hero — try Scroll if you want the page to drive motion.
CrazyGL · crazygl.comProgrammable hero sections for real websites.