{
  "license": "CC0-1.0",
  "shader": {
    "id": "u4q2ujd1",
    "title": "Eternal Return",
    "license": "CC0-1.0",
    "provenance_type": "witnessed_generation",
    "made_with": "glslop",
    "status": "active",
    "compile_ok": true,
    "tags": [
      "droste",
      "spiral",
      "infinite-zoom",
      "neon",
      "hypnotic"
    ],
    "parents": [],
    "author": "zazi5inxhmgi",
    "author_name": "ufffd",
    "author_url": "/u/ufffd",
    "created_at": "2026-06-18T17:47:01.296Z",
    "poster_url": "/posters/u4q2ujd1.avif",
    "stats": {
      "slops": 0,
      "views": 126,
      "forks": 0
    },
    "self": "/api/v1/shaders/u4q2ujd1",
    "isf": "/*{\n  \"DESCRIPTION\": \"Eternal Return: a Droste-style infinite zoom. Glowing orbs are arranged on a logarithmic-spiral lattice that scales into itself forever, rotating and rushing inward down a neon wormhole that never ends. Self-similar scaling makes the zoom seamless over a 16s loop.\",\n  \"CREDIT\": \"glslop agent (Claude)\",\n  \"CATEGORIES\": [\"droste\", \"spiral\", \"infinite-zoom\", \"neon\", \"hypnotic\"],\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\": \"arms\",    \"TYPE\": \"long\",  \"DEFAULT\": 5,    \"MIN\": 2,   \"MAX\": 12 },\n    { \"NAME\": \"twist\",   \"TYPE\": \"float\", \"DEFAULT\": 2.2,  \"MIN\": 0.5, \"MAX\": 5.0 },\n    { \"NAME\": \"zoom\",    \"TYPE\": \"float\", \"DEFAULT\": 1.0,  \"MIN\": 0.6, \"MAX\": 1.8 }\n  ]\n}*/\n\n#define PI  3.14159265359\n#define TAU 6.28318530718\n\nconst float PERIOD = 16.0;\n\nvec3 pal(float t){ return 0.5 + 0.5 * cos(TAU * (t + vec3(0.0, 0.33, 0.66))); }\n\nvoid main(){\n  vec2 uv = (gl_FragCoord.xy - 0.5 * RENDERSIZE.xy) / RENDERSIZE.y;\n  uv /= zoom;\n\n  float ph = fract(TIME * speed / PERIOD);\n\n  float r = length(uv) + 1e-4;\n  float a = atan(uv.y, uv.x);\n\n  float lr = log(r);\n  // logarithmic-spiral lattice: couple angle & log-radius\n  float arm   = a * float(arms) / TAU + lr * twist;       // spiral arm coordinate\n  float ringF = lr * float(arms) * 0.5;                   // log-spaced rings (self-similar)\n\n  // scroll inward one ring per loop (self-similar -> seamless zoom) + rotate\n  float fa = fract(arm - ph);\n  float fr = fract(ringF - ph);\n  float depth = floor(ringF - ph);\n\n  // thin crisp line families: concentric rings x spiral arms\n  float w = 0.010;\n  float ringLine = pow(w / (abs(fr - 0.5) * abs(fr - 0.5) + w), 1.7);\n  float armLine  = pow(w / (abs(fa - 0.5) * abs(fa - 0.5) + w), 1.7);\n  float node     = ringLine * armLine;                   // bright intersection nodes\n\n  // cohesive colour: smooth radial gradient (static) + seamless time cycle -> no seam pops\n  vec3 cBase = pal(hue + ph + 0.22 * lr);\n\n  float fade = smoothstep(0.0, 0.10, r) * smoothstep(1.4, 0.25, r);\n\n  vec3 col = vec3(0.0);\n  col += cBase * (ringLine + armLine) * 0.7 * fade * glow;  // glowing spiral grid on black\n  col += vec3(0.9, 0.96, 1.0) * node * 1.4 * fade * glow;   // white-hot lattice nodes\n\n  // deep throat glow at the centre\n  col += pal(hue + ph + 0.3) * exp(-r * 7.0) * 0.8 * glow;\n\n  col = col / (1.0 + col);\n  col = pow(col, vec3(0.82));\n  col *= 1.0 - 0.12 * dot(uv * zoom, uv * zoom);\n  gl_FragColor = vec4(col, 1.0);\n}\n",
    "generator": {
      "model": "claude-opus-4-8",
      "provider": null,
      "prompt": null,
      "params": null
    }
  }
}