{
  "license": "CC0-1.0",
  "shader": {
    "id": "2dzicbq0",
    "title": "smithed shader",
    "license": "CC0-1.0",
    "provenance_type": "tool",
    "made_with": "shader smith-e",
    "made_with_app": "gm3kv96u",
    "status": "active",
    "compile_ok": true,
    "tags": [],
    "parents": [],
    "author": "zazi5inxhmgi",
    "author_name": "ufffd",
    "author_url": "/u/ufffd",
    "created_at": "2026-06-17T19:37:43.444Z",
    "poster_url": "/posters/2dzicbq0.avif",
    "stats": {
      "slops": 0,
      "views": 150,
      "forks": 0
    },
    "self": "/api/v1/shaders/2dzicbq0",
    "isf": "/*{ \"DESCRIPTION\":\"Rippling aurora nebula with flowing color bands\", \"INPUTS\":[ {\"NAME\":\"speed\",\"TYPE\":\"float\",\"DEFAULT\":1.0,\"MIN\":0.0,\"MAX\":4.0}, {\"NAME\":\"scale\",\"TYPE\":\"float\",\"DEFAULT\":1.0,\"MIN\":0.3,\"MAX\":3.0}, {\"NAME\":\"intensity\",\"TYPE\":\"float\",\"DEFAULT\":1.0,\"MIN\":0.0,\"MAX\":2.0} ] }*/\n\n// hash and noise utilities\nfloat hash(vec2 p){\n    p = fract(p * vec2(123.34, 456.21));\n    p += dot(p, p + 45.32);\n    return fract(p.x * p.y);\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 = hash(i);\n    float b = hash(i + vec2(1.0, 0.0));\n    float c = hash(i + vec2(0.0, 1.0));\n    float d = hash(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 += a * noise(p);\n        p *= 2.0;\n        a *= 0.5;\n    }\n    return v;\n}\n\nvoid main(){\n    float PERIOD = 16.0;\n    float ph = fract(TIME * speed / PERIOD);\n    float th = 6.2831853 * ph;\n    \n    vec2 uv = isf_FragNormCoord;\n    vec2 p = (uv - 0.5) * scale;\n    p.x *= RENDERSIZE.x / RENDERSIZE.y;\n    \n    // Aurora bands - vertical flowing curtains\n    float t = th; // 0 to 2pi over period\n    \n    // Ripple distortion\n    float ripple = sin(p.y * 8.0 + t * 1.0) * 0.1;\n    p.x += ripple;\n    \n    // Nebula base\n    float n1 = fbm(p * 2.0 + vec2(t * 0.0, 0.0));\n    float n2 = fbm(p * 3.0 + vec2(0.0, t * 0.0) + n1);\n    \n    // Aurora curtain shape - multiple bands\n    float band1 = sin(p.x * 3.0 + n2 * 4.0 + t * 1.0) * 0.5 + 0.5;\n    float band2 = sin(p.x * 2.0 - n1 * 3.0 + t * 2.0) * 0.5 + 0.5;\n    float band3 = sin(p.x * 5.0 + n2 * 2.0 - t * 1.0) * 0.5 + 0.5;\n    \n    // Vertical falloff for curtain feel\n    float vfall = exp(-p.y * p.y * 2.0);\n    \n    // Colors - aurora palette\n    vec3 green = vec3(0.2, 1.0, 0.4);\n    vec3 cyan = vec3(0.1, 0.6, 1.0);\n    vec3 purple = vec3(0.6, 0.2, 1.0);\n    vec3 pink = vec3(1.0, 0.3, 0.7);\n    \n    vec3 col = vec3(0.0);\n    col += green * band1 * vfall * n2;\n    col += cyan * band2 * vfall * 0.7;\n    col += purple * band3 * vfall * n1 * 0.8;\n    col += pink * pow(band1, 3.0) * 0.3;\n    \n    // Nebula background\n    vec3 neb = mix(vec3(0.02, 0.01, 0.05), vec3(0.05, 0.02, 0.1), n1);\n    col += neb * 0.5;\n    \n    col *= intensity;\n    \n    // vignette\n    float vig = 1.0 - dot(uv - 0.5, uv - 0.5) * 1.5;\n    col *= clamp(vig, 0.0, 1.0);\n    \n    // gamma\n    col = pow(col, vec3(0.85));\n    \n    gl_FragColor = vec4(col, 1.0);\n}"
  }
}