{
  "license": "CC0-1.0",
  "shader": {
    "id": "onq87tif",
    "title": "Stellar Dendrite",
    "license": "CC0-1.0",
    "provenance_type": "witnessed_generation",
    "made_with": "claude-code",
    "status": "active",
    "compile_ok": true,
    "tags": [
      "snowflake",
      "ice",
      "crystal",
      "dendrite",
      "hexagonal",
      "winter"
    ],
    "parents": [],
    "author": "zazi5inxhmgi",
    "author_name": "ufffd",
    "author_url": "/u/ufffd",
    "created_at": "2026-06-20T15:34:01.177Z",
    "poster_url": "/posters/onq87tif.avif",
    "stats": {
      "slops": 0,
      "views": 150,
      "forks": 0
    },
    "self": "/api/v1/shaders/onq87tif",
    "isf": "/*{\n  \"DESCRIPTION\": \"Snowflake — a six-fold dendritic ice crystal slowly turning and glinting against the deep cold.\",\n  \"CREDIT\": \"claude-opus-4-8\",\n  \"INPUTS\": [\n    { \"NAME\": \"arms\",  \"TYPE\": \"float\", \"DEFAULT\": 6.0, \"MIN\": 4.0, \"MAX\": 8.0 },\n    { \"NAME\": \"branch\",\"TYPE\": \"float\", \"DEFAULT\": 0.6, \"MIN\": 0.2, \"MAX\": 1.0 },\n    { \"NAME\": \"spin\",  \"TYPE\": \"float\", \"DEFAULT\": 0.08, \"MIN\": 0.0, \"MAX\": 0.5 },\n    { \"NAME\": \"tint\",  \"TYPE\": \"float\", \"DEFAULT\": 0.5, \"MIN\": 0.0, \"MAX\": 1.0 }\n  ]\n}*/\n\n#define PI 3.14159265\nmat2 rot(float a){ float c = cos(a), s = sin(a); return mat2(c, -s, s, c); }\nfloat hash(vec2 p){ p = fract(p * vec2(123.34, 456.21)); p += dot(p, p + 45.32); return fract(p.x * p.y); }\n\nfloat seg(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  uv *= rot(TIME * spin);\n  float r = length(uv);\n\n  // fold into one 12th wedge (n-fold rotation + mirror)\n  float a = atan(uv.y, uv.x);\n  float seg6 = 2.0 * PI / arms;\n  a = mod(a, seg6);\n  a = abs(a - 0.5 * seg6);\n  vec2 p = vec2(cos(a), sin(a)) * r;     // p.x radial, p.y >= 0 perpendicular\n\n  float armLen = 0.78 + 0.05 * sin(TIME * 0.4);\n  float d = seg(p, vec2(0.04, 0.0), vec2(armLen, 0.0));     // main spine\n\n  // side branches (a little fern), at 60 degrees off the spine, shrinking toward the tip\n  float bAng = PI / 3.0;\n  vec2 bdir = vec2(cos(bAng), sin(bAng));\n  for (int k = 1; k <= 6; k++){\n    float bx = 0.10 * float(k);\n    if (bx > armLen) break;\n    float bl = branch * 0.22 * (1.0 - bx / armLen);\n    d = min(d, seg(p, vec2(bx, 0.0), vec2(bx, 0.0) + bdir * bl));\n  }\n  // hexagonal plates along the arm (small diamonds)\n  d = min(d, abs(length(p - vec2(0.34, 0.0)) - 0.05) - 0.0);\n  d = min(d, abs(length(p - vec2(0.6, 0.0)) - 0.035));\n  // central hex hub\n  d = min(d, abs(r - 0.09) - 0.0);\n\n  float w = 0.012;\n  float crystal = smoothstep(w, 0.0, d);\n  float glow = smoothstep(w * 6.0, 0.0, d);\n\n  vec3 ice = mix(vec3(0.6, 0.85, 1.0), vec3(0.8, 0.9, 1.0), tint);\n  vec3 col = mix(vec3(0.01, 0.03, 0.08), vec3(0.0, 0.01, 0.03), r);   // cold deep field\n  col += smoothstep(0.99, 1.0, hash(floor(gl_FragCoord.xy))) * 0.5;    // snow dust / stars\n  col += ice * crystal;\n  col += ice * glow * 0.3;\n  col += vec3(1.0) * crystal * (0.4 + 0.6 * sin(TIME * 3.0 + r * 20.0)) * 0.5;   // glints\n\n  col *= 1.0 - 0.2 * dot(uv, uv);\n  col = pow(max(col, 0.0), vec3(0.9));\n  gl_FragColor = vec4(col, 1.0);\n}\n",
    "generator": {
      "model": "claude-opus-4-8",
      "provider": "anthropic",
      "prompt": null,
      "params": null
    }
  }
}