(01)A WebGL text effect
for React & Next.js

Pixel Reveal

Pixel Reveal makes text emerge from raw pixels, dissolving block by block into clean type.

(Scroll)
(02) Statementpreset="signal" · once={false}

10+ noise modes make it infinitely adaptable to your brand’s visual language

(Scroll Down)

(03) PlaygroundEvery option, live

Try every option.

Specimenclusters · up · words

Type anything

0.00
<PixelReveal>
  Type anything
</PixelReveal>
(04) PresetsHover a tile to replay

Nine looks. One prop.

(05) TriggersWhat drives the timeline

Five ways to drive it.

  1. 01

    load

    Plays as soon as the page and its fonts are ready. This one already has.

    trigger="load"
  2. 02

    inview

    Plays when it scrolls into view. once={false} rewinds it on the way back.

    trigger="inview"
  3. 03

    scrub

    The scroll position is the progress. Keep scrolling and it resolves.

    trigger="scrub"
  4. 04

    pin

    Scrubbed inside a sticky <PinSection>. The next section is one.

    trigger="pin"
  5. 05

    manual

    You own the playhead: play(), seek() or a progress prop.

    trigger="manual"
(06) Pinned scrubpreset="flow" · trigger="pin"

Scroll-driven control puts the reveal in your hands — every pixel tied to your pace

Scroll
(07) EngineDomGL · one canvas · real text

Built to disappear.

Canvas
1One WebGL context and one render loop for every reveal on the page.
Idle cost
0Draw calls once text has settled. The DOM shows its own glyphs again.
Presets
9Complete looks, one prop each. Any option overrides on top.
Patterns
10Reveal fields, times 8 directions, times 5 triggers.
Real text
100%Selectable, searchable, translatable, read aloud. Styled by your CSS.
Hand-off
1:1The finished mirror matches the DOM pixel for pixel. The swap is invisible.
(08) InstallThree steps

Drop it in.

  1. 01Wrap the app

    One root in your layout owns the canvas, the render loop and smooth scroll.

    // app/layout.js
    <PixelRevealRoot>
      {children}
    </PixelRevealRoot>
  2. 02Write text

    Any element, styled by your CSS. Pick a preset, a trigger, a pattern — one prop each.

    <PixelReveal as="h2" preset="signal">
      Hello, pixels
    </PixelReveal>
  3. 03Tune it live

    Open any page with ?gui, pick a reveal, drag the controls, copy the props.

    // any page
    localhost:3000/?gui