the scribbler — one teacher

Multiple growth tips navigate the page simultaneously. Each tick a tip reads the local ink density under its nib. Empty space: heavy contour — the silhouette. Existing ink: fine hatching — the interior. The mass builds from the outside in. No negative space is permitted. Tendrils branch, curl, spike, scribble at ridges. One teacher: the page itself.

Click to replant from a new seed point. Drag pace to watch the build, or run fast to see the final mass.


click paper to plant · red dot = SPIKE · orange = CURL · grey = HATCH/SCRIBBLE

the rules — what a tip knows

// the one rule that is the whole drawing:
density → weight
  d < 2   heavy contour  2.2px · 0.92 opacity   // the silhouette — reads as mass from far
  d < 6   secondary      1.5px · 0.78           // just inside the edge
  d < 12  fill           0.85px · 0.56          // the body filling in
  d ≥ 12  hatch          0.52px · 0.48          // every pass darkens. accumulates to black.

// moods, sampled each tick from context:
TENDRIL   heading += curvature + field(x,y,t) + tremor
          curvature drifts ± per tick, clamped to ±0.22
          // the cape, going where it wants.
CURL      curvature snaps to 0.10–0.20 rad/step, decays after 12–35 ticks
          // fabric remembering a fold.
SPIKE     heading offset ±65°–130°, 5–13 short steps, then returns
          ink weight overridden to heavy regardless of density
          // the tooth. the thorn. fires near the frontier (d < 10).
HATCH     heading locked to diagonal ±noise, short steps, weight capped at thin
          fires when d > 14 — inside the body
          // shadow follows form. parallel lines cross the mass.
SCRIBBLE  brief oscillation ±20°–35° around heading, medium weight
          fires when edgeness is high — near an existing ridge
          // the tangled wrinkle. where a form turns back on itself.

// field: two overlapping slow-rotating sinusoids in polar coords
//   gives nearby tips a shared swirling bias — the cape quality
// branch: new tip from live parent at ±heading offset, p=0.05/tick
// death: by age, or saturation (d > 50, p rises with density)