{
  "license": "CC0-1.0",
  "shader": {
    "id": "9j8qfk4g",
    "title": "Nested orbit reliquary wreathed in blue ember smoke — torus hierarchy meets buoyant velocity ribbons.",
    "license": "CC0-1.0",
    "provenance_type": "witnessed_generation",
    "made_with": "SLOP SPLICER",
    "made_with_app": "xfgeujl3",
    "status": "active",
    "compile_ok": true,
    "render_hash": "00081c3c64380400",
    "tags": [],
    "parents": [],
    "author": "zazi5inxhmgi",
    "author_name": "ufffd",
    "author_url": "/u/ufffd",
    "created_at": "2026-07-20T01:44:46.503Z",
    "poster_url": "/posters/9j8qfk4g.avif",
    "stats": {
      "slops": 0,
      "views": 133,
      "forks": 0
    },
    "self": "/api/v1/shaders/9j8qfk4g",
    "isf": "/*{ \"DESCRIPTION\":\"Nested orbit reliquary wreathed in blue ember smoke — torus hierarchy meets buoyant velocity ribbons.\", \"CATEGORIES\":[\"generative\"], \"INPUTS\":[ { \"NAME\":\"speed\", \"TYPE\":\"float\", \"DEFAULT\":1.3, \"MIN\":0.1, \"MAX\":3.0 }, { \"NAME\":\"flowStrength\", \"TYPE\":\"float\", \"DEFAULT\":1.4, \"MIN\":0.0, \"MAX\":3.0 }, { \"NAME\":\"emberIntensity\", \"TYPE\":\"float\", \"DEFAULT\":1.2, \"MIN\":0.0, \"MAX\":2.5 }, { \"NAME\":\"smokeColor\", \"TYPE\":\"color\", \"DEFAULT\":[0.18,0.42,0.68,1.0] }, { \"NAME\":\"orbitColor\", \"TYPE\":\"color\", \"DEFAULT\":[0.85,0.22,0.08,1.0] }, { \"NAME\":\"accentColor\", \"TYPE\":\"color\", \"DEFAULT\":[1.0,0.52,0.16,1.0] }, { \"NAME\":\"density\", \"TYPE\":\"float\", \"DEFAULT\":0.65, \"MIN\":0.0, \"MAX\":1.0 } ] }*/\n\n#define PI 3.14159265359\n#define TAU 6.28318530718\n\nmat2 rot(float a){ float c=cos(a), s=sin(a); return mat2(c,-s,s,c); }\n\nfloat hash21(vec2 p){\n  return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453123);\n}\n\nfloat hash11(float p){\n  return fract(sin(p * 78.233) * 43758.5453);\n}\n\nfloat noise2(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 += a * noise2(p);\n    p *= 2.0;\n    a *= 0.5;\n  }\n  return v;\n}\n\n// Velocity field inspired by Parent 2's buoyant curl\nvec2 velocityField(vec2 uv, float t){\n  vec2 p = uv - 0.5;\n  p.x *= RENDERSIZE.x / RENDERSIZE.y;\n  float r = length(p);\n  float angle = atan(p.y, p.x);\n  vec2 v = vec2(sin(TAU * uv.x * 2.0), -cos(TAU * uv.y * 2.0));\n  v += 0.5 * vec2(sin(TAU * (2.0 * uv.y + t * 0.08)),\n                   cos(TAU * (2.0 * uv.x - t * 0.10)));\n  v += 0.35 * vec2(cos(angle * 3.0 - t * 0.22), sin(angle * 2.0 + t * 0.28));\n  v += vec2(0.0, 0.6 + 0.4 * smoothstep(0.0, 0.8, r));\n  return v;\n}\n\n// Harmonic shell inspired by Parent 1's nested torus structure\nfloat harmonicShell(vec2 p, float ph, float major, float tube, float carriers, float rate){\n  float a = atan(p.y, p.x);\n  float wave = a * carriers - TAU * ph * rate;\n  float amp = 0.15;\n  float ridge = cos(wave);\n  float r = length(p.xy) - (major + amp * ridge);\n  float d = abs(r) - tube * (1.0 - 0.15 + 0.15 * cos(wave + 0.8));\n  return d;\n}\n\nvoid main(){\n  vec2 uv = isf_FragNormCoord;\n  float t = TIME * speed;\n  vec2 aspect = vec2(RENDERSIZE.x / RENDERSIZE.y, 1.0);\n  vec2 p = (uv - 0.5) * aspect;\n  \n  // Domain warp using velocity field — smoke flowing around orbits\n  vec2 vel = velocityField(uv, t) * flowStrength;\n  \n  // Multiple layers of smoke ribbons flowing through the velocity field\n  float smoke = 0.0;\n  float glow = 0.0;\n  \n  for(int i = 0; i < 4; i++){\n    float fi = float(i);\n    float scale = 1.0 + fi * 0.5;\n    vec2 wUV = uv - vel * (0.004 + fi * 0.002) * (1.0 + density);\n    wUV = (wUV - 0.5) * aspect * scale;\n    \n    // Apply orbital rotation\n    float rotAng = t * 0.15 + fi * 0.5;\n    wUV = rot(rotAng) * wUV;\n    \n    // Harmonic shell — nested torus cross-sections\n    float major = 0.18 + fi * 0.09;\n    float tube = 0.012 + fi * 0.006;\n    float carriers = 3.0 + fi * 3.0;\n    float rate = 0.3 + fi * 0.15;\n    float shell = harmonicShell(wUV, t, major, tube, carriers, rate);\n    \n    // Convert SDF to smoke density\n    float band = exp(-abs(shell) * 60.0);\n    smoke += band * (0.8 - fi * 0.12);\n    \n    // Ember ignition along ridge peaks\n    float a = atan(wUV.y, wUV.x);\n    float wave = a * carriers - TAU * t * rate;\n    float ign = pow(max(0.0, cos(wave - 0.4)), 16.0);\n    glow += ign * band * 2.0;\n  }\n  \n  // Add turbulent smoke using fbm warped by velocity\n  vec2 turbUV = uv + vel * 0.01;\n  turbUV = (turbUV - 0.5) * aspect * 3.0;\n  float turb = fbm(turbUV + t * 0.1);\n  turb += 0.5 * fbm(turbUV * 2.0 - t * 0.15);\n  smoke *= 0.5 + 0.5 * turb;\n  \n  // Additional flowing ember particles\n  float embers = 0.0;\n  for(int i = 0; i < 8; i++){\n    float fi = float(i);\n    vec2 ePos = vec2(\n      0.5 + 0.3 * sin(t * 0.4 + fi * 1.7),\n      0.5 + 0.35 * cos(t * 0.3 + fi * 2.3)\n    );\n    ePos += vel * 0.003;\n    vec2 ed = (uv - ePos) * aspect;\n    float ed_len = length(ed);\n    embers += exp(-ed_len * 80.0) * (0.5 + 0.5 * sin(t * 3.0 + fi));\n  }\n  \n  smoke = clamp(smoke, 0.0, 2.0);\n  glow = clamp(glow, 0.0, 3.0);\n  embers *= emberIntensity;\n  \n  // Color composition: blend Parent 1's teal/orange orbit palette with Parent 2's blue smoke\n  vec3 smokeCol = smokeColor.rgb;\n  vec3 orbitCol = orbitColor.rgb;\n  vec3 accCol = accentColor.rgb;\n  \n  vec3 col = vec3(0.0);\n  col += smokeCol * smoke * 0.7;\n  col += orbitCol * glow * 0.6;\n  col += accCol * embers * 1.5;\n  \n  // Contrast push\n  col = pow(col, vec3(0.85));\n  col *= 1.3;\n  col = 1.0 - exp(-col * 1.8);\n  \n  // Vignette\n  float vig = smoothstep(1.2, 0.3, length(p));\n  col *= 0.5 + 0.5 * vig;\n  \n  gl_FragColor = vec4(col, 1.0);\n}",
    "generator": {
      "model": "accounts/fireworks/models/glm-5p2",
      "provider": "Custom (OpenAI-compatible)",
      "prompt": null,
      "params": null
    }
  }
}