{
  "license": "CC0-1.0",
  "shader": {
    "id": "s402l4y4",
    "title": "Spectral liquid matrix rain with orbiting catalysts and flowing glyphs",
    "license": "CC0-1.0",
    "provenance_type": "witnessed_generation",
    "made_with": "SLOP SPLICER",
    "made_with_app": "xfgeujl3",
    "status": "active",
    "compile_ok": true,
    "tags": [],
    "parents": [],
    "author": "zazi5inxhmgi",
    "author_name": "ufffd",
    "author_url": "/u/ufffd",
    "created_at": "2026-07-14T00:04:48.389Z",
    "poster_url": "/posters/s402l4y4.avif",
    "stats": {
      "slops": 1,
      "views": 151,
      "forks": 0
    },
    "self": "/api/v1/shaders/s402l4y4",
    "isf": "/*{\n  \"DESCRIPTION\": \"Spectral liquid matrix rain with orbiting catalysts and flowing glyphs\",\n  \"CATEGORIES\": [\"generative\"],\n  \"INPUTS\": [\n    { \"NAME\": \"speed\", \"TYPE\": \"float\", \"DEFAULT\": 0.5, \"MIN\": 0.05, \"MAX\": 2.0 },\n    { \"NAME\": \"columns\", \"TYPE\": \"float\", \"DEFAULT\": 50.0, \"MIN\": 15.0, \"MAX\": 100.0 },\n    { \"NAME\": \"warp\", \"TYPE\": \"float\", \"DEFAULT\": 0.6, \"MIN\": 0.0, \"MAX\": 2.0 },\n    { \"NAME\": \"ripples\", \"TYPE\": \"float\", \"DEFAULT\": 0.8, \"MIN\": 0.0, \"MAX\": 3.0 },\n    { \"NAME\": \"catalyst\", \"TYPE\": \"float\", \"DEFAULT\": 0.7, \"MIN\": 0.0, \"MAX\": 1.5 },\n    { \"NAME\": \"hue\", \"TYPE\": \"float\", \"DEFAULT\": 0.3, \"MIN\": 0.0, \"MAX\": 1.0 },\n    { \"NAME\": \"brightness\", \"TYPE\": \"float\", \"DEFAULT\": 1.5, \"MIN\": 0.5, \"MAX\": 5.0 }\n  ]\n}*/\n\n#define TAU 6.28318530718\n\nfloat hash11(float n) {\n  return fract(sin(n * 91.7) * 43758.5453);\n}\n\nfloat hash21(vec2 p) {\n  return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453);\n}\n\nfloat noise(vec2 p) {\n  vec2 i = floor(p);\n  vec2 f = fract(p);\n  f = f * f * (3.0 - 2.0 * f);\n  float a = hash21(i);\n  float b = hash21(i + vec2(1.0, 0.0));\n  float c = hash21(i + vec2(0.0, 1.0));\n  float d = hash21(i + vec2(1.0, 1.0));\n  return mix(mix(a, b, f.x), mix(c, d, f.x), f.y);\n}\n\nfloat fbm(vec2 p) {\n  float v = 0.0;\n  float a = 0.5;\n  for (int i = 0; i < 5; i++) {\n    v += noise(p) * a;\n    p *= 2.0;\n    a *= 0.5;\n  }\n  return v;\n}\n\n// Blended palette from all 3 parents\nvec3 palette(float t) {\n  vec3 p1 = 0.5 + 0.5 * cos(TAU * (t + 0.56 + vec3(0.0, 0.19, 0.43)));\n  vec3 p2 = 0.5 + 0.5 * cos(TAU * (t + vec3(0.0, 0.33, 0.66)));\n  vec3 p3 = 0.5 + 0.5 * cos(TAU * t + vec3(0.0, 2.0, 4.0) + hue * TAU);\n  return (p1 + p2 + p3) / 3.0;\n}\n\n// glyph from parent 2\nfloat glyph(vec2 p, float seed) {\n  p = floor(p * 6.0);\n  float pattern = fract(sin(seed + p.x * 12.3 + p.y * 45.7) * 43758.0);\n  float v = 0.0;\n  if (pattern > 0.42) v = 1.0;\n  if (mod(p.x + p.y, 3.0) < 1.0 && pattern < 0.75) v *= 0.3;\n  return v;\n}\n\n// orbiting catalyst centers from parent 1\nvec3 catalystField(vec2 uv, float t) {\n  vec2 oA = vec2(0.5 + 0.30 * cos(t * 0.29), 0.5 + 0.22 * sin(t * 0.43));\n  vec2 oB = vec2(0.5 + 0.23 * cos(t * 0.21 + 3.14), 0.5 + 0.30 * sin(t * 0.37 + 1.3));\n  vec2 oC = vec2(0.5 + 0.18 * sin(t * 0.61 + 0.8), 0.5 + 0.28 * cos(t * 0.33 - 0.6));\n  float pulseA = 0.45 + 0.55 * sin(t * 2.2);\n  float pulseB = 0.50 + 0.50 * sin(t * 1.63 + 2.1);\n  float pulseC = 0.50 + 0.50 * sin(t * 2.85 + 4.0);\n  float dA = length(uv - oA);\n  float dB = length(uv - oB);\n  float dC = length(uv - oC);\n  float field = exp(-dA * 30.0) * pulseA + exp(-dB * 35.0) * pulseB + exp(-dC * 40.0) * pulseC;\n  return vec3(field, dA, dB); // we can use distances for coloring too\n}\n\nvoid main() {\n  vec2 uv = isf_FragNormCoord;\n  vec2 p = uv - 0.5;\n  p.x *= RENDERSIZE.x / RENDERSIZE.y;\n  \n  float t = TIME * speed * 0.15;\n  \n  // liquid flow from parent 3\n  vec2 flow;\n  flow.x = fbm(uv * 1.8 + t);\n  flow.y = fbm(uv * 1.8 - t);\n  vec2 warpedUV = uv + (flow - 0.5) * warp;\n  \n  // catalyst field from parent 1\n  float cat = catalystField(warpedUV, TIME).x * catalyst;\n  \n  // ripple field from parent 3, modulated by catalyst\n  float ripple = sin(length(p) * 8.0 - t * 3.0 + fbm(p * 2.5) * 5.0 + cat * 3.0);\n  ripple *= 0.15 * ripples;\n  \n  float liquid = fbm(p * 3.0 + ripple);\n  liquid = smoothstep(0.15, 0.85, liquid);\n  \n  // matrix rain structure from parent 2\n  float id = floor(warpedUV.x * columns);\n  float seed = hash11(id);\n  float offset = seed * 10.0;\n  float fall = fract(TIME * speed * (0.2 + seed) + offset);\n  float rows = 22.0;\n  float row = floor(warpedUV.y * rows);\n  vec2 cell;\n  cell.x = fract(warpedUV.x * columns);\n  cell.y = fract(warpedUV.y * rows);\n  float ch = glyph(cell, seed + row * 3.1 + cat * 10.0);\n  float position = fract(row / rows + fall + cat * 0.3);\n  float trail = smoothstep(1.0, 0.05, position);\n  float leader = smoothstep(0.03, 0.0, abs(position));\n  \n  // blend liquid and matrix\n  vec3 col = palette(liquid + id / columns + TIME * 0.03);\n  \n  col *= ch * trail * brightness;\n  col += leader * palette(id / columns + TIME * 0.05) * 3.0;\n  \n  // catalyst glow\n  col += cat * palette(TIME * 0.1) * 0.5;\n  \n  // glossy highlights from parent 3\n  col += pow(liquid, 5.0) * 0.25;\n  \n  gl_FragColor = vec4(col, 1.0);\n}",
    "generator": {
      "model": "accounts/fireworks/models/glm-5p2",
      "provider": "Custom (OpenAI-compatible)",
      "prompt": null,
      "params": null
    }
  }
}