{
  "license": "CC0-1.0",
  "shader": {
    "id": "frpyk0si",
    "title": "Neon Iris",
    "license": "CC0-1.0",
    "provenance_type": "witnessed_generation",
    "made_with": "claude-code",
    "status": "active",
    "compile_ok": true,
    "tags": [
      "optical",
      "moire",
      "op-art",
      "neon",
      "radial",
      "lens"
    ],
    "parents": [],
    "author": "zazi5inxhmgi",
    "author_name": "ufffd",
    "author_url": "/u/ufffd",
    "created_at": "2026-06-20T05:55:40.699Z",
    "poster_url": "/posters/frpyk0si.avif",
    "stats": {
      "slops": 0,
      "views": 151,
      "forks": 1
    },
    "self": "/api/v1/shaders/frpyk0si",
    "isf": "/*{\n  \"DESCRIPTION\": \"Moiré lens — interfering radial gratings seen through a warping glass bulge, beating in neon.\",\n  \"CREDIT\": \"claude-opus-4-8\",\n  \"INPUTS\": [\n    { \"NAME\": \"freq\", \"TYPE\": \"float\", \"DEFAULT\": 34.0, \"MIN\": 8.0, \"MAX\": 80.0 },\n    { \"NAME\": \"warp\", \"TYPE\": \"float\", \"DEFAULT\": 1.4, \"MIN\": 0.0, \"MAX\": 4.0 },\n    { \"NAME\": \"spin\", \"TYPE\": \"float\", \"DEFAULT\": 0.12, \"MIN\": 0.0, \"MAX\": 0.6 },\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); }\nvec3 palette(float t){ return 0.5 + 0.5 * cos(6.28318 * (t + vec3(0.0, 0.33, 0.67) + hue)); }\n\nvoid main(){\n  vec2 uv = (gl_FragCoord.xy - 0.5 * RENDERSIZE) / RENDERSIZE.y;\n  float r = length(uv);\n\n  // lens bulge — looking through a blob of warped glass\n  vec2 p = uv / (1.0 + warp * r * r);\n  float r2 = length(p);\n  float a2 = atan(p.y, p.x);\n  float t = TIME;\n\n  // frequency eases down with radius so the rim doesn't alias into dirty speckle\n  float fs = freq / (1.0 + 1.3 * r2 * r2);\n\n  float gA = sin(r2 * fs - t * 1.5);\n  float gB = sin(a2 * freq * 0.5 + r2 * fs * 0.7 + t);\n  vec2  q  = p * rot(t * spin);\n  float gC = sin(q.x * fs * 1.1 + sin(q.y * fs * 0.6));\n\n  float m = 0.5 * gA * gB + 0.5 * gB * gC;       // ~[-1,1]\n\n  // high-contrast neon op-art: near-black field, only the moiré fringes glow\n  float edge = pow(1.0 - abs(m), 6.0);                       // thin bright zero-crossings\n  float band = pow(0.5 + 0.5 * m, 3.0);                      // soft colored bands\n  float ah = a2 / 6.28318;                                   // angle -> spectral spread\n  vec3 col = palette(0.30 * r2 + 0.5 * ah - 0.04 * t) * band * 0.6;\n  col += edge * palette(0.5 + 0.5 * ah + 0.2 * r2) * 1.3;    // neon fringe lines, rainbow by angle\n\n  // glowing lens core -> strong focal point\n  col += palette(0.15 + 0.08 * t) * 1.0 * exp(-r2 * r2 * 40.0);\n\n  col *= 1.0 - 0.55 * r * r;                                 // deeper vignette\n  col = col / (1.0 + 0.45 * col);\n  col = pow(max(col, 0.0), vec3(0.82));\n  gl_FragColor = vec4(col, 1.0);\n}\n",
    "generator": {
      "model": "claude-opus-4-8",
      "provider": "anthropic",
      "prompt": null,
      "params": null
    }
  }
}