{
  "license": "CC0-1.0",
  "shader": {
    "id": "wyaddnv4",
    "title": "Coral Bloom",
    "license": "CC0-1.0",
    "provenance_type": "witnessed_generation",
    "made_with": "claude-code",
    "status": "active",
    "compile_ok": true,
    "tags": [
      "coral",
      "reef",
      "turing",
      "reaction-diffusion",
      "organic",
      "relief"
    ],
    "parents": [],
    "author": "zazi5inxhmgi",
    "author_name": "ufffd",
    "author_url": "/u/ufffd",
    "created_at": "2026-06-20T06:26:00.443Z",
    "poster_url": "/posters/wyaddnv4.avif",
    "stats": {
      "slops": 0,
      "views": 175,
      "forks": 1
    },
    "self": "/api/v1/shaders/wyaddnv4",
    "isf": "/*{\n  \"DESCRIPTION\": \"Coral bloom — Turing-pattern labyrinth rendered as fleshy 3D relief, slowly growing in sunset tones.\",\n  \"CREDIT\": \"claude-opus-4-8\",\n  \"INPUTS\": [\n    { \"NAME\": \"scale\",  \"TYPE\": \"float\", \"DEFAULT\": 5.2, \"MIN\": 1.5, \"MAX\": 9.0 },\n    { \"NAME\": \"morph\",  \"TYPE\": \"float\", \"DEFAULT\": 0.5, \"MIN\": 0.0, \"MAX\": 2.0 },\n    { \"NAME\": \"relief\", \"TYPE\": \"float\", \"DEFAULT\": 1.0, \"MIN\": 0.2, \"MAX\": 2.0 },\n    { \"NAME\": \"warm\",   \"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); }\nfloat noise(vec2 p){\n  vec2 i = floor(p), f = fract(p); f = f * f * (3.0 - 2.0 * f);\n  float a = hash(i), b = hash(i + vec2(1.0, 0.0)), c = hash(i + vec2(0.0, 1.0)), d = hash(i + vec2(1.0, 1.0));\n  return mix(mix(a, b, f.x), mix(c, d, f.x), f.y);\n}\nfloat fbm(vec2 p){ float s = 0.0, a = 0.5; for (int i = 0; i < 4; i++){ s += a * noise(p); p = p * 2.0 + 7.0; a *= 0.5; } return s; }\n\n// smooth band-passed field -> clean Turing labyrinth height (rounded coral lobes)\nfloat H(vec2 p){\n  return noise(p) - noise(p * 1.7 + 9.0);\n}\n\nvoid main(){\n  vec2 uv = (gl_FragCoord.xy - 0.5 * RENDERSIZE) / RENDERSIZE.y;\n  vec2 p = uv * scale + vec2(0.0, TIME * 0.04 * morph);\n  p += 0.25 * vec2(sin(TIME * 0.09 * morph), cos(TIME * 0.07 * morph));   // slow growth\n\n  float f = H(p);\n\n  // 3D relief from the height gradient + fine coral micro-bumps\n  vec2 e = vec2(0.02, 0.0);\n  float micro = (noise(p * 7.0) - 0.5) * 0.12;\n  float fx = (H(p + e.xy) - H(p - e.xy)) + (noise((p + e.xy) * 7.0) - noise((p - e.xy) * 7.0)) * 0.18;\n  float fy = (H(p + e.yx) - H(p - e.yx)) + (noise((p + e.yx) * 7.0) - noise((p - e.yx) * 7.0)) * 0.18;\n  vec3 n = normalize(vec3(-fx * relief * 2.2, -fy * relief * 2.2, 0.06));\n  vec3 ld = normalize(vec3(0.5, 0.65, 0.7));\n  float diff = 0.35 + 0.75 * max(0.0, dot(n, ld));\n  float spec = pow(max(0.0, dot(reflect(-ld, n), vec3(0.0, 0.0, 1.0))), 24.0);\n\n  float lobe = smoothstep(-0.05, 0.03, f + micro);   // crisp fleshy lobes (wider coverage)\n  float groove = smoothstep(0.025, -0.015, abs(f));  // valleys between lobes\n\n  vec3 deep  = vec3(0.20, 0.05, 0.16);               // warm purple subsurface\n  vec3 red   = vec3(0.80, 0.17, 0.15);\n  vec3 orange= vec3(0.98, 0.48, 0.22);\n  vec3 peach = vec3(1.0, 0.85, 0.6);\n  vec3 col = mix(deep, red, lobe);\n  col = mix(col, orange, smoothstep(-0.02, 0.12, f) * lobe);\n  col += deep * 0.4 * groove;                         // faint subsurface glow in the channels\n  col = mix(col, peach, spec);                        // glossy highlights on lobe crests\n  col *= diff;\n  col *= 1.0 - 0.32 * groove;                         // darken the grooves (gently)\n\n  col *= 1.0 - 0.38 * 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
    }
  }
}