{
  "name": "Living Miniature Earth",
  "dimension": "3d",
  "slot": "action_bar",
  "width": 256,
  "height": 128,
  "textBaseline": 128,
  "placement": {
    "x": 0,
    "y": 0
  },
  "shapes": [],
  "texts": [],
  "heads": [],
  "images": [],
  "bars": [],
  "triggers": [],
  "world": {
    "glsl": "const float ER = 0.755;\n\nvec2 earthEdge(vec2 p, vec2 a, vec2 b, vec2 r) {\n    vec2 e = b-a;\n    vec2 w = p-a;\n    vec2 q = w-e*clamp(dot(w,e)/dot(e,e),0.0,1.0);\n    r.x = min(r.x,dot(q,q));\n    if ((a.y>p.y)!=(b.y>p.y)) {\n        if (p.x < a.x+(p.y-a.y)*e.x/e.y) r.y = -r.y;\n    }\n    return r;\n}\nfloat earthLand(vec2 p) {\n    vec2 r = vec2(100000.0,1.0);\n    float d = 100.0;\n    if(p.x > -171.0 && p.x < -51.0 && p.y > 7.0 && p.y < 76.0) {\n        r=earthEdge(p,vec2(-168.0,66.0),vec2(-148.0,71.0),r);\n        r=earthEdge(p,vec2(-148.0,71.0),vec2(-128.0,70.0),r);\n        r=earthEdge(p,vec2(-128.0,70.0),vec2(-112.0,73.0),r);\n        r=earthEdge(p,vec2(-112.0,73.0),vec2(-94.0,70.0),r);\n        r=earthEdge(p,vec2(-94.0,70.0),vec2(-82.0,64.0),r);\n        r=earthEdge(p,vec2(-82.0,64.0),vec2(-78.0,53.0),r);\n        r=earthEdge(p,vec2(-78.0,53.0),vec2(-61.0,58.0),r);\n        r=earthEdge(p,vec2(-61.0,58.0),vec2(-54.0,48.0),r);\n        r=earthEdge(p,vec2(-54.0,48.0),vec2(-70.0,44.0),r);\n        r=earthEdge(p,vec2(-70.0,44.0),vec2(-77.0,35.0),r);\n        r=earthEdge(p,vec2(-77.0,35.0),vec2(-81.0,25.0),r);\n        r=earthEdge(p,vec2(-81.0,25.0),vec2(-84.0,30.0),r);\n        r=earthEdge(p,vec2(-84.0,30.0),vec2(-96.0,28.0),r);\n        r=earthEdge(p,vec2(-96.0,28.0),vec2(-87.0,20.0),r);\n        r=earthEdge(p,vec2(-87.0,20.0),vec2(-83.0,10.0),r);\n        r=earthEdge(p,vec2(-83.0,10.0),vec2(-78.0,8.0),r);\n        r=earthEdge(p,vec2(-78.0,8.0),vec2(-91.0,14.0),r);\n        r=earthEdge(p,vec2(-91.0,14.0),vec2(-105.0,20.0),r);\n        r=earthEdge(p,vec2(-105.0,20.0),vec2(-117.0,32.0),r);\n        r=earthEdge(p,vec2(-117.0,32.0),vec2(-126.0,49.0),r);\n        r=earthEdge(p,vec2(-126.0,49.0),vec2(-136.0,59.0),r);\n        r=earthEdge(p,vec2(-136.0,59.0),vec2(-158.0,58.0),r);\n        r=earthEdge(p,vec2(-158.0,58.0),vec2(-168.0,66.0),r);\n        d=min(d,sqrt(r.x)*r.y);\n    }\n    if(p.x > -84.0 && p.x < -33.0 && p.y > -57.0 && p.y < 14.0) {\n        r=vec2(100000.0,1.0);\n        r=earthEdge(p,vec2(-81.0,8.0),vec2(-70.0,12.0),r);\n        r=earthEdge(p,vec2(-70.0,12.0),vec2(-59.0,8.0),r);\n        r=earthEdge(p,vec2(-59.0,8.0),vec2(-50.0,1.0),r);\n        r=earthEdge(p,vec2(-50.0,1.0),vec2(-35.0,-5.0),r);\n        r=earthEdge(p,vec2(-35.0,-5.0),vec2(-40.0,-20.0),r);\n        r=earthEdge(p,vec2(-40.0,-20.0),vec2(-49.0,-29.0),r);\n        r=earthEdge(p,vec2(-49.0,-29.0),vec2(-58.0,-39.0),r);\n        r=earthEdge(p,vec2(-58.0,-39.0),vec2(-66.0,-55.0),r);\n        r=earthEdge(p,vec2(-66.0,-55.0),vec2(-72.0,-50.0),r);\n        r=earthEdge(p,vec2(-72.0,-50.0),vec2(-75.0,-31.0),r);\n        r=earthEdge(p,vec2(-75.0,-31.0),vec2(-71.0,-18.0),r);\n        r=earthEdge(p,vec2(-71.0,-18.0),vec2(-81.0,-4.0),r);\n        r=earthEdge(p,vec2(-81.0,-4.0),vec2(-81.0,8.0),r);\n        d=min(d,sqrt(r.x)*r.y);\n    }\n    if(p.x > -20.0 && p.x < 53.0 && p.y > -37.0 && p.y < 39.0) {\n        r=vec2(100000.0,1.0);\n        r=earthEdge(p,vec2(-17.0,15.0),vec2(-17.0,23.0),r);\n        r=earthEdge(p,vec2(-17.0,23.0),vec2(-6.0,36.0),r);\n        r=earthEdge(p,vec2(-6.0,36.0),vec2(10.0,37.0),r);\n        r=earthEdge(p,vec2(10.0,37.0),vec2(23.0,32.0),r);\n        r=earthEdge(p,vec2(23.0,32.0),vec2(33.0,31.0),r);\n        r=earthEdge(p,vec2(33.0,31.0),vec2(43.0,12.0),r);\n        r=earthEdge(p,vec2(43.0,12.0),vec2(51.0,12.0),r);\n        r=earthEdge(p,vec2(51.0,12.0),vec2(43.0,0.0),r);\n        r=earthEdge(p,vec2(43.0,0.0),vec2(40.0,-13.0),r);\n        r=earthEdge(p,vec2(40.0,-13.0),vec2(32.0,-29.0),r);\n        r=earthEdge(p,vec2(32.0,-29.0),vec2(19.0,-35.0),r);\n        r=earthEdge(p,vec2(19.0,-35.0),vec2(12.0,-18.0),r);\n        r=earthEdge(p,vec2(12.0,-18.0),vec2(9.0,3.0),r);\n        r=earthEdge(p,vec2(9.0,3.0),vec2(-1.0,5.0),r);\n        r=earthEdge(p,vec2(-1.0,5.0),vec2(-14.0,7.0),r);\n        r=earthEdge(p,vec2(-14.0,7.0),vec2(-17.0,15.0),r);\n        d=min(d,sqrt(r.x)*r.y);\n    }\nif(p.x>-12.0&&p.x<180.0&&p.y>-1.0&&p.y<79.0){\nvec2 v[37];\nv[0]=vec2(-10.0,36.0);v[1]=vec2(-9.0,44.0);v[2]=vec2(-1.0,44.0);v[3]=vec2(-5.0,49.0);v[4]=vec2(8.0,54.0);v[5]=vec2(5.0,59.0);v[6]=vec2(20.0,71.0);v[7]=vec2(32.0,70.0);v[8]=vec2(29.0,60.0);v[9]=vec2(45.0,67.0);v[10]=vec2(95.0,77.0);v[11]=vec2(140.0,72.0);v[12]=vec2(179.0,66.0);v[13]=vec2(160.0,60.0);v[14]=vec2(156.0,51.0);v[15]=vec2(141.0,54.0);v[16]=vec2(135.0,42.0);v[17]=vec2(128.0,35.0);v[18]=vec2(121.0,39.0);v[19]=vec2(122.0,24.0);v[20]=vec2(108.0,20.0);v[21]=vec2(109.0,10.0);v[22]=vec2(103.0,1.0);v[23]=vec2(98.0,14.0);v[24]=vec2(89.0,23.0);v[25]=vec2(78.0,8.0);v[26]=vec2(68.0,24.0);v[27]=vec2(56.0,26.0);v[28]=vec2(51.0,13.0);v[29]=vec2(43.0,13.0);v[30]=vec2(35.0,31.0);v[31]=vec2(26.0,40.0);v[32]=vec2(23.0,36.0);v[33]=vec2(16.0,45.0);v[34]=vec2(16.0,38.0);v[35]=vec2(7.0,44.0);v[36]=vec2(3.0,41.0);\nr=vec2(100000.0,1.0);vec2 a=v[36];\nfor(int i=0;i<37;i++){r=earthEdge(p,a,v[i],r);a=v[i];}\nd=min(d,sqrt(r.x)*r.y);\n}\n    if(p.x > 111.0 && p.x < 155.0 && p.y > -41.0 && p.y < -9.0) {\n        r=vec2(100000.0,1.0);\n        r=earthEdge(p,vec2(113.0,-22.0),vec2(128.0,-14.0),r);\n        r=earthEdge(p,vec2(128.0,-14.0),vec2(135.0,-12.0),r);\n        r=earthEdge(p,vec2(135.0,-12.0),vec2(139.0,-18.0),r);\n        r=earthEdge(p,vec2(139.0,-18.0),vec2(143.0,-11.0),r);\n        r=earthEdge(p,vec2(143.0,-11.0),vec2(153.0,-26.0),r);\n        r=earthEdge(p,vec2(153.0,-26.0),vec2(147.0,-39.0),r);\n        r=earthEdge(p,vec2(147.0,-39.0),vec2(134.0,-32.0),r);\n        r=earthEdge(p,vec2(134.0,-32.0),vec2(116.0,-35.0),r);\n        r=earthEdge(p,vec2(116.0,-35.0),vec2(113.0,-22.0),r);\n        d=min(d,sqrt(r.x)*r.y);\n    }\n    d=min(d,(length((p-vec2(-42.0,73.0))/vec2(16.0,12.0))-1.0)*8.0);\n    d=min(d,(length((p-vec2(-3.0,55.0))/vec2(3.0,5.0))-1.0)*3.0);\n    d=min(d,(length((p-vec2(47.0,-20.0))/vec2(2.8,7.0))-1.0)*2.8);\n    d=min(d,(length((p-vec2(138.0,37.0))/vec2(3.0,7.0))-1.0)*3.0);\n    d=min(d,(length((p-vec2(113.0,-1.0))/vec2(5.0,4.0))-1.0)*3.0);\n    d=min(d,(length((p-vec2(139.0,-5.0))/vec2(10.0,3.0))-1.0)*3.0);\n    d=min(d,p.y+73.0+2.5*sin(p.x*0.11));\n    return d;\n}\nvec3 earthFrame(vec3 n,float a) {\n    n.xy=rpw_rot(-0.12)*n.xy;\n    n.xz=rpw_rot(a)*n.xz;\n    return n;\n}\nfloat earthCloud(vec3 q,float time) {\n    q.xz=rpw_rot(time*0.018)*q.xz;\n    vec3 w=q*5.5+vec3(0.0,time*0.008,0.0);\n    float n=rpw_noise(w);\n    vec3 warp=vec3(n,rpw_noise(w+9.3),rpw_noise(w-4.8));\n    vec3 v=q*9.0+warp*2.8;\n    float f=rpw_noise(v)*0.57+rpw_noise(v*2.1)*0.28+rpw_noise(v*4.2)*0.15;\n    float cloud=smoothstep(0.48,0.70,f);\n    vec3 center=vec3(-0.665,0.371,0.648);\n    vec2 s=vec2(dot(q,vec3(0.698,0.0,0.716)),dot(q,vec3(0.266,0.929,-0.259)));\n    float r=length(s)*1.65;\n    if(dot(q,center)>0.9){\n        float wisps=rpw_noise(q*110.0);\n        float arm=sin(2.0*atan(s.y,s.x)+r*43.0-time*0.075+(wisps-0.5)*2.2);\n        float storm=smoothstep(-0.4,0.7,arm)*exp(-pow((r-0.105)/0.105,2.0));\n        storm*=smoothstep(0.018,0.040,r)*(0.48+0.5*wisps);\n        cloud=mix(cloud,max(storm,cloud*0.3),1.0-smoothstep(0.16,0.29,r));\n    }\n    return cloud;\n}\nfloat earthCityRegion(vec2 p) {\n    float e=exp(-dot((p-vec2(12.0,49.0))/vec2(24.0,12.0),(p-vec2(12.0,49.0))/vec2(24.0,12.0)));\n    float a=exp(-dot((p-vec2(-77.0,38.0))/vec2(13.0,10.0),(p-vec2(-77.0,38.0))/vec2(13.0,10.0)));\n    float b=exp(-dot((p-vec2(113.0,31.0))/vec2(14.0,15.0),(p-vec2(113.0,31.0))/vec2(14.0,15.0)));\n    float c=exp(-dot((p-vec2(78.0,24.0))/vec2(12.0,13.0),(p-vec2(78.0,24.0))/vec2(12.0,13.0)));\n    float s=exp(-dot((p-vec2(-46.0,-23.0))/vec2(10.0,8.0),(p-vec2(-46.0,-23.0))/vec2(10.0,8.0)));\n    float j=exp(-dot((p-vec2(138.0,36.0))/vec2(7.0,12.0),(p-vec2(138.0,36.0))/vec2(7.0,12.0)));\n    return clamp(e+a+b+c+s+j,0.0,1.0);\n}\nvec4 object(vec3 ro,vec3 rd,float t0,float t1,float time,vec3 light,inout float depth) {\n    vec3 sun=normalize(vec3(-0.85,0.36,0.40));\n    float b=dot(ro,rd);\n    float h=b*b-dot(ro,ro)+ER*ER;\n    float impact=length(ro+rd*max(-b,t0));\nvec3 col=vec3(0.0);float alpha=0.0;float groundT=t1+1.0;float angle=-0.43+time*0.085;\n    if(h>0.0) {\n        float t=-b-sqrt(h);\n        if(t<t0) t=-b+sqrt(h);\n        if(t>=t0 && t<=t1) {\n            groundT=t;\n            depth=t;\n            vec3 n=normalize(ro+rd*t);\n            vec3 q=earthFrame(n,angle);\n            vec2 uv=vec2(atan(q.x,q.z),asin(clamp(q.y,-1.0,1.0)))*57.29578;\n            float detail=rpw_noise(q*95.0);\n            float coast=earthLand(uv)+(detail-0.5)*1.15;\n            float land=1.0-smoothstep(-0.20,0.25,coast);\n            float terrain=rpw_noise(q*14.0)*0.65+rpw_noise(q*38.0)*0.35;\n            float arid=exp(-pow((uv.y-23.0)/12.0,2.0));\n            arid*=smoothstep(-23.0,-5.0,uv.x)*(1.0-smoothstep(63.0,95.0,uv.x));\n            arid=max(arid,0.65*exp(-pow((uv.y+25.0)/10.0,2.0)));\n            vec3 lc=mix(vec3(0.045,0.18,0.082),vec3(0.22,0.32,0.13),terrain);\n            lc=mix(lc,vec3(0.61,0.45,0.24)*(0.78+terrain*0.45),arid);\n            float ice=smoothstep(67.0,78.0,abs(uv.y)+terrain*5.0);\n            lc=mix(lc,vec3(0.87,0.93,0.92),ice);\n            float shelf=exp(-max(coast,0.0)*1.0)*(1.0-land);\n            vec3 ocean=mix(vec3(0.012,0.075,0.23),vec3(0.025,0.30,0.38),shelf*0.7);\n            vec3 base=mix(ocean,lc,land);\n            float nd=dot(n,sun);\n            float day=smoothstep(-0.10,0.20,nd);\n            col=base*(0.10+max(nd,0.0)*1.45)*light;\n            vec3 halfV=normalize(sun-rd);\n            float spec=pow(max(dot(n,halfV),0.0),150.0);\n            float sparkle=0.70+0.30*rpw_noise(q*210.0);\n            col+=vec3(1.0,0.87,0.60)*spec*1.0*sparkle*(1.0-land)*day*light;\n            float cities=earthCityRegion(uv);\n            float nile=exp(-pow((uv.x-31.0)/1.4,2.0))*exp(-pow((uv.y-25.0)/8.0,2.0));\n            float coastal=exp(-abs(coast)*0.6)*exp(-pow((uv.y-13.0)/23.0,2.0));\n            cities=max(cities,nile*0.9+coastal*0.15);\n            vec3 cell=floor(q*255.0);\n            float hash=rpw_hash(cell);\n            float grains=smoothstep(0.75,0.97,hash);\n            float network=smoothstep(0.41,0.69,rpw_noise(q*75.0));\n            float city=grains*network*cities*land*(1.0-day)*(1.0-ice);\n            col+=vec3(1.0,0.57,0.20)*city*4.0;\n            col+=vec3(0.08,0.027,0.004)*cities*network*land*(1.0-day);\n            float fres=pow(1.0-max(dot(n,-rd),0.0),3.0);\n            col+=vec3(0.055,0.25,0.65)*fres*(0.2+0.8*day)*0.65;\n            alpha=1.0;\n        }\n    }\n    float cr=0.770;\n    float ch=b*b-dot(ro,ro)+cr*cr;\n    if(ch>0.0) {\n        float ct=-b-sqrt(ch);\n        if(ct<t0) ct=-b+sqrt(ch);\n        if(ct>=t0 && ct<=t1 && ct<groundT) {\n            vec3 cn=normalize(ro+rd*ct);\n            vec3 cq=earthFrame(cn,angle);\n            float cloud=earthCloud(cq,time);\n            float nd=dot(cn,sun);\n            vec3 cc=mix(vec3(0.016,0.028,0.065),vec3(1.0,0.98,0.91),smoothstep(-0.12,0.45,nd))*(0.35+0.65*max(nd,0.0))*light;\n            float ca=cloud*0.92;\n            col=cc*ca+col*(1.0-ca);\n            alpha=ca+alpha*(1.0-ca);\n            if(ca>0.3) depth=ct;\n        }\n    }\n    float ar=0.802;\n    float ah=b*b-dot(ro,ro)+ar*ar;\n    if(ah>0.0) {\n        float at=max(t0,-b-sqrt(ah));\n        vec3 an=normalize(ro+rd*at);\n        float sunlit=smoothstep(-0.40,0.55,dot(an,sun));\n        float rim=exp(-abs(impact-ER)*95.0);\n        float aa=rim*(0.16+0.50*sunlit);\n        aa*=1.0-smoothstep(0.785,0.802,impact);\n        vec3 ac=mix(vec3(0.025,0.08,0.30),vec3(0.13,0.46,1.0),sunlit);\n        col=ac*aa+col*(1.0-aa);\n        alpha=aa+alpha*(1.0-aa);\n        if(groundT>t1 && aa>0.08) depth=at;\n    }\n    return vec4(col/max(alpha,0.0001),alpha);\n}",
    "prompt": "a small rotating Earth with drifting clouds, oceans that catch the sun and glowing city lights on the night side",
    "size": 3,
    "summary": "A slowly rotating Earth with drifting cloud systems, sunlit ocean glints, a delicate blue atmosphere, and warm city lights glowing across the night side."
  }
}