Randomness, Perlin noise, and the aesthetics of generative art
Learning objectives
- learner can articulate what generative art is, its order/chaos sweet spot, and chance as a deliberate tool
- learner can use pseudo-randomness, custom distributions, and Perlin noise to seed organic form
- learner can make generative sketches explorable and reproducible via parameterisation and random seeds
Capstone — one whole task that evidences the objectives
Design a parameterised, seed-reproducible generative sketch that sits in the order/chaos sweet spot: noise-driven organic structure with tunable named parameters and a saved seed that recreates any output.
Prerequisite modules
This module builds toward the signature act of the generative visual coder: a p5.js/Processing sketch that is neither a rigid pattern nor visual static, but a living system you can tune on stage or in the studio and recreate on demand. In live-visual and audio-reactive practice this pairing matters doubly — a VJ needs organic motion that never repeats yet stays on-brand, and a saved seed that brings back the exact frame a collaborator loved during last night’s set.
The arc starts with vocabulary and stance: what makes a system generative at all, why the order/chaos sweet spot (Pearson’s cultivated-garden metaphor) is the aesthetic target, and how chance operations make randomness a designed material rather than surrendered control. From there the learner works hands-on: the iterative random walk exercise contrasts memoryless jumps with cumulative drift, “random() vs noise()” and the Perlin noise atom supply the JIT how-to for smooth organic variation, and power-skewed distributions add visual gravity to otherwise flat randomness. The final stretch turns a working sketch into an instrument — extracting magic numbers into named parameters, bounding randomness with explicit ranges the way Reas parameterised the Chronograph fields, and pinning randomSeed() so any output can be saved, shared, and re-summoned.
Every required atom gates the capstone: the definitional and sweet-spot atoms justify the design brief, the noise/distribution/walk atoms produce the organic structure itself, and the parameterisation and seed atoms deliver tunability and reproducibility. Supporting atoms enrich the territory — 2D noise fields and grid displacement extend the technique to textures, multiplication and symmetry offer composition levers, and the collaboration framing and constraint-driven workflow deepen the craft mindset without being needed to finish the task.
Runnable examples
Generated from the context/ instrument corpus by concept (redistributable idioms only). Do not edit — regenerate with gen-module-examples.mjs.
modulation-warp
osc(4).modulate(src(o0), 0.6).out(o0)
hydra-0022 · CC0-1.0
s0.initP5(); src(s0).modulate(noize(), 0.3).out()
p5live-0038 · CC0-1.0
feedback-trail
osc(4).modulate(src(o0), 0.6).out(o0)
hydra-0022 · CC0-1.0
function draw(){ fill(0, 20); rect(0, 0, width, height); circle(mouseX, mouseY, 40) }
p5live-0003 · CC0-1.0
noise-field
noise(4, 0.1).out()
hydra-0002 · CC0-1.0
float h21(vec2 p){return fract(sin(dot(p,vec2(12.9898,78.233)))*43758.5453);}
glsl-0013 · public-domain
oscillator-texture
osc(10).out(o1)
hydra-0039 · CC0-1.0
float v = sin((st.x + u_time*0.1) * 40.0) * 0.5 + 0.5;
glsl-0024 · public-domain
grain-glitch
col += (h21(st + fract(u_time)) - 0.5) * 0.15;
glsl-0026 · public-domain
voronoi-cells
voronoi(8, 0.3, 0.3).out()
hydra-0003 · CC0-1.0
float vor(vec2 p){vec2 g=floor(p),f=fract(p);float m=8.;for(int j=-1;j<=1;j++)for(int i=-1;i<=1;i++){vec2 o=vec2(i,j);vec2 r=o+vec2(h21(g+o))-f;m=min(m,dot(r,r));}return sqrt(m);}
glsl-0025 · public-domain
flow-field
let ang = noise(x*0.01, y*0.01) * TWO_PI
p5live-0008 · CC0-1.0
scanlines
osc (200*fy) * 0.3 + [0.1,0.1,0.1] >> add
punctual-0035 · CC0-1.0
col *= 0.8 + 0.2 * sin(gl_FragCoord.y * 3.14159);
glsl-0037 · public-domain
blur-soften
filter(BLUR, 4)
p5live-0073 · CC0-1.0
chromatic-aberration
col = vec3(texture2D(u_tex0,st+vec2(.005,0)).r, texture2D(u_tex0,st).g, texture2D(u_tex0,st-vec2(.005,0)).b);
glsl-0036 · public-domain
Atoms in this module
Required — these gate the capstone
Supporting — enrichment, not gating
Part of curricula
- Audio-Visual Performer — integrated, synced live AV — Make the image listen (audio-reactive show) recommended
- Live Visualist — zero to performing live-coded & generative visuals — Generative canvas — colour, motion, and Hydra live-coding required
- VJ — visual performance with projection, light & video — Generate & compose: build your own look recommended
Unlocks — modules that require this one