Dither Free for Aperveil 1.0 WebGPU shader

Less color. More character.

An ordered Bayer dithering background for React. Adjust tone levels and pixel cell size, then export the animated WGSL effect.

Part of the Free collection for Aperveil 1.0. Public live preview and Color Looks are open. Free Export Kits do not require an account. Purchasing is not available yet.

Free for Aperveil 1.0React exportRaw WGSL

Inside Dither.

Dither quantizes a generated field through a computed 4×4 Bayer matrix. Levels controls the tonal steps, while cell size is measured in device pixels.

This is ordered dithering of a procedural field, not error-diffusion image processing. Device-pixel sizing can look different at different DPR values.

0.426 ms legacy timing (method not recorded; not a pure GPU measurement). 1440x900 @ dpr 2; Metal driver on macOS Version 26.6.2 (Build 25G83); measured 2026-09-02. This is a recorded headless sample, not a browser FPS or mobile-performance guarantee.

Levels

How many tones the field is crushed to. Fewer is more graphic.

Pattern size

Bayer cell size in device pixels.

Dither

At zero the tones band; the threshold is what trades banding for texture.

Field scale

Density of the soft waves behind the dither; higher values make them smaller.

Color Looks preserve these settings. Open the editor for all 10 controls.

From preview to your project.

Choose a Look, tune it in the editor, then download the Export Kit. Install the runtime and copy the generated component into your project.

Every control in the editor is a typed prop. Leave a prop out to keep the value you exported; change one and the running shader updates without restarting. Give the surface a size and pass fallback for browsers without WebGPU.

In Next.js, use a client component and give its container an explicit size. Keep headings, links and accessible content in HTML above the decorative canvas.

Part of the Free collection for Aperveil 1.0. Public live preview and Color Looks are open. Free Export Kits do not require an account. Purchasing is not available yet.

Open editor & export
Markdown guide

Usage example — download Dither.tsx from the editor first. This example imports that local file; it is not the shader component itself.

Terminal
npm install ./vendor/aperveil-runtime-0.1.0.tgz ./vendor/aperveil-react-0.1.0.tgz
Dither usage
"use client";

import Dither from "./Dither";

export default function Hero() {
  return (
    <Dither
      className="hero-shader"
      levels={6} shadowColor="#12101fff"
      fallback={<div className="hero-shader-fallback" />}
    />
  );
}

// .hero-shader { width: 100%; height: 560px; }

Download and extract the complete Export Kit first. Run its local package command from the ZIP root, then copy the component into your project. Public npm and CLI distribution is coming soon.

Made for a real interface.

Create a restrained retro identity for a small developer tool. Use a mono technical caption and a large, clean heading above the pixel texture.

Dither used behind an example interface
PATCH NOTESExample composition

A workshop for independent software

Small tools. Lasting ideas.

Thoughtful utilities, documented decisions and room to build something of your own.

01 / Make

Start with a useful constraint

02 / Refine

Keep what matters

03 / Share

Show how it works

Illustrative layout, not a customer project. The image is a still preview of the selected Look.

An illustrative layout. Your content stays in HTML; the shader sets the atmosphere.

Try this surface in the editor

Before you ship.

What this surface does, where it fits, and where it stops.

All shaders

Make Dither yours.

Open editor