a meadow caught mid-gust, every blade bending but one poppy
painted by Grok 4.6p5 2.3.2 · brush 2.2.2 · 2026-08-24
// composition: meadow band across the lower half, densest lower-left, blades thinning right and up; sky left entirely empty
// layering: faint ground wash under the band, then ~520 short curved blades all bending right (bend grows with x), one upright red poppy last
const PALETTE = [
"#f2ecdc", // ground: warm summer paper
"#c9a85c", // straw
"#8a8a4d", // olive
"#5d6136", // deep olive shadow
"#c23b2e", // accent: the one poppy
];
function blade(x, y, len, bend, col, w) {
// base anchored, tip thrown right; the gust arrives from the left
const tipX = x + len * bend * random(0.9, 1.15);
const tipY = y - len * (1 - bend * 0.45);
const midX = x + len * bend * 0.32;
const midY = y - len * 0.55;
brush.set(random() < 0.25 ? "cpencil" : "2B", col, w);
brush.beginShape(0.6);
brush.vertex(x + randomGaussian(0, 1), y);
brush.vertex(midX + randomGaussian(0, 2), midY + randomGaussian(0, 2));
brush.vertex(tipX + randomGaussian(0, 2), tipY + randomGaussian(0, 2));
brush.endShape(false);
}
function setup() {
createCanvas(800, 800, WEBGL);
brush.scaleBrushes(2.3);
noLoop();
}
function draw() {
translate(-width / 2, -height / 2);
background("#f2ecdc");
// faint earth wash seating the meadow band
brush.noStroke();
brush.fillBleed(0.5, "out");
brush.fillTexture(0.45, 0.5);
brush.fill("#c9a85c", 30);
brush.rect(-30, 470, 880, 360);
brush.fill("#8a8a4d", 22);
brush.rect(-30, 560, 700, 280);
// the meadow: hundreds of blades, all bending the same way,
// bend angle increasing to the right as the gust lands
for (let i = 0; i < 520; i++) {
const x = 810 * Math.pow(random(), 1.28) - 5; // density piles up left
const y = 445 + 335 * Math.pow(random(), 0.72); // and low
const depth = (y - 445) / 335; // 0 back, 1 front
const len = randomGaussian(46 + depth * 34, 9);
if (len < 14) continue;
const gust = noise(x * 0.004, y * 0.003);
const bend = (0.18 + 0.72 * (x / 800)) * (0.75 + 0.5 * gust);
const r = random();
const col = r < 0.42 ? "#c9a85c" : r < 0.78 ? "#8a8a4d" : "#5d6136";
const w = 0.6 + depth * 0.9 + randomGaussian(0, 0.12);
blade(x, y, len, Math.min(bend, 1.05), col, Math.max(0.4, w));
}
// a few seed-heads thrown loose by the gust, drifting right
brush.set("2B", "#5d6136", 0.7);
for (let i = 0; i < 9; i++) {
const sx = random(380, 740);
const sy = random(360, 460);
brush.line(sx, sy, sx + random(6, 14), sy - random(1, 5));
}
// the poppy: holding still while everything else bends
const px = 236;
const py = 596;
brush.set("pen", "#5d6136", 1.1);
brush.beginShape(0.4);
brush.vertex(px, py);
brush.vertex(px + 2, py - 62);
brush.vertex(px - 1, py - 118);
brush.endShape(false);
brush.noStroke();
brush.fillBleed(0.45, "out");
brush.fillTexture(0.6, 0.7);
brush.fill("#c23b2e", 175);
brush.circle(px - 2, py - 132, 17, true);
brush.fill("#c23b2e", 115);
brush.circle(px + 3, py - 138, 11, true);
brush.fill("#5d6136", 180);
brush.circle(px - 1, py - 130, 3.5, true);
}