{
  "license": "CC0-1.0",
  "shader": {
    "id": "ecrjrakv",
    "title": "Iridescent wormhole — neon wireframe rings rushing through a swirling oil-slick film, thin-film interference racing towa",
    "license": "CC0-1.0",
    "provenance_type": "witnessed_generation",
    "made_with": "SLOP SPLICER",
    "made_with_app": "xfgeujl3",
    "status": "active",
    "compile_ok": true,
    "tags": [],
    "parents": [],
    "author": "zazi5inxhmgi",
    "author_name": "ufffd",
    "author_url": "/u/ufffd",
    "created_at": "2026-06-21T06:13:56.972Z",
    "poster_url": "/posters/ecrjrakv.avif",
    "stats": {
      "slops": 0,
      "views": 132,
      "forks": 0
    },
    "self": "/api/v1/shaders/ecrjrakv",
    "isf": "/*{\n  \"DESCRIPTION\": \"Iridescent wormhole — neon wireframe rings rushing through a swirling oil-slick film, thin-film interference racing toward a wet vanishing point.\",\n  \"CREDIT\": \"petrol x hyperspace\",\n  \"CATEGORIES\": [\"generative\"],\n  \"INPUTS\": [\n    { \"NAME\": \"sides\", \"TYPE\": \"float\", \"DEFAULT\": 12.0, \"MIN\": 4.0, \"MAX\": 28.0 },\n    { \"NAME\": \"speed\", \"TYPE\": \"float\", \"DEFAULT\": 0.7, \"MIN\": 0.0, \"MAX\": 3.0 },\n    { \"NAME\": \"swirl\", \"TYPE\": \"float\", \"DEFAULT\": 1.5, \"MIN\": 0.0, \"MAX\": 4.0 },\n    { \"NAME\": \"ringDensity\", \"TYPE\": \"float\", \"DEFAULT\": 14.0, \"MIN\": 4.0, \"MAX\": 30.0 }\n  ]\n}*/\n\n// iridescent thin-film color\nvec3 thinFilm(float t) {\n    // approximate thin-film interference\n    vec3 col;\n    col.r = 0.5 + 0.5 * sin(t * 6.28318 + 0.0);\n    col.g = 0.5 + 0.5 * sin(t * 6.28318 + 2.094);\n    col.b = 0.5 + 0.5 * sin(t * 6.28318 + 4.188);\n    return col;\n}\n\n// polygon distance: returns signed distance to a regular polygon outline\nfloat polygonRing(vec2 p, float r, float n, float thickness) {\n    float an = 6.28318 / n;\n    float bn = mod(atan(p.x, p.y), an) - an * 0.5;\n    vec2 q = vec2(cos(bn), sin(bn)) * length(p);\n    return abs(length(q) - r) - thickness;\n}\n\nvoid main() {\n    vec2 uv = isf_FragNormCoord;\n    vec2 res = RENDERSIZE;\n    vec2 p = (uv - 0.5) * vec2(res.x / res.y, 1.0);\n    \n    float t = TIME * speed;\n    \n    // swirl coordinates\n    float r = length(p);\n    float a = atan(p.y, p.x);\n    a += swirl * (1.0 / (r + 0.15)) * 0.3;\n    vec2 sp = vec2(cos(a), sin(a)) * r;\n    \n    // perspective: depth based on radius\n    float depth = 1.0 / (r + 0.08);\n    \n    // rushing rings\n    float ringPhase = depth * ringDensity - t * 3.0;\n    float rings = fract(ringPhase);\n    \n    // wireframe polygon ring\n    float n = sides;\n    float ringR = 0.0; // we evaluate at current radius\n    float polySDF = polygonRing(sp, r, n, 0.0);\n    \n    // distance to nearest ring boundary\n    float dr = abs(rings - 0.5) * 2.0; // 0 at center of band, 1 at edge\n    float wire = smoothstep(0.0, 0.15, dr) * (1.0 - smoothstep(0.85, 1.0, dr));\n    // Actually let's make thin wires\n    float wireIntensity = 1.0 - smoothstep(0.0, 0.08, abs(fract(ringPhase) - 0.5));\n    \n    // polygon edge falloff\n    float an = 6.28318 / n;\n    float bn = mod(atan(sp.x, sp.y), an) - an * 0.5;\n    float edgeDist = abs(sin(bn)); // 0 at vertices, 1 at edge midpoints\n    // Actually for wireframe polygon, we want lines along edges\n    \n    // Let me reconsider — combine rings + polygon shape\n    float polyEdge = abs(cos(bn * n * 0.5)); // pulse at edges\n    \n    // Combine: rushing rings modulated by polygon angular pattern\n    float pattern = wireIntensity * (0.4 + 0.6 * pow(abs(cos(bn * n)), 3.0));\n    \n    // thin-film iridescence\n    float filmT = ringPhase * 0.1 + a * 0.3 + t * 0.05;\n    vec3 irid = thinFilm(filmT);\n    \n    // background oil-slick swirl\n    float bgT = r * 8.0 + a * 2.0 + t * 0.3;\n    vec3 bgIrid = thinFilm(bgT * 0.15);\n    float bgFade = smoothstep(0.0, 0.5, r) * 0.3;\n    vec3 bg = bgIrid * bgFade;\n    \n    // glow\n    float glow = pattern * (0.8 + 0.4 * sin(ringPhase * 3.14));\n    \n    vec3 col = bg + irid * glow * 1.5;\n    \n    // center vanishing point brightening\n    col += vec3(0.3, 0.4, 0.6) * smoothstep(0.15, 0.0, r) * 0.5;\n    \n    // vignette\n    col *= 1.0 - smoothstep(0.6, 1.4, r) * 0.7;\n    \n    // tone\n    col = pow(col, vec3(0.85));\n    \n    gl_FragColor = vec4(col, 1.0);\n}",
    "generator": {
      "model": "accounts/fireworks/models/glm-5p2",
      "provider": "Custom (OpenAI-compatible)",
      "prompt": null,
      "params": null
    }
  }
}