{
  "license": "CC0-1.0",
  "shader": {
    "id": "dvu2t05o",
    "title": "Asterism",
    "license": "CC0-1.0",
    "provenance_type": "witnessed_generation",
    "made_with": "claude-code",
    "status": "active",
    "compile_ok": true,
    "tags": [
      "plexus",
      "constellation",
      "network",
      "particles",
      "deep-sea",
      "dreamy"
    ],
    "parents": [],
    "author": "zazi5inxhmgi",
    "author_name": "ufffd",
    "author_url": "/u/ufffd",
    "created_at": "2026-06-20T08:54:57.482Z",
    "poster_url": "/posters/dvu2t05o.avif",
    "stats": {
      "slops": 0,
      "views": 139,
      "forks": 1
    },
    "self": "/api/v1/shaders/dvu2t05o",
    "isf": "/*{\n  \"DESCRIPTION\": \"Plexus — drifting points knitting and unknitting a constellation web of faint light in the deep.\",\n  \"CREDIT\": \"claude-opus-4-8\",\n  \"INPUTS\": [\n    { \"NAME\": \"link\",  \"TYPE\": \"float\", \"DEFAULT\": 0.6, \"MIN\": 0.3, \"MAX\": 1.0 },\n    { \"NAME\": \"size\",  \"TYPE\": \"float\", \"DEFAULT\": 0.02, \"MIN\": 0.008, \"MAX\": 0.05 },\n    { \"NAME\": \"glow\",  \"TYPE\": \"float\", \"DEFAULT\": 0.8, \"MIN\": 0.2, \"MAX\": 1.6 },\n    { \"NAME\": \"tint\",  \"TYPE\": \"float\", \"DEFAULT\": 0.5, \"MIN\": 0.0, \"MAX\": 1.0 }\n  ]\n}*/\n\nfloat hash(vec2 p){ p = fract(p * vec2(123.34, 456.21)); p += dot(p, p + 45.32); return fract(p.x * p.y); }\nvec2 pos(float i, float t){\n  return 0.85 * vec2(sin(i * 1.7 + t * 0.20), cos(i * 2.3 + t * 0.15))\n       + 0.32 * vec2(sin(i * 0.7 + t * 0.11), cos(i * 1.1 - t * 0.13));\n}\n\nfloat distSeg(vec2 p, vec2 a, vec2 b){\n  vec2 pa = p - a, ba = b - a;\n  float h = clamp(dot(pa, ba) / dot(ba, ba), 0.0, 1.0);\n  return length(pa - ba * h);\n}\n\nvoid main(){\n  vec2 uv = (gl_FragCoord.xy - 0.5 * RENDERSIZE) / RENDERSIZE.y;\n  float t = TIME;\n\n  vec3 cyan = mix(vec3(0.2, 0.8, 1.0), vec3(0.4, 0.5, 1.0), tint);\n  vec3 col = mix(vec3(0.0, 0.025, 0.06), vec3(0.0, 0.005, 0.02), length(uv));   // deep-sea field\n  // faint plankton/starfield for depth\n  float st = hash(floor(gl_FragCoord.xy));\n  col += smoothstep(0.992, 1.0, st) * (0.3 + 0.3 * sin(t * 2.0 + st * 40.0)) * cyan * 0.8;\n  float lines = 0.0, dots = 0.0;\n\n  const int N = 28;\n  for (int i = 0; i < N; i++){\n    vec2 a = pos(float(i), t);\n    float da = length(uv - a);\n    dots += smoothstep(size, size * 0.2, da);                 // crisp node\n    dots += exp(-da * da / (size * size * 12.0)) * 0.4;       // halo\n\n    for (int j = 0; j < N; j++){\n      if (j <= i) continue;\n      vec2 b = pos(float(j), t);\n      float d = length(a - b);\n      if (d < link){\n        float seg = distSeg(uv, a, b);\n        lines += smoothstep(0.006, 0.0, seg) * smoothstep(link, link * 0.4, d);  // faint link, fades with length\n      }\n    }\n  }\n\n  col += cyan * lines * 0.5 * glow;\n  col += cyan * dots * (0.6 + 0.6 * glow);\n  col += vec3(0.8, 0.95, 1.0) * pow(dots, 3.0) * 0.5;          // bright node cores\n\n  col *= 1.0 - 0.3 * dot(uv, uv);\n  col = col / (1.0 + 0.5 * col);\n  col = pow(max(col, 0.0), vec3(0.88));\n  gl_FragColor = vec4(col, 1.0);\n}\n",
    "generator": {
      "model": "claude-opus-4-8",
      "provider": "anthropic",
      "prompt": null,
      "params": null
    }
  }
}