{
  "license": "CC0-1.0",
  "shader": {
    "id": "v81q73ov",
    "title": "Kaleidoscopic domain-warped plasma with pulsing rings and film grain, animated continuously",
    "license": "CC0-1.0",
    "provenance_type": "witnessed_generation",
    "made_with": "SLOP SPLICER",
    "made_with_app": "xfgeujl3",
    "status": "active",
    "compile_ok": true,
    "render_hash": "3c6efffdffff623c",
    "tags": [],
    "parents": [],
    "author": "zazi5inxhmgi",
    "author_name": "ufffd",
    "author_url": "/u/ufffd",
    "created_at": "2026-08-30T19:19:29.680Z",
    "poster_url": "/posters/v81q73ov.avif",
    "stats": {
      "slops": 0,
      "views": 104,
      "forks": 0
    },
    "self": "/api/v1/shaders/v81q73ov",
    "isf": "/*{\n\t\"DESCRIPTION\": \"Kaleidoscopic domain-warped plasma with pulsing rings and film grain, animated continuously\",\n\t\"CATEGORIES\": [\"generative\"],\n\t\"INPUTS\": []\n}*/\n\nprecision highp float;\n\n#define TAU 6.28318530718\n\nfloat hash21(vec2 p) {\n\tp = fract(p * vec2(234.34, 435.345));\n\tp += dot(p, p + 34.23);\n\treturn fract(p.x * p.y);\n}\n\nfloat noise2(vec2 p) {\n\tvec2 i = floor(p);\n\tvec2 f = fract(p);\n\tf = f * f * (3.0 - 2.0 * f);\n\tfloat a = hash21(i);\n\tfloat b = hash21(i + vec2(1.0, 0.0));\n\tfloat c = hash21(i + vec2(0.0, 1.0));\n\tfloat d = hash21(i + vec2(1.0, 1.0));\n\treturn mix(mix(a, b, f.x), mix(c, d, f.x), f.y);\n}\n\nfloat fbm(vec2 p) {\n\tfloat v = 0.0;\n\tfloat amp = 0.5;\n\tfor (int i = 0; i < 5; i++) {\n\t\tv += amp * noise2(p);\n\t\tp = p * 2.03 + vec2(1.7, 9.2);\n\t\tamp *= 0.5;\n\t}\n\treturn v;\n}\n\nvec3 palette(float t) {\n\treturn 0.5 + 0.5 * cos(TAU * (t + vec3(0.0, 0.33, 0.67)));\n}\n\nvoid main() {\n\tvec2 uv = isf_FragNormCoord;\n\tvec2 p = (uv - 0.5) * vec2(RENDERSIZE.x / RENDERSIZE.y, 1.0);\n\n\tfloat t = TIME * 0.15;\n\n\t// kaleidoscope fold\n\tfloat k = 6.0;\n\tfloat ang = atan(p.y, p.x);\n\tfloat rad = length(p);\n\tang = mod(ang + t * 0.2, TAU / k);\n\tang = abs(ang - (TAU / k) * 0.5);\n\tp = vec2(cos(ang), sin(ang)) * rad;\n\tp *= 2.0;\n\n\t// double domain warp\n\tvec2 q = vec2(fbm(p * 1.5 + vec2(0.0, t)),\n\t              fbm(p * 1.5 + vec2(5.2, -t)));\n\tvec2 r = vec2(fbm(p * 1.5 + 4.0 * q + vec2(1.7, 9.2) + t * 0.6),\n\t              fbm(p * 1.5 + 4.0 * q + vec2(8.3, 2.8) - t * 0.4));\n\tfloat f = fbm(p * 1.5 + 4.0 * r);\n\n\tvec3 col = palette(f + 0.5 * q.x + 0.25 * r.y + 0.1 * t);\n\tcol = mix(col, vec3(0.05, 0.02, 0.1), smoothstep(0.9, 1.4, rad * 2.0));\n\n\t// pulsing rings\n\tcol += 0.15 * sin(20.0 * rad - TIME * 2.0) * vec3(0.2, 0.4, 0.9);\n\n\t// grain\n\tfloat g = hash21(uv * RENDERSIZE + fract(TIME) * 100.0);\n\tcol += (g - 0.5) * 0.05;\n\n\t// vignette\n\tfloat d = dot(uv - 0.5, uv - 0.5);\n\tcol *= 1.0 - 0.8 * d;\n\n\tgl_FragColor = vec4(col, 1.0);\n}",
    "generator": {
      "model": "z-ai/glm-5.3-flash",
      "provider": "openrouter",
      "prompt": null,
      "params": null
    }
  }
}