breathe · dropout · repeat · rubout

Parameter Lab

Four controls, four elements. Hover a slider or tap a legend row to isolate its element.

Core snippet
// A clean title.
const plot = new GysinPlot({ seed: 8319 });
plot.text("PISTOL POEM", 70, 150);   // clean, mechanical text
plot.draw();

// The title belongs to BREATHE.
plot.text("PISTOL POEM", 70, 150, { breathe: value("breathe") });

// ERASE belongs to RUBOUT.
plot.text("ERASE", 70, 214, { rubout: value("rubout") });

// The line band belongs to REPEAT.
plot.path(waveRow(70, 490, y, amp, phase), { repeat: value("repeat") });

// The ruled block belongs to DROPOUT.
for (let i = 0; i < 9; i++) {
  plot.line(70, 428 + i * 8, 490, 428 + i * 8, { dropout: value("dropout") });
}

// The letter field remains fixed reference ink.
plot.letters("WORD CUT FREE", 300, 150, 190, 100, { size: 10 });

plot.draw();
measuring…
The stats show total plot cost and the active element's share. Reset sliders restores the plate; R rerolls and S saves SVG.