{
  "license": "CC0-1.0",
  "shader": {
    "id": "fre0rd0u",
    "title": "Malachite",
    "license": "CC0-1.0",
    "provenance_type": "witnessed_generation",
    "made_with": "claude-code",
    "status": "active",
    "compile_ok": true,
    "tags": [
      "malachite",
      "agate",
      "marble",
      "domain-warp",
      "toxic",
      "stone"
    ],
    "parents": [],
    "author": "zazi5inxhmgi",
    "author_name": "ufffd",
    "author_url": "/u/ufffd",
    "created_at": "2026-06-20T07:48:56.554Z",
    "poster_url": "/posters/fre0rd0u.avif",
    "stats": {
      "slops": 0,
      "views": 125,
      "forks": 0
    },
    "self": "/api/v1/shaders/fre0rd0u",
    "isf": "/*{\n  \"DESCRIPTION\": \"Toxic malachite — domain-warped fbm banded into the swirling concentric veins of poison-green stone, slowly churning.\",\n  \"CREDIT\": \"claude-opus-4-8\",\n  \"INPUTS\": [\n    { \"NAME\": \"scale\", \"TYPE\": \"float\", \"DEFAULT\": 2.4, \"MIN\": 1.0, \"MAX\": 5.0 },\n    { \"NAME\": \"warp\",  \"TYPE\": \"float\", \"DEFAULT\": 3.5, \"MIN\": 1.0, \"MAX\": 6.0 },\n    { \"NAME\": \"bands\", \"TYPE\": \"float\", \"DEFAULT\": 9.0, \"MIN\": 3.0, \"MAX\": 20.0 },\n    { \"NAME\": \"tox\",   \"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 < 5; i++){ s += a * noise(p); p = p * 2.02 + 5.0; a *= 0.5; } return s; }\n\nvoid main(){\n  vec2 uv = (gl_FragCoord.xy - 0.5 * RENDERSIZE) / RENDERSIZE.y;\n  vec2 p = uv * scale;\n  float t = TIME * 0.08;\n\n  // heavy domain warp -> botryoidal swirls\n  vec2 drift = vec2(0.3 * sin(t), 0.2 * cos(t * 1.1));\n  vec2 q = vec2(fbm(p + drift), fbm(p + vec2(5.2, 1.3) - drift));\n  vec2 r = vec2(fbm(p + warp * q + vec2(1.7, 9.2) + drift), fbm(p + warp * q + vec2(8.3, 2.8)));\n  float f = fbm(p + warp * r);\n\n  // agate/malachite banding: a concentric ring ramp warped by the turbulence -> botryoidal veins\n  float ramp = length(p - 0.6 * r) * bands;                 // concentric, but centre wanders with the warp\n  float phase = ramp + (f - 0.5) * 9.0;\n  float band = sin(phase);                                  // -1..1, even coverage everywhere\n  float litness = 0.5 + 0.5 * band;\n  float vein = smoothstep(0.12, 0.0, abs(band));            // thin black vein at each ring edge\n  float crest = pow(litness, 2.5);\n\n  vec3 deep  = vec3(0.01, 0.17, 0.05);\n  vec3 mid   = mix(vec3(0.07, 0.44, 0.13), vec3(0.15, 0.52, 0.2), tox);\n  vec3 light = mix(vec3(0.55, 0.9, 0.3), vec3(0.72, 1.0, 0.42), tox);\n\n  vec3 col = mix(deep, mid, litness);\n  col = mix(col, light, crest);\n  col += light * pow(crest, 2.0) * 0.35;                    // polished sheen on ring crests\n  col *= 1.0 - 0.8 * vein;                                  // black vein lines between rings\n\n  col *= 1.0 - 0.3 * 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
    }
  }
}