Halftone & dither studies
Five screens, one ink, and four findings that survived.
窯 · THE STAR TREATMENT
POSTERIZE 3 TONES · BAYER 8 · PIXEL 2 · RADIAL FALLOFF · PAPER → EMBER → VOIDA self-initiated study, run before any of it was allowed near a page. The question was narrow: which screens hold up on real subjects, at the sizes they are actually seen, in one ink on paper.
Five screens were run on five subjects, and every one of them measured against a linear tone ramp. Four findings survived, and they are below in the settings they settled at.
The plates below are the engine's live output at the size you are reading them, not exports.
The screens settled here are what every mark the studio draws is printed with, and drawing marks is the first of the two commissions. What a brand identity commission includes →
- What was made
- A treatment engine, and the plates that argued for it
- Screens tested
- AM halftone · ordered Bayer 2/4/8 · Floyd–Steinberg · Atkinson · posterize
- Subjects
- 窯 火 手 · the mark · KILN set in Switzer 900 · tonal fields
- Settled on
- AM cell 12 at 15° for objects · Bayer 8 at pixel 2 for atmosphere · Atkinson at pixel 2 for type · three tones, paper → ember → void
- Built with
- TypeScript · canvas 2D · no libraries
- Year
- 2026
THE FINDINGS
Five screens · five subjects · judged at 1440×900 and 2560×1440Settled · in use since
What halftone cell size and screen angle survive on a real object?
AM halftone belongs on objects, at cell 12 and a screen angle of 15°. Cell is measured in CSS pixels rather than device pixels, so a setting written down looks the same on any display. At 45° it reads as a filter somebody applied, because 45° is where every stock halftone filter puts it. Below 96px of subject a screen stops being material at all, and the engine prints solid ink instead.
Which dither belongs on a gradient?
Ordered Bayer 8×8 at pixel 2, with gamma 2.2 holding the tone back. Measured flat, without the gamma, the matrix tracks true darkness to within a hundredth the whole way up — 0.04 coverage at 0.05 source, 0.96 at 0.95 — where a 2×2 matrix quantises the same ramp to five steps; the 2.2 then leans the whole ramp darker, on purpose. It behaves like a surface instead of an image, which is what lets it hold a viewport without competing with the type set on it.
Which dither algorithm works on type?
Atkinson, at pixel 2, serpentine. It discards 2/8 of its error rather than passing all of it on, so its response is an S-curve: it crushes below 0.15 darkness and blows out above 0.85, where Floyd–Steinberg stays unbiased across the range. That loss is the finding — the way an edge comes apart under it reads as print rather than as a fade.
Why does a dither collapse on a solid glyph?
Because a solid subject is already 1-bit, so there is no tone to diffuse: ordered dither, error diffusion and posterize all land on the same silhouette a hard threshold gives. A tonal ramp multiplied into the subject before any screening runs — radial for heat coming off an object, linear for type that has to stay solid at the top — is what gives a screen something to bite on.
OBJECTS · THE MARK
AM HALFTONE · CELL 12 · 15° · ROUND DOTATMOSPHERE · A TONAL FIELD
ORDERED BAYER 8×8 · PIXEL 2 · GAMMA 2.2TYPE · KILN IN SWITZER 900
ATKINSON · PIXEL 2 · SERPENTINE · LINEAR FALLOFF窯 · THE SUBJECT, THREE TONES
POSTERIZE 3 · BAYER 8 · PIXEL 2 · RADIALTHE COUNTER-EXAMPLE · THE SAME MARK AT 45°
AM HALFTONE · CELL 12 · 45° · THE ANGLE THE STUDY REJECTEDTHE ASK
Taking work now.
Say what needs making. Answered personally, within a day.