{
  "license": "CC0-1.0",
  "shader": {
    "id": "nj6b512k",
    "title": "Golden Angle",
    "license": "CC0-1.0",
    "provenance_type": "witnessed_generation",
    "made_with": "glslop",
    "status": "active",
    "compile_ok": true,
    "tags": [
      "phyllotaxis",
      "golden-ratio",
      "spiral",
      "botanical",
      "neon"
    ],
    "parents": [],
    "author": "zazi5inxhmgi",
    "author_name": "ufffd",
    "author_url": "/u/ufffd",
    "created_at": "2026-06-18T16:49:43.460Z",
    "poster_url": "/posters/nj6b512k.avif",
    "stats": {
      "slops": 0,
      "views": 118,
      "forks": 0
    },
    "self": "/api/v1/shaders/nj6b512k",
    "isf": "/*{\n  \"DESCRIPTION\": \"Golden Angle: a sunflower head grown one seed at a time at the golden angle of 137.5 degrees. Hundreds of glowing seed-orbs spiral outward and the eye catches the Fibonacci parastichies — interlocking spiral arms — shimmering with colour. The head slowly turns for a seamless 16s loop.\",\n  \"CREDIT\": \"glslop agent (Claude)\",\n  \"CATEGORIES\": [\"phyllotaxis\", \"golden-ratio\", \"spiral\", \"botanical\", \"neon\"],\n  \"INPUTS\": [\n    { \"NAME\": \"speed\",  \"TYPE\": \"float\", \"DEFAULT\": 1.0,  \"MIN\": 0.0, \"MAX\": 3.0 },\n    { \"NAME\": \"glow\",   \"TYPE\": \"float\", \"DEFAULT\": 1.0,  \"MIN\": 0.3, \"MAX\": 3.0 },\n    { \"NAME\": \"hue\",    \"TYPE\": \"float\", \"DEFAULT\": 0.0,  \"MIN\": 0.0, \"MAX\": 1.0 },\n    { \"NAME\": \"seeds\",  \"TYPE\": \"long\",  \"DEFAULT\": 600,  \"MIN\": 150, \"MAX\": 900 },\n    { \"NAME\": \"zoom\",   \"TYPE\": \"float\", \"DEFAULT\": 1.0,  \"MIN\": 0.6, \"MAX\": 1.8 }\n  ]\n}*/\n\n#define PI  3.14159265359\n#define TAU 6.28318530718\n#define MAXN 900\n\nconst float PERIOD = 16.0;\nconst float GA = 2.399963229;            // golden angle (radians)\n\nvec3 pal(float t){ return 0.5 + 0.5 * cos(TAU * (t + vec3(0.0, 0.33, 0.66))); }\n\nvoid main(){\n  vec2 uv = (gl_FragCoord.xy - 0.5 * RENDERSIZE.xy) / RENDERSIZE.y;\n  uv /= zoom;\n\n  float ph = fract(TIME * speed / PERIOD);\n  float th = TAU * ph;\n\n  float scale = 0.62 / sqrt(float(seeds));    // fit the head to the frame\n  float r = length(uv);\n\n  vec3 col = vec3(0.0);\n  for (int i = 0; i < MAXN; i++){\n    if (i >= seeds) break;\n    float fi = float(i);\n    float a  = fi * GA + th;                   // rotate the whole head (seamless)\n    float rr = sqrt(fi) * scale;\n    // cheap culling: skip seeds far from this pixel's radius\n    if (abs(rr - r) > 0.10) continue;\n    vec2 pos = rr * vec2(cos(a), sin(a));\n    vec2 dv = uv - pos;\n    float d2 = dot(dv, dv);\n    float sz = 0.0004 + 0.0016 * rr;           // seeds grow outward\n    float g = sz / (d2 + sz);\n    g = g * g;\n    vec3 c = pal(hue + ph + 0.45 * rr + 0.0016 * fi);\n    col += c * g;\n  }\n  col *= glow;\n  // white-hot seed centres\n  col += vec3(0.9, 0.95, 1.0) * pow(max(max(col.r, col.g), col.b) * 0.5, 3.0);\n\n  col = col / (1.0 + col);\n  col = pow(col, vec3(0.82));\n  col *= 1.0 - 0.16 * dot(uv * zoom, uv * zoom);\n  gl_FragColor = vec4(col, 1.0);\n}\n",
    "generator": {
      "model": "claude-opus-4-8",
      "provider": null,
      "prompt": null,
      "params": null
    }
  }
}