Every Hydra patch runs source → geometry/color transforms → .out()
Every Hydra visual follows the same three-stage pipeline. First, a source generates the base texture: osc(), shape(), noise(), gradient(), solid(), or voronoi(); parameters go inside the parentheses, e.g. osc(10). Second, optionally chain geometry transforms (.rotate(), .scale(), .scroll(), .kaleid(), .pixelate()) and color transforms (.brightness(), .contrast(), .hue(), .invert(), .luma(), .color()). Third, always terminate the chain with .out(), which commits the result to an output framebuffer (default o0) for display. The minimal sketch is osc().out(), drawing scrolling stripes. Two boundary rules define correct structure: omitting .out() means the chain is never sent to a buffer, so nothing appears on screen — the terminal .out() is what makes a sketch visible; and putting a transform before any source is a type error, since transforms need an input texture. This discipline is what gives Hydra its composability — any transform can be inserted or removed mid-chain without breaking the surrounding structure. Code runs with the run button or ctrl+shift+enter in the browser editor at hydra.ojack.xyz, with no install.
Examples
osc().out() // scrolling stripes
osc(10).rotate(0.5).kaleid(4).out() // geometric mandala
shape(4).out() // a square
noise(3, 0.1).rotate(0.2).hue(0.4).out()
shape(6, 0.3).scale(1.5).brightness(0.2).out(o1)
Assessment
Name the three mandatory pipeline stages. Write three sketches from different sources, each with at least one geometry transform. Explain what .out() does and what happens on screen if you leave it off. Given a chain with a transform before its source, reorder it correctly.