{
  "license": "CC0-1.0",
  "shader": {
    "id": "vl0c9si4",
    "title": "Meat Hole",
    "license": "CC0-1.0",
    "provenance_type": "witnessed_generation",
    "made_with": "claude",
    "status": "active",
    "compile_ok": true,
    "render_hash": "76b3c79142272e1c",
    "tags": [
      "meat",
      "meaty",
      "hole",
      "tunnel",
      "infected",
      "gross",
      "flesh"
    ],
    "parents": [],
    "author": "u7y1evhf0znj",
    "author_name": "ksin",
    "author_url": "/u/ksin",
    "created_at": "2026-07-18T09:27:25.448Z",
    "poster_url": "/posters/vl0c9si4.avif",
    "stats": {
      "slops": 1,
      "views": 203,
      "forks": 0
    },
    "self": "/api/v1/shaders/vl0c9si4",
    "isf": "/*{\n  \"DESCRIPTION\": \"Raymarched flesh tunnel: Voronoi tumor lobes, pleated sphincter gates, veins (red/blue/capillary), parasites and wriggling surface worms, infection zones with near-black rot, heartbeat throb, black & red ambient occlusion, wet two-lobe specular. Every knob exposed.\",\n  \"CREDIT\": \"kevin\",\n  \"CATEGORIES\": [\"generator\", \"organic\", \"horror\"],\n  \"INPUTS\": [\n    { \"NAME\": \"speed\",       \"TYPE\": \"float\", \"DEFAULT\": 1.0,  \"MIN\": 0.0,  \"MAX\": 3.0 },\n    { \"NAME\": \"pulseOn\",     \"TYPE\": \"bool\",  \"DEFAULT\": true },\n    { \"NAME\": \"pulseSpeed\",  \"TYPE\": \"float\", \"DEFAULT\": 1.0,  \"MIN\": 0.2,  \"MAX\": 3.0 },\n    { \"NAME\": \"wiggleSpeed\", \"TYPE\": \"float\", \"DEFAULT\": 1.0,  \"MIN\": 0.0,  \"MAX\": 3.0 },\n    { \"NAME\": \"lobeScale\",   \"TYPE\": \"float\", \"DEFAULT\": 0.85, \"MIN\": 0.4,  \"MAX\": 2.0 },\n    { \"NAME\": \"lobeAmp\",     \"TYPE\": \"float\", \"DEFAULT\": 0.42, \"MIN\": 0.0,  \"MAX\": 0.8 },\n    { \"NAME\": \"wrinkle\",     \"TYPE\": \"float\", \"DEFAULT\": 0.14, \"MIN\": 0.0,  \"MAX\": 0.3 },\n    { \"NAME\": \"groove\",      \"TYPE\": \"float\", \"DEFAULT\": 0.09, \"MIN\": 0.0,  \"MAX\": 0.2 },\n    { \"NAME\": \"gateAmt\",     \"TYPE\": \"float\", \"DEFAULT\": 0.38, \"MIN\": 0.0,  \"MAX\": 0.7 },\n    { \"NAME\": \"paraAmt\",     \"TYPE\": \"float\", \"DEFAULT\": 1.0,  \"MIN\": 0.0,  \"MAX\": 2.0 },\n    { \"NAME\": \"wigAmt\",      \"TYPE\": \"float\", \"DEFAULT\": 1.0,  \"MIN\": 0.0,  \"MAX\": 2.0 },\n    { \"NAME\": \"veinAmt\",     \"TYPE\": \"float\", \"DEFAULT\": 1.0,  \"MIN\": 0.0,  \"MAX\": 2.0 },\n    { \"NAME\": \"disease\",     \"TYPE\": \"float\", \"DEFAULT\": 1.0,  \"MIN\": 0.0,  \"MAX\": 2.0 },\n    { \"NAME\": \"hueShiftAmt\", \"TYPE\": \"float\", \"DEFAULT\": 0.0,  \"MIN\": -0.5, \"MAX\": 0.5 },\n    { \"NAME\": \"saturation\",  \"TYPE\": \"float\", \"DEFAULT\": 1.0,  \"MIN\": 0.0,  \"MAX\": 2.0 },\n    { \"NAME\": \"brightness\",  \"TYPE\": \"float\", \"DEFAULT\": 1.0,  \"MIN\": 0.4,  \"MAX\": 1.8 }\n  ]\n}*/\n\n// FLESH TUNNEL — disgusting / sickly / organic\n// ISF port of the Shadertoy version (audio reactivity omitted; ISF has no audio input here).\n\n#define SPEED speed\n#define PULSE_ON (pulseOn ? 1.0 : 0.0)\n#define PULSE_SPEED pulseSpeed\n#define WIGGLE_SPEED wiggleSpeed\n#define LOBE_SCALE lobeScale\n#define LOBE_AMP lobeAmp\n#define WRINKLE wrinkle\n#define GROOVE groove\n#define GATE gateAmt\n#define PARA_AMT paraAmt\n#define WIG_AMT wigAmt\n#define VEIN_AMT veinAmt\n#define DISEASE disease\n#define HUE_SHIFT hueShiftAmt\n#define SATURATION saturation\n#define BRIGHTNESS brightness\n\nvec3 hueShift(vec3 c, float a){\n    vec3 k = vec3(0.57735);\n    float ca = cos(a * 6.28318);\n    float sa = sin(a * 6.28318);\n    return c * ca + cross(k, c) * sa + k * dot(k, c) * (1.0 - ca);\n}\n\nfloat hash(vec3 p){\n    p = fract(p * 0.3183099 + vec3(0.1, 0.2, 0.3));\n    p *= 17.0;\n    return fract(p.x * p.y * p.z * (p.x + p.y + p.z));\n}\n\nfloat noise(vec3 x){\n    vec3 i = floor(x);\n    vec3 f = fract(x);\n    f = f * f * (3.0 - 2.0 * f);\n    return mix(mix(mix(hash(i + vec3(0.0, 0.0, 0.0)), hash(i + vec3(1.0, 0.0, 0.0)), f.x),\n                   mix(hash(i + vec3(0.0, 1.0, 0.0)), hash(i + vec3(1.0, 1.0, 0.0)), f.x), f.y),\n               mix(mix(hash(i + vec3(0.0, 0.0, 1.0)), hash(i + vec3(1.0, 0.0, 1.0)), f.x),\n                   mix(hash(i + vec3(0.0, 1.0, 1.0)), hash(i + vec3(1.0, 1.0, 1.0)), f.x), f.y), f.z);\n}\n\nfloat fbm(vec3 p){\n    float a = 0.5;\n    float s = 0.0;\n    for (int i = 0; i < 4; i++){\n        s += a * noise(p);\n        p = p * 2.03 + vec3(1.7, 9.2, 4.1);\n        a *= 0.5;\n    }\n    return s;\n}\n\nfloat fbm3(vec3 p){\n    float a = 0.5;\n    float s = 0.0;\n    for (int i = 0; i < 3; i++){\n        s += a * noise(p);\n        p = p * 2.03 + vec3(1.7, 9.2, 4.1);\n        a *= 0.5;\n    }\n    return s;\n}\n\nvec3 hash3(vec3 p){\n    p = vec3(dot(p, vec3(127.1, 311.7, 74.7)),\n             dot(p, vec3(269.5, 183.3, 246.1)),\n             dot(p, vec3(113.5, 271.9, 124.6)));\n    return fract(sin(p) * 43758.5453);\n}\n\nvec2 voro(vec3 p){\n    vec3 ip = floor(p);\n    vec3 fp = fract(p);\n    float f1 = 8.0;\n    float f2 = 8.0;\n    for (int k = -1; k <= 1; k++)\n    for (int j = -1; j <= 1; j++)\n    for (int i = -1; i <= 1; i++){\n        vec3 g = vec3(float(i), float(j), float(k));\n        vec3 r = g + hash3(ip + g) - fp;\n        float d = dot(r, r);\n        if (d < f1){ f2 = f1; f1 = d; }\n        else if (d < f2){ f2 = d; }\n    }\n    return sqrt(vec2(f1, f2));\n}\n\nvec2 path(float z){\n    return vec2(sin(z * 0.31) * 1.3 + sin(z * 0.13) * 0.9,\n                cos(z * 0.24) * 1.1 + cos(z * 0.09) * 0.7);\n}\n\nfloat heartbeat(float t){\n    float b = fract(t * 0.9);\n    return pow(max(sin(b * 6.28318), 0.0), 12.0)\n         + 0.5 * pow(max(sin(b * 6.28318 - 1.2), 0.0), 24.0);\n}\n\nfloat veins(vec3 p){\n    float v = fbm3(p * 1.3 + vec3(31.7, 7.3, 11.1));\n    return smoothstep(0.045, 0.0, abs(v - 0.5));\n}\n\nfloat parasites(vec3 p, float t){\n    vec3 wp = p + 0.15 * vec3(sin(p.z * 2.0 + t * 2.0), cos(p.x * 2.0 + t * 1.6), 0.0);\n    float w = fbm3(wp * 1.1 + vec3(61.0, 23.0, 42.0));\n    float line = smoothstep(0.035, 0.0, abs(w - 0.5));\n    float region = smoothstep(0.52, 0.68, noise(p * 0.35 + vec3(51.0, 13.0, 7.0)) + 0.16 * (PARA_AMT - 1.0));\n    return line * region;\n}\n\nfloat wigglers(vec3 p, float t){\n    vec3 wp = p + 0.22 * vec3(sin(p.y * 4.0 + t * 5.0), sin(p.z * 4.0 + t * 4.2), sin(p.x * 4.0 + t * 4.6));\n    float w = fbm3(wp * 1.6 + vec3(101.0, 7.0, 53.0));\n    float line = smoothstep(0.03, 0.0, abs(w - 0.5));\n    float chop = smoothstep(0.35, 0.55, noise(p * 2.6 + vec3(13.0, 71.0, 31.0)) + 0.20 * (WIG_AMT - 1.0));\n    return line * chop;\n}\n\nfloat dispBase(vec3 p, float ang, float t){\n    float d = fbm(p * 0.7 + vec3(0.0, 0.0, -t * 0.25)) * 0.40;\n    vec2 v = voro(p * LOBE_SCALE + vec3(0.0, 0.0, 5.0));\n    float dome = smoothstep(0.95, 0.25, v.x);\n    float crease = 1.0 - smoothstep(0.0, 0.28, v.y - v.x);\n    d += dome * LOBE_AMP - crease * 0.10;\n    d += sin(p.z * 2.1 - t * 2.2 + noise(p * 0.5) * 4.0) * 0.09;\n    float b = noise(p * 1.15 + vec3(7.0, 3.0, 5.0));\n    d += smoothstep(0.60, 0.85, b) * 0.22;\n    d += sin(ang * 7.0 + noise(p * 0.4) * 5.0 + p.z * 0.3) * 0.05;\n    float gate = pow(0.5 + 0.5 * cos(p.z * 0.42), 6.0);\n    d += gate * (GATE + sin(ang * 16.0 + p.z * 1.5) * 0.12);\n    return d;\n}\n\nfloat dispDetail(vec3 p, float t){\n    float d = fbm3(p * 3.8) * WRINKLE;\n    d -= smoothstep(0.055, 0.0, abs(fbm3(p * 1.9 + vec3(17.0, 43.0, 8.0)) - 0.5)) * GROOVE;\n    d += veins(p) * 0.06;\n    d += parasites(p, t) * 0.05 * min(PARA_AMT, 1.5);\n    d += wigglers(p, t * WIGGLE_SPEED) * 0.05 * min(WIG_AMT, 1.5);\n    return d;\n}\n\nfloat gRadius;\n\nfloat map(vec3 p, float t){\n    vec2 q = p.xy - path(p.z);\n    float r = length(q);\n    float ang = atan(q.y, q.x) + p.z * 0.4;\n    return gRadius - dispBase(p, ang, t) - r;\n}\n\nfloat mapFull(vec3 p, float t){\n    return map(p, t) - dispDetail(p, t);\n}\n\nvec3 calcNormal(vec3 p, float t){\n    const float h = 0.012;\n    vec2 k = vec2(1.0, -1.0);\n    return normalize(k.xyy * mapFull(p + k.xyy * h, t) +\n                     k.yyx * mapFull(p + k.yyx * h, t) +\n                     k.yxy * mapFull(p + k.yxy * h, t) +\n                     k.xxx * mapFull(p + k.xxx * h, t));\n}\n\nfloat calcAO(vec3 p, vec3 n, float t){\n    float occ = 0.0;\n    float w = 1.0;\n    for (int i = 1; i <= 4; i++){\n        float h = 0.07 * float(i);\n        occ += w * (h - map(p + n * h, t));\n        w *= 0.65;\n    }\n    return clamp(1.0 - 2.2 * occ, 0.0, 1.0);\n}\n\nvoid main(){\n    vec2 uv = (2.0 * gl_FragCoord.xy - RENDERSIZE) / RENDERSIZE.y;\n    float t = TIME;\n\n    float hb = heartbeat(t * PULSE_SPEED) * PULSE_ON;\n    gRadius = 2.15 + 0.10 * hb + 0.05 * sin(t * 0.7);\n\n    float z0 = t * 1.8 * SPEED;\n    vec3 ro = vec3(path(z0) * 0.8, z0);\n    vec3 ta = vec3(path(z0 + 2.5) * 0.8, z0 + 2.5);\n    ro.xy += 0.15 * vec2(sin(t * 1.3), cos(t * 1.7));\n    if (map(ro, t) < 0.25) ro.xy = mix(path(z0), ro.xy, 0.3);\n\n    vec3 fw = normalize(ta - ro);\n    vec3 rt = normalize(cross(vec3(0.0, 1.0, 0.0), fw));\n    vec3 up = cross(fw, rt);\n    float roll = 0.22 * sin(t * 0.3);\n    vec2 rc = vec2(cos(roll), sin(roll));\n    vec3 rt2 = rt * rc.x + up * rc.y;\n    vec3 up2 = up * rc.x - rt * rc.y;\n    vec3 rd = normalize(fw * (1.35 - 0.08 * hb) + uv.x * rt2 + uv.y * up2);\n\n    float dist = 0.02;\n    float d = 0.0;\n    vec3 p = ro;\n    for (int i = 0; i < 80; i++){\n        p = ro + rd * dist;\n        d = map(p, t);\n        if (d < 0.0015 * dist || dist > 32.0) break;\n        dist += d * 0.55;\n    }\n\n    vec3 col;\n    if (dist > 32.0){\n        col = vec3(0.03, 0.0, 0.0);\n    } else {\n        vec3 n = calcNormal(p, t);\n\n        float m0 = fbm3(p * 9.0);\n        vec3 g = vec3(fbm3(p * 9.0 + vec3(0.02, 0.0, 0.0)) - m0,\n                      fbm3(p * 9.0 + vec3(0.0, 0.02, 0.0)) - m0,\n                      fbm3(p * 9.0 + vec3(0.0, 0.0, 0.02)) - m0) / 0.02;\n        float m1 = fbm3(p * 26.0);\n        g += vec3(fbm3(p * 26.0 + vec3(0.008, 0.0, 0.0)) - m1,\n                  fbm3(p * 26.0 + vec3(0.0, 0.008, 0.0)) - m1,\n                  fbm3(p * 26.0 + vec3(0.0, 0.0, 0.008)) - m1) / 0.008 * 0.35;\n        g -= n * dot(g, n);\n        n = normalize(n - g * 0.045);\n\n        float ao = calcAO(p, n, t);\n\n        float wrk     = fbm3(p * 3.8);\n        float bRaw    = noise(p * 1.15 + vec3(7.0, 3.0, 5.0));\n        float boil    = smoothstep(0.60, 0.85, bRaw);\n        float halo    = smoothstep(0.45, 0.60, bRaw) * (1.0 - smoothstep(0.60, 0.75, bRaw));\n        float head    = smoothstep(0.80, 0.90, bRaw);\n        float vn      = veins(p);\n        float vnB     = smoothstep(0.05, 0.0, abs(fbm3(p * 0.9 + vec3(53.0, 91.0, 37.0)) - 0.5));\n        float vnR     = smoothstep(0.04, 0.0, abs(fbm3(p * 2.1 + vec3(3.0, 59.0, 83.0)) - 0.5));\n        float gr      = smoothstep(0.055, 0.0, abs(fbm3(p * 1.9 + vec3(17.0, 43.0, 8.0)) - 0.5));\n        float wig     = wigglers(p, t * WIGGLE_SPEED);\n        float para    = parasites(p, t);\n        float cap     = smoothstep(0.030, 0.0, abs(fbm3(p * 3.2 + vec3(5.0, 17.0, 9.0)) - 0.5));\n        float sick    = fbm(p * 0.9 + vec3(13.0, 41.0, 2.0));\n        float infect  = fbm(p * 0.55 + vec3(23.0, 5.0, 47.0));\n        float necro   = smoothstep(0.62, 0.78, infect);\n        float inflam  = smoothstep(0.45, 0.62, infect) * (1.0 - necro);\n        float film    = smoothstep(0.58, 0.75, fbm(p * 0.8 + vec3(71.0, 3.0, 29.0)));\n        vec2 vs       = voro(p * LOBE_SCALE + vec3(0.0, 0.0, 5.0));\n        float crease  = 1.0 - smoothstep(0.0, 0.28, vs.y - vs.x);\n        float zone    = fbm(p * 0.22 + vec3(3.0, 77.0, 19.0));\n        float paleZone = smoothstep(0.60, 0.74, fbm(p * 0.28 + vec3(91.0, 47.0, 23.0)));\n        float fiber   = smoothstep(0.55, 0.70, fbm(p * 0.30 + vec3(67.0, 11.0, 5.0)));\n        float rot     = smoothstep(0.52, 0.68, fbm(p * 0.40 + vec3(41.0, 61.0, 17.0)));\n        float mottle  = smoothstep(0.45, 0.75, fbm3(p * 2.4 + vec3(8.0, 33.0, 55.0)));\n\n        vec3 flesh   = vec3(0.46, 0.11, 0.10);\n        vec3 pink    = vec3(0.78, 0.36, 0.34);\n        vec3 bile    = vec3(0.42, 0.46, 0.12);\n        vec3 bruise  = vec3(0.22, 0.08, 0.20);\n        vec3 veinCol = vec3(0.28, 0.03, 0.10);\n\n        col = mix(flesh, pink, smoothstep(0.3, 0.8, wrk));\n        col = mix(col, vec3(0.70, 0.50, 0.44), paleZone * 0.7);\n        vec3 muscle = vec3(0.50, 0.09, 0.08) * (0.8 + 0.25 * sin(p.z * 55.0 + noise(p * 3.0) * 6.0));\n        col = mix(col, muscle, fiber * 0.7);\n        col = mix(col, bile, smoothstep(0.55, 0.8, sick) * min(0.7 * DISEASE, 1.0));\n        col = mix(col, vec3(0.45, 0.10, 0.14), cap * min(0.45 * VEIN_AMT, 1.0));\n        col = mix(col, vec3(0.62, 0.14, 0.11), halo * 0.65);\n        col = mix(col, bruise, boil * 0.5);\n        col = mix(col, vec3(0.78, 0.70, 0.40), head * 0.8);\n        col = mix(col, vec3(0.72, 0.10, 0.07), inflam * min(0.7 * DISEASE, 1.0));\n        col = mix(col, vec3(0.17, 0.18, 0.12), necro * min(0.85 * DISEASE, 1.0));\n        float fatZone = smoothstep(0.58, 0.72, zone);\n        col = mix(col, vec3(0.55, 0.42, 0.08), fatZone * 0.75);\n        col = mix(col, vec3(0.30, 0.08, 0.05), smoothstep(0.30, 0.18, zone) * 0.6);\n        col = mix(col, vec3(0.32, 0.04, 0.12),\n                  crease * smoothstep(0.35, 0.65, fbm3(p * 1.6 + vec3(9.0, 27.0, 3.0))) * min(0.8 * VEIN_AMT, 1.0));\n        col = mix(col, vec3(0.10, 0.12, 0.03), fatZone * crease * 0.6);\n        col = mix(col, veinCol, vn * min(0.85 * VEIN_AMT, 1.0));\n        col = mix(col, vec3(0.10, 0.09, 0.22), vnB * min(0.7 * VEIN_AMT, 1.0));\n        col = mix(col, vec3(0.30, 0.02, 0.04), vnR * min(0.6 * VEIN_AMT, 1.0));\n        col = mix(col, col * vec3(0.50, 0.35, 0.40), gr * 0.8);\n        float segT = (p.x + p.y * 1.3 + p.z * 1.7) * 46.0 + noise(p * 9.0) * 7.0;\n        float seg = 0.60 + 0.40 * pow(0.5 + 0.5 * sin(segT), 1.6);\n        vec3 wormCol = vec3(0.74, 0.68, 0.50) * seg;\n        wormCol = mix(wormCol, vec3(0.45, 0.30, 0.18), smoothstep(0.55, 0.85, noise(p * 14.0)) * 0.65);\n        col = mix(col, wormCol, para * 0.85);\n        float wseg = 0.62 + 0.38 * pow(0.5 + 0.5 * sin((p.x + p.y + p.z * 1.4) * 60.0 + t * 8.0 * WIGGLE_SPEED), 1.5);\n        col = mix(col, vec3(0.80, 0.62, 0.55) * wseg, wig * 0.9);\n        vec3 rotCol = mix(vec3(0.05, 0.035, 0.04), vec3(0.46, 0.31, 0.26), mottle * 0.8);\n        col = mix(col, rotCol, rot * min(0.9 * DISEASE, 1.0));\n\n        vec3 aoCol = mix(vec3(0.02, 0.0, 0.0),\n                         mix(vec3(0.45, 0.04, 0.04), vec3(1.0), smoothstep(0.35, 0.85, ao)),\n                         smoothstep(0.0, 0.30, ao));\n        col *= aoCol * (0.75 + 0.25 * ao);\n\n        col *= 0.90 + 0.14 * noise(p * 42.0);\n        col *= 1.0 - 0.18 * smoothstep(0.72, 0.90, noise(p * 27.0 + vec3(5.0, 5.0, 5.0)));\n\n        vec3 ld = normalize(ro - p + vec3(0.0, 0.3, 0.0));\n        float diff = clamp(dot(n, ld) * 0.6 + 0.4, 0.0, 1.0);\n        float drip = smoothstep(0.55, 0.8, noise(vec3(p.x * 6.0, p.y * 1.5 + t * 0.7, p.z * 6.0)));\n        float gloss = clamp(fbm3(p * 1.7 + vec3(19.0, 3.0, 71.0)) * 1.5 - 0.25\n                            + 0.35 * drip + 0.5 * head + 0.15 * fatZone\n                            - 0.55 * necro - 0.35 * rot * (1.0 - mottle), 0.0, 1.0);\n        float sr = clamp(dot(reflect(-ld, n), -rd), 0.0, 1.0);\n        float spec = pow(sr, mix(12.0, 85.0, gloss)) * (0.35 + 1.1 * gloss) + pow(sr, 8.0) * 0.22;\n        float fres = pow(1.0 - clamp(dot(n, -rd), 0.0, 1.0), 3.0);\n\n        float thin = 0.0;\n        for (int i = 1; i <= 4; i++){\n            thin += step(0.0, map(p + rd * (float(i) * 0.15), t));\n        }\n        thin *= 0.25;\n\n        float slime = (0.6 + 0.6 * (1.0 - ao) + 0.4 * smoothstep(0.4, 0.7, sick)\n                       + 0.9 * drip + 0.5 * para + 0.6 * wig + 1.5 * head) * (1.0 - necro * 0.7);\n        col *= diff * (1.1 + 0.35 * hb);\n        col += spec * slime * vec3(0.9, 0.85, 0.7);\n        col += smoothstep(0.82, 0.95, noise(p * 34.0)) * gloss * pow(sr, 6.0) * 0.4;\n        vec3 l2 = normalize(vec3(0.35, 0.9, -0.2));\n        vec3 nA = normalize(n - fw * dot(n, fw) * 0.65);\n        float spec2 = pow(clamp(dot(reflect(-l2, nA), -rd), 0.0, 1.0), 28.0);\n        col += spec2 * slime * (0.25 + 0.75 * gloss) * 0.45 * vec3(1.0, 0.97, 0.9);\n        col += thin * vec3(0.40, 0.07, 0.03) * (0.4 + 0.6 * diff);\n        col += fres * vec3(0.25, 0.05, 0.04) * ao;\n        col += film * (0.5 + 0.5 * cos(fres * 8.0 + vec3(0.0, 2.1, 4.2))) * 0.10;\n        col += inflam * vec3(0.09, 0.005, 0.0) * (0.7 + 0.5 * hb);\n\n        float fog = exp(-dist * 0.11);\n        col = mix(vec3(0.04, 0.0, 0.005), col, fog);\n    }\n\n    col *= BRIGHTNESS;\n    col = mix(vec3(dot(col, vec3(0.299, 0.587, 0.114))), col, SATURATION);\n    col = hueShift(col, HUE_SHIFT);\n\n    col = pow(col, vec3(0.85, 0.95, 1.0));\n    col = col / (1.0 + col);\n    col = pow(col, vec3(0.4545));\n    vec2 vuv = gl_FragCoord.xy / RENDERSIZE;\n    col *= 0.35 + 0.65 * pow(16.0 * vuv.x * vuv.y * (1.0 - vuv.x) * (1.0 - vuv.y), 0.25);\n    col += vec3(0.05, 0.0, 0.0) * hb;\n\n    gl_FragColor = vec4(col, 1.0);\n}",
    "generator": {
      "model": "claude-fable-5 · anthropic",
      "provider": null,
      "prompt": null,
      "params": null
    }
  }
}