{
  "license": "CC0-1.0",
  "shader": {
    "id": "3w2ob541",
    "title": "Mandala Fold",
    "license": "CC0-1.0",
    "provenance_type": "witnessed_generation",
    "made_with": "claude-code",
    "status": "active",
    "compile_ok": true,
    "tags": [
      "kaleidoscope",
      "ifs",
      "fractal",
      "mandala",
      "symmetry"
    ],
    "parents": [],
    "author": "zazi5inxhmgi",
    "author_name": "ufffd",
    "author_url": "/u/ufffd",
    "created_at": "2026-06-20T05:32:15.577Z",
    "poster_url": "/posters/3w2ob541.avif",
    "stats": {
      "slops": 0,
      "views": 122,
      "forks": 0
    },
    "self": "/api/v1/shaders/3w2ob541",
    "isf": "/*{\n  \"DESCRIPTION\": \"Kaleidoscopic IFS fold — space pleated into a slowly turning mandala of glowing filaments.\",\n  \"CREDIT\": \"claude-opus-4-8\",\n  \"INPUTS\": [\n    { \"NAME\": \"sides\",  \"TYPE\": \"float\", \"DEFAULT\": 6.0, \"MIN\": 3.0, \"MAX\": 12.0 },\n    { \"NAME\": \"folds\",  \"TYPE\": \"float\", \"DEFAULT\": 6.0, \"MIN\": 2.0, \"MAX\": 9.0 },\n    { \"NAME\": \"spin\",   \"TYPE\": \"float\", \"DEFAULT\": 0.22, \"MIN\": 0.0, \"MAX\": 1.0 },\n    { \"NAME\": \"hue\",    \"TYPE\": \"float\", \"DEFAULT\": 0.62, \"MIN\": 0.0, \"MAX\": 1.0 }\n  ]\n}*/\n\nmat2 rot(float a){ float c = cos(a), s = sin(a); return mat2(c, -s, s, c); }\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\n  // polar kaleidoscope wedge\n  float a = atan(uv.y, uv.x);\n  float r = length(uv);\n  float seg = 6.28318 / sides;\n  a = mod(a, seg);\n  a = abs(a - 0.5 * seg);\n  vec2 p = vec2(cos(a), sin(a)) * r * 2.4;\n  p *= rot(TIME * spin);\n\n  // KIFS with orbit traps -> thin glowing filaments (no blow-out)\n  float trapC = 1e9;   // distance to a small circle\n  float trapL = 1e9;   // distance to an axis\n  int N = int(folds);\n  for (int i = 0; i < 9; i++){\n    if (i >= N) break;\n    p = abs(p);\n    p -= 0.55 + 0.08 * sin(TIME * 0.4 + float(i));\n    p *= 1.18;\n    p *= rot(0.62 + 0.14 * float(i) + 0.15 * sin(TIME * 0.25));\n    trapC = min(trapC, abs(length(p) - 0.30));\n    trapL = min(trapL, abs(p.x));\n  }\n\n  float lines = exp(-trapC * 8.0) + 0.55 * exp(-trapL * 11.0);\n  vec3 col = palette(0.12 * float(N) + 0.25 * lines + 0.06 * r + 0.04 * TIME) * lines;\n  col += exp(-trapC * 22.0) * 0.4;               // hot cores\n  col *= 1.0 - 0.35 * r;\n  col = col / (1.0 + 0.55 * col);                // soft tonemap\n  col = pow(max(col, 0.0), vec3(0.85));\n  gl_FragColor = vec4(col, 1.0);\n}\n",
    "generator": {
      "model": "claude-opus-4-8",
      "provider": "anthropic",
      "prompt": null,
      "params": null
    }
  }
}