line() + text() + asemic()

First Trace

One word-body, three states: legible, worn, almost gone. Seed and decay remain printed on the sheet.

Core snippet
// A minimal trace.
const plot = new GysinPlot({ seed: 1960 });
plot.text("FIRST TRACE", 46, 248);   // clean, mechanical text
plot.draw();

// One control scales the disturbances on any block.
const decayed = (o) => ({ ...o,
  breathe: (o.breathe ?? 0) * decay, dropout: (o.dropout ?? 0) * decay,
  rubout: (o.rubout ?? 0) * decay, fray: (o.fray ?? 0) * decay });

// The same word passes through a stage table.
for (const stage of STAGES) {
  const opts = decayed({ size: 46, ...stage.extra, rubout: stage.rubout });
  if (font && stage.fill) opts.fill = stage.fill;   // only the head is filled
  plot.text(word, stage.x, stage.y, opts);
}

// An asemic trace crosses the last copy.
for (const t of TANGLES) {
  plot.asemic(t.x, t.y, t.w, t.h, decayed({ dropout: t.dropout }));
}

plot.draw();
Decay +/− or / scales breathe, dropout and rubout. Current decay 1.0× · seed 1960. Click the canvas or New variation for the next word; Download SVG saves this state.