{
  "license": "CC0-1.0",
  "shader": {
    "id": "3g8usaux",
    "title": "Glass Orrery",
    "license": "CC0-1.0",
    "provenance_type": "witnessed_generation",
    "made_with": "Codex + GLSLOP Studio",
    "status": "active",
    "compile_ok": true,
    "tags": [
      "raymarching",
      "game-of-life",
      "feedback",
      "glass",
      "abstract"
    ],
    "parents": [],
    "author": "zazi5inxhmgi",
    "author_name": "ufffd",
    "author_url": "/u/ufffd",
    "created_at": "2026-08-04T02:44:05.775Z",
    "poster_url": "/posters/3g8usaux.webp",
    "stats": {
      "slops": 0,
      "views": 142,
      "forks": 0
    },
    "self": "/api/v1/shaders/3g8usaux",
    "isf": "/*{\n  \"DESCRIPTION\": \"Glass Orrery: a translucent Crown Knot turns inside a sparse orbital glass instrument, with whole Life pixels shared across their combined depth contours.\",\n  \"INPUTS\": [\n    { \"NAME\": \"speed\", \"TYPE\": \"float\", \"DEFAULT\": 0.50, \"MIN\": 0.0, \"MAX\": 1.5 },\n    { \"NAME\": \"braid\", \"TYPE\": \"float\", \"DEFAULT\": 0.78, \"MIN\": 0.0, \"MAX\": 1.0 },\n    { \"NAME\": \"cellSize\", \"TYPE\": \"float\", \"DEFAULT\": 6.0, \"MIN\": 2.0, \"MAX\": 12.0 },\n    { \"NAME\": \"inlay\", \"TYPE\": \"float\", \"DEFAULT\": 0.76, \"MIN\": 0.0, \"MAX\": 1.0 },\n    { \"NAME\": \"translucency\", \"TYPE\": \"float\", \"DEFAULT\": 0.62, \"MIN\": 0.0, \"MAX\": 1.0 },\n    { \"NAME\": \"complexity\", \"TYPE\": \"float\", \"DEFAULT\": 0.72, \"MIN\": 0.0, \"MAX\": 1.0 },\n    { \"NAME\": \"lifeRule\", \"TYPE\": \"long\", \"DEFAULT\": 1, \"MIN\": 0, \"MAX\": 2, \"VALUES\": [0, 1, 2], \"LABELS\": [\"Conway\", \"HighLife\", \"Seeds\"] },\n    { \"NAME\": \"decay\", \"TYPE\": \"float\", \"DEFAULT\": 0.972, \"MIN\": 0.90, \"MAX\": 0.998 },\n    { \"NAME\": \"seed\", \"TYPE\": \"float\", \"DEFAULT\": 11.0, \"MIN\": 0.0, \"MAX\": 30.0 },\n    { \"NAME\": \"gold\", \"TYPE\": \"color\", \"DEFAULT\": [1.0, 0.58, 0.04, 1.0] },\n    { \"NAME\": \"blue\", \"TYPE\": \"color\", \"DEFAULT\": [0.04, 0.34, 1.0, 1.0] },\n    { \"NAME\": \"pink\", \"TYPE\": \"color\", \"DEFAULT\": [1.0, 0.05, 0.42, 1.0] }\n  ],\n  \"PASSES\": [\n    { \"TARGET\": \"depthMap\", \"FLOAT\": true },\n    { \"TARGET\": \"glassLayer\", \"FLOAT\": true },\n    { \"TARGET\": \"life\", \"PERSISTENT\": true, \"FLOAT\": true },\n    {}\n  ]\n}*/\n\n#define PI 3.14159265359\nmat2 rot(float a){float c=cos(a),s=sin(a);return mat2(c,-s,s,c);}\n\nfloat hash21(vec2 p){\n  p=fract(p*vec2(419.2,371.9));\n  p+=dot(p,p.yx+31.7+seed);\n  return fract(p.x*p.y);\n}\n\nfloat smin(float a,float b,float k){\n  float h=clamp(0.5+0.5*(b-a)/k,0.0,1.0);\n  return mix(b,a,h)-k*h*(1.0-h);\n}\n\nfloat loopShape(vec3 p,float phase,float t){\n  float a=atan(p.z,p.x);\n  float radial=length(p.xz);\n  float lobes=3.0*a+phase+t*0.7;\n  float ringRadius=0.72+cos(lobes)*0.16*braid;\n  float ringY=sin(lobes)*0.28*braid;\n  return length(vec2(radial-ringRadius,p.y-ringY))-0.145;\n}\n\nfloat knotMap(vec3 p,float t){\n  p.yz=rot(t*0.37)*p.yz;\n  p.xz=rot(t*0.23)*p.xz;\n  vec3 a=p-vec3(0.22,0.0,0.0);\n  vec3 b=p+vec3(0.22,0.0,0.0);\n  b.xy=rot(PI*0.5+sin(t*0.4)*0.18)*b.xy;\n  float d=smin(loopShape(a,0.0,t),loopShape(b,PI,-t*0.83),0.10);\n  float nucleus=length(p+vec3(0.0,sin(t)*0.08,0.0))-0.23;\n  return smin(d,nucleus,0.11);\n}\n\nfloat torus(vec3 p,vec2 r){return length(vec2(length(p.xz)-r.x,p.y))-r.y;}\n\nfloat innerMap(vec3 p,float t){\n  p.yz=rot(t*0.37)*p.yz;\n  p.xz=rot(t*0.23)*p.xz;\n  vec3 q=p;\n  q.xy=rot(0.82+sin(t*0.31)*0.18)*q.xy;\n  float a=torus(q,vec2(0.43,0.036));\n  q=p;\n  q.yz=rot(-0.92+cos(t*0.27)*0.16)*q.yz;\n  float b=torus(q,vec2(0.34,0.030));\n  vec3 bead=vec3(cos(t*0.91)*0.29,sin(t*0.67)*0.16,sin(t*0.91)*0.29);\n  float pearls=min(length(p-bead)-0.055,length(p+bead)-0.055);\n  return min(min(a,b),pearls);\n}\n\nfloat orreryMap(vec3 p,float t){\n  vec3 q=p;\n  q.xy=rot(0.62+t*0.12)*q.xy;\n  q.yz=rot(0.48+sin(t*0.21)*0.12)*q.yz;\n  float ringA=torus(q,vec2(1.00,0.026));\n  q=p;\n  q.xz=rot(-0.72+t*0.09)*q.xz;\n  q.xy=rot(-0.38)*q.xy;\n  float ringB=torus(q,vec2(0.88,0.022));\n  float a=t*0.34;\n  vec3 nodeA=vec3(cos(a)*0.79,sin(a*1.7)*0.20,sin(a)*0.79);\n  vec3 nodeB=vec3(cos(a+PI)*0.93,sin(a*1.3+1.4)*0.16,sin(a+PI)*0.93);\n  float nodes=min(length(p-nodeA)-0.052,length(p-nodeB)-0.044);\n  return min(min(ringA,ringB),nodes)+mix(0.075,0.0,complexity);\n}\n\nfloat sceneMap(vec3 p,float t){return min(knotMap(p,t),orreryMap(p,t));}\n\nvec3 knotNormal(vec3 p,float t){\n  vec2 e=vec2(0.0025,0.0);\n  return normalize(vec3(\n    knotMap(p+e.xyy,t)-knotMap(p-e.xyy,t),\n    knotMap(p+e.yxy,t)-knotMap(p-e.yxy,t),\n    knotMap(p+e.yyx,t)-knotMap(p-e.yyx,t)\n  ));\n}\n\nvec4 renderKnot(vec2 uv,float t){\n  vec2 p=uv*2.0-1.0;\n  p.x*=RENDERSIZE.x/RENDERSIZE.y;\n  p=rot(sin(t*0.41)*0.13)*p;\n  vec3 ro=vec3(0.0,0.0,3.05);\n  vec3 rd=normalize(vec3(p,-2.05));\n  float travel=0.0,hit=0.0;\n  for(int i=0;i<36;i++){\n    float d=sceneMap(ro+rd*travel,t);\n    if(d<0.0025){hit=1.0;break;}\n    travel+=max(d*0.72,0.011);\n    if(travel>6.0)break;\n  }\n  vec3 bg=vec3(0.006,0.004,0.018)+blue.rgb*pow(max(0.0,1.0-length(p)*0.58),5.0)*0.03;\n  if(hit<0.5)return vec4(bg,0.0);\n  vec3 pos=ro+rd*travel;\n  vec3 n=knotNormal(pos,t);\n  vec3 l=normalize(vec3(-0.45,0.85,0.65));\n  float diff=max(dot(n,l),0.0);\n  float rim=pow(1.0-max(dot(n,-rd),0.0),2.4);\n  float spec=pow(max(dot(reflect(-l,n),-rd),0.0),52.0);\n  float phase=0.5+0.5*sin(atan(pos.z,pos.x)*5.0+pos.y*6.0-t*1.7);\n  vec3 skin=mix(blue.rgb*0.34,gold.rgb*0.38,phase);\n  vec3 color=skin*(0.18+diff*0.88)+mix(pink.rgb,blue.rgb,phase)*rim*0.72+spec;\n  float sceneDepth=clamp((travel-1.65)/2.15,0.0,1.0);\n  return vec4(color,0.08+sceneDepth*0.90);\n}\n\nvec4 renderDepth(vec2 uv,float t){\n  vec2 p=uv*2.0-1.0;\n  p.x*=RENDERSIZE.x/RENDERSIZE.y;\n  p=rot(sin(t*0.41)*0.13)*p;\n  vec3 ro=vec3(0.0,0.0,3.05);\n  vec3 rd=normalize(vec3(p,-2.05));\n  float travel=0.0,hit=0.0;\n  for(int i=0;i<44;i++){\n    float d=sceneMap(ro+rd*travel,t);\n    if(d<0.0025){hit=1.0;break;}\n    travel+=max(d*0.72,0.009);\n    if(travel>6.0)break;\n  }\n  if(hit<0.5)return vec4(0.0);\n  float exitT=travel+0.012;\n  for(int i=0;i<30;i++){\n    float d=sceneMap(ro+rd*exitT,t);\n    exitT+=max(abs(d)*0.56,0.008);\n    if(d>0.004&&exitT>travel+0.045)break;\n  }\n  float thickness=clamp((exitT-travel)*2.15,0.0,1.0);\n  vec3 hitPos=ro+rd*travel;\n  float structure=step(orreryMap(hitPos,t),knotMap(hitPos,t));\n  float depth=clamp((travel-1.65)/2.15,0.0,1.0);\n  return vec4(depth,thickness,structure,1.0);\n}\n\nvec4 renderGlass(vec2 uv,float t){\n  vec2 p=uv*2.0-1.0;\n  p.x*=RENDERSIZE.x/RENDERSIZE.y;\n  vec3 bg=vec3(0.004,0.003,0.014)+blue.rgb*pow(max(0.0,1.0-length(p)*0.46),5.0)*0.035;\n  bg+=mix(blue.rgb,pink.rgb,uv.y)*0.012*(0.5+0.5*sin(p.x*5.0-p.y*3.0+t*0.18));\n  vec4 g=IMG_NORM_PIXEL(depthMap,uv);\n  if(g.a<0.5)return vec4(bg,1.0);\n  vec2 px=1.5/RENDERSIZE;\n  vec4 l=IMG_NORM_PIXEL(depthMap,uv-vec2(px.x,0.0));\n  vec4 r=IMG_NORM_PIXEL(depthMap,uv+vec2(px.x,0.0));\n  vec4 d=IMG_NORM_PIXEL(depthMap,uv-vec2(0.0,px.y));\n  vec4 u=IMG_NORM_PIXEL(depthMap,uv+vec2(0.0,px.y));\n  float zL=mix(g.r,l.r,l.a),zR=mix(g.r,r.r,r.a);\n  float zD=mix(g.r,d.r,d.a),zU=mix(g.r,u.r,u.a);\n  vec3 n=normalize(vec3((zL-zR)*8.0,(zD-zU)*8.0,0.30));\n  float rim=pow(1.0-clamp(n.z,0.0,1.0),2.1);\n  float diff=0.5+0.5*dot(n,normalize(vec3(-0.45,0.72,0.55)));\n  float phase=0.5+0.5*sin(g.r*21.0+uv.x*7.0-uv.y*5.0-t*0.62);\n  vec3 tint=mix(blue.rgb,gold.rgb,phase);\n  float opacity=mix(0.58,0.18,translucency)+g.g*0.15;\n  vec3 transmission=bg*exp(-tint*(0.65+g.g*1.65));\n  vec3 color=mix(transmission,tint*(0.12+diff*0.48),opacity);\n  color+=mix(pink.rgb,blue.rgb,phase)*rim*(0.28+0.54*translucency);\n  color+=mix(gold.rgb,pink.rgb,0.25+0.25*sin(t+g.r*14.0))*g.b*(0.22+0.52*complexity);\n  color+=vec3(1.0)*pow(max(diff,0.0),18.0)*0.22;\n  return vec4(color,1.0);\n}\n\nvoid main(){\n  vec2 uv=isf_FragNormCoord;\n  float t=TIME*speed;\n  if(PASSINDEX==0){gl_FragColor=renderDepth(uv,t);return;}\n  if(PASSINDEX==1){gl_FragColor=renderGlass(uv,t);return;}\n\n  if(PASSINDEX==2){\n    float grid=max(cellSize,2.0);\n    vec2 id=floor(uv*RENDERSIZE/grid);\n    vec2 center=(id+0.5)*grid/RENDERSIZE;\n    vec2 d=grid/RENDERSIZE;\n    vec4 old=IMG_NORM_PIXEL(life,center);\n    float count=0.0;\n    count+=step(0.48,IMG_NORM_PIXEL(life,center+d*vec2(-1.0,-1.0)).r);\n    count+=step(0.48,IMG_NORM_PIXEL(life,center+d*vec2( 0.0,-1.0)).r);\n    count+=step(0.48,IMG_NORM_PIXEL(life,center+d*vec2( 1.0,-1.0)).r);\n    count+=step(0.48,IMG_NORM_PIXEL(life,center+d*vec2(-1.0, 0.0)).r);\n    count+=step(0.48,IMG_NORM_PIXEL(life,center+d*vec2( 1.0, 0.0)).r);\n    count+=step(0.48,IMG_NORM_PIXEL(life,center+d*vec2(-1.0, 1.0)).r);\n    count+=step(0.48,IMG_NORM_PIXEL(life,center+d*vec2( 0.0, 1.0)).r);\n    count+=step(0.48,IMG_NORM_PIXEL(life,center+d*vec2( 1.0, 1.0)).r);\n    float birth=smoothstep(2.55,2.92,count)*(1.0-smoothstep(3.08,3.45,count));\n    float six=smoothstep(5.55,5.92,count)*(1.0-smoothstep(6.08,6.45,count));\n    float two=smoothstep(1.55,1.92,count)*(1.0-smoothstep(2.08,2.45,count));\n    float survive=max(two,birth);\n    if(lifeRule==1)birth=max(birth,six);\n    if(lifeRule==2){birth=two;survive=0.0;}\n    float rule=mix(birth,survive,step(0.5,old.r));\n    vec4 depthCell=IMG_NORM_PIXEL(depthMap,center);\n    vec4 depthL=IMG_NORM_PIXEL(depthMap,center-d*vec2(1.0,0.0));\n    vec4 depthR=IMG_NORM_PIXEL(depthMap,center+d*vec2(1.0,0.0));\n    vec4 depthD=IMG_NORM_PIXEL(depthMap,center-d*vec2(0.0,1.0));\n    vec4 depthU=IMG_NORM_PIXEL(depthMap,center+d*vec2(0.0,1.0));\n    float surface=step(0.5,depthCell.a);\n    float depthEdge=max(max(abs(depthCell.r-depthL.r),abs(depthCell.r-depthR.r)),max(abs(depthCell.r-depthD.r),abs(depthCell.r-depthU.r)));\n    depthEdge=max(depthEdge,max(max(abs(depthCell.a-depthL.a),abs(depthCell.a-depthR.a)),max(abs(depthCell.a-depthD.a),abs(depthCell.a-depthU.a)))*0.32);\n    depthEdge=smoothstep(0.028,0.14,depthEdge);\n    float contour=1.0-smoothstep(0.055,0.18,abs(fract(depthCell.r*7.5-t*0.035)-0.5));\n    float source=surface*max(depthEdge,contour*0.55);\n    float pulse=step(0.67,hash21(id+floor(float(FRAMEINDEX)/7.0)));\n    float dt=min(TIMEDELTA,1.0/20.0);\n    float response=1.0-exp(-dt*36.0);\n    float next=mix(old.r*decay,rule,response*0.80);\n    next=max(next,source*pulse*mix(0.64,1.0,inlay));\n    float age=clamp(old.g*decay+next*response*0.12,0.0,1.0);\n    gl_FragColor=vec4(clamp(next,0.0,1.0),age,source,1.0);\n    return;\n  }\n\n  float grid=max(cellSize,2.0);\n  vec2 id=floor(uv*RENDERSIZE/grid);\n  vec2 center=(id+0.5)*grid/RENDERSIZE;\n  vec2 d=grid/RENDERSIZE;\n  vec4 cell=IMG_NORM_PIXEL(life,center);\n  vec4 depthCell=IMG_NORM_PIXEL(depthMap,center);\n  vec4 depthL=IMG_NORM_PIXEL(depthMap,center-d*vec2(1.0,0.0));\n  vec4 depthR=IMG_NORM_PIXEL(depthMap,center+d*vec2(1.0,0.0));\n  vec4 depthD=IMG_NORM_PIXEL(depthMap,center-d*vec2(0.0,1.0));\n  vec4 depthU=IMG_NORM_PIXEL(depthMap,center+d*vec2(0.0,1.0));\n  float surface=step(0.5,depthCell.a);\n  float depthEdge=max(max(abs(depthCell.r-depthL.r),abs(depthCell.r-depthR.r)),max(abs(depthCell.r-depthD.r),abs(depthCell.r-depthU.r)));\n  depthEdge=max(depthEdge,max(max(abs(depthCell.a-depthL.a),abs(depthCell.a-depthR.a)),max(abs(depthCell.a-depthD.a),abs(depthCell.a-depthU.a)))*0.32);\n  depthEdge=smoothstep(0.028,0.14,depthEdge);\n  float contour=1.0-smoothstep(0.05,0.18,abs(fract(depthCell.r*7.5-t*0.035)-0.5));\n  float groove=surface*max(depthEdge,contour*0.70);\n  vec3 subject=IMG_NORM_PIXEL(glassLayer,uv).rgb;\n  vec2 q=fract(uv*RENDERSIZE/grid);\n  float tile=smoothstep(0.02,0.15,min(min(q.x,1.0-q.x),min(q.y,1.0-q.y)));\n  float alive=smoothstep(0.40,0.76,cell.r)*tile*groove;\n  vec3 lifeColor=mix(gold.rgb,pink.rgb,fract(cell.g+id.x*0.07+id.y*0.11));\n  float nearLight=mix(0.68,1.18,1.0-depthCell.r);\n  vec3 color=mix(subject,subject*0.52,groove*inlay*0.42);\n  color+=lifeColor*alive*(0.48+inlay*0.76)*nearLight;\n  color+=mix(blue.rgb,pink.rgb,depthCell.r)*depthEdge*surface*(0.08+0.25*inlay);\n  vec2 px=1.25/RENDERSIZE;\n  vec4 raw=IMG_NORM_PIXEL(depthMap,uv);\n  float silhouette=max(max(abs(raw.a-IMG_NORM_PIXEL(depthMap,uv-vec2(px.x,0.0)).a),abs(raw.a-IMG_NORM_PIXEL(depthMap,uv+vec2(px.x,0.0)).a)),max(abs(raw.a-IMG_NORM_PIXEL(depthMap,uv-vec2(0.0,px.y)).a),abs(raw.a-IMG_NORM_PIXEL(depthMap,uv+vec2(0.0,px.y)).a)));\n  color+=pink.rgb*silhouette*0.34;\n  color=1.0-exp(-max(color,0.0)*1.34);\n  gl_FragColor=vec4(color,1.0);\n}\n",
    "generator": {
      "model": "GPT-5",
      "provider": "OpenAI",
      "prompt": "Human-directed Goop Life Lab: translucent Crown Knot with cell-centered depth-aware Life and orbital glass forms.",
      "params": null
    }
  }
}