KILN / MOLTEN TYPE WORKS
SPECIMEN No. 07
EST. MMXXVI

KILN

molten type works
A  Æ  g  Q  æ  R  ß  &  7
01 · INGOT  —  texElementImage2D() → …
MOVE to stir the melt
Chrome Origin Trial · html-in-canvas · M148 → M150

This is not a picture of type. It is live HTML — a real <div> with a real typeface, laid out by the browser — pushed through a GPU shader as a texture and poured back out molten. Select it. A screen reader still reads it. Everything above the fold is one element and one texElementImage2D() call.

six castings follow
Renderer—
draw path—
WebGPU—
paint evt—
on-device AI—
frame—
Casting 02ctx.drawElementImage()

The Crucible

A specimen card goes into the melt: heading, definition list, a working button, a slider. The heat displacement is computed per-pixel from the card's own rendered pixels, so the distortion knows where the letters are. Press and hold to stoke it. Every control underneath stays clickable while it liquefies — the DOM never left.

Grade 02 · Crucible 1480 °C

Slagcast

A display serif for things that survive the furnace.

Weights
7  /  2 italic
Glyphs
1 204
Optical
6 – 96 pt
Licence
Foundry Open
58%
02 · CRUCIBLE  —  2D drawElementImage → …
HOLD to stoke
Casting 03refraction · dispersion

The Lens

Two columns of real editorial copy, with a slab of ground glass resting on them. Drag the lens. It magnifies, bends and splits the text into its colour channels at the rim — and because the type underneath is still text, you can select a sentence straight through the glass.

On the Casting of Letters

Foundry note №3 · translated from the 1764 manual

Metal remembers the mould long after the mould is gone. A punch cut in steel, driven into copper, filled with an alloy of lead and tin and a whisper of antimony — and what emerges is a letter that will print ten thousand times before its shoulders round off. The foundryman's art was never really about metal. It was about anticipating wear.

Consider the counter — the enclosed white of an a, a g, an e. Too tight and the ink floods it at speed, and the page turns to mud by the third impression. Too open and the letter loses its weight, goes thin and papery beside its neighbours. The correct answer is not a measurement; it is a judgement about how much abuse the page will take.

“Cut for the worst press you will ever meet, not the best.”

Screen type inherited this whole inheritance and then quietly discarded it. The enemy is no longer ink spread but the pixel grid — a letter must survive being resolved onto a lattice that does not care about its intentions. Hinting was our antimony. Then the lattice got fine enough that the problem mostly dissolved.

What did not dissolve is the canvas problem. For thirty years the drawing surface of the web has been able to render a rectangle, a bezier, a bitmap — and a single run of unstyled text, badly. No line breaking worth the name. No bidirectional text. No ligature it did not have to be begged for. Anyone who wanted a chart legend, a game menu, a caption in a shader was told to lay it out by hand, glyph by glyph, and to forget about the screen reader entirely.

Which is the joke of this specimen. The paragraph you are reading is not drawn. It is laid out, by the same engine that lays out the rest of the page, with the same line breaker and the same shaper — and then handed to the GPU as a texture, so that a piece of imaginary glass can bend it. The refraction is a performance. The text is real.

03 · LENS  —  chromatic refraction → …
DRAG the glass  ·  SELECT through it
Casting 04copyElementImageToTexture()

The Ribbon

The broadsheet is a flat HTML document. The surface it is printed on is not. This is the WebGPU path — the element goes to a texture via copyElementImageToTexture(), then onto a ribbon of geometry that twists, catches a light and flexes as you scroll past it.

Slagcast Broadsheet No. 04 · Recto
Hamburgefonstiv
The quick onyx goblin jumps over the lazy dwarf
A B C D E F G a b c d e f g 0 1 2 3 4 5 6 7 8 9 & ? ! @
Æsthetic ligatures — fi fl ff ffi — and a diphthong or two
Cast in the kiln · 2026 Opt. size 6–96 pt Sheet 04 / 06
04 · RIBBON  —  WebGPU element→texture → …
SCROLL to flex the sheet
Casting 05instanced · 4 096 shards

Quench

Cool it too fast and it fails. The panel is diced into four thousand instanced quads, each one carrying its own square of genuinely-rendered HTML, and thrown. Click to shatter — the shards remember their text the whole way down, then reassemble into a panel you can still read.

QUENCH

rapid cooling · grade 05 · brittle

Hardness64 HRC
BathBrine
Δ Temp1 420°
Shards4 096
05 · QUENCH  —  instanced shards → …
CLICK to shatter
Casting 06instrumentation

The Furnace Panel

No claims, just readings. This panel reports what your browser actually exposed when the page loaded, live frame cost, the worker-thread casting path, and — if your Chrome has the model — copy generated on-device with the temperature knob wired to the sampling-params trial.

Trial surface detected

Mode—
Paint events0

Frame cost

Frame— ms
Rate— fps
Draws / frame—
Shards live—

Worker casting · captureElementImage

Off-thread cast Transferred

This card was snapshotted, handed to a worker, and painted into an OffscreenCanvas.

frame 0
captureElementImage() returns a transferable ElementImage. The main thread never rasterises it — the worker does, then hands the position back by postMessage.

On-device specimen copy

Press Cast copy to generate a specimen paragraph.
Kiln temperature0.80
top K8

Run it hot

Enable the trial locally in Chrome Canary 149+, no token required:
chrome://flags/#canvas-draw-element
Or launch Chrome with the flag directly:
--enable-blink-features=CanvasDrawElement
Then reload. The badge in the masthead flips to TRIAL LIVE and every casting above switches to the real element-to-texture path. Click the badge any time to expose the underlying HTML layer.

What is actually a trial

html-in-canvasOT · M148→150
Prompt API sampling paramsOT · active
WebGPU compat modeshipped
View transitionsshipped
Scroll-driven animationsshipped
Canvas Mesh2D · drawMeshprototype
Most of the visually interesting things Chrome shipped recently have already left origin trial. The genuinely experimental surface here is html-in-canvas, with the Prompt API's sampling parameters alongside it.