{
  "license": "CC0-1.0",
  "shader": {
    "id": "23lrdqp1",
    "title": "Cursed Cash",
    "license": "CC0-1.0",
    "provenance_type": "witnessed_generation",
    "made_with": "Claude",
    "status": "active",
    "compile_ok": true,
    "render_hash": "9d265f01d007400c",
    "tags": [
      "evil",
      "money",
      "cash",
      "chedda",
      "bands",
      "rain",
      "satan",
      "666"
    ],
    "parents": [],
    "author": "u7y1evhf0znj",
    "author_name": "ksin",
    "author_url": "/u/ksin",
    "created_at": "2026-07-20T02:40:35.308Z",
    "poster_url": "/posters/23lrdqp1.avif",
    "stats": {
      "slops": 1,
      "views": 219,
      "forks": 0
    },
    "self": "/api/v1/shaders/23lrdqp1",
    "isf": "/*{\n  \"DESCRIPTION\": \"Cursed US $100 bills falling naturally through dusty green vault light: leaf-like swooping descent, banking into each swing, lazy turn-overs, and curled sheets whose bowed silhouette shows when a bill tilts edge-on. Every bill is drawn procedurally (no textures): ornamental border lace, an alchemist transmutation circle (double ring, runic ticks, twin-armed vortex spiral, vertex sigil-circles), pentagram seals, serial dashes, corner 666s, and a Baphomet-style sigil + eye-in-pyramid on the back. A glow slider makes the occult ink throb red; a burn slider chars noise-eaten holes into the paper with flickering ember rims and flames licking into the gaps. Eight parallax depth layers with fog and god rays. Speed, density, size, flutter, spin, glow, burn, rays, hue and vignette on sliders.\",\n  \"CREDIT\": \"CC0\",\n  \"CATEGORIES\": [\"generator\", \"money\", \"rain\", \"occult\"],\n  \"INPUTS\": [\n    { \"NAME\": \"uSpeed\",    \"TYPE\": \"float\", \"DEFAULT\": 1.20, \"MIN\": 0.0, \"MAX\": 3.0 },\n    { \"NAME\": \"uDensity\",  \"TYPE\": \"float\", \"DEFAULT\": 1.00, \"MIN\": 0.0, \"MAX\": 1.5 },\n    { \"NAME\": \"uSize\",     \"TYPE\": \"float\", \"DEFAULT\": 0.30, \"MIN\": 0.3, \"MAX\": 2.5 },\n    { \"NAME\": \"uFlutter\",  \"TYPE\": \"float\", \"DEFAULT\": 2.00, \"MIN\": 0.0, \"MAX\": 2.0 },\n    { \"NAME\": \"uSpin\",     \"TYPE\": \"float\", \"DEFAULT\": 1.66, \"MIN\": 0.0, \"MAX\": 2.5 },\n    { \"NAME\": \"uGlow\",     \"TYPE\": \"float\", \"DEFAULT\": 0.80, \"MIN\": 0.0, \"MAX\": 1.5 },\n    { \"NAME\": \"uBurn\",     \"TYPE\": \"float\", \"DEFAULT\": 0.55, \"MIN\": 0.0, \"MAX\": 1.0 },\n    { \"NAME\": \"uRays\",     \"TYPE\": \"float\", \"DEFAULT\": 0.91, \"MIN\": 0.0, \"MAX\": 2.0 },\n    { \"NAME\": \"uHue\",      \"TYPE\": \"float\", \"DEFAULT\": 0.00, \"MIN\": 0.0, \"MAX\": 1.0 },\n    { \"NAME\": \"uVignette\", \"TYPE\": \"float\", \"DEFAULT\": 0.60, \"MIN\": 0.0, \"MAX\": 1.0 }\n  ]\n}*/\n\n// MONEY RAIN — ISF port of the Shadertoy/WebGL2 version\n// (GLSL ES 1.00: fixed loop bounds, gl_FragColor, TIME/RENDERSIZE).\n\n#define TAU 6.28318530718\n\nvec3 hueShift(vec3 c, float a){\n    vec3 k = vec3(0.57735);\n    float ca = cos(a * TAU);\n    float sa = sin(a * TAU);\n    return c * ca + cross(k, c) * sa + k * dot(k, c) * (1.0 - ca);\n}\n\nfloat hash21(vec2 p){\n    p = fract(p * vec2(234.34, 435.345));\n    p += dot(p, p + 34.23);\n    return fract(p.x * p.y);\n}\n\nfloat hash11(float n){ return fract(sin(n * 127.1) * 43758.5453); }\n\nvec2 hash22(vec2 p){\n    float h = hash21(p);\n    return vec2(h, hash21(p + h + 17.31));\n}\n\nfloat noise2(vec2 p){\n    vec2 i = floor(p), f = fract(p);\n    f = f * f * (3.0 - 2.0 * f);\n    return mix(mix(hash21(i),                   hash21(i + vec2(1.0, 0.0)), f.x),\n               mix(hash21(i + vec2(0.0, 1.0)),  hash21(i + vec2(1.0, 1.0)), f.x), f.y);\n}\n\nmat2 rot(float a){ float c = cos(a), s = sin(a); return mat2(c, -s, s, c); }\n\nfloat sbox(vec2 p, vec2 c, vec2 b, float aa){\n    vec2 d = abs(p - c) - b;\n    return smoothstep(aa, -aa, max(d.x, d.y));\n}\nfloat disc(vec2 p, vec2 c, float r, float aa){\n    return smoothstep(aa, -aa, length(p - c) - r);\n}\nfloat ring(vec2 p, vec2 c, vec2 rad, float th, float aa){\n    float e = length((p - c) / rad);\n    float a = aa / min(rad.x, rad.y);\n    return smoothstep(th + a, th - a, abs(e - 1.0));\n}\n\nfloat sdSeg(vec2 p, vec2 b){\n    float h = clamp(dot(p, b) / dot(b, b), 0.0, 1.0);\n    return length(p - b * h);\n}\n\nfloat spiralArm(vec2 q, float b, float phase){\n    float r = length(q);\n    float a = atan(q.y, q.x) + phase;\n    float n = floor((r / b - a) / TAU + 0.5);\n    return abs(r - b * (a + TAU * n));\n}\n\nfloat penta(vec2 p, float R, float w, float aa){\n    float d = 1e3;\n    for (int i = 0; i < 5; i++){\n        float a1 = -1.5708 + float(i) * 2.51327;\n        vec2 A = R * vec2(cos(a1), sin(a1));\n        vec2 B2 = R * vec2(cos(a1 + 2.51327), sin(a1 + 2.51327));\n        d = min(d, sdSeg(p - A, B2 - A));\n    }\n    return smoothstep(w + aa, w - aa, d);\n}\n\nfloat glyph6(vec2 c, float aa){\n    float g = ring(c, vec2(-0.01, -0.09), vec2(0.13, 0.155), 0.34, aa);\n    vec2 A = vec2(0.12, 0.26);\n    float d = sdSeg(c - A, vec2(-0.06, -0.02) - A);\n    return max(g, smoothstep(0.05 + aa, 0.05 - aa, d));\n}\n\nfloat glyph666(vec2 c, float aa){\n    float g = glyph6(c - vec2(-0.36, 0.0), aa);\n    g = max(g, glyph6(c, aa));\n    g = max(g, glyph6(c - vec2(0.36, 0.0), aa));\n    return g;\n}\n\nvec4 drawBill(vec2 p, float side, float rnd, float aa, out float glow){\n    glow = 0.0;\n    vec2 B = vec2(1.175, 0.5);\n    float dRect = max(abs(p.x) - B.x, abs(p.y) - B.y);\n    float mask = smoothstep(aa, -aa, dRect);\n    if (mask < 0.003) return vec4(0.0);\n\n    vec2 q = p / B;\n    float aq = aa / B.y;\n\n    float grain = noise2(p * 34.0 + rnd * 90.0);\n    vec3 paper = vec3(0.87, 0.89, 0.80) * (0.95 + 0.08 * grain);\n    if (side > 0.5) paper = vec3(0.82, 0.88, 0.76) * (0.95 + 0.08 * grain);\n    vec3 ink  = vec3(0.13, 0.30, 0.18);\n    vec3 dark = vec3(0.10, 0.12, 0.10);\n    vec3 col = paper;\n\n    float m = max(abs(q.x), abs(q.y));\n\n    float gu = sin(p.x * 46.0 + 3.0 * sin(p.y * 17.0)) *\n               sin(p.y * 38.0 - 2.5 * sin(p.x * 11.0));\n    col = mix(col, ink, smoothstep(0.55, 0.95, abs(gu)) * 0.10 * smoothstep(0.88, 0.80, m));\n\n    float band = smoothstep(aq, -aq, abs(m - 0.905) - 0.055);\n    float lace = 0.72 + 0.28 * sin(q.x * 60.0) * sin(q.y * 30.0);\n    col = mix(col, ink, band * lace);\n    col = mix(col, ink, smoothstep(aq, -aq, abs(m - 0.815) - 0.012) * 0.85);\n\n    if (side < 0.5){\n        // alchemist transmutation circle in place of the portrait\n        vec2 ap2 = p - vec2(-0.05, 0.0);\n        float ar = length(ap2);\n        float aang = atan(ap2.y, ap2.x);\n        float alc = smoothstep(aa, -aa, abs(ar - 0.300) - 0.010);\n        alc = max(alc, smoothstep(aa, -aa, abs(ar - 0.268) - 0.006));\n        alc = max(alc, smoothstep(0.55, 0.85, sin(aang * 24.0)) *\n                       smoothstep(aa, -aa, abs(ar - 0.284) - 0.012));\n        float spD = min(spiralArm(ap2, 0.0153, 0.0), spiralArm(ap2, 0.0153, 3.14159));\n        float sp = smoothstep(0.009 + aa, 0.009 - aa, spD);\n        sp *= smoothstep(0.245, 0.225, ar) * smoothstep(0.015, 0.032, ar);\n        alc = max(alc, sp);\n        alc = max(alc, smoothstep(aa, -aa, ar - 0.028));\n        for (int i = 0; i < 3; i++){\n            float va = 1.5708 + float(i) * 2.0944;\n            vec2 vp = ap2 - 0.26 * vec2(cos(va), sin(va));\n            alc = max(alc, smoothstep(aa, -aa, abs(length(vp) - 0.030) - 0.007));\n        }\n        col = mix(col, ink, alc * 0.95);\n        glow = max(glow, alc);\n\n        vec2 sc = vec2(0.62, -0.04);\n        float sr = length(p - sc);\n        col = mix(col, vec3(0.20, 0.44, 0.26), smoothstep(aa, -aa, sr - 0.145) * 0.55);\n        float pg = penta(p - sc, 0.115, 0.012, aa);\n        col = mix(col, ink, pg);\n        glow = max(glow, pg);\n        col = mix(col, ink, smoothstep(aa, -aa, abs(sr - 0.145) - 0.010));\n\n        vec2 fc = vec2(-0.72, 0.05);\n        float fr = length(p - fc);\n        float fa = atan(p.y - fc.y, p.x - fc.x);\n        col = mix(col, dark, smoothstep(aa, -aa, abs(fr - 0.105) - 0.011));\n        col = mix(col, dark, smoothstep(aa, -aa, abs(fr - 0.070) - 0.009) *\n                             smoothstep(0.2, 0.7, 0.5 + 0.5 * sin(fa * 14.0)));\n        float pg2 = penta(p - fc, 0.052, 0.008, aa);\n        col = mix(col, dark, pg2);\n        glow = max(glow, pg2);\n\n        vec3 serial = vec3(0.15, 0.35, 0.22);\n        col = mix(col, serial, smoothstep(0.5, 0.8, sin(p.x * 70.0)) *\n                               sbox(p, vec2(-0.45, 0.30), vec2(0.26, 0.024), aa) * 0.9);\n        col = mix(col, serial, smoothstep(0.5, 0.8, sin(p.x * 70.0 + 2.0)) *\n                               sbox(p, vec2(0.42, -0.30), vec2(0.26, 0.024), aa) * 0.9);\n\n        float capm = smoothstep(0.3, 0.7, sin(p.x * 90.0));\n        col = mix(col, ink, capm * sbox(p, vec2(0.0,  0.415), vec2(0.40, 0.015), aa) * 0.8);\n        col = mix(col, ink, capm * sbox(p, vec2(-0.05, -0.415), vec2(0.34, 0.015), aa) * 0.8);\n    } else {\n        vec2 gc = vec2(0.0, -0.02);\n        float gr = length(p - gc);\n        float sig = smoothstep(aa, -aa, abs(gr - 0.30) - 0.010);\n        sig = max(sig, smoothstep(aa, -aa, abs(gr - 0.26) - 0.008) * 0.9);\n        sig = max(sig, penta(p - gc, 0.26, 0.014, aa) * 0.95);\n        col = mix(col, ink, sig);\n        glow = max(glow, sig);\n        vec2 tc = p - vec2(-0.70, -0.02);\n        vec2 T0 = vec2(0.0, 0.14);\n        vec2 T1 = vec2(-0.13, -0.09);\n        vec2 T2 = vec2(0.13, -0.09);\n        float dt = min(sdSeg(tc - T0, T1 - T0),\n                   min(sdSeg(tc - T1, T2 - T1), sdSeg(tc - T2, T0 - T2)));\n        float eye = smoothstep(0.010 + aa, 0.010 - aa, dt);\n        eye = max(eye, ring(tc, vec2(0.0, -0.015), vec2(0.055, 0.030), 0.35, aa));\n        eye = max(eye, disc(tc, vec2(0.0, -0.015), 0.012, aa));\n        col = mix(col, ink, eye);\n        glow = max(glow, eye);\n        float g6 = glyph666((p - vec2(0.60, -0.30)) / 0.20, aa / 0.20);\n        col = mix(col, vec3(0.72, 0.55, 0.20), g6 * 0.9);\n        glow = max(glow, g6);\n        col = mix(col, ink, smoothstep(0.3, 0.7, sin(p.x * 90.0)) *\n                            sbox(p, vec2(0.0, 0.40), vec2(0.38, 0.015), aa) * 0.8);\n    }\n\n    for (int k = 0; k < 4; k++){\n        vec2 sgn = vec2(k < 2 ? -1.0 : 1.0, (k == 0 || k == 2) ? -1.0 : 1.0);\n        vec2 cc = (p - sgn * vec2(0.80, 0.30)) / 0.17;\n        float cg = glyph666(cc, aa / 0.17);\n        col = mix(col, ink * 0.9, cg * 0.95);\n        glow = max(glow, cg);\n    }\n\n    // burning: charred noise holes, flickering ember rims, flames\n    float outA = mask;\n    if (uBurn > 0.001){\n        float h4 = hash11(rnd * 91.7);\n        float lvl = uBurn * (0.05 + 0.75 * h4 * h4);\n        float bn = noise2(p * 6.0 + rnd * 40.0) * 0.6 + noise2(p * 13.0 + rnd * 60.0) * 0.4;\n        float d = bn - lvl;\n        float hole = smoothstep(0.015 + aa, -0.015 - aa, d);\n        float det = smoothstep(0.05, 0.015, aa);\n        col = mix(col, vec3(0.06, 0.045, 0.035), smoothstep(0.12, 0.02, d) * 0.85);\n        float flick = 0.65 + 0.35 * sin(TIME * 9.0 + bn * 40.0 + rnd * 25.0);\n        col += vec3(1.0, 0.30, 0.05) * smoothstep(0.05 + aa, aa, abs(d - 0.012)) * flick * 1.1 * det;\n        float fn = noise2(p * vec2(7.0, 3.5) + vec2(rnd * 30.0, -TIME * 2.2));\n        float fd = d + 0.055 + 0.09 * fn;\n        float flame = smoothstep(0.055 + aa, aa * 0.5, abs(fd)) *\n                      smoothstep(0.01, -0.01, d) * smoothstep(-0.16, -0.03, d) * det;\n        vec3 fcol = mix(vec3(1.0, 0.85, 0.30), vec3(0.85, 0.22, 0.03),\n                        clamp(-d * 5.0, 0.0, 1.0)) * (0.8 + 0.5 * flick);\n        col = mix(col, fcol, flame);\n        outA = mask * max(1.0 - hole, flame);\n    }\n\n    return vec4(col, outA);\n}\n\nvoid main(){\n    vec2 res = RENDERSIZE.xy;\n    vec2 fragCoord = gl_FragCoord.xy;\n    vec2 uv = (fragCoord - 0.5 * res) / res.y;\n    float t = TIME;\n    float pxUv = 1.0 / res.y;\n\n    vec3 bg = mix(vec3(0.008, 0.022, 0.012), vec3(0.045, 0.10, 0.055),\n                  smoothstep(-0.9, 0.9, uv.y));\n    vec2 ld = uv - vec2(0.0, 1.45);\n    float la = atan(ld.x, -ld.y) + sin(t * 0.10) * 0.12;\n    float ray = pow(0.5 + 0.5 * sin(la * 14.0 + t * 0.23), 5.0) * 0.9\n              + pow(0.5 + 0.5 * sin(la * 23.0 - t * 0.17 + 2.3), 7.0) * 0.65\n              + pow(0.5 + 0.5 * sin(la *  9.0 + t * 0.11 + 5.1), 4.0) * 0.55\n              + pow(0.5 + 0.5 * sin(la * 37.0 + t * 0.31 + 1.2), 9.0) * 0.40;\n    ray *= smoothstep(-1.1, 0.9, uv.y) * (0.55 + 0.45 * sin(t * 0.07 + la * 2.0));\n    bg += vec3(0.10, 0.20, 0.11) * ray * uRays * 0.5;\n\n    float dust = 0.0;\n    for (int i = 0; i < 3; i++){\n        float fi = float(i);\n        vec2 du = uv * (14.0 + fi * 10.0);\n        du.y += t * (1.2 + fi * 0.7);\n        du.x += sin(t * 0.4 + fi * 2.1 + uv.y * 2.0) * 0.6;\n        vec2 cellD = floor(du);\n        vec2 fp = fract(du) - 0.5;\n        vec2 jd = hash22(cellD + fi * 17.0) - 0.5;\n        float hd = hash21(cellD * 1.61 + fi * 29.0);\n        float sz = 0.015 + 0.035 * hd;\n        float tw = 0.55 + 0.45 * sin(t * (1.0 + 2.0 * hd) + hd * TAU * 3.0);\n        dust += smoothstep(sz, sz * 0.2, length(fp - jd * 0.7)) * tw * (0.3 + 0.7 * hd) / (1.0 + fi);\n    }\n    bg += vec3(0.55, 0.85, 0.60) * dust * 0.30 * (0.35 + 0.65 * min(uRays, 1.0));\n\n    vec3 col = bg;\n\n    for (int l = 0; l < 8; l++){\n        float fl = float(l);\n        float z = 3.0 - fl * 0.30;\n        float depthK = clamp((z - 0.9) / 2.1, 0.0, 1.0);\n        float sizeK = max(uSize, 0.2);\n        vec2 su = uv * z / sizeK;\n        su.x += hash11(fl + 3.0) * 13.7;\n\n        float cw = 1.85;\n        float chh = 1.55;\n        float colId = floor(su.x / cw);\n        float colH = hash11(colId * 13.7 + fl * 101.0);\n        float yy = su.y + t * uSpeed * (0.55 + 0.6 * colH) * 0.85 + colH * 23.0;\n        float row = floor(yy / chh);\n        vec2 cell = vec2(colId, row);\n\n        float rnd = hash21(cell + fl * 37.0);\n        if (rnd <= clamp(uDensity, 0.0, 1.5) * 0.95){\n            float h2 = hash21(cell * 1.93 + fl * 7.1);\n            float h3 = hash21(cell * 3.71 + fl * 11.7);\n            vec2 lp = vec2(su.x - (colId + 0.5) * cw, yy - (row + 0.5) * chh);\n            lp -= (hash22(cell + fl * 5.0) - 0.5) * vec2(0.20, 0.30);\n\n            // leaf-like swoop: wide lateral swing + double-frequency bob\n            float ph = h2 * TAU * 3.0;\n            float flut = min(uFlutter, 1.4);\n            float sw = t * (0.5 + 0.5 * h2) + ph;\n            lp.x += sin(sw) * 0.25 * flut;\n            lp.y += sin(2.0 * sw + 0.7) * 0.09 * flut;\n\n            float aaPat = z * pxUv / sizeK;\n\n            // bank into the swing, plus a slow per-bill drift\n            float angB = (h2 - 0.5) * 1.6\n                       + cos(sw) * 0.45 * flut\n                       + t * 0.18 * uSpin * (h3 - 0.5);\n            vec2 bp = rot(angB) * lp;\n            // lazy occasional turn-over, nudged by the swing itself\n            float fph = t * (0.20 + 0.75 * h2) * uSpin + h3 * TAU + 0.35 * sin(sw) * flut;\n            float cf = cos(fph);\n            float sn = sin(fph);\n            float sideB = step(cf, 0.0);\n            float scl = 0.335 * (0.82 + 0.36 * h2);\n            bp /= scl;\n            // paper curl as a projected height field: invisible face-on,\n            // a bowed arc when the bill tilts edge-on\n            float curl = 0.40 + 0.55 * h3;\n            float hcurl = curl * (0.16 * bp.x * bp.x - 0.08)\n                        + 0.05 * flut * sin(bp.x * 2.6 + sw * 1.7);\n            bp.y = (bp.y - hcurl * sn) / max(abs(cf), 0.10);\n            float glowM = 0.0;\n            vec4 s = drawBill(bp, sideB, h2, aaPat / scl, glowM);\n            float dh = curl * 0.32 * bp.x + 0.13 * flut * cos(bp.x * 2.6 + sw * 1.7);\n            float light = 0.60 + 0.40 * abs(cf) + clamp(0.6 * dh * sn, -0.25, 0.25);\n\n            if (s.a > 0.003){\n                vec3 c = s.rgb * light * (1.0 - 0.32 * depthK);\n                c = hueShift(c, (h2 - 0.5) * 0.04);\n                c = mix(c, bg, depthK * 0.45);\n                float gm = clamp(glowM * uGlow, 0.0, 1.5) * (0.7 + 0.3 * sin(t * 2.2 + h2 * TAU));\n                c = mix(c, vec3(0.55, 0.04, 0.02), min(gm, 1.0) * 0.85);\n                c += vec3(1.0, 0.10, 0.03) * gm * 0.7;\n                col = mix(col, c, s.a);\n            }\n        }\n    }\n\n    vec2 vc = (fragCoord / res - 0.5) * vec2(res.x / res.y, 1.0);\n    col *= 1.0 - uVignette * 0.85 * dot(vc, vc);\n    col = hueShift(col, uHue);\n    col = pow(max(col, vec3(0.0)), vec3(0.92));\n    gl_FragColor = vec4(col, 1.0);\n}\n",
    "generator": {
      "model": "claude-fable-5",
      "provider": null,
      "prompt": null,
      "params": null
    }
  }
}