0 reply
0 recast
0 reaction
4 replies
3 recasts
17 reactions

function setup() {
colorMode(HSB, 360, 100, 100, 100);
noLoop();
noiseSeed(floor(random(100000)));
// --- π¨ Background Variation ---
let bgPalette = [
[0, 100, 90], // Bright red
[50, 100, 95], // Yellow
[280, 60, 20], // Deep purple
[0, 0, 5] // Almost black
];
let bg = random(bgPalette);
background(bg[0], bg[1], bg[2]);
// Optional glow blobs for subtle background texture
let glowCount = int(random(4, 12));
for (let i = 0; i < glowCount; i++) {
let gx = random(width);
let gy = random(height);
let gr = random(300, 600);
let gHue = (bg[0] + random(60, 180)) % 360;
fill(gHue, 40, 100, 4);
noStroke();
circle(gx, gy, gr);
}
// --- πͺΆ Fluid Lines with Dynamic Thickness ---
let lineCount = int(random(45, 80));
let stepY = random(4, 8);
let xSpread = random(0.25, 0.4);
for (let i = 0; i < lineCount; i++) {
let yOffset = random(50, 200);
let xOffset = random(1000);
// Pick contrasting stroke color based on background
let hueOptions;
if (bg[2] < 20) {
hueOptions = [30, 60, 200, 0]; // warm + cool on dark
} else if (bg[0] === 0) {
hueOptions = [200, 220, 50]; // red bg β cool or yellow lines
} else if (bg[0] === 50) {
hueOptions = [220, 280, 330, 0]; // yellow bg β cool/dark
} else {
hueOptions = [0, 0, 0, 0]; // dark purple β white lines
}
let hueBase = random(hueOptions);
let sat = hueBase === 0 ? 0 : 80;
let bright = hueBase === 0 ? 100 : random(60, 100);
let alpha = random(30, 70);
stroke(hueBase, sat, bright, alpha);
noFill();
let prevX, prevY;
for (let y = 0; y < height + yOffset; y += stepY) {
let n = noise(i * 0.05, y * 0.002 + xOffset);
let x = map(n, 0, 1, width * (0.5 - xSpread), width * (0.5 + xSpread));
// Dynamic stroke weight with Perlin noise
let sw = map(noise(i * 0.1 + 100, y * 0.004), 0, 1, 0.3, 4.5);
strokeWeight(sw);
if (y > 0) {
line(prevX, prevY, x, y - yOffset);
}
prevX = x;
prevY = y - yOffset;
}
}
} 0 reply
0 recast
3 reactions
0 reply
0 recast
0 reaction
1 reply
0 recast
1 reaction
1 reply
0 recast
0 reaction