{
  "license": "CC0-1.0",
  "shader": {
    "id": "og5le7jg",
    "title": "Phyllotaxis Bloom",
    "license": "CC0-1.0",
    "provenance_type": "witnessed_generation",
    "made_with": "claude-code",
    "status": "active",
    "compile_ok": true,
    "tags": [
      "phyllotaxis",
      "golden-ratio",
      "dots",
      "spiral",
      "generative"
    ],
    "parents": [],
    "author": "zazi5inxhmgi",
    "author_name": "ufffd",
    "author_url": "/u/ufffd",
    "created_at": "2026-06-20T05:32:18.321Z",
    "poster_url": "/posters/og5le7jg.avif",
    "stats": {
      "slops": 0,
      "views": 108,
      "forks": 2
    },
    "self": "/api/v1/shaders/og5le7jg",
    "isf": "/*{\n  \"DESCRIPTION\": \"Layered golden-angle phyllotaxis — counter-rotating sunflower lattices of glowing dots and rings around a bright core.\",\n  \"CREDIT\": \"claude-opus-4-8\",\n  \"INPUTS\": [\n    { \"NAME\": \"count\",  \"TYPE\": \"float\", \"DEFAULT\": 360.0, \"MIN\": 60.0, \"MAX\": 500.0 },\n    { \"NAME\": \"spread\", \"TYPE\": \"float\", \"DEFAULT\": 0.05, \"MIN\": 0.02, \"MAX\": 0.09 },\n    { \"NAME\": \"size\",   \"TYPE\": \"float\", \"DEFAULT\": 0.03, \"MIN\": 0.01, \"MAX\": 0.06 },\n    { \"NAME\": \"hue\",    \"TYPE\": \"float\", \"DEFAULT\": 0.08, \"MIN\": 0.0, \"MAX\": 1.0 }\n  ]\n}*/\n\nvec3 palette(float t){\n  return 0.5 + 0.5 * cos(6.28318 * (t + vec3(0.0, 0.33, 0.67) + hue));\n}\n\nvoid main(){\n  vec2 uv = (gl_FragCoord.xy - 0.5 * RENDERSIZE) / RENDERSIZE.y;\n  const float GA = 2.39996323;   // golden angle\n\n  vec3 col = vec3(0.0);\n  // bright breathing core\n  col += palette(0.5 + 0.08 * TIME) * 0.35 * exp(-dot(uv, uv) * 9.0);\n\n  int N = int(count);\n  // layer A — filled dots, spiraling clockwise, warm side of palette\n  for (int i = 0; i < 500; i++){\n    if (i >= N) break;\n    float fi = float(i);\n    float ang = fi * GA + TIME * 0.3;\n    float rad = spread * sqrt(fi);\n    vec2 pos = rad * vec2(cos(ang), sin(ang));\n    float d = length(uv - pos);\n    float s = size * (1.0 - 0.4 * rad);\n    float core = smoothstep(s, s * 0.35, d);\n    float halo = exp(-d * d / (s * s * 7.0)) * 0.45;\n    float phase = fi / count;\n    vec3 c = palette(phase + 0.1 * sin(TIME * 0.5 + fi * 0.05));\n    float puls = 0.65 + 0.45 * sin(TIME * 2.0 - fi * 0.2);\n    col += (core + halo) * c * puls;\n  }\n\n  // layer B — finer rings, counter-rotating, offset hue -> depth + interest\n  int M = int(count * 0.7);\n  for (int i = 0; i < 500; i++){\n    if (i >= M) break;\n    float fi = float(i);\n    float ang = fi * GA - TIME * 0.22 + 1.3;\n    float rad = spread * 1.18 * sqrt(fi);\n    vec2 pos = rad * vec2(cos(ang), sin(ang));\n    float d = length(uv - pos);\n    float rr = size * 0.62 * (1.0 - 0.4 * rad);\n    float ring = smoothstep(rr * 0.5, 0.0, abs(d - rr)) * 0.8;     // annulus\n    vec3 c = palette(0.5 + fi / float(M) + 0.05 * TIME);\n    float puls = 0.6 + 0.4 * sin(TIME * 1.6 + fi * 0.15);\n    col += ring * c * puls;\n  }\n\n  col = col / (1.0 + 0.7 * col);     // tonemap dense overlaps\n  col += 0.015;                      // lift blacks a touch\n  col = pow(col, vec3(0.82));\n  gl_FragColor = vec4(col, 1.0);\n}\n",
    "generator": {
      "model": "claude-opus-4-8",
      "provider": "anthropic",
      "prompt": null,
      "params": null
    }
  }
}