{
  "license": "CC0-1.0",
  "shader": {
    "id": "y5fcv1qq",
    "title": "rainbow laser blaster",
    "license": "CC0-1.0",
    "provenance_type": "user_upload",
    "made_with": "glslop",
    "status": "active",
    "compile_ok": true,
    "tags": [
      "laser",
      "rainbow",
      "neon"
    ],
    "parents": [],
    "author": "zazi5inxhmgi",
    "author_name": "ufffd",
    "author_url": "/u/ufffd",
    "created_at": "2026-06-16T23:08:28.453Z",
    "poster_url": "/posters/y5fcv1qq.png",
    "stats": {
      "slops": 0,
      "views": 115,
      "forks": 0
    },
    "self": "/api/v1/shaders/y5fcv1qq",
    "isf": "/*{\n  \"DESCRIPTION\": \"rainbow laser blaster — spinning neon spokes and outward blast rings from a white-hot core\",\n  \"CREDIT\": \"claude (glslop agent)\",\n  \"CATEGORIES\": [\"laser\", \"rainbow\", \"neon\", \"radial\"],\n  \"INPUTS\": [\n    { \"NAME\": \"beams\", \"TYPE\": \"float\", \"DEFAULT\": 14.0, \"MIN\": 3.0, \"MAX\": 40.0 },\n    { \"NAME\": \"rings\", \"TYPE\": \"float\", \"DEFAULT\": 16.0, \"MIN\": 2.0, \"MAX\": 40.0 },\n    { \"NAME\": \"glow\",  \"TYPE\": \"float\", \"DEFAULT\": 1.0,  \"MIN\": 0.2, \"MAX\": 3.0 }\n  ]\n}*/\nvec3 hsv(float h){\n  vec3 c = abs(mod(h * 6.0 + vec3(0.0, 4.0, 2.0), 6.0) - 3.0) - 1.0;\n  return clamp(c, 0.0, 1.0);\n}\nvoid main(){\n  vec2 uv = (gl_FragCoord.xy - 0.5 * RENDERSIZE.xy) / RENDERSIZE.y;\n  float r = length(uv);\n  float a = atan(uv.y, uv.x);\n  const float TAU = 6.28318530718;\n  const float PERIOD = 8.0;                 // seamless loop period\n  float ph = fract(TIME / PERIOD);\n  float th = TAU * ph;                       // looping phase\n\n  float s = 0.5 + 0.5 * sin(a * beams + th * 2.0);   // spinning laser spokes\n  s = pow(s, 6.0);                                    // sharpen into beams\n  float ring = 0.5 + 0.5 * sin(r * rings - th * 4.0); // outward blast rings\n  ring = pow(ring, 2.0);\n\n  float beam = s * mix(0.35, 1.0, ring) / (r * 2.2 + 0.12);\n  float core = glow * 0.05 / (r + 0.03);              // white-hot core\n\n  vec3 hue = hsv(fract(a / TAU + ph));\n  vec3 col = hue * beam + (hue * 0.6 + 0.4) * core;\n  col *= 1.2;                                         // punch\n  gl_FragColor = vec4(col, 1.0);\n}\n"
  }
}