{
  "name": "End Crystal",
  "dimension": "3d",
  "slot": "action_bar",
  "width": 256,
  "height": 128,
  "textBaseline": 128,
  "placement": {
    "x": 0,
    "y": 0
  },
  "shapes": [],
  "texts": [],
  "heads": [],
  "images": [],
  "bars": [],
  "triggers": [],
  "world": {
    "glsl": "float boxC(vec3 p,vec3 b){vec3 q=abs(p)-b;return length(max(q,0.0))+min(max(q.x,max(q.y,q.z)),0.0);}\nvec3 turnC(vec3 p,float time,float k){p.xz=rpw_rot(time*0.35*k+k*0.5)*p.xz;p.xy=rpw_rot(k*0.62+time*0.19*k)*p.xy;p.yz=rpw_rot(0.5*k)*p.yz;return p;}\nfloat frameC(vec3 p,float s,float w){p=abs(p);if(p.x<p.y)p.xy=p.yx;if(p.y<p.z)p.yz=p.zy;if(p.x<p.y)p.xy=p.yx;return boxC(p-vec3(s,s,0.0),vec3(w,w,s+w));}\nvec2 sceneC(vec3 p,mat3 a,mat3 b,mat3 c){float f=frameC(a*p,0.465,0.016);float g=frameC(b*p,0.325,0.014);vec3 q=c*p;float h=(abs(q.x)+abs(q.y)*0.70+abs(q.z)-0.225)*0.57;if(h<min(f,g))return vec2(h,2.0);return f<g?vec2(f,0.0):vec2(g,1.0);}\nvec4 object(vec3 ro,vec3 rd,float t0,float t1,float time,vec3 light,inout float depth){\n ro.y-=0.055*sin(time*1.3);\n mat3 a=mat3(turnC(vec3(1.0,0.0,0.0),time,1.0),turnC(vec3(0.0,1.0,0.0),time,1.0),turnC(vec3(0.0,0.0,1.0),time,1.0));\n mat3 b=mat3(turnC(vec3(1.0,0.0,0.0),time,-1.4),turnC(vec3(0.0,1.0,0.0),time,-1.4),turnC(vec3(0.0,0.0,1.0),time,-1.4));\n float cs=cos(time*0.7),sn=sin(time*0.7);mat3 c=mat3(cs,0.0,sn,0.0,1.0,0.0,-sn,0.0,cs);\n float t=t0;vec2 h=vec2(0.0);bool hit=false;\n for(int i=0;i<64;i++){h=sceneC(ro+rd*t,a,b,c);if(h.x<0.0012){hit=true;break;}t+=max(h.x*0.9,0.0008);if(t>t1)break;}\n vec3 col=vec3(0.0);float alpha=0.0;\n if(hit){vec3 p=ro+rd*t;vec2 e=vec2(0.0015,0.0);vec3 n=normalize(vec3(sceneC(p+e.xyy,a,b,c).x-sceneC(p-e.xyy,a,b,c).x,sceneC(p+e.yxy,a,b,c).x-sceneC(p-e.yxy,a,b,c).x,sceneC(p+e.yyx,a,b,c).x-sceneC(p-e.yyx,a,b,c).x));float dif=max(dot(n,normalize(vec3(0.4,0.8,0.3))),0.0);float spec=pow(max(dot(reflect(rd,n),normalize(vec3(0.4,0.8,0.3))),0.0),24.0);\n if(h.y>1.5){vec3 q=c*p;float band=pow(0.5+0.5*sin(q.y*46.0-time*2.1),10.0);col=mix(vec3(0.43,0.015,0.95),vec3(1.4,0.24,0.82),dif);col+=vec3(1.0,0.65,0.82)*(0.7*band+0.35*pow(1.0-abs(dot(n,rd)),3.0));}else{vec3 tint=h.y<0.5?vec3(0.85,0.68,1.0):vec3(1.0,0.33,0.8);col=tint*(0.48+dif*0.65)*max(light,vec3(0.35))+rpw_sky(reflect(rd,n))*0.32+spec*0.8;}alpha=1.0;depth=t;}\n for(int j=0;j<4;j++){mat3 m=a;float s=0.465;if(j<2){m=b;s=0.325;}vec3 o=m*ro,d=m*rd;vec3 inv=1.0/(d+vec3(0.000001));vec3 u=(-vec3(s)-o)*inv,v=(vec3(s)-o)*inv;vec3 lo=min(u,v),hi=max(u,v);float nt=max(lo.x,max(lo.y,lo.z)),ft=min(hi.x,min(hi.y,hi.z));float st=(j==0||j==2)?ft:nt;\n if(nt<=ft&&st>=t0&&st<=t1&&(!hit||st<t)){vec3 p=o+d*st;vec3 ap=abs(p);vec3 n=ap.x>ap.y&&ap.x>ap.z?vec3(sign(p.x),0.0,0.0):(ap.y>ap.z?vec3(0.0,sign(p.y),0.0):vec3(0.0,0.0,sign(p.z)));float fr=pow(1.0-abs(dot(n,d)),3.0);float sa=0.045+0.18*fr;vec3 sc=mix(vec3(0.5,0.23,0.8),vec3(0.88,0.74,1.0),fr);col=sc*sa+col*alpha*(1.0-sa);alpha=sa+alpha*(1.0-sa);col/=max(alpha,0.0001);if(!hit)depth=st;}}\n float ct=clamp(-dot(ro,rd),t0,hit?t:t1);float dist=length(ro+rd*ct);float glow=exp(-dist*dist*32.0)*0.35+exp(-dist*dist*125.0)*0.3;float ga=glow*0.65;col=(col*alpha+vec3(1.0,0.065,0.7)*glow)/max(alpha+ga*(1.0-alpha),0.0001);alpha+=ga*(1.0-alpha);if(!hit&&alpha>0.05)depth=ct;return vec4(col,alpha);\n}",
    "prompt": "an End crystal: two spinning wireframe glass cubes nested around a glowing pink and purple core, bobbing gently",
    "size": 3,
    "summary": "Two counter-spinning glass wireframe cubes gently bob around a faceted pink-purple core with flowing luminous bands and a soft magical glow."
  }
}