Skip to content

Transform Compare Section

One source through every transform, split by a wipe you drag: a raymarched still life on the left, and on the right true Atkinson or Floyd–Steinberg diffusion, blue noise, Bayer, halftone or shape-matched ASCII.

ProDither & ASCIIminimaleditorial

This is a viberdy Pro component

The live preview, the props panel and the write-up are open to everyone. The full source, the AI prompt and CLI install are part of Pro.

Preview

Transforms

One source. Every output.

Drag the line. Left is the original; right is what the edge sends back, computed per request.

SourceAtkinson

GET /v1/i/still-life.png?t=atkinson&cell=2

Props

2
No runtime dependencies
"use client";

import { useEffect, useRef, useState, useSyncExternalStore } from "react";
import type { CSSProperties, KeyboardEvent as ReactKeyboardEvent, PointerEvent as ReactPointerEvent, ReactNode, RefObject } from "react";

/**
 * TransformCompareSection — one source through every transform, split by a wipe you drag.
 *
 * A still life is raymarched once in WebGL2. Left of the wipe it is the
 * source; right of it, the transform you pick: true Atkinson or
 * Floyd–Steinberg error diffusion (on the CPU, over the cell grid), blue
 * noise, Bayer 8x8, a halftone screen or shape-matched ASCII. Changes
 * dissolve through blue noise; cell size keys set the grain; the request
 * line counts the cells. The wipe is a keyboard slider. Pass `image` to
 * compare your own picture.
 *
 * Part of the Dither & ASCII kit: one ink, paper #f3f0e6, on a warm black
 * ground #0b0b0d, with vermillion #ff4f2b as a second ink inside the

  // ---------------------------------------------------------------
  // Full source available with a viberdy Pro subscription.
  // https://viberdy.dev/pricing
  // ---------------------------------------------------------------
}
Notes

About this section

A features section where the feature is shown working. A still life (a ball in signal, a ring on its edge and a turned block on a cyclorama under one soft light, with soft shadows and occlusion) is raymarched once in WebGL2. A wipe divides it: to the left, the source; to the right, the transform you choose. Atkinson and Floyd–Steinberg are the real sequential algorithms, run on the CPU over the cell grid read back from the GPU, not a blurred imitation; blue noise and Bayer 8x8 are ordered dithers compared in linear light; the halftone is a rotated screen with the signal on its own angle; ASCII matches the shape of every cell. Drag the wipe anywhere on the picture or move it with the arrow keys; changing the transform dissolves through blue noise; the cell keys set the grain from 1 to 3 pixels; and a mono request line names the output and counts its cells.

Curator’s note

The Dither & ASCII kit's feature section (slot 7), cut from dither-ascii-site. Pro: the kit's WebGL2 stage with a raymarched still life rendered once, a split composite, and CPU error diffusion read back from the GPU.

Related

Pairs well with

Matched on shared tags and category — the entries most likely to be used alongside this one.

Featured
NewPro

A first screen whose picture is computed live: a plane of spheres under a low sun, printed in blue-noise dither, with a loupe under the pointer that shows it as shape-matched ASCII, a halftone screen, Bayer or the source.

herowebgldither
NewPro

The whole Dither & ASCII kit as one site for an image pipeline: a density nav, a live dithered hero with a transform loupe, an ASCII field, a transform comparison, printing cards, a drop-to-dither form, noise-fill pricing and an ASCII wordmark footer.

templatelanding pagedeveloper tools
NewPro

The sunrise laid out on a timeline and scrubbed by the scroll: the section pins, 05:30 to 07:00 runs with the scroll, the lamp rendered live rises along its curve, and the time, colour, output and phase follow.

sectionscrollscrub