CrazyGLCrazyGLHomeExploreGitHubBrowse heroesLoading hero…← Back to gallery@crazygl/pixel-to-3d-reveal

Pixel to 3D Reveal

An image is sampled into a cloud of chunky pixel cubes scattered through 3D space. They fly to their home positions and refine from low-res chunks to crisp pixels — a pixel mosaic that assembles itself in front of a glowing grid floor. Three.js InstancedMesh, image-as-particle-source.

ReactWebGL3DImageInteractiveFont#pixel#particles#three#instanced#reveal#logo#screenshot#nostalgia#dev-tools#image-input

Usage

import PixelTo3DReveal from '@crazygl/hero-pixel-to-3d-reveal';

export default function Page() {
  return (
    <PixelTo3DReveal
      media="/product-screenshot.png"
      heading="From pixels to product."
      pixelDensity={121}
      repeatMode="Static"
      gridColor="#5cf2ff"
    />
  );
}

Customise

  • Imagemedia (PNG/JPG/WebP/AVIF; transparent areas are skipped), plus mediaZoom and mediaCenterX/Y to position the mosaic opposite the heading.
  • Pixel assemblypixelDensity, assemblyDuration, flightDuration, clusterSize, particleStartScaleparticleEndScale (the resolution-doubling gap), scatterDistance, repeatMode (Auto / Static / Click) and loopInterval.
  • Grid floorgridColor, gridIntensity, gridScale.
  • StagebgColor, vignetteStrength, pointerParallax.

Best for

  • Developer tools, IDEs, and dashboards where the loading-becomes-product story matters.
  • Indie games and retro-flavoured creative apps.
  • Nostalgia and "rebuilt for today" brand launches — drop in a logo or product UI.
01 · Install the package

One command, zero config.

npm install @crazygl/hero-pixel-to-3d-reveal
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 PixelTo3DReveal from '@crazygl/hero-pixel-to-3d-reveal';

export default function Landing() {
  return (
    <PixelTo3DReveal />
  );
}
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 PixelTo3DReveal from '@crazygl/hero-pixel-to-3d-reveal';

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

Glass Tile Logo

The logo is reconstructed from a grid of small glass blocks. Each tile floats apart, refracts the background through real MeshPhysicalMaterial transmission, then assembles into the silhouette on load. Hover separates the tiles slightly. Built with Three.js InstancedMesh + HDRI reflections + soft contact shadows.

Debugging X-Ray

A polished product screenshot scanned by an animated x-ray band that reveals the underlying component structure as glowing devtools-style bboxes and accessibility outlines. Drag the pointer, or let it auto-sweep — exactly the feeling of opening the inspector on production.

Floating Dashboard With Light Beam Reveal

Your product dashboard, tilted in 3D space, scanned into existence by a soft blue-purple light beam. A glowing uplight underneath and a subtle floor reflection complete the look.

Firework Logo Reveal

The hero starts dark. A burst of particles explodes outward, then curves back inward and assembles into your logo. Three-phase lifecycle, additive bloom, short trails, subtle camera shake during the burst. Once the logo is assembled, move the cursor across the hero to spawn micro-firework bursts that fan out and fade. The default still capture lands mid-re-assembly — the most photogenic frame.

Black Glass Product Reveal

An almost-black canvas. A slow horizontal light sweeps left to right, revealing a glossy product screenshot inside a ceramic black-glass frame. Cinematic reveal for luxury SaaS, fintech, and premium B2B tools.

Data Rain Product Reveal

Elegant colored data streams fall behind a central product screenshot in four refined tints, with a few drops drifting in front for parallax depth. Cyberpunk but refined.
Live customizer

Pixel to 3D Reveal

Image (PNG/JPG/WebP/AVIF)Image (PNG/JPG/WebP/AVIF). The image starts as a cloud of chunky pixel particles and assembles into the final crisp image.Image size0.87Fraction of the smaller viewport axis the mosaic occupies. 0.6-0.9 reads well alongside a heading.Horizontal position0.2Shift left or right so the heading can sit opposite. 0 = centred.Vertical position-0.02Vertical offset; default lifts the mosaic slightly above the grid floor.Pixel resolution121Target grid resolution along the long axis. Lower = chunkier final mosaic; higher = smoother. 60-130 reads as recognisable but still pixel-flavoured.Assembly duration4sTotal time for ALL pixels to arrive. Per-pixel spawn times are distributed across this window so only a small fraction of pixels are mid-flight at any moment.Per-pixel flight time1.5sHow long each individual pixel takes to fly from behind the camera to its home position. Longer = slower, more graceful arrival.Cluster size8How many pixels spawn together as a burst. Smaller = smoother, more uniform shower; larger = punchier, more organic bursts.Chunky-start size0.055Cube size at the start of the assembly (in world units). 0.055 reads as 'old-tech chunky.'Final pixel size0.016Cube size at the END of the assembly. Should be smaller than the chunky-start; the visible 'resolution doubles' effect comes from the gap between the two.Scatter distance2.4How far each particle starts from its home position before flying in (in world units).Repeat modeAuto cycles every few seconds; Click scatters & re-assembles when you click the hero; Static plays the assembly once and holds permanently (clicks do nothing).Grid colourGlow colour of the matrix floor lines.Grid intensity0.7How bright the grid glows. 0 hides the grid entirely; 1.0 is a strong digital-matrix vibe.Grid cell size0.5Spacing between grid lines in world units. Smaller = denser grid.Background colourDeep navy/black backdrop.Vignette0.55Strength of the soft corner darkening. 0 = flat; 0.6 = cinematic.Pointer parallax0.5How much the camera shifts in response to pointer position. 0 = locked; 1.0 = very reactive.Heading FontInteractivityWhich input drives the hero — try Scroll if you want the page to drive motion.
CrazyGL · crazygl.comProgrammable hero sections for real websites.