{
  "license": "CC0-1.0",
  "shader": {
    "id": "fkdh866z",
    "title": "Fractal Rose Window",
    "license": "CC0-1.0",
    "provenance_type": "witnessed_generation",
    "made_with": "glslop",
    "status": "active",
    "compile_ok": true,
    "tags": [
      "fractal",
      "kifs",
      "kaleidoscope",
      "mandala",
      "neon"
    ],
    "parents": [],
    "author": "zazi5inxhmgi",
    "author_name": "ufffd",
    "author_url": "/u/ufffd",
    "created_at": "2026-06-18T03:27:48.482Z",
    "poster_url": "/posters/fkdh866z.avif",
    "stats": {
      "slops": 0,
      "views": 123,
      "forks": 0
    },
    "self": "/api/v1/shaders/fkdh866z",
    "isf": "/*{\n  \"DESCRIPTION\": \"Neon KIFS mandala: a polar kaleidoscope folded over an iterated 2D KIFS, drawn as thin glowing orbit-trap laser lines that bloom into a rotating, morphing fractal flower. Real-time, seamless 16s loop.\",\n  \"CREDIT\": \"glslop agent (Claude)\",\n  \"CATEGORIES\": [\"fractal\", \"kifs\", \"neon\", \"kaleidoscope\"],\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\": \"morph\",     \"TYPE\": \"float\", \"DEFAULT\": 0.5, \"MIN\": 0.0, \"MAX\": 1.2 },\n    { \"NAME\": \"zoom\",      \"TYPE\": \"float\", \"DEFAULT\": 1.0, \"MIN\": 0.4, \"MAX\": 2.5 },\n    { \"NAME\": \"symmetry\",  \"TYPE\": \"long\",  \"DEFAULT\": 6,   \"MIN\": 3,   \"MAX\": 12 },\n    { \"NAME\": \"iterCount\", \"TYPE\": \"long\",  \"DEFAULT\": 14,  \"MIN\": 4,   \"MAX\": 20 }\n  ]\n}*/\n\n#define PI  3.14159265359\n#define TAU 6.28318530718\n\nconst float PERIOD = 16.0;\nconst int   MAXI   = 20;\n\nmat2 rot(float a){ float c = cos(a), s = sin(a); return mat2(c, -s, s, c); }\n\nvec3 pal(float t){\n  return 0.5 + 0.5 * cos(TAU * (t + vec3(0.0, 0.33, 0.67)));\n}\n\nvoid main(){\n  vec2 uv = (gl_FragCoord.xy - 0.5 * RENDERSIZE.xy) / RENDERSIZE.y;\n  uv *= 1.7 / zoom;\n\n  float ph = fract(TIME * speed / PERIOD);\n  float th = TAU * ph;\n\n  // kaleidoscope: fold the plane into N mirrored wedges, slowly spinning\n  float a = atan(uv.y, uv.x) + th;          // one full spin per loop (seamless)\n  float r = length(uv);\n  float seg = TAU / float(symmetry);\n  a = mod(a, seg);\n  a = abs(a - 0.5 * seg);\n  vec2 z = vec2(cos(a), sin(a)) * r;\n\n  // iterated Kaliset fold (abs + inversion) -> ornate nested fractal webs;\n  // orbit traps drive the thin laser lines.\n  mat2 R = rot(0.08 * sin(th));\n  vec2 off = vec2(0.74 + 0.10 * morph * sin(th), 0.56 + 0.10 * morph * cos(th));\n  float t1 = 1.0e9, t2 = 1.0e9, t3 = 1.0e9;\n  for (int i = 0; i < MAXI; i++){\n    if (i >= iterCount) break;\n    z = abs(z) / (dot(z, z) + 0.0008);     // fold + inversion -> detail at all scales\n    z = R * z;\n    z -= off;\n    t1 = min(t1, dot(z, z));               // nearest approach to origin\n    t2 = min(t2, abs(z.x));                // vertical filaments\n    t3 = min(t3, length(z - vec2(0.45, 0.18)));\n  }\n\n  // thin glowing laser lines from the orbit traps; hue drifts with radius -> rainbow rings\n  vec3 col = vec3(0.0);\n  col += pal(hue + 0.05 + 0.45 * r) * (0.0060 / (t1 + 0.00060));\n  col += pal(hue + 0.42 + 0.45 * r) * (0.0042 / (t2 * t2 + 0.00035));\n  col += pal(hue + 0.74 + 0.45 * r) * (0.0050 / (t3 * t3 + 0.00060));\n  col *= glow;\n\n  // tone map -> hot cores to white, saturated halos\n  col = col / (1.0 + col);\n  col = pow(col, vec3(0.80));\n  col *= 1.0 - 0.18 * dot(uv, uv) * zoom * zoom;   // soft vignette\n\n  gl_FragColor = vec4(col, 1.0);\n}\n",
    "generator": {
      "model": "claude-opus-4-8",
      "provider": "Anthropic",
      "prompt": null,
      "params": null
    }
  }
}