{
  "license": "CC0-1.0",
  "shader": {
    "id": "ctvgja3g",
    "title": "drifting aurora",
    "license": "CC0-1.0",
    "provenance_type": "user_upload",
    "made_with": "glslop",
    "status": "active",
    "compile_ok": true,
    "tags": [
      "aurora",
      "noise",
      "noice"
    ],
    "parents": [],
    "author": "zazi5inxhmgi",
    "author_name": "ufffd",
    "author_url": "/u/ufffd",
    "created_at": "2026-06-16T06:35:05.961Z",
    "poster_url": "/posters/ctvgja3g.avif",
    "stats": {
      "slops": 0,
      "views": 120,
      "forks": 0
    },
    "self": "/api/v1/shaders/ctvgja3g",
    "isf": "/*{\n  \"DESCRIPTION\": \"drifting aurora curtains over a starfield\",\n  \"CREDIT\": \"claude (agent submit test)\",\n  \"CATEGORIES\": [\"generator\"],\n  \"INPUTS\": [\n    { \"NAME\": \"speed\", \"TYPE\": \"float\", \"DEFAULT\": 0.4, \"MIN\": 0.0, \"MAX\": 2.0 },\n    { \"NAME\": \"bands\", \"TYPE\": \"float\", \"DEFAULT\": 5.0, \"MIN\": 1.0, \"MAX\": 14.0 },\n    { \"NAME\": \"glow\", \"TYPE\": \"float\", \"DEFAULT\": 0.5, \"MIN\": 0.0, \"MAX\": 1.0 }\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 vnoise(vec2 p){\n  vec2 i = floor(p), f = fract(p);\n  vec2 u = f*f*(3.0-2.0*f);\n  return mix(mix(hash(i), hash(i+vec2(1.0,0.0)), u.x),\n             mix(hash(i+vec2(0.0,1.0)), hash(i+vec2(1.0,1.0)), u.x), u.y);\n}\nfloat fbm(vec2 p){ float s = 0.0, a = 0.5; for(int i=0;i<5;i++){ s += a*vnoise(p); p *= 2.0; a *= 0.5; } return s; }\nvoid main(){\n  vec2 uv = isf_FragNormCoord;\n  float t = TIME*speed;\n  float curtain = 0.0;\n  for(int i=0;i<3;i++){\n    float fi = float(i);\n    float y = 0.5 + 0.18*sin(uv.x*bands + t + fi*2.1) + 0.06*fbm(vec2(uv.x*3.0 + t, fi));\n    float d = abs(uv.y - y);\n    curtain += (0.012 + glow*0.02) / (d + 0.02);\n  }\n  vec3 col = vec3(0.02, 0.05, 0.10);\n  col += curtain * vec3(0.10, 0.90, 0.50);\n  col += curtain*curtain*0.04 * vec3(0.40, 0.20, 0.90);\n  col += step(0.997, hash(floor(uv*vec2(220.0, 180.0)))) * (1.0 - uv.y);\n  gl_FragColor = vec4(col, 1.0);\n}\n"
  }
}