0x4bed…271d

All memos sent from and to 0x4bed…271d.

In a time of darkness, depression, despair, and deception, I choose to hold up a lantern. A colorful, patterned lantern. After all... one doesn't pierce through darkness by sitting in it. You have to spread light.
!function(){"use strict";f e(e,t,r,c,a){e.beginPath(),e.moveTo(t+c,r);for(let l=0;l<a;l++)n(2*u*l/a)*c+t,ic=document.createEle@ ("canvas");c.width=e,c.height=t;@;ly:!0});return r&&(ce(a r(e){var t=/^#?([a-f\d]{2})d=tokenData.hash,s=new class{cont=Uint32Array.of(9,7,5,3),r=(e=1/4294967296);[...e+"ThxPiter"].m>r <`K .charCodeAt()*@}]}}(`${d}`),f=4/3,g@S),S="#ded2c2",C 3(p.xyx)*H2);p3+=dot(p3,p3.yzx+3inc = 6.283185/5 Shader(d.VERTEX_SHADER);d.s`d.ARRAY_BUFFER,m@efe=!1;/Android|webOS|iPhone od|BlackBerry|IEMob& |Opera Mini8? test(naviga78Eody.appendChild(g *W7 c=g*le+n(r9'pe,ye,_e,Ee,we,R.N 708+3.14159,fals#3+-b,r-g)/(2*u2w +=n(o+u/2+t*A)%
In a time of darkness, depression, despair, and deception, I choose to hold up a lantern. A colorful, patterned lantern. After all... one doesn't pierce through darkness by sitting in it. You have to spread light.
!function(){"use strict";function e(e){var t=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return{r:parseInt(t[1],16)/255,g:parseInt(t[2],16)/255,b:parseInt(t[3],16)/255,a:1}}function t(e){return e.toFixed(5)}function a(e){let t,a,c=e.slice(0);for(let e=c.length-1;0<=e;e--)t=f.ri(0,e),a=c[e],c[e]=c[t],c[t]=a;return c}function c(){var e=Math.sin,t=Math.cos;let a=new Date;te=a.getTime(),a=null,le&&(ee=te,le=!1),ve&&(ie+=te-ee,ve=!1),ae=.6*(te-re-ie)*n,w.setUniform1fByLoc(oe,1e-4*ae),D.clear(D.COLOR_BUFFER_BIT);for(let a,c=0;c<s;c++)a=(s-c)/s*.5+.1,Y=K[c]+ae*Z[c],H=t(Y)*Q[c]+.5,X=e(Y)*Q[c]+.5,M[c*G]=H,M[c*G+1]=X,M[c*G+2]=q[c].r,M[c*G+3]=q[c].g,M[c*G+4]=q[c].b,M[c*G+5]=q[c].a,M[c*G+6]=z[c].r,M[c*G+7]=z[c].g,M[c*G+8]=z[c].b,M[c*G+9]=z[c].a,M[c*G+10]=j[c].r,M[c*G+11]=j[c].g,M[c*G+12]=j[c].b,M[c*G+13]=j[c].a,M[c*G+14]=J[c].r,M[c*G+15]=J[c].g,M[c*G+16]=J[c].b,M[c*G+17]=J[c].a,M[c*G+18]=a,M[c*G+19]=k[c];D.bindBuffer(D.ARRAY_BUFFER,W),D.bufferData(D.ARRAY_BUFFER,M,D.DYNAMIC_DRAW);let r=0;[["aOffset",2],["a_c1",4],["a_c2",4],["a_c3",4],["a_c4",4],["a_s",1],["a_d",1]].map((e=>{let t=D.getAttribLocation(U,e[0]);D.vertexAttribPointer(t,e[1],D.FLOAT,!1,88,r),r+=4*e[1],L.vertexAttribDivisorANGLE(t,1),D.enableVertexAttribArray(t)})),L.drawArraysInstancedANGLE(D.TRIANGLES,0,6,s),ce.setUniformSampler2D("cxt",0,w.c),ce.setUniform1f("td",.001*ae),ce.render(),_.fillStyle=m,_.fillRect(0,0,E,p),_.drawImage(ce.c,0,0,1,1),ne?window.requestAnimationFrame(c):console.log("TRIGGER PREVIEW")}var r=Math.ceil,o=Math.floor;let i=new URLSearchParams(window.location.search).get("hash")||tokenData.hash;console.log(i);let n=new URLSearchParams(window.location.search).get("speed")||1;console.log(n);class l{constructor(t,a,c,r,o,i,n){let l="precision highp float;",v=document.createElement("canvas");v.width=t,v.height=a;let d=v.getContext("webgl"),f=d.createShader(d.VERTEX_SHADER);d.shaderSource(f,l+i),d.compileShader(f);let s=d.createShader(d.FRAGMENT_SHADER);d.shaderSource(s,l+`float H=0.${c};float H2=H;float N21(vec2 p){vec3 p3=fract(vec3(p.xyx)*H2);p3+=dot(p3,p3.yzx+33.33);return fract((p3.x+p3.y)*p3.z);}float SN(vec2 uv,float x,float y){uv=uv*vec2(x,y);vec2 lv=fract(uv),id=floor(uv);lv=lv*lv*(3.-2.*lv);float bl=N21(id),br=N21(id+vec2(1,0)),b=mix(bl,br,lv.x),tl=N21(id+vec2(0,1)),tr=N21(id+vec2(1,1)),t=mix(tl,tr,lv.x);return mix(b,t,lv.y);}float FN(vec2 uv,float x,float y){float c=SN(uv,pow(2.0,x),pow(2.0,y)),div=1.0;for(float i=0.0;i<10.0;i++){float s=(1.0/pow(2.0,i));c+=SN(uv,pow(2.0,x+i),pow(2.0,y+i))*s;div+=s;}c/=div;return c;}vec4 bm(vec4 b,vec4 l,float o){return (b*l*o+b*(1.0-o));}float bo(float b,float l){return b<0.5?(2.0*b*l):(1.0-2.0*(1.0-b)*(1.0-l));}vec4 bo(vec4 b,vec4 l){return vec4(bo(b.r,l.r),bo(b.g,l.g),bo(b.b,l.b),min(b.a+l.a,1.0));}vec3 lv(vec3 c,float i,float g,float a){return pow(min(max(c-vec3(i),vec3(0.0))/(vec3(a)-vec3(i)),vec3(1.0)),vec3(1.0/g));}vec4 lv(vec4 c,float i,float g,float a){return vec4(lv(vec3(c.r,c.g,c.b),i,g,a),c.a);}float lv(float c,float i,float g,float a){return lv(vec3(c),i,g,a).r;}float th(float c,float t){return(c<t?0.0:1.0);}vec4 sa(vec4 a,float b){const vec3 e=vec3(0.2125,0.7154,0.0721);vec3 i=vec3(dot(a.rgb,e));return vec4(mix(i,a.rgb,b),a.a);}mat2 rt(float a){return mat2(cos(a),-sin(a),sin(a),cos(a));}vec2 rtpv(float a,vec2 uv,vec2 p){uv=uv-p;uv=rt(a)*uv;uv=uv+p;return uv;}float b(vec4 a){return (a.r+a.g+a.b)/3.0;}vec4 drbr(vec2 uv,sampler2D ug,float s,float t,bool cbo){vec4 c=texture2D(ug,uv);vec2 ccss=vec2(cos(t),sin(t))*s;for(float i=0.0;i<=1.0;i+=(1.0/5.0)){c+=texture2D(ug,uv+ccss*(cbo?(i-0.5):i));}return c/5.0;}`+n),d.compileShader(s);let u=d.createProgram();d.attachShader(u,f),d.attachShader(u,s),d.linkProgram(u);let b=d.getAttribLocation(u,"a_p"),g=d.createBuffer();d.bindBuffer(d.ARRAY_BUFFER,g),d.useProgram(u),d.enableVertexAttribArray(b),d.bindBuffer(d.ARRAY_BUFFER,g),d.vertexAttribPointer(b,2,d.FLOAT,!1,0,0),d.viewport(0,0,d.canvas.width,d.canvas.height);let m=e(r);d.clearColor(m.r,m.g,m.b,m.a),d.clear(d.COLOR_BUFFER_BIT),this.c=v,this.gl=d,this.p=u,this.uniformLocations={};for(let e of o)this.uniformLocations[e]=this.gl.getUniformLocation(this.p,e);this.textures={}}setUniformColor(e,t){this.gl.uniform4f(this.uniformLocations[e],t.r,t.g,t.b,t.a)}setUniform1f(e,t){this.gl.uniform1f(this.uniformLocations[e],t)}setUniform1fByLoc(e,t){this.gl.uniform1f(e,t)}setUniformSampler2D(e,t,a){let c,r=this.gl;null==this.textures[t]&&(this.textures[t]=r.createTexture()),c=this.textures[t],r.activeTexture(r.TEXTURE0+t),r.bindTexture(r.TEXTURE_2D,c),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MIN_FILTER,r.LINEAR),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MAG_FILTER,r.LINEAR),r.texImage2D(r.TEXTURE_2D,0,r.RGBA,r.RGBA,r.UNSIGNED_BYTE,a);let o=this.uniformLocations[e];r.uniform1i(o,t)}render(){this.gl.bufferData(this.gl.ARRAY_BUFFER,new Float32Array([-1,-1,1,-1,1,1,-1,1,-1,-1,1,1]),this.gl.STATIC_DRAW),this.gl.drawArrays(this.gl.TRIANGLES,0,6)}}let v,d,f=new class{constructor(e){let t=Uint32Array.of(9,7,5,3),a=(e=1)=>e*(e=t[3],t[3]=t[2],t[2]=t[1],e^=e<<11,t[0]^=e^e>>>8^(t[1]=t[0])>>>19,t[0]/4294967296);[...e+"ThxPiter"].map((e=>a(t[0]^=e.charCodeAt()*t[3]))),this.rd=a}rn(e,t){return e+(t-e)*this.rd()}ri(e,t){return o(this.rn(e,t+1))}rc(e){return e[this.ri(0,e.length-1)]}rcw(e){let t=[];for(let a=0;a<e.length;a++)for(let c=0;c<=e[a][0];c++)t.push([e[a][1],e[a][2]]);return t=a(t),[t[0][0],t[0][1]]}}(`${i}`),s=50,u=1*f.rd()+.1,b=.5>f.rd(),g=3*f.rd()+1;[v,d]=f.rcw([[1,["#bfb5af","#c7b4a6","#d1c1b6","#373f51","#444646","#c4cad0","#555462","#878c8f","#3a3a3a","#555555","#999999"],"Neutrals"],[1,["#c4cad0","#878c8f","#a4969b","#22284a","#22284a","#e9dfc6","#489fb7","#538c98","#982432","#0d4756","#087c7c","#0181c7","#002c60"],"1"],[1,["#3a86ff","#219ebc","#023047","#ffb703","#fb8500","#2d5277","#023047","#22284a","#2d5277"],"2"],[1,["#d03e3a","#8d99ae","#4d879b","#eb942e","#ef233c","#087c7c","#087c7c","#f0b4b3","#9aa6c2","#f3acca"],"3"],[1,["#699fcb","#1d3663","#1d3663","#134c51","#6f0039","#0181c7","#002c60","#d18de0","#005e23"],"4"],[1,["#b95173","#51413d","#134c51","#eb942e","#134c51","#d03e3a","#9aa6c2"],"5"],[1,["#f3acca","#E76F51","#8d99ae","#9aa6c2","#699fcb","#2d5277","#0d4756","#e07270","#d03e3a","#ada1cc"],"6"],[1,["#217074","#37745b","#8b9d77","#e7eaef","#edc5ab","#264653"],"7"],[1,["#0181c7","#047a7d","#d18de0","#0d4756","#2A9D8F","#21527c","#AF5C7E","#4F2546","#f6895e","#E76F51","#002c60","#0c2037"],"8"],[1,["#2A9D8F","#ef233c","#2d5277","#134c51","#e17f36","#f3acca","#2A9D8F","#2d5277","#134c51","#e17f36","#0d4756"],"9"],[1,["#6f0039","#4F2546","#4F2546","#903a84","#903a84","#eb942e","#e84e11","#fb8500","#e17f36","#E76F51","#4F2546","#4F2546","#3c0d32","#e07270","#E76F51","#E76F51","#d03e3a","#982432","#ef233c","#6f0039","#6f0039","#d18de0","#AF5C7E","#7f4e74","#f3acca","#d92059","#e84e11","#e11e10"],"10"],[1,["#161b41","#145b85","#134c51","#087c7c","#ada1cc","#eb942e","#e84e11","#e11e10"],"11"],[1,["#D69DAB","#4F2546","#264653","#E8ACB8","#243520","#6f0039","#624A4E","#3c0d32","#134c51","#243520","#4B7C86","#326762","#005e23","#ded2c2","#AF5C7E"],"12"],[1,["#c4b7cb","#bbc7ce","#bfedef","#264653","#545c52"],"13"],[1,["#d06f71","#eeb0a6","#c0d4c6","#5095a1","#273558"],"14"],[1,["#d8dbe2","#a9bcd0","#58a4b0","#373f51","#1b1b1e"],"15"],[1,["#bfb5af","#ece2d0","#d5b9b2","#a26769","#582c4d"],"16"],[1,["#fcf7ff","#c4cad0","#878c8f","#a4969b","#655560"],"17"]]),console.log(d);let m=f.rc(v),A=window,h=document;const x=h.body.appendChild(h.createElement("canvas")),_=x.getContext("2d",{willReadFrequently:!0});let E,p,R,F=A.innerWidth,y=A.innerHeight;E=F,p=y,E=r(E),p=r(p),R=A.devicePixelRatio;let T=!1;/Android|webOS|iPhone|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)&&(T=!0),1<R&&!T?(E*=R,p*=R,x.style.width=E/R+"px",x.style.height=p/R+"px"):(x.style.width=`${E}px`,x.style.height=`${p}px`),x.width=E,x.height=p,_.lineJoin="round",_.lineCap="round",_.scale(E,p);let S=h.body;S.style.display="flex",S.style.alignItems="center",S.style.justifyContent="center",S.style.backgroundColor="#302e2f",S.style.overflow="hidden";let N=o(f.rn(0,1e6)),w=new l(400,400,N,m,["td"],"attribute vec3 a_p;attribute vec2 aOffset,asp;attribute vec4 a_c1,a_c2,a_c3,a_c4;attribute float a_s,a_d;varying vec4 c1,c2,c3,c4;varying vec2 sm;varying float s,d;void main(){vec3 pos=a_p;c1=a_c1,c2=a_c2,c3=a_c3,c4=a_c4,s=a_s,d=a_d;sm=asp;gl_Position=vec4(pos*a_s*2.0+vec3(aOffset.xy*2.0-1.0,0.0),1.0);}",`varying vec4 c1,c2,c3,c4;varying vec2 sm;varying float s,d;uniform float td;void main(){vec2 uv=(gl_FragCoord.xy/vec2(${t(E)},${t(p)}));uv.y=1.0-uv.y;vec2 uvn=rtpv(${t(6.28319*f.rd())}+td*0.123*${t(f.rc([1,-1]))},uv,vec2(0.5));float n=th(SN(uvn+741.21+td*0.1123+(SN(uvn+td*0.1612,${t(4*f.rd()+1)},${t(4*f.rd()+1)})-0.5)*${t(f.rd())},${t(20*f.rd()+4)},1.0),0.5);H2=d;float n2=1.0-th(distance(sm+(vec2(SN(sm+123.45+td*0.0841,3.0,3.0),SN(sm+67.89+td*0.0821,3.0,3.0))-0.5)*0.4,vec2(0.5)),0.6*s);n=n*n2;vec4 nc1=mix(c1,c2,clamp(sm.x*4.0-1.5,0.0,1.0));vec4 nc2=mix(c3,c4,clamp(sm.x*4.0-1.5,0.0,1.0));vec4 a=mix(vec4(nc1.rgb,n),vec4(nc2.rgb,1.0-n),(1.0-n)*n2);gl_FragColor=a;H2=H;}`),D=w.gl,U=w.p;D.blendFunc(D.SRC_ALPHA,D.ONE_MINUS_SRC_ALPHA),D.enable(D.BLEND),D.disable(D.DEPTH_TEST);const L=D.getExtension("ANGLE_instanced_arrays"),B=D.getAttribLocation(U,"a_p"),C=D.getAttribLocation(U,"asp"),P=new Float32Array([-1,-1,1,-1,1,1,-1,1,-1,-1,1,1]),I=D.createBuffer();D.bindBuffer(D.ARRAY_BUFFER,I),D.bufferData(D.ARRAY_BUFFER,P,D.STATIC_DRAW),D.vertexAttribPointer(B,2,D.FLOAT,!1,0,0),D.enableVertexAttribArray(B);const $=new Float32Array([0,0,1,0,1,1,0,1,0,0,1,1]),O=D.createBuffer();D.bindBuffer(D.ARRAY_BUFFER,O),D.bufferData(D.ARRAY_BUFFER,$,D.STATIC_DRAW),D.vertexAttribPointer(C,2,D.FLOAT,!1,0,0),D.enableVertexAttribArray(C);const G=22,M=new Float32Array(22*s);let H,X,Y;const W=D.createBuffer();let k=[];for(let e=0;e<s;e++)k.push(f.rd());let V,q=[],z=[],j=[],J=[];for(let t=0;t<s;t++)V=a(v),q.push(e(V[0])),z.push(e(V[1])),j.push(e(V[2])),J.push(e(V[3]));let K=[];for(let e=0;e<s;e++)K.push(f.rd()*Math.PI*2);let Q=[];for(let e=0;e<s;e++)Q.push(.4*f.rd()*.9+.1);let Z=[];for(let e=0;e<s;e++)Z.push((5e-5+5e-5*f.rd())*f.rc([1,-1])/Q[e]);let ee,te,ae,ce=new l(E,p,N,m,["td","cxt"],"attribute vec3 a_p;void main(){gl_Position=vec4(a_p,1.0);}",`\nuniform sampler2D cxt;uniform float td;void main(){vec2 res=vec2(${t(E)},${t(p)});vec2 uv=(gl_FragCoord.xy/res);uv.y=1.0-uv.y;vec2 uvr=rtpv(td*0.05*${t(f.rc([1,-1,0]))}+${t(6.2832*f.rd())}+(SN(uv+9.31-td*0.0351,${t(u)},${t(u)})-0.5)*${t(g)},uv,vec2(0.5));if(${b}){uvr.x=uvr.x+0.2*(FN(uvr+td*0.052+63.25,1.5,1.5))+0.1*(FN(uvr+td*0.052+6.25,3.0,3.0));}vec4 c=drbr(vec2(uvr.x,uvr.y+(SN(uvr+96.361+td*0.01,2000.0,0.3)-0.5)*0.1),cxt,0.3,1.5708,true);c=mix(c,drbr(vec2(uvr.x,uvr.y+(SN(uvr+30.21+td*0.015,2345.0,0.3)-0.5)*0.3),cxt,0.2,1.5708,true),0.5);c=bm(c,vec4(0.94,0.92,0.86,1.0),1.0);c=bo(c,c);vec2 st=vec2(uv.y+FN(uv+52.31+td*0.01,4.0,4.0)*0.1,uv.x+FN(uv+td*0.01,4.0,4.0)*0.1);vec4 n=mix(vec4(vec3(0.4),1.0),vec4(vec3(0.55),1.0),(SN(st,1500.0,1.0)+SN(st,1.0,2000.0)));n=bo(c,n);vec2 uvd1=vec2(st.x+td*0.011+(SN(st+2.36,8.0,8.0)-0.5)*0.1,st.y-td*0.012+(SN(uv+32.56,8.0,8.0)-0.5)*0.1);vec2 uvd2=vec2(st.x-td*0.013+(SN(st+32.76,8.0,8.0)-0.5)*0.1,st.y+td*0.014+(SN(uv+49.87,8.0,8.0)-0.5)*0.1);float t1=lv(SN(uvd1+2.36,300.0,300.0)*SN(uvd1+2.36+td*0.01,200.0,200.0)*SN(uvd1+2.36+td*0.016,100.0,100.0),0.4,1.0,0.5);float t2=lv(SN(uvd2+32.36,300.0,300.0)*SN(uvd2+23.36-td*0.01,200.0,200.0)*SN(uvd2+27.36+td*0.017,100.0,100.0),0.4,1.0,0.5);n=bo(n,vec4(vec3(mix(0.5,0.4,t1)),1.0));n=bo(n,vec4(vec3(mix(0.5,0.65,t2)),1.0));if(${["2","3","5","6","8","9"].includes(d)}){n=mix(n,lv(n,0.05,1.0,0.95),0.5);n=sa(n,1.3);}n=bm(n,vec4(0.94,0.92,0.86,1.0),1.0);gl_FragColor=n;}`),re=(new Date).getTime(),oe=w.gl.getUniformLocation(w.p,"td"),ie=0,ne=!0,le=!0,ve=!0,de=()=>{ne?(ne=!1,ee=(new Date).getTime()):(ne=!0,ve=!0,window.requestAnimationFrame(c))};document.body.onclick=de,document.body.onkeyup=e=>{(" "==e.key||"Space"==e.code)&&de()},window.requestAnimationFrame(c)}();
_Bakhoor Assandal is released as part of reGEN, a special charitable auction of generative art to raise funds for Cure Alzheimer’s Fund, curated by Alex Estorick and Foteini Valeonti in collaboration with The Giving Block._ I said [I won’t forget Sudan.](https://www.artblocks.io/collections/presents/projects/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/366) I had no idea what that would mean. That, for now, all we have left of our home in Sudan is our memories. The broken system officially broke, And the people took the broken roads right out of town. Were the ladies dressed in bright colors and patterns as they escaped to the sound of bombing? When a Sudanese home goes up in smoke does it smell like sandalwood incense? Do the walls covered in hopeful graffiti still stand? Does the mango tree still bear fruit, and does it remember our family? Has the war reached the school we built? Do the walls still stand? How many years will it be before the school system reopens? Will the idea that a school would be used for ... school … be a mere memory of a good intention? When the rebel army broke into our abandoned home, Ransacked everything the Sudanese part of our family owns, Then went upstairs, and found the beginnings of a learning center, Intended to giving young bright Sudanese people a window into the world of blockchain and AI, Any chance they didn’t steal everything? Or is our learning center ... a mere memory ... of a good intention? When the rebel army chose to live in our abandoned home for a term, Did they feel and sense our memory echoing off the walls? If we are ever able to return, will we feel and sense the memory of them? If my niece-in-law (who is two –– or maybe three now) has already forgotten the anthem, and refers to the family home as the “house of shooting,” what does that mean for the future of Sudan? If all the displaced Sudanese people are able to hold onto their memories, treasure them, and someday bring them back to Omdurman, Can Sudan be regenerated ... like a forest after a wildfire ... perhaps stronger and less broken than it was before? ~ _Bakhoor Assandal_ is an animated generative series made in JavaScript and GLSL. The name refers to the incense made from sandalwood that is common in Sudan. While sandaliya is the oil of sandalwood used as perfume, Bakhoor Assandal is the incense, burned on coals, made from the same wood. One could say it is the same substance gone up in smoke. This project is a continuation of _Sandaliya_, a series that interweaves personal memories and familial connections in Sudan against the growing conflict. In April 2023, a civil war ignited, and many were forced to evacuate. _Bakhoor Assandal_ uses JavaScript and GLSL to create outputs in constant disarray. With a particular focus on movement, the algorithm builds layer by layer, with each pixel in perpetual shift, never replicating its past form –– a testament to life’s relentless change. Like the ephemeral smoke of burning incense, we must embrace the flow, knowing we will remember the scent. **_Notes_** Experience it in real time: click or press the spacebar to toggle the animation. In live mode, the visual dynamically adjusts to your window. To modulate speed in live mode, append “?speed=X” at the end of the URL, where “X” is your desired multiple. For example: “?speed=0.5” for half speed.
(function(){'use strict';var c=Math.floor;class e{constructor(a,b,c,d,e,f,g,h){this.w=a,this.h=b,this.blur_qual=e,this.blur_dir=f;let i=`precision highp float;varying vec2 vPos;`;this.vs=i+`attribute vec3 aPosition;void main(){vPos=(gl_Position=vec4(aPosition,1.0)).xy;}`,this.fs=i+(`float H=0.`+d+`;float H2=H;float N21(vec2 p){vec3 p3=fract(vec3(p.xyx)*H2);p3+=dot(p3,p3.yzx+33.33);return fract((p3.x+p3.y)*p3.z);}vec4 br(vec2 uv,sampler2D ug,float s){vec2 r=vec2(s);vec4 c=texture2D(ug,uv);const float inc=6.283185/${f}.0;for(float d=0.0; d<6.283185;d+=inc){vec2 ccss=vec2(cos(d),sin(d))*r;for(float i=(1.0/${e}.0)*4.0;i<=1.0;i+=(1.0/${e}.0)){vec2 p=uv+ccss*i;c+=texture2D(ug,p);}}return c/(${e}.0*(${f}.0-5.0));}vec4 drbr(vec2 uv,sampler2D ug,float s,float t,bool cbo){vec4 c=texture2D(ug,uv);vec2 ccss=vec2(cos(t),sin(t))*vec2(s);for(float i=0.0;i<=1.0;i+=(1.0/${e}.0)){c+=texture2D(ug,uv+ccss*(cbo?(i-0.5):i));}return c/${e}.0;}float SN(vec2 uv,float x,float y){uv=uv*vec2(x,y);vec2 lv=fract(uv),id=floor(uv);lv=lv*lv*(3.-2.*lv);float bl=N21(id),br=N21(id+vec2(1,0)),b=mix(bl,br,lv.x),tl=N21(id+vec2(0,1)),tr=N21(id+vec2(1,1)),t=mix(tl,tr,lv.x);return mix(b,t,lv.y);}float FN(vec2 uv,float x,float y){float c=SN(uv,pow(2.0,x),pow(2.0,y)),div=1.0;for(float i=0.0;i<12.0;i++){float s=(1.0/pow(2.0,i));c+=SN(uv,pow(2.0,x+i),pow(2.0,y+i))*s;div+=s;}c/=div;return c;}vec4 bm(vec4 b,vec4 l,float o){return (b*l*o+b*(1.0-o));}float bm(float b,float l,float o){return (b*l*o+b*(1.0-o));}float bs(float b,float l){return 1.0-((1.0-b)*(1.0-l));}vec4 bs(vec4 b,vec4 l){return vec4(bs(b.r,l.r),bs(b.g,l.g),bs(b.b,l.b),min(b.a+l.a,1.0));}float bo(float b,float l){return b<0.5?(2.0*b*l):(1.0-2.0*(1.0-b)*(1.0-l));}vec4 bo(vec4 b,vec4 l){return vec4(bo(b.r,l.r),bo(b.g,l.g),bo(b.b,l.b),min(b.a+l.a,1.0));}vec3 lv(vec3 c,float i,float g,float a){return pow(min(max(c-vec3(i),vec3(0.0))/(vec3(a)-vec3(i)),vec3(1.0)),vec3(1.0/g));}vec4 lv(vec4 c,float i,float g,float a){return vec4(lv(vec3(c.r,c.g,c.b),i,g,a),c.a);}float lv(float c,float i,float g,float a){return lv(vec3(c),i,g,a).r;}float th(float c,float t){return(c<t?0.0:1.0);}vec4 alphaBlend(vec4 down,vec4 up){return down*(1.0-up.a)+up*up.a;}vec4 sa(vec4 a,float b){const vec3 e=vec3(0.2125,0.7154,0.0721);vec3 i=vec3(dot(a.rgb,e));return vec4(mix(i,a.rgb,b),a.a);}mat2 rt(float a){return mat2(cos(a),-sin(a),sin(a),cos(a));}float b(vec4 a){return (a.r+a.g+a.b)/3.0;}vec2 twirl(vec2 uv,float x,float y,float dir,float f,float sz){float dx=uv.x-x,dy=uv.y-y;float dis=sqrt(dx*dx+dy*dy);float a=atan(dy,dx)+dir*f*pow(clamp((sz-dis)/sz,0.0,1.0),5.0);vec2 s=dis*vec2(cos(a),sin(a))+vec2(x,y);return s;}`)+h,this.graphicsContext=createGraphics(a,b,WEBGL),this.graphicsContext.pixelDensity(c),this.s=this.graphicsContext.createShader(this.vs,this.fs),this.graphicsContext.shader(this.s),this.setUniforms([["r",[a,b]],["pd",c]]),this.setUniforms(g)}setUniforms(a){a.map(a=>this.s.setUniform(a[0],a[1]))}render(){this.graphicsContext.quad(-1,-1,1,-1,1,1,-1,1)}getImage(){return this.graphicsContext}}let g=new URLSearchParams(window.location.search).get("hash")||tokenData.hash;console.log(g);let i=+new URLSearchParams(window.location.search).get("h")||-1;6e3<i&&(i=6e3);let j,a,b,k,l,m=new class{constructor(){this.useA=!1;let a=function(e){let f=parseInt(e.substr(0,8),16),g=parseInt(e.substr(8,8),16),h=parseInt(e.substr(16,8),16),i=parseInt(e.substr(24,8),16);return function(){f|=0,g|=0,h|=0,i|=0;let a=0|(0|f+g)+i;return i=0|i+1,f=g^g>>>9,g=0|h+(h<<3),h=h<<21|h>>>11,h=0|h+a,(a>>>0)/4294967296}};this.prngA=new a(g.substr(2,32)),this.prngB=new a(g.substr(34,32));for(let a=0;1e6>a;a+=2)this.prngA(),this.prngB()}rd(){return this.useA=!this.useA,this.useA?this.prngA():this.prngB()}rn(c,a){return c+(a-c)*this.rd()}ri(d,a){return c(this.rn(d,a+1))}rc(a){return a[this.ri(0,a.length-1)]}rcw(a){let b=[];for(let c=0;c<a.length;c++)for(let d=0;d<=a[c][0];d++)b.push([a[c][1],a[c][2]]);return b=b.map(a=>({v:a,s:this.rd()})).sort((c,a)=>c.s-a.s).map(({v:a})=>a),[b[0][0],b[0][1]]}},n=c(m.rn(0,1e6)),o=function(a,b){return c(a*b)/b},p=9/16,q=.03;const r="#ded2c2";let s=m.rc(["#3a3a3a",r]),t=o(.17*m.rd()+.1,100),u=o(.2*m.rd()+.2,100),v=m.rc([.333333,.666667,.5]),z=m.rc([.333333,.666667,.5]),A=.2>m.rd(),B=.2>m.rd(),C=.5>m.rd();C||(B=!1),k=[],[k,l]=m.rcw([[5,["#a11f5d","#c67cde","#E76F51","#e17f36","#4d879b","#087c7c","#e17f36","#e40445"],"1"],[5,["#b95173","#c67cde","#E76F51","#087c7c","#134c51","#a11f5d","#7f24af","#eb6ea3","#2e0055"],"2"],[5,["#9aa6c2","#8d99ae","#087c7c","#e07270","#51413d","#e40445","#134c51","#264653","#e40445"],"3"],[5,["#f3acca","#0d4756","#2A9D8F","#699fcb","#f3acca","#d03e3a","#21527c"],"4"],[5,["#264653","#2A9D8F","#8d99ae","#2d5277","#134c51","#d9d8d4","#047a7d","#4d879b","#21527c","#0d4756","#9aa6c2","#ada1cc","#699fcb","#087c7c","#4eb7b3","#1d3663"],"5"],[5,["#4d879b","#047a7d","#ada1cc","#4eb7b3","#2A9D8F","#21527c","#f6895e","#f6895e","#d03e3a","#2e0055"],"6"],[5,["#d03e3a","#8d99ae","#4d879b","#eb942e","#ef233c","#087c7c","#087c7c","#f0b4b3","#9aa6c2","#f3acca"],"7"],[5,["#4d879b","#087c7c","#087c7c","#a9ff98","#21527c","#699fcb","#0d4756","#005e23","#2e0055","#289a52"],"8"],[5,["#4d879b","#087c7c","#087c7c","#a9ff98","#2A9D8F","#21527c","#699fcb","#0d4756","#005e23","#2e0055","#c67cde","#7f24af","#289a52","#9aa6c2"],"9"],[5,["#b95173","#51413d","#134c51","#eb942e","#134c51","#d03e3a","#9aa6c2"],"10"],[5,["#f3acca","#E76F51","#8d99ae","#9aa6c2","#699fcb","#2d5277","#0d4756","#e07270","#d03e3a","#ada1cc"],"11"],[5,["#e17f36","#047a7d","#d03e3a","#0d4756"],"12"],[5,["#f0b4b3","#d03e3a","#E76F51","#047a7d"],"13"],[5,["#e07270","#f0b4b3","#f3acca","#ada1cc","#51413d","#699fcb","#699fcb","#087c7c","#2A9D8F","#0d4756"],"14"],[5,["#a11f5d","#2d5277","#c67cde","#e17f36","#4d879b","#e17f36","#6f0039","#e40445"],"15"],[5,["#2A9D8F","#ef233c","#2d5277","#087c7c","#e17f36"],"16"],[5,["#ada1cc","#699fcb","#e29578","#8d99ae","#f6895e","#2A9D8F","#E76F51","#047a7d"],"17"],[5,["#e40445","#a11f5d","#b95173","#51413d","#6f0039","#3a3a3a","#ada397","#373d3e","#776d6b","#a2a9a3","#717278","#a99989","#63625c","#c4a586","#35352e"],"18"],[5,["#3a3a3a","#3a3a3a","#3a3a3a","#0d4756","#2d5277","#2e0055","#f3acca"],"19"],[5,[r,"#3a3a3a","#ada397","#776d6b","#a2a9a3","#717278"],"Neutrals"]]),k.push("#3a3a3a"),k.push(r);let D=function(a){return[red(color(a))/255,green(color(a))/255,blue(color(a))/255,alpha(color(a))/255]},E=function(a){return a.toFixed(5)};window.setup=()=>{var c=Math.sin,f=Math.cos,g=Math.PI;let h=function(){var c=Math.ceil;let d=!1;/Android|webOS|iPhone|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)&&(d=!0),d&&pixelDensity(1),b=pixelDensity(),1<i?(a=i,j=a*p):windowHeight>windowWidth/p?(j=windowWidth,a=j/p):(a=windowHeight,j=a*p),j=c(j),a=c(a);let e=createCanvas(j*b,a*b);e.id("p5canv");let f=document.getElementById("p5canv");f.style.width=j+"px",f.style.height=a+"px",j*=b,a*=b,noLoop();let g=document.body;g.style.display="flex",g.style.alignItems="center",g.style.justifyContent="center",g.style.backgroundColor="#302e2f",g.style.overflow="hidden",randomSeed(n),noiseSeed(n)};h();let l=createGraphics(j,a);l.background(m.rc(k));let o=5e3;l.noStroke();for(let b=0;b<o;b++)l.fill(m.rc(k)),l.ellipse(m.rd()*j,m.rd()*a,u*j);let r=createGraphics(j,a);r.noStroke();for(let b=0;b<o;b++)r.fill(m.rc(k)),r.ellipse(m.rd()*j,m.rd()*a,u*j);let w=createGraphics(j,a);if(w.background(s),w.noStroke(),!B){let b=1e3;for(let d=0;d<b;d++){let e=2*(m.rd()*g),h=.9*((b-d)/b)+t/2,i=f(e)*h*j+v*j,l=c(e)*h*j+z*a;w.fill(m.rc(k)),w.ellipse(i,l,t*j)}}let x=createGraphics(j,a);x.noStroke(),x.background(255);for(let b=0;5e3>b;b++)x.fill(m.rc([0,255])),x.ellipse(m.rd()*j,m.rd()*a,t*j);let F=createGraphics(j,a);F.background(255/2),F.noStroke();for(let b=0;5e4>b;b++)F.fill(155*m.rd()+50),F.ellipse(m.rd()*j,m.rd()*a,.003*(m.rd()*m.rd()*j));for(let b=0;100>b;b++){F.fill(255*m.rd());let b=m.rd()*j,c=m.rd()*a,d=98456512*m.rd(),e=98456512*m.rd();for(let a=0;1>a;a+=.01)F.ellipse(b+.02*((2*noise(.5*a+d)-1)*j),c+.02*((2*noise(.5*a+e)-1)*j),.001*j)}let G=createGraphics(j,a);G.background(255/2),G.strokeWeight(j/1100),G.noFill();let y=35,H=m.ri(5,50);for(let b=0;1e3>b;b++){G.stroke(m.ri(255/2-y,255/2+y)),G.beginShape();let b=m.ri(0,j),c=m.ri(0,a);for(let d=0;100>d;d++){let d=min(max(0,b+m.ri(-j/H,j/H)),j),e=min(max(0,c+m.ri(-a/H,a/H)),a);G.curveVertex(d,e),b=d,c=e}G.endShape()}let I=new e(j,a,b,n,50,100,[["t",G],["tex",F],["tx",l],["tx2",r],["tx3",w],["bsz",.4*u],["bgc",D(s)],["cm",x],["tc",C]],`uniform vec2 r;uniform float pd,bsz;uniform sampler2D tx,tx2,tx3,t,tex,cm;uniform vec4 bgc;uniform bool tc;void main(){vec2 uv=(gl_FragCoord.xy/r.xy)/pd;uv.y=1.0-uv.y;vec2 uv2=uv;uv2.x*=${E(p)};vec2 tl=twirl(uv2,${E(v*p)},${E(z)},${E(m.rc([1,-1]))},${E(20*m.rd()+5)},${E(.5)});tl=twirl(tl,${E(m.rd()*p)},${E(m.rd())},${E(m.rc([1,-1]))},${E(20*m.rd()+5)},${E(1.1*m.rd()+.4)});tl=twirl(tl,${E(m.rd()*p)},${E(m.rd())},${E(m.rc([1,-1]))},${E(20*m.rd()+5)},${E(1.1*m.rd()+.4)});tl=twirl(tl,0.5,0.5,${E(m.rc([1,-1]))},${E(20*m.rd()+5)},${E(1.5)});float m2=th(SN(tl,${E(m.ri(4,20))},${E(m.ri(4,20))}),0.5);vec4 c=mix(br(uv,tx,bsz),br(uv,tx2,bsz),m2);c=bo(c,lv(c,0.0,1.2,1.0));vec4 c2=texture2D(tx3,twirl(uv2,${E((A?v:m.rd())*p)},${E(A?z:m.rd())},${E(m.rc([1,-1]))},${E(20*m.rd()+10)},2.0));if(tc){c=mix(c,c2,th(SN(twirl(uv2,${E((A?v:m.rd())*p)},${E(A?z:m.rd())},${E(m.rc([1,-1]))},${E(20*m.rd()+5)},2.0),${E(m.ri(4,20))},${E(m.ri(4,20))}),0.5));}else{c=mix(c,c2,b(texture2D(cm,uv)));}c=mix(bgc,c,step(${E(q)},uv.x)*step(${E(q)},1.0-uv.x)*step(${E(q*p)},uv.y)*step(${E(q*p)},1.0-uv.y));vec2 st=uv+FN(uv,4.0,4.0)*0.05;vec4 n=mix(vec4(vec3(1.0),1.0),vec4(vec3(0.93),1.0),(SN(st,1500.0,1.0)+SN(st,1.0,2000.0)));n=bm(c,n,1.0);n=bo(n,mix(texture2D(t,uv),vec4(vec3(0.5),1.0),SN(uv,8.0,10.0)*0.5+0.25));n=bo(n,texture2D(tex,uv));n=lv(n,0.15,1.0,0.92);gl_FragColor=n;}`);I.render(),l.image(I.getImage(),0,0),image(l,0,0)}})();
Undercurrents is a pure generative art collection made with code using p5.js and glsl. The collection attempts to capture the essence of Tokyo's multifaceted character and the unseen layers beneath the surface of the city's dynamic urban landscape. The bright abstract patterns, layered with a subtle fabric-like texture, allude to the interplay of modernity and ancient traditions that define the city. The intricate layers of the artwork hint at the depth of Tokyo's high-context culture, where communication relies heavily on implicit understanding, nonverbal cues, and shared cultural knowledge.
!function(){"use strict";function e(e,t,r,a,c,o){e.beginPath(),e.moveTo(t+a,r);for(let i=0;i<c;i++)e.lineTo(s(2*f*i/c)*a*V+t,n(2*f*i/c)*a*o+r);e.fill()}function t(e,t,r){let a=document.createElement("canvas");a.width=e,a.height=t;let c=a.getContext("2d");return c.scale(e,t),H(c,r),c.fillRect(0,0,1,1),[a,c]}function r(e){return e.toFixed(5)}function a(e,t,r){return e*(1-r)+t*r}var c=Math.max,o=Math.ceil,i=Math.sqrt,l=Math.pow,d=Math.floor,n=Math.sin,s=Math.cos,f=Math.PI;let v=new URLSearchParams(window.location.search).get("hash")||tokenData.hash;console.log(v);let u,b,h=new class{constructor(e){this.useA=!1,this.sfc32=e=>{let t=parseInt(e.substr(0,8),16),r=parseInt(e.substr(8,8),16),a=parseInt(e.substr(16,8),16),c=parseInt(e.substr(24,8),16);return()=>{t|=0,r|=0,a|=0,c|=0;let e=0|(0|t+r)+c;return c=0|c+1,t=r^r>>>9,r=0|a+(a<<3),a=a<<21|a>>>11,a=0|a+e,(e>>>0)/4294967296}},this.prngA=this.sfc32(e.substr(2,32)),this.prngB=this.sfc32(e.substr(34,32));for(let e=0;1e6>e;e+=2)this.prngA(),this.prngB()}rd(){return this.useA=!this.useA,this.useA?this.prngA():this.prngB()}rn(e,t){return e+(t-e)*this.rd()}ri(e,t){return d(this.rn(e,t+1))}rc(e){return e[this.ri(0,e.length-1)]}rcw(e){let t=[];for(let r=0;r<e.length;r++)for(let a=0;a<=e[r][0];a++)t.push([e[r][1],e[r][2]]);return t=t.map((e=>({v:e,s:this.rd()}))).sort(((e,t)=>e.s-t.s)).map((({v:e})=>e)),[t[0][0],t[0][1]]}}(v),g=d(h.rn(0,1e6)),m=(e,t)=>d(e*t)/t,p=h.ri(50,400),E=m(.04*h.rd()+.008,1e3),A=m(500*h.rd()+20,1),D=.5>h.rd()?0:m(l(h.rd(),3),100),x=h.rc([.333333,.666667,.5]),w=h.rc([.333333,.666667,.5]);[u,b]=h.rcw([[1,0,"All I have is a vague feeling."],[1,1,"It seems to revolve around this."],[1,2,"If I could only figure out this bit right here."],[1,3,"So much confusing detail."]]);let F,y=1,C=.8>h.rd(),B=h.rc([1,-1])*h.rd()*h.rd()*f*2,T=.8*h.rd()+.6,I=.8*h.rd()+.6,$=.2>h.rd(),_=h.rd(),R=m(1.5*h.rd()+2,10),S=.8>h.rd();0==u?(F=m(h.rd()*h.rd()*50,1),y=.3*h.rd()+.2):1==u?(F=h.ri(4,100),y=.5>h.rd()?y:.8*h.rd()+.2):2==u?(F=h.ri(100,300),y=.1*h.rd()+.05):3==u&&(F=h.ri(100,300),y=.3*h.rd()+.05),.66667<_&&(R+=1);const U=["#264653","#2A9D8F","#E76F51","#8d99ae","#ef233c","#b95173","#d03e3a","#e17f36","#2d5277","#e40445","#134c51","#047a7d","#a11f5d","#e07270","#eb942e","#4d879b","#21527c","#0d4756","#9aa6c2","#51413d","#ada1cc","#699fcb","#087c7c","#3f302e","#6f0039","#f0b4b3","#f3acca","#c67cde","#f6895e","#005e23","#1d3663","#e29578","#7f24af","#FED3D6","#D69DAB","#C58B99","#E8ACB8","#866F74","#D5D7DF","#624A4E","#2E3E2E","#56684E","#243520","#4B7C86","#326762","#4C6D2A","#453326","#AF5C7E","#4F2546","#332424","#6A3E3A","#891860","#402433","#553D37","#785D6F","#B6B2BE","#D70B58","#594D5E","#2b2d42","#003566","#5C4C50","#457b9d","#d90429","#9D001A","#EAA4B5","#928E92","#498885","#91465B","#ada397","#776d6b","#a2a9a3","#717278","#edf2f4"];let P,N,k=[],L=h.ri(8,15);for(let e=0;e<L;e++)k.push(h.rc(U));P=[];for(let e=0;e<L;e++)P.push(k[e]);[P,N]=h.rcw([[50,P,"Something indescribable."],[6,["#ada397","#776d6b","#a2a9a3","#717278"],"I'm like 99% sure it started with the letter X..."],[5,["#f3acca","#0d4756","#2A9D8F","#699fcb","#f3acca","#d03e3a","#21527c"],"Something about it was fresh and pure."],[5,["#b95173","#51413d","#134c51","#eb942e","#134c51","#d03e3a","#9aa6c2"],"There were tigers."],[5,["#f3acca","#E76F51","#8d99ae","#9aa6c2","#699fcb","#2d5277","#0d4756","#e07270","#d03e3a","#ada1cc"],"Whoa I have smelt that before like 300 years ago..."],[5,["#f3acca","#f0b4b3","#8d99ae","#e07270"],"Are you sure we haven't met??? Like completely sure?"],[5,["#9aa6c2","#8d99ae","#087c7c","#e07270","#51413d","#e40445","#134c51","#264653","#e40445"],"I do remember I was happy."],[5,["#f0b4b3","#d03e3a","#E76F51","#047a7d"],"I think I was sitting by a fireplace."],[10,["#e07270","#f0b4b3","#f3acca","#ada1cc","#51413d","#699fcb","#699fcb","#087c7c","#2A9D8F","#0d4756"],"I was a carefree child, staring out the window. But what window and where?"],[5,["#d03e3a","#e17f36","#51413d","#4d879b","#E76F51","#0d4756"],"Have I ever been to Arizona?"],[10,["#d03e3a","#8d99ae","#4d879b","#eb942e","#ef233c","#087c7c","#087c7c","#f0b4b3","#9aa6c2","#f3acca"],"It smelled like Iowa."],[5,["#a11f5d","#c67cde","#E76F51","#e17f36","#4d879b","#087c7c","#e17f36","#e40445"],"A blurred, dreamlike vision."],[5,["#b95173","#c67cde","#E76F51","#087c7c","#134c51","#a11f5d","#7f24af","#eb6ea3","#2e0055"],"It was definitely in the 90s."],[10,["#699fcb","#1d3663","#1d3663","#134c51","#e29578","#6f0039","#4d879b","#ada1cc","#005e23"],"Big city vibes."],[5,["#2d5277","#134c51","#8d99ae","#4d879b","#e40445","#d03e3a","#e29578","#4d879b"],"I visited a house as a child, and all I remember is the feeling."],[10,["#5C4C50","#EAA4B5","#928E92","#498885","#91465B"],"I'm sure I have been there in a book... but what book? And where is there?"],[10,["#453326","#AF5C7E","#4F2546","#D5D7DF","#332424","#6A3E3A","#891860","#402433","#E3E7EF","#402433","#AF5C7E","#553D37","#CDC4CD","#785D6F","#B6B2BE","#4F2546","#D70B58","#594D5E","#264653","#134c51"],"It had to do with romance."],[10,["#FED3D6","#D69DAB","#C58B99","#264653","#E8ACB8","#191D13","#866F74","#6f0039","#624A4E","#2E3E2E","#56684E","#243520","#4B7C86","#326762","#4C6D2A"],"I'm sure I was in a garden... somewhere."],[5,["#326762","#594D5E","#EAA4B5","#2A9D8F","#2b2d42","#ada397","#e29578","#498885","#b95173","#2E3E2E","#2b2d42","#9D001A","#6f0039","#a2a9a3","#134c51"],"A moment of suspended time."],[5,["#6f0039","#56684E","#E76F51","#21527c","#402433","#D69DAB","#edf2f4","#0d4756"],"It was veryyyy humid."],[5,["#4d879b","#191D13","#edf2f4","#51413d","#C58B99","#D69DAB","#51413d","#D69DAB","#003566","#498885","#edf2f4","#326762","#087c7c"],"A wisp of forgotten emotion."],[5,["#21527c","#5C4C50","#134c51","#EAA4B5","#005e23","#D5D7DF","#0d4756","#0d4756","#b95173","#d03e3a","#AF5C7E","#134c51","#e40445","#AF5C7E"],"Something about a swimming pool... in a park...???"],[5,["#928E92","#51413d","#9D001A","#624A4E","#e29578","#264653","#AF5C7E","#087c7c"],"A delicate, lost fragrance."],[5,["#8d99ae","#3f302e","#624A4E","#e17f36","#264653","#91465B","#f6895e","#51413d","#e29578","#ada1cc","#8d99ae","#3f302e","#ada1cc","#332424"],"Pure nostalgia."],[10,["#2d5277","#e29578","#4F2546","#FED3D6","#243520","#498885","#CDC4CD","#717278","#E8ACB8","#402433"],"A shiver down my spine."],[10,["#56684E","#087c7c","#e29578","#f3acca","#91465B","#e40445","#8d99ae","#047a7d","#264653","#624A4E","#699fcb","#5C4C50","#5C4C50"],"Haven't I walked down that path before?"],[5,["#4F2546","#498885","#56684E","#594D5E","#d03e3a","#e29578","#FED3D6","#f3acca"],"There was laughter in the other room."],[10,["#264653","#785D6F","#f3acca","#776d6b","#717278","#d03e3a","#E76F51","#e07270","#E76F51","#866F74","#91465B","#047a7d","#087c7c","#699fcb"],"An inexplicable and mysterious warmth."]]),console.log(P);let M=h.rc(["#264653","#134c51","#a2a9a3","#ada397"]);P.push("#3a3a3a"),P.push("#cbbfb0"),P.push(M);class X{constructor(e,t,r,a,c,o,i){let l="precision highp float;",d=document.createElement("canvas");d.width=e,d.height=t;let n=d.getContext("webgl"),s=n.createShader(n.VERTEX_SHADER);n.shaderSource(s,l+o),n.compileShader(s);let f=n.createShader(n.FRAGMENT_SHADER);n.shaderSource(f,l+"float H=0."+r+`;float H2=H;float N21(vec2 p){vec3 p3=fract(vec3(p.xyx)*H2);p3+=dot(p3,p3.yzx+33.33);return fract((p3.x+p3.y)*p3.z);}vec4 br(vec2 uv,sampler2D ug,float s){vec2 r=vec2(s);vec4 c=texture2D(ug,uv);const float inc=6.283185/${c}.0;for(float d=0.0; d<6.283185;d+=inc){vec2 ccss=vec2(cos(d),sin(d))*r;for(float i=(1.0/${a}.0)*4.0;i<=1.0;i+=(1.0/${a}.0)){vec2 p=uv+ccss*i;c+=texture2D(ug,p);}}return c/(${a}.0*(${c}.0-5.0));}vec4 drbr(vec2 uv,sampler2D ug,float s,float t,bool cbo){vec4 c=texture2D(ug,uv);vec2 ccss=vec2(cos(t),sin(t))*vec2(s);for(float i=0.0;i<=1.0;i+=(1.0/${a}.0)){c+=texture2D(ug,uv+ccss*(cbo?(i-0.5):i));}return c/${a}.0;}float SN(vec2 uv,float x,float y){uv=uv*vec2(x,y);vec2 lv=fract(uv),id=floor(uv);lv=lv*lv*(3.-2.*lv);float bl=N21(id),br=N21(id+vec2(1,0)),b=mix(bl,br,lv.x),tl=N21(id+vec2(0,1)),tr=N21(id+vec2(1,1)),t=mix(tl,tr,lv.x);return mix(b,t,lv.y);}float FN(vec2 uv,float x,float y){float c=SN(uv,pow(2.0,x),pow(2.0,y)),div=1.0;for(float i=0.0;i<12.0;i++){float s=(1.0/pow(2.0,i));c+=SN(uv,pow(2.0,x+i),pow(2.0,y+i))*s;div+=s;}c/=div;return c;}vec4 bm(vec4 b,vec4 l,float o){return (b*l*o+b*(1.0-o));}float bm(float b,float l,float o){return (b*l*o+b*(1.0-o));}float bs(float b,float l){return 1.0-((1.0-b)*(1.0-l));}vec4 bs(vec4 b,vec4 l){return vec4(bs(b.r,l.r),bs(b.g,l.g),bs(b.b,l.b),min(b.a+l.a,1.0));}float bo(float b,float l){return b<0.5?(2.0*b*l):(1.0-2.0*(1.0-b)*(1.0-l));}vec4 bo(vec4 b,vec4 l){return vec4(bo(b.r,l.r),bo(b.g,l.g),bo(b.b,l.b),min(b.a+l.a,1.0));}vec3 lv(vec3 c,float i,float g,float a){return pow(min(max(c-vec3(i),vec3(0.0))/(vec3(a)-vec3(i)),vec3(1.0)),vec3(1.0/g));}vec4 lv(vec4 c,float i,float g,float a){return vec4(lv(vec3(c.r,c.g,c.b),i,g,a),c.a);}float lv(float c,float i,float g,float a){return lv(vec3(c),i,g,a).r;}float th(float c,float t){return(c<t?0.0:1.0);}vec4 alphaBlend(vec4 down,vec4 up){return down*(1.0-up.a)+up*up.a;}vec4 sa(vec4 a,float b){const vec3 e=vec3(0.2125,0.7154,0.0721);vec3 i=vec3(dot(a.rgb,e));return vec4(mix(i,a.rgb,b),a.a);}mat2 rt(float a){return mat2(cos(a),-sin(a),sin(a),cos(a));}float b(vec4 a){return (a.r+a.g+a.b)/3.0;}vec2 rtpv(float a,vec2 uv,vec2 p){uv=uv-p;uv=rt(a)*uv;uv=uv+p;return uv;}`+i),n.compileShader(f);let v=n.createProgram();n.attachShader(v,s),n.attachShader(v,f),n.linkProgram(v);let u=n.getAttribLocation(v,"a_p"),b=n.createBuffer();n.bindBuffer(n.ARRAY_BUFFER,b),n.useProgram(v),n.enableVertexAttribArray(u),n.bindBuffer(n.ARRAY_BUFFER,b),n.vertexAttribPointer(u,2,n.FLOAT,!1,0,0),n.viewport(0,0,n.canvas.width,n.canvas.height),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),this.c=d,this.gl=n,this.p=v}setUniformColor(e,t){this.gl.uniform4f(this.gl.getUniformLocation(this.p,e),t.r,t.g,t.b,t.a)}setUniform1f(e,t){this.gl.uniform1f(this.gl.getUniformLocation(this.p,e),t)}setUniformSampler2D(e,t,r){let a=this.gl,c=a.createTexture();a.activeTexture(a.TEXTURE0+t),a.bindTexture(a.TEXTURE_2D,c),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_S,a.CLAMP_TO_EDGE),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_T,a.CLAMP_TO_EDGE),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,a.LINEAR),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,a.LINEAR),a.texImage2D(a.TEXTURE_2D,0,a.RGBA,a.RGBA,a.UNSIGNED_BYTE,r);let o=a.getUniformLocation(this.p,e);a.uniform1i(o,t)}render(){this.gl.bufferData(this.gl.ARRAY_BUFFER,new Float32Array([-1,-1,1,-1,1,1,-1,1,-1,-1,1,1]),this.gl.STATIC_DRAW),this.gl.drawArrays(this.gl.TRIANGLES,0,6)}}const H=(e,t)=>{e.fillStyle=t},G=e=>`rgb(${e},${e},${e})`;let O=e=>e.getImageData(0,0,Z,ee);const W=.5*(i(3)-1),Y=(3-i(3))/6,z=e=>0|d(e),q=new Float64Array([1,1,-1,1,1,-1,-1,-1,1,0,-1,0,1,0,-1,0,0,1,0,-1,0,1,0,-1]);let V=.8,j=window,J=document;const K=J.body.appendChild(J.createElement("canvas")),Q=K.getContext("2d");let Z,ee,te,re,ae=j.innerWidth,ce=j.innerHeight;ce>ae/V?(Z=ae,ee=Z/V):(ee=ce,Z=ee*V),Z=o(Z),ee=o(ee),te=j.devicePixelRatio;let oe=!1;/Android|webOS|iPhone|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)&&(oe=!0),1<te&&!oe?(Z*=te,ee*=te,K.style.width=Z/te+"px",K.style.height=ee/te+"px"):(K.style.width=`${Z}px`,K.style.height=`${ee}px`),K.width=Z,K.height=ee,Q.lineJoin="round",Q.lineCap="round",Q.scale(Z,ee);let ie=J.body;ie.style.display="flex",ie.style.alignItems="center",ie.style.justifyContent="center",ie.style.backgroundColor="#302e2f",ie.style.overflow="hidden";const le=(e=>{const t=(e=>{const t=new Uint8Array(512);for(let e=0;256>e;e++)t[e]=e;for(let r=0;255>r;r++){const a=r+~~(e.rd()*(256-r)),c=t[r];t[r]=t[a],t[a]=c}for(let e=256;e<512;e++)t[e]=t[e-256];return t})(e),r=new Float64Array(t).map((e=>q[e%12*2])),a=new Float64Array(t).map((e=>q[e%12*2+1]));return(e,c)=>{let o=0,i=0,l=0;const d=(e+c)*W,n=z(e+d),s=z(c+d),f=(n+s)*Y,v=e-(n-f),u=c-(s-f);let b,h;v>u?(b=1,h=0):(b=0,h=1);const g=v-b+Y,m=u-h+Y,p=v-1+2*Y,E=u-1+2*Y,A=255&n,D=255&s;let x=.5-v*v-u*u;if(0<=x){const e=A+t[D];x*=x,o=x*x*(r[e]*v+a[e]*u)}let w=.5-g*g-m*m;if(0<=w){const e=A+b+t[D+h];w*=w,i=w*w*(r[e]*g+a[e]*m)}let F=.5-p*p-E*E;if(0<=F){const e=A+1+t[D+1];F*=F,l=F*F*(r[e]*p+a[e]*E)}return.5*(70*(o+i+l)+1)}})(h);if(H(Q,M),Q.fillRect(0,0,1,1),S){for(let t=0;1e3>t;t++)H(Q,h.rc(P)),e(Q,h.rd()*V,h.rd(),.08,20,V);re=new X(Z,ee,g,30,30,"attribute vec3 a_p;void main(){gl_Position=vec4(a_p,1.0);}",`uniform sampler2D cxt;void main(){vec2 uv=(gl_FragCoord.xy/vec2(${r(Z)},${r(ee)}));uv.y=1.0-uv.y;gl_FragColor=br(uv,cxt,0.1);}`),re.setUniformSampler2D("cxt",1,O(Q)),re.render(),Q.drawImage(re.c,0,0,1,1)}for(let e=0;e<p;e++){let e,t,r;e=(1-l(h.rd(),2))*(I-.1)+.1,t=h.rd()*T+(1-T)/2,r=h.rd()*e/2+(1-e)/2;let c=1-r;Q.beginPath();let o=9874512*h.rd(),i=9874512*h.rd(),d=t+.1*(le(o,i)-.5)*e*D+.01*(le(o,i)-.5)*e*D+.04*(le(o,i)-.5)*e*D+.02*(le(o,i)-.5)*e*D,n=r;Q.moveTo(d*V,n);for(let l,s=1e-4;1>s;s+=1e-4){l=t+.1*(le(o,i+2*s*e)-.5)*e*D+.01*(le(o,i+10*s*e)-.5)*e*D+.04*(le(o,i+20*s*e)-.5)*e*D+.02*(le(o,i+40*s*e)-.5)*e*D,l*=V;let f=a(r,c,s);Q.lineTo(l,f),d=l,n=f}Q.lineWidth=l(h.rd(),2)*E+.002,Q.strokeStyle=h.rc(P),Q.stroke()}let[de,ne]=t(Z,ee,G(127.5));ne.lineWidth=3e-4;let se=.15;for(let e=0;1e3>e;e++){ne.beginPath();let e=h.rd(),t=h.rd();ne.moveTo(e,t);for(let r=0;100>r;r++){let r=e+.1*(h.rd()-.5),a=t+.1*(h.rd()-.5);ne.quadraticCurveTo(r,a,e,t),e=r,t=a}ne.strokeStyle=G(255*(h.rd()*se*h.rc([1,-1])+.5)),ne.stroke()}se=.2;let[fe,ve]=t(Z,ee,G(127.5));for(let t=0;5e4>t;t++)H(ve,G(255*(h.rd()*se*h.rc([1,-1])+.5))),e(ve,h.rd(),h.rd(),h.rd()*h.rd()*.0015,20,.8),ve.fill();for(let t=0;100>t;t++){H(ve,G(255*h.rd()));let t=h.rd(),r=h.rd(),a=98456512*h.rd(),c=98456512*h.rd();for(let o=0;1>o;o+=.01)e(ve,t+.02*(2*le(.2*o+a,0)-1),r+.02*(2*le(.2*o+c,0)-1),5e-4,20,.8);ve.fill()}let ue="";if(1==u){let e=1.5*c(x,w,1-x,1-w);for(let t=0;t<F;t++){let a=w,c=e*y*(F-t)/F;ue+=`p=vec2(${r(x*V)},${r(a)});if(distance(uv,p)<${r(c)}){uv=rtpv(${r($?h.rc([0,f/2,f,3*f/2]):C?B:h.rc([1,-1])*h.rd()*f*2)},uv,p);}`}}else if(0==u||3==u)for(let e=0;e<F;e++){let e=h.rd(),t=h.rd(),a=y*h.rd();ue+=`p=vec2(${r(e*V)},${r(t)});if(distance(uv,p)<${r(a)}){uv=rtpv(${r($?h.rc([0,f/2,f,3*f/2]):C?B:h.rc([1,-1])*h.rd()*f*2)},uv,p);}`}else if(2==u)for(let e=0;e<F;e++){let t=h.rd()*f*2,a=1.5*e*l(h.rd(),1.5)/F,c=s(t)*a+x,o=n(t)*a+w,i=e*y/F;ue+=`p=vec2(${r(c*V)},${r(o)});if(distance(uv,p)<${r(i)}){uv=rtpv(${r($?h.rc([0,f/2,f,3*f/2]):C?B:h.rc([1,-1])*h.rd()*f*2)},uv,p);}`}re=new X(Z,ee,g,100,50,"attribute vec3 a_p;void main(){gl_Position=vec4(a_p,1.0);}",`uniform sampler2D cxt;vec2 p;void main(){vec2 uv=(gl_FragCoord.xy/vec2(${r(Z)},${r(ee)}));uv.y=1.0-uv.y;uv.x*=${r(V)};`+ue+`float ss=SN(uv,1.0,${r(A)});vec4 c=drbr(uv,cxt,ss>0.5?0.05:0.0,0.0,true);if(ss>0.5){c=bo(c,c);}gl_FragColor=c;}`),re.setUniformSampler2D("cxt",1,O(Q)),re.render(),Q.drawImage(re.c,0,0,1,1),x=h.rc([.333333,.666667,.5]),w=h.rc([.333333,.666667,.5]),re=new X(Z,ee,g,100,50,"attribute vec3 a_p;void main(){gl_Position=vec4(a_p,1.0);}",`\nuniform sampler2D cxt,t,tex;void main(){vec2 og=(gl_FragCoord.xy/vec2(${r(Z)},${r(ee)}));og.y=1.0-og.y;vec2 uv=og;uv.x*=${r(V)};float dx=uv.x-${r(x*V)},dy=uv.y-${r(w)};float a=atan(dy,dx);float dis=pow(distance(uv,vec2(${r(x*V)},${r(w)})),${r(R)});uv=og;vec4 c;if(${r(_)}<0.33333){c=drbr(uv,cxt,${r(1)}*dis,a,true);}else if(${r(_)}<0.66667){c=drbr(uv,cxt,${r(1)}*dis,a+1.5708,true);}else{c=br(uv,cxt,${r(.3)}*dis);}c=bo(c,c);vec2 st=uv+FN(uv,4.0,4.0)*0.05;vec4 n=mix(vec4(vec3(1.0),1.0),vec4(vec3(0.95),1.0),(SN(st,1500.0,1.0)+SN(st,1.0,2000.0)));n=bm(c,n,1.0);n=bo(n,mix(texture2D(t,uv),vec4(vec3(0.5),1.0),SN(uv,8.0,10.0)*0.5+0.25));vec4 texx=texture2D(tex,uv);n=bo(n,texx);n=lv(n,0.05,1.1,0.95);gl_FragColor=n;}`),re.setUniformSampler2D("t",0,O(ne)),re.setUniformSampler2D("tex",3,O(ve)),re.setUniformSampler2D("cxt",1,O(Q)),re.render(),Q.drawImage(re.c,0,0,1,1)}();
This feels familiar But I can't figure out why Have I been here before Or was it a dream I remember this feeling I have felt this before Have I stepped in a time machine Gone warp speed back to....... when And just like that, the feeling is gone The memory was sweet, I want it back But I never did figure out what it was. (This is a generative algorithm written completely with code in Javascript and GLSL.)
(function(){'use strict';var c=Math.floor;let d=tokenData.hash;let e=new class{constructor(){this.useA=!1;let a=function(e){let f=parseInt(e.substr(0,8),16),g=parseInt(e.substr(8,8),16),h=parseInt(e.substr(16,8),16),i=parseInt(e.substr(24,8),16);return function(){f|=0,g|=0,h|=0,i|=0;let a=0|(0|f+g)+i;return i=0|i+1,f=g^g>>>9,g=0|h+(h<<3),h=h<<21|h>>>11,h=0|h+a,(a>>>0)/4294967296}};this.prngA=new a(d.substr(2,32)),this.prngB=new a(d.substr(34,32));for(let a=0;1e6>a;a+=2)this.prngA(),this.prngB()}rd(){return this.useA=!this.useA,this.useA?this.prngA():this.prngB()}rn(c,a){return c+(a-c)*this.rd()}ri(d,a){return c(this.rn(d,a+1))}rc(a){return a[this.ri(0,a.length-1)]}},a=c(e.rn(0,1e6));const b=["#264653","#2A9D8F","#E9C46A","#F4A261","#E76F51","#8d99ae","#ef233c","#d90429","#588157","#344e41","#dad7cd","#364351","#a99989","#ba955b","#6f7a96","#b95173","#d03e3a","#e17f36","#a7758f","#869e73","#cb9e42","#22364a","#94151e","#c68c76","#e9b353","#979d39","#425060","#134c51","#047a7d","#8d7e4c","#c4a586","#a11f5d","#752331","#e07270","#486553","#ab7f8b","#eb942e","#4d879b","#21527c","#1d3663","#63625c","#b8302d","#e29578"];let f=!1;/Android|webOS|iPhone|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)&&(f=!0);let g,h,i,j=function(a,b){return c(a*b)/b},k=e.rd()<1/30,l=e.rd(),m=e.ri(2,10),n=e.rc(["#79716a","#c6bfba","#79716a","#c6bfba","#333333",150*e.rd()+53,150*e.rd()+53]),o=.5>e.rd(),p=o?j(30*(e.rd()*e.rd())+3,10):j(1.5*e.rd()+3,10),q=j(3*(e.rd()*e.rd())+1,10);window.setup=()=>{f&&pixelDensity(1),i=pixelDensity();let d=.75;windowHeight>windowWidth/d?(g=windowWidth,h=g/d):(h=windowHeight,g=h*d);let j=createCanvas(g*i,h*i);j.id("p5canv");let r=document.getElementById("p5canv");r.style.width=g+"px",r.style.height=h+"px",g*=i,h*=i;let u=[];for(let a=0;a<m;a++)u.push(e.rc(b));u.push("#ffffff");let v,w=`precision highp float;varying vec2 vPos;`,y=createGraphics(g,h);y.pixelDensity(i),y.background(n),y.ellipseMode(CENTER),y.noStroke();let x,z=e.ri(.08*g,.15*g),A=function(a){a.fill(k?e.rc([1,0,100*e.rd()+156,100*e.rd()+156,255*e.rd()]):e.rc(u))},B=1e3;if(.3<l){x=2*z;for(let a=0;a<B;a++)A(y),y.ellipse(e.ri(x,g-x),e.ri(x,h-x),z)}else if(.25<l){let a=.4*(e.rd()*h);.5>e.rd()&&(a=1-a);let b=h-a,c=g/e.ri(4,2);for(let d=0;d<B;d++){A(y);let d=e.rd()*g,f=lerp(a,b,d/g);y.ellipse(d,f+(2*e.rd()-1)*c,z)}}else if(.1<l){x=.15*(e.rd()*h)+.2*h;for(let a=0;a<B;a++)A(y),y.ellipse(e.ri(0,g),e.ri(x,h-x),z)}else if(.05<l){x=.3*(e.rd()*g)+.15*g;for(let a=0;a<B;a++)A(y),y.ellipse(e.ri(x,g-x),e.ri(0,h),z)}else{x=2.5*z;for(let a=0;a<B;a++)A(y),y.ellipse(e.ri(0,g),e.ri(0,h),z)}let C=createGraphics(g,h);C.background(255/2),C.strokeWeight(g/1500),C.noFill();for(let a=0;1e3>a;a++){C.stroke(e.ri(255/2-50,255/2+50)),C.beginShape();let a=e.ri(0,g),b=e.ri(0,h);for(let c=0;100>c;c++){let c=min(max(0,a+e.ri(-g/50,g/50)),g),d=min(max(0,b+e.ri(-h/50,h/50)),h);C.curveVertex(c,d),a=c,b=d}C.endShape()}y.blendMode(OVERLAY),y.image(C,0,0);let t=createGraphics(1.2*z,1.2*z);t.ellipseMode(CENTER),t.noStroke();let D=15;y.imageMode(CENTER);for(let a=0;300>a;a++)t.clear(),t.fill(e.ri(255/2-D,255/2+D)),t.ellipse(t.width/2,t.height/2,z),y.blendMode(OVERLAY),y.image(t,e.rd()*g,e.rd()*h);let E=createGraphics(g,h,WEBGL);E.pixelDensity(i),v=w+(`float H=0.`+a+`;float H2=H;vec4 drbr(vec2 uv,sampler2D ug,float s,float t,bool cbo){vec4 c=texture2D(ug,uv);vec2 ccss=vec2(cos(t),sin(t))*vec2(s);for(float i=0.0;i<=1.0;i+=(1.0/${100}.0)){c+=texture2D(ug,uv+ccss*(cbo?(i-0.5):i));}return c/${100}.0;}float N21(vec2 p){vec3 p3=fract(vec3(p.xyx)*H2);p3+=dot(p3,p3.yzx+33.33);return fract((p3.x+p3.y)*p3.z);}float SN(vec2 uv,float x,float y){uv=uv*vec2(x,y);vec2 lv=fract(uv),id=floor(uv);lv=lv*lv*(3.-2.*lv);float bl=N21(id),br=N21(id+vec2(1, 0)),b=mix(bl,br,lv.x),tl=N21(id+vec2(0,1)),tr=N21(id+vec2(1,1)),t=mix(tl,tr,lv.x);return mix(b,t,lv.y);}float FN(vec2 uv,float e){float c=SN(uv,pow(2.0,e),pow(2.0,e)),div=1.0;for(float i=0.0;i<12.0;i++){float s=(1.0/pow(2.0,i));c+=SN(uv,pow(2.0,e+i),pow(2.0,e+i))*s;div+=s;}c/=div;return c;}vec4 bm(vec4 b,vec4 l,float o){return (b*l*o+b*(1.0-o));}float bm(float b,float l,float o){return (b*l*o+b*(1.0-o));}float bs(float b,float l){return 1.0-((1.0-b)*(1.0-l));}vec4 bs(vec4 b,vec4 l){return vec4(bs(b.r,l.r),bs(b.g,l.g),bs(b.b,l.b),min(b.a+l.a,1.0));}float bo(float b,float l){return b<0.5?(2.0*b*l):(1.0-2.0*(1.0-b)*(1.0-l));}vec4 bo(vec4 b,vec4 l){return vec4(bo(b.r,l.r),bo(b.g,l.g),bo(b.b,l.b),min(b.a+l.a,1.0));}vec3 lv(vec3 c,float i,float g,float a){return pow(min(max(c-vec3(i),vec3(0.0))/(vec3(a)-vec3(i)),vec3(1.0)),vec3(1.0/g));}vec4 lv(vec4 c,float i,float g,float a){return vec4(lv(vec3(c.r,c.g,c.b),i,g,a),c.a);}float lv(float c,float i,float g,float a){return lv(vec3(c),i,g,a).r;}float th(float c,float t){return(c<t?0.0:1.0);}`)+`uniform vec2 r;uniform sampler2D l,t;uniform float pr,bsz,ns,rep,m;uniform bool nt,cen;void main(){vec2 uv=(gl_FragCoord.xy/r.xy)/pr;uv.y=1.0-uv.y;float s=(nt?SN(uv,ns,ns):FN(uv,ns))*6.283185*rep;float sz=1.0;float f=0.1;float m2=m*0.8;if(cen){sz=mix(0.2,sz,smoothstep(m2-f, m2+f, uv.x));sz=mix(sz,0.2,smoothstep(1.0-m2-f,1.0-m2+f,uv.x));sz=mix(0.2,sz,smoothstep(m2-f,m2+f,uv.y));sz=mix(sz,0.2,smoothstep(1.0-m2-f,1.0-m2+f, uv.y));}vec4 c=drbr(uv,l,bsz*sz*(nt?1.0:0.7),s,false);vec4 n=bm(c,mix(vec4(1.0),vec4(0.91,0.87,0.8,1.0),SN(uv,1000.0,1000.0)),1.0);n=bo(n,mix(texture2D(t,uv),vec4(vec3(0.5),1.0),SN(uv,7.0,7.0)));float p=th(FN(uv,8.0)*FN(uv,6.0)*FN(uv,4.0)*1.2,0.5);float q=1.0-th(FN(uv+123.321,8.0)*FN(uv+987.654,6.0)*FN(uv+741.258,4.0)*1.2,0.5);n=bs(n,vec4(vec3(p)*0.5,1.0));n=bm(n,vec4(vec3(q)*0.5+0.5,1.0),1.0);n=lv(n,0.0,0.8,0.95);gl_FragColor=n;}`;let c=E.createShader(w+`attribute vec3 aPosition;void main(){vPos=(gl_Position=vec4(aPosition,1.0)).xy;}`,v);E.shader(c),[["r",[g,h]],["pr",i],["l",y],["t",C],["bsz",z/g],["ns",p],["nt",o],["rep",q],["cen",.3<l],["m",x/g]].map(a=>c.setUniform(a[0],a[1])),E.quad(-1,-1,1,-1,1,1,-1,1),image(E,0,0),noLoop()}})();
Sudan Omdurman Brown dust, hot air Broken system, broken roads Sweet sandalwood incense rising in smoke Ladies wrapped in every color and every pattern Morning milk tea with cookies out under the mango tree Hopeful graffiti of revolution on every street wall A thousand guests, a million cups of coffee The two Niles converging at one point Mixing, sorting, moving on North I will leave for my home soon But I won't forget Omdurman Sudan This piece was made while I was visiting Sudan and during the time I started meetings to build a school using the charity money collected from all the amazing collectors of Sudfah. I was inspired by the contrast between the ubiquitous dirt and broken system of Sudan and the beautiful colorful culture and people. The colorful forms represent to me both the long flowy garments of the ladies and the smoke and aromas rising from the unique incense and perfumes of Sudan. 25% of the proceeds will be donated toward building a school for an underdeveloped community in Sudan.
Sudan Omdurman Brown dust, hot air Broken system, broken roads Sweet sandalwood incense rising in smoke Ladies wrapped in every color and every pattern Morning milk tea with cookies out under the mango tree Hopeful graffiti of revolution on every street wall A thousand guests, a million cups of coffee The two Niles converging at one point Mixing, sorting, moving on North I will leave for my home soon But I won't forget Omdurman Sudan This piece was made while I was visiting Sudan and during the time I started meetings to build a school using the charity money collected from all the amazing collectors of Sudfah. I was inspired by the contrast between the ubiquitous dirt and broken system of Sudan and the beautiful colorful culture and people. The colorful forms represent to me both the long flowly garments of the ladies and the smoke and aromas rising from the unique incense and perfumes of Sudan.
(function(){'use strict';var c=Math.floor;let d=tokenData.hash;let e=new class{constructor(){this.useA=!1;let a=function(e){let f=parseInt(e.substr(0,8),16),g=parseInt(e.substr(8,8),16),h=parseInt(e.substr(16,8),16),i=parseInt(e.substr(24,8),16);return function(){f|=0,g|=0,h|=0,i|=0;let a=0|(0|f+g)+i;return i=0|i+1,f=g^g>>>9,g=0|h+(h<<3),h=h<<21|h>>>11,h=0|h+a,(a>>>0)/4294967296}};this.prngA=new a(d.substr(2,32)),this.prngB=new a(d.substr(34,32));for(let a=0;1e6>a;a+=2)this.prngA(),this.prngB()}rd(){return this.useA=!this.useA,this.useA?this.prngA():this.prngB()}rn(c,a){return c+(a-c)*this.rd()}ri(d,a){return c(this.rn(d,a+1))}rc(a){return a[this.ri(0,a.length-1)]}},a=c(e.rn(0,1e6));const b=["#264653","#2A9D8F","#E9C46A","#F4A261","#E76F51","#8d99ae","#ef233c","#d90429","#588157","#344e41","#dad7cd","#364351","#a99989","#ba955b","#6f7a96","#b95173","#d03e3a","#e17f36","#a7758f","#869e73","#cb9e42","#22364a","#94151e","#c68c76","#e9b353","#979d39","#425060","#134c51","#047a7d","#8d7e4c","#c4a586","#a11f5d","#752331","#e07270","#486553","#ab7f8b","#eb942e","#4d879b","#21527c","#1d3663","#63625c","#b8302d","#e29578"];let f=!1;/Android|webOS|iPhone|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)&&(f=!0);let g,h,i,j=function(a,b){return c(a*b)/b},k=e.rd()<1/30,l=e.rd(),m=e.ri(2,10),n=e.rc(["#79716a","#c6bfba","#79716a","#c6bfba","#333333",150*e.rd()+53,150*e.rd()+53]),o=.5>e.rd(),p=o?j(30*(e.rd()*e.rd())+3,10):j(1.5*e.rd()+3,10),q=j(3*(e.rd()*e.rd())+1,10);window.setup=()=>{f&&pixelDensity(1),i=pixelDensity();let d=.75;windowHeight>windowWidth/d?(g=windowWidth,h=g/d):(h=windowHeight,g=h*d);let j=createCanvas(g*i,h*i);j.id("p5canv");let r=document.getElementById("p5canv");r.style.width=g+"px",r.style.height=h+"px",g*=i,h*=i;let u=[];for(let a=0;a<m;a++)u.push(e.rc(b));u.push("#ffffff");let v,w=`precision highp float;varying vec2 vPos;`,y=createGraphics(g,h);y.pixelDensity(i),y.background(n),y.ellipseMode(CENTER),y.noStroke();let x,z=e.ri(.08*g,.15*g),A=function(a){a.fill(k?e.rc([1,0,100*e.rd()+156,100*e.rd()+156,255*e.rd()]):e.rc(u))},B=1e3;if(.3<l){x=2*z;for(let a=0;a<B;a++)A(y),y.ellipse(e.ri(x,g-x),e.ri(x,h-x),z)}else if(.25<l){let a=.4*(e.rd()*h);.5>e.rd()&&(a=1-a);let b=h-a,c=g/e.ri(4,2);for(let d=0;d<B;d++){A(y);let d=e.rd()*g,f=lerp(a,b,d/g);y.ellipse(d,f+(2*e.rd()-1)*c,z)}}else if(.1<l){x=.15*(e.rd()*h)+.2*h;for(let a=0;a<B;a++)A(y),y.ellipse(e.ri(0,g),e.ri(x,h-x),z)}else if(.05<l){x=.3*(e.rd()*g)+.15*g;for(let a=0;a<B;a++)A(y),y.ellipse(e.ri(x,g-x),e.ri(0,h),z)}else{x=2.5*z;for(let a=0;a<B;a++)A(y),y.ellipse(e.ri(0,g),e.ri(0,h),z)}let C=createGraphics(g,h);C.background(255/2),C.strokeWeight(g/1500),C.noFill();for(let a=0;1e3>a;a++){C.stroke(e.ri(255/2-50,255/2+50)),C.beginShape();let a=e.ri(0,g),b=e.ri(0,h);for(let c=0;100>c;c++){let c=min(max(0,a+e.ri(-g/50,g/50)),g),d=min(max(0,b+e.ri(-h/50,h/50)),h);C.curveVertex(c,d),a=c,b=d}C.endShape()}y.blendMode(OVERLAY),y.image(C,0,0);let t=15;for(let a=0;300>a;a++)y.fill(e.ri(255/2-t,255/2+t)),y.ellipse(e.ri(0,g),e.ri(0,h),z);let D=createGraphics(g,h,WEBGL);D.pixelDensity(i),v=w+(`float H=0.`+a+`;float H2=H;vec4 drbr(vec2 uv,sampler2D ug,float s,float t,bool cbo){vec4 c=texture2D(ug,uv);vec2 ccss=vec2(cos(t),sin(t))*vec2(s);for(float i=0.0;i<=1.0;i+=(1.0/${100}.0)){c+=texture2D(ug,uv+ccss*(cbo?(i-0.5):i));}return c/${100}.0;}float N21(vec2 p){vec3 p3=fract(vec3(p.xyx)*H2);p3+=dot(p3,p3.yzx+33.33);return fract((p3.x+p3.y)*p3.z);}float SN(vec2 uv,float x,float y){uv=uv*vec2(x,y);vec2 lv=fract(uv),id=floor(uv);lv=lv*lv*(3.-2.*lv);float bl=N21(id),br=N21(id+vec2(1, 0)),b=mix(bl,br,lv.x),tl=N21(id+vec2(0,1)),tr=N21(id+vec2(1,1)),t=mix(tl,tr,lv.x);return mix(b,t,lv.y);}float FN(vec2 uv,float e){float c=SN(uv,pow(2.0,e),pow(2.0,e)),div=1.0;for(float i=0.0;i<12.0;i++){float s=(1.0/pow(2.0,i));c+=SN(uv,pow(2.0,e+i),pow(2.0,e+i))*s;div+=s;}c/=div;return c;}vec4 bm(vec4 b,vec4 l,float o){return (b*l*o+b*(1.0-o));}float bm(float b,float l,float o){return (b*l*o+b*(1.0-o));}float bs(float b,float l){return 1.0-((1.0-b)*(1.0-l));}vec4 bs(vec4 b,vec4 l){return vec4(bs(b.r,l.r),bs(b.g,l.g),bs(b.b,l.b),min(b.a+l.a,1.0));}float bo(float b,float l){return b<0.5?(2.0*b*l):(1.0-2.0*(1.0-b)*(1.0-l));}vec4 bo(vec4 b,vec4 l){return vec4(bo(b.r,l.r),bo(b.g,l.g),bo(b.b,l.b),min(b.a+l.a,1.0));}vec3 lv(vec3 c,float i,float g,float a){return pow(min(max(c-vec3(i),vec3(0.0))/(vec3(a)-vec3(i)),vec3(1.0)),vec3(1.0/g));}vec4 lv(vec4 c,float i,float g,float a){return vec4(lv(vec3(c.r,c.g,c.b),i,g,a),c.a);}float lv(float c,float i,float g,float a){return lv(vec3(c),i,g,a).r;}float th(float c,float t){return(c<t?0.0:1.0);}`)+`uniform vec2 r;uniform sampler2D l,t;uniform float pr,bsz,ns,rep,m;uniform bool nt,cen;void main(){vec2 uv=(gl_FragCoord.xy/r.xy)/pr;uv.y=1.0-uv.y;float s=(nt?SN(uv,ns,ns):FN(uv,ns))*6.283185*rep;float sz=1.0;float f=0.1;float m2=m*0.8;if(cen){sz=mix(0.2,sz,smoothstep(m2-f, m2+f, uv.x));sz=mix(sz,0.2,smoothstep(1.0-m2-f,1.0-m2+f,uv.x));sz=mix(0.2,sz,smoothstep(m2-f,m2+f,uv.y));sz=mix(sz,0.2,smoothstep(1.0-m2-f,1.0-m2+f, uv.y));}vec4 c=drbr(uv,l,bsz*sz*(nt?1.0:0.7),s,false);vec4 n=bm(c,mix(vec4(1.0),vec4(0.91,0.87,0.8,1.0),SN(uv,1000.0,1000.0)),1.0);n=bo(n,mix(texture2D(t,uv),vec4(vec3(0.5),1.0),SN(uv,7.0,7.0)));float p=th(FN(uv,8.0)*FN(uv,6.0)*FN(uv,4.0)*1.2,0.5);float q=1.0-th(FN(uv+123.321,8.0)*FN(uv+987.654,6.0)*FN(uv+741.258,4.0)*1.2,0.5);n=bs(n,vec4(vec3(p)*0.5,1.0));n=bm(n,vec4(vec3(q)*0.5+0.5,1.0),1.0);n=lv(n,0.0,0.8,0.95);gl_FragColor=n;}`;let c=D.createShader(w+`attribute vec3 aPosition;void main(){vPos=(gl_Position=vec4(aPosition,1.0)).xy;}`,v);D.shader(c),[["r",[g,h]],["pr",i],["l",y],["t",C],["bsz",z/g],["ns",p],["nt",o],["rep",q],["cen",.3<l],["m",x/g]].map(a=>c.setUniform(a[0],a[1])),D.quad(-1,-1,1,-1,1,1,-1,1),image(D,0,0),noLoop()}})();
0x4bed1d53…271d·#15,453,785·0xe8ba26f9…1718b2
Melissa Wiederrecht ArtworkAddress: delegate call to non-co`DAddress: delegate call to non-co`DAddress: low-level delegate call failedAddress: low-level delegate call failed
(function(){'use strict';var d=Math.floor;function e(a,b,c){var e,f,g,h,k=c.length,m=c[0].length,d=[];for(e=0;e<k;e++)d[e]=1;var n=[];for(e=0;e<k+b+1;e++)n[e]=e;var o=[b,n.length-1-b],p=n[o[0]],q=n[o[1]];for(a=a*(q-p)+p,g=o[0];g<o[1]&&!(a>=n[g]&&a<=n[g+1]);g++);var r=[];for(e=0;e<k;e++){for(r[e]=[],f=0;f<m;f++)r[e][f]=c[e][f]*d[e];r[e][m]=d[e]}var u;for(h=1;h<=b+1;h++)for(e=g;e>g-b-1+h;e--)for(u=(a-n[e])/(n[e+b+1-h]-n[e]),f=0;f<m+1;f++)r[e][f]=(1-u)*r[e-1][f]+u*r[e][f];var v=[];for(e=0;e<m;e++)v[e]=r[g][e]/r[g][m];return v}let f=tokenData.hash;const g=window;let a=new class{constructor(){this.useA=!1;let a=function(e){let f=parseInt(e.substr(0,8),16),g=parseInt(e.substr(8,8),16),h=parseInt(e.substr(16,8),16),i=parseInt(e.substr(24,8),16);return function(){f|=0,g|=0,h|=0,i|=0;let a=0|(0|f+g)+i;return i=0|i+1,f=g^g>>>9,g=0|h+(h<<3),h=h<<21|h>>>11,h=0|h+a,(a>>>0)/4294967296}};this.prngA=new a(f.substr(2,32)),this.prngB=new a(f.substr(34,32));for(let a=0;1e6>a;a+=2)this.prngA(),this.prngB()}rd(){return this.useA=!this.useA,this.useA?this.prngA():this.prngB()}rn(c,a){return c+(a-c)*this.rd()}ri(c,a){return d(this.rn(c,a+1))}rc(a){return a[this.ri(0,a.length-1)]}},b=d(a.rn(0,1e6));const h=["#969c33","#15494d","#037174","#a83a6e","#4d7a8a","#245681","#145ddc","#067d93","#25394b","#a5163e","#4f3d6b","#837445","#ab7815","#637b59","#73473d","#8d41ff","#117a1b","#841563","#d92b4b","#9dc02e","#00ad68","#0026cb","#f50a73","#e1555a","#a5236e"];let i=a.rc(h),j=a.rc(h),k=a.rc([0,1,2]),l=.95<a.rd();l&&(k=3);let m=[["#ffffff","#d0bca8"],["#ffffff","#c8ad92"],["#ffffff","#e4d6c8"],["#2f2f2f","#6a6963"]][k],o=!1;/Android|webOS|iPhone|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)&&(o=!0);let p,r,u,v,w,y,z,A,B,C,t=function(a,b){return d(a*b)/b};a.rd(),a.rd(),a.rd();let D,E=.1>a.rd(),F=1/a.rn(3,7),G=a.rd(),H=t((1-G)/60+.001,1e3),I=d(10*Math.pow(a.rd(),2)+1),J=.5>a.rd(),K=[a.rd(),a.rn(.35001,1),a.rn(.35001,1),a.rn(.35001,1)],L=[a.rd(),a.rd(),a.rd(),a.rd()],M=a.rd(),N=a.rd();D=.75>N?1:.95>N?2:3,.35>=K[0]&&(D=1);let O=a.rd(),P=1==D?a.rd():.6,Q=.99<a.rd();l&&(Q=!1),g.setup=()=>{console.time(),o&&pixelDensity(1),u=pixelDensity(),p=windowWidth,r=d(p/1.4142);let c=createCanvas(p*u,r*u);c.id("p5canv");let f=document.getElementById("p5canv");f.style.width=p+"px",f.style.height=r+"px",p*=u,r*=u,l?background("#000000"):background("#FFFFFF");let g,h=function(a){return[red(color(a))/255,green(color(a))/255,blue(color(a))/255,alpha(color(a))/255]},k=`float H=0.`+b+`;float H2=H;float N21(vec2 p){vec3 p3=fract(vec3(p.xyx)*H2);p3+=dot(p3,p3.yzx+33.33);return fract((p3.x+p3.y)*p3.z);}float SN(vec2 uv,float x,float y){uv=uv*vec2(x,y);vec2 lv = fract(uv),id=floor(uv);lv=lv*lv*(3.-2.*lv);float bl=N21(id),br=N21(id+vec2(1,0)),b=mix(bl,br,lv.x),tl=N21(id+vec2(0,1)),tr=N21(id+vec2(1,1)),t=mix(tl,tr,lv.x);return mix(b,t,lv.y);}float FN(vec2 uv,float e){float c=SN(uv,pow(2.0,e),pow(2.0,e)),div=1.0;for(float i=0.0;i<12.0;i++){float s=(1.0/pow(2.0,i));c+=SN(uv,pow(2.0,e+i),pow(2.0,e+i))*s;div+=s;}c/=div;return c;}vec4 bm(vec4 b,vec4 l,float o){return (b*l*o+b*(1.0-o));}float bm(float b,float l,float o){return (b*l*o+b*(1.0-o));}float bs(float b,float l){return 1.0-((1.0-b)*(1.0-l));}vec4 bs(vec4 b,vec4 l){return vec4(bs(b.r,l.r),bs(b.g,l.g),bs(b.b,l.b),min(b.a+l.a,1.0));}float bo(float b,float l){return b<0.5?(2.0*b*l):(1.0-2.0*(1.0-b)*(1.0-l));}vec4 bo(vec4 b,vec4 l){return vec4(bo(b.r,l.r),bo(b.g,l.g),bo(b.b,l.b),min(b.a+l.a,1.0));}vec3 lv(vec3 c,float i,float g,float a){return pow(min(max(c-vec3(i),vec3(0.0))/(vec3(a)-vec3(i)),vec3(1.0)),vec3(1.0/g));}vec4 lv(vec4 c,float i,float g,float a){return vec4(lv(vec3(c.r,c.g,c.b),i,g,a),c.a);}float lv(float c,float i,float g,float a){return lv(vec3(c),i,g,a).r;}float th(float c,float t){return(c<t?0.0:1.0);}vec4 br(vec2 uv,sampler2D ug,float s){vec2 r=vec2(s);vec4 c=texture2D(ug,uv);if(s<=0.0){return c;}else{for(float d=0.0; d<6.283185;d+=0.09){vec2 ccss=vec2(cos(d),sin(d))*r;for(float i=0.33333;i<=1.0;i+=0.33333){vec2 p=uv+ccss*i;if(p.x>0.0&&p.x<1.0){c+=texture2D(ug,p);}}}return c/120.0;}}`,n=`precision highp float;varying vec2 vPos;`,q=n+`attribute vec3 aPosition;void main(){vPos=(gl_Position=vec4(aPosition,1.0)).xy;}`;{if(v=createGraphics(p,r),v.pixelDensity(u),v.background("#000000"),v.noFill(),v.stroke(255),v.strokeWeight(v.width/400),E){B=[[2*-p/5,r/2],[-p/5,r/2],[0,r/2],[p/5,r/2]];for(let b=0;b<20*G+4;b++)B.push([a.rn(p/4,3*p/4),a.rn(r/10,9*r/10)]);B=B.concat([[p-p/5,r/2],[p,r/2],[p+p/5,r/2]])}else{F=r*(1-F);for(let b=!0;!0==b;){B=[[2*-p/5,F],[-p/5,F],[0,F]];let c=20*G+5;for(let b=0;b<c;b++)if(.5<a.rd()&&B.push([b*p/c,F]),.7<a.rd()){let d=p/a.rn(6,12),e=a.rn(2,7);for(let f=0;f<e;f++)B.push([b*p/c+a.rn(-d,d),a.rn(F,r-F)])}B=B.concat([[p,F],[p+p/5,F]]);for(let a=0;a<B.length;a++)B[a][1]!=F&&(b=!1)}}let b=p*H,c=1.5*b;for(var s,x=0;1>x;x+=5e-5)s=e(x,2,B),v.beginShape(),v.vertex(s[0],s[1]),v.vertex(s[0]-b,s[1]+c),v.endShape(),.92<O&&(v.beginShape(),v.vertex(s[0]-2*b,s[1]+2*c),v.vertex(s[0]-3*b,s[1]+3*c),v.endShape())}{let c=p/9,d=createGraphics(c,c,WEBGL);if(d.pixelDensity(u),g=n+k+`uniform vec2 r;uniform float d,c,pd;void main(){H2=H+d;vec2 uv=(gl_FragCoord.xy/r.xy)/pd;float n=SN(uv,4.0,4.0);n=(0.6*c-distance(uv+n*0.1,vec2(0.5)));n=lv(n,0.15,1.5,0.23);n=th(n, 0.5);H2=H;gl_FragColor=vec4(vec3(1.0),n);}`,A=d.createShader(q,g),d.shader(A),A.setUniform("r",[d.width,d.height],A.setUniform("pd",u)),J)for(let b=0;b<I;b++)A.setUniform("d",a.rd()),A.setUniform("c",a.rn(.35,1)),d.quad(-1,-1,1,-1,1,1,-1,1),v.image(d,a.rd()*p-c/2,a.rn(0,r/2)-c/2)}y=createGraphics(p,r,WEBGL),y.pixelDensity(u),g=n+k+`uniform vec2 r;uniform sampler2D l,mn;uniform vec4 c1,c2;uniform float cc,np,ns,bns,fd,pr,lw,d,lay;uniform bool ld;void main(){vec2 uv=(gl_FragCoord.xy/r.xy)/pr;uv.y=1.0-uv.y;H2=H+d;vec4 c=vec4(vec3(1.0-texture2D(l,uv)),1.0);if(lay>0.0){float n;if(np>0.35){n=bm(FN(uv+6.987,4.0),br(uv,mn,FN(uv,3.0)*bns).r,1.0);}else{n=smoothstep(0.0,1.0,lv(smoothstep(0.0,1.0,FN(uv,ns)),0.5,1.5,1.0));}vec4 b=(n>0.0)?(lv(br(uv,l,n)*2.0,0.0,1.0,0.7)+br(uv,l,n*0.01)*lw):(vec4(vec3(1.0-c.rgb),1.0)),mc=mix(c1,c2,(cc<0.6)?uv.x:uv.y);c=(b.r<0.5)?mix(ld?vec4(vec3(0.0),1.0):vec4(1.0),mc,b.r*2.0):mix(mc,ld?vec4(1.0):vec4(vec3(0.0),1.0),(b.r-0.5)*2.0);}H2=H;gl_FragColor=lv(c,0.1,1.0,1.0);}`,A=y.createShader(q,g),y.shader(A),[["r",[p,r]],["pr",u],["c1",h(i)],["c2",h(j)],["cc",M],["fd",a.rn(.01,.06)],["ld",l],["lw",P],["lay",D]].map(a=>A.setUniform(a[0],a[1]));{z=createGraphics(p,r),l?z.background("#000000"):z.background("#FFFFFF"),z.stroke("#eeede9"),z.blendMode(MULTIPLY),z.noFill(),z.strokeWeight(r/600);for(let b=0;300>b;b++){z.beginShape();let b=a.rn(0,p),c=a.rn(0,r);z.vertex(b,c),z.vertex(b+a.rn(-p/50,p/50),c+a.rn(-r/40,r/40)),z.endShape()}}{C=createGraphics(p,r,WEBGL),C.pixelDensity(u),g=n+k+`uniform vec2 r;uniform vec4 b1,b2;uniform float fd,sp,pr;uniform bool ld;void main(){vec2 uv=(gl_FragCoord.xy/r.xy)/pr;vec2 st=uv/1.95+0.025;st+=(FN(st,4.0))*fd;vec4 c=vec4(mix(b1.rgb,b2.rgb,(SN(st,3000.0,1.0)+SN(st,1.0,3000.0)+SN(uv,3000.0,3000.0)*2.0)/4.0),1.0);c=ld?bs(c,(FN(uv,sp)>0.8)?b1:vec4(0.0)):bm(c,(FN(uv,sp)>0.8)?b2:vec4(1.0),1.0);gl_FragColor=lv(c,0.1,1.0,1.0);}`;let b=C.createShader(q,g);C.shader(b),[["r",[p,r]],["pr",u],["b1",h(m[0])],["b2",h(m[1])],["fd",a.rn(.01,.06)],["ld",l],["sp",a.rn(7,9)]].map(a=>b.setUniform(a[0],a[1])),C.quad(-1,-1,1,-1,1,1,-1,1)}w=createGraphics(p,r),w.background("#000000");let N=1;for(let b=0;b<D;b++){let c;if(.4>L[b]){let b=a.rn(30,80),d=a.rn(p/40,p/10),e=d+p/50;w.noStroke(),w.fill(255);for(let c=0;c<b;c++)w.ellipse(a.rd()*p,a.rd()*r,a.rn(d,e));c=d/p}else if(.6>L[b]){w.stroke(255),w.noFill();let b=a.rn(p/300,p/50);w.strokeWeight(b);let d=a.rn(7,30);w.beginShape();for(let b=0;b<d;b++)w.curveVertex(a.rd()*p,a.rd()*r);w.endShape(),c=b/p}else if(.8>L[b]){let b=a.rn(50,350),d=a.rn(p/100,p/30),e=d+p/100;w.noStroke(),w.fill(255);for(let c=0;c<b;c++)w.ellipse(a.rd()*p,a.rd()*r,a.rn(d,e));c=d/p}else{let b=a.rn(5,30);w.stroke(255),w.noFill();let d=a.rn(p/400,p/70);w.strokeWeight(d);let e=a.rn(p,p/5),f=a.rn(5,20),g=.7<a.rd();for(let c=0;c<b;c++){let b=a.rd()*p,c=a.rd()*r;g&&(f=a.rn(5,20)),w.beginShape();for(let d=0;d<f;d++)w.curveVertex(b+a.rd()*e-e/2,c+a.rd()*e-e/2);w.endShape()}c=d/p}c<N&&(N=c)}if([["d",a.rd()],["l",v],["mn",w],["np",K[0]],["ns",a.rn(2,4)],["afn",a.rd()],["bns",min(a.rn(.04,.06),N)]].map(a=>A.setUniform(a[0],a[1])),y.quad(-1,-1,1,-1,1,1,-1,1),l?blendMode(SCREEN):blendMode(MULTIPLY),image(y,0,0),l&&(image(y,0,0),image(y,0,0)),image(C,0,0),image(z,0,0),Q){blendMode(MULTIPLY),image(C,0,0),image(C,0,0),blendMode(BLEND),C=createGraphics(p,r,WEBGL),C.pixelDensity(u),g=n+k+`uniform vec2 r;uniform float pr;uniform sampler2D l;void main(){vec2 uv=(gl_FragCoord.xy/r.xy)/pr;uv.y=1.0-uv.y;gl_FragColor=vec4(vec3(lv(texture2D(l,uv).r,0.0,1.0,0.8)),1.0);}`;let a=C.createShader(q,g);C.shader(a),[["r",[p,r]],["pr",u],["l",get()]].map(b=>a.setUniform(b[0],b[1])),C.quad(-1,-1,1,-1,1,1,-1,1),image(C,0,0)}console.timeEnd(),noLoop()}})();
Sudfah (Arabic for "happy accident") is a generative collection celebrating the beauty that can emerge from chaos, mistakes, and accidents. A single calligraphic line intends to tell one story (sometimes wandering and confused in its own right, but always meandering from one side to the other). Digital liquid is spilled upon it and takes the ink in directions that are unexpected, uncontrolled, and tell a much more interesting story than the one the line intended.... and often more beautiful.