0xcb97…01a7

All memos sent from and to 0xcb97…01a7.

0xcb97a05a…01a7·#22,426,057·0xaa9af020…5828cd
This series begins with AI-generated images of nature, flowers, textures, and familiar scenes, then breaks them down using computer vision to map how the image flows. I redraw each piece line by line, following directional vectors, and limit the palette to just a few tones. The result blends structured geometry with organic motion, revealing depth through contrast and line. It's a way of reinterpreting the familiar-seeing not what something is, but how it moves, how it feels, and how perception itself can shift.
e{let b=t-r;switch(f=n>.5?b/(2-t-r):b/(t+r),t){case e:c=(a-d)/b+(a<d?6:0);break;case a:c=(d-e)/b+2;break;case d:c=(e-a)/b+4}c/=6}return[c,f,n]}function hslToRgb(e,a,d){function c(e,a,d){return d<0&&(d+=1),d>1&&(d-=1),d<1/6?e+6*(a-e)*d:d<.5?a:d<2/3?e+(a-e)*(2/3-d)*6:e}if(0===a)r=g=b=d;else{let f=d<.5?d*(1+a):d+a-d*a,t=2*d-f;r=c(t,f,e+1/3),g=c(t,f,e),b=c(t,f,e-1/3)}return[Math.round(255*r),Math.round(255*g),Math.round(255*b)]}function adjustLightness(e,a,d,c){let[f,t,r]=rgbToHsl(e,a,d);return r=Math.min(Math.max(0,r+c),1),hslToRgb(f,t,r)}function displayBuffer(e){let a=createImage(dflW,dflH);a.loadPixels();for(let d=0;d<dflH;d++)for(let c=0;c<dflW;c++){let f=c+d*dflW;a.set(c,d,color(e[f]))}a.updatePixels(),image(a,0,0,canvasW,canvasH)}function displayOption(e){background(229,211,175,255),1===e?(window.location=window.location.pathname,reloadDisplay()):2===e?displayBuffer(blurX):3===e?displayBuffer(blurY):4===e&&displayBuffer(gridArr)}
escent Pearl"],[168,165,146,"Iridescent Silver"],[144,142,127,"Iridescent German Silver"],[80,86,84,"Iridescent Pewter"],[67,73,71,"Graphite Grey"],[36,42,40,"Lamp Black"],[229,211,175,"Unbleached Titanium"],[181,191,180,"Cerulean Grey"],[193,198,191,"Neutral Grey Pale"],[146,163,170,"Neutral Grey Light"],[120,137,145,"Neutral Grey Medium"],[86,104,118,"Neutral Grey Deep"],[104,107,88,"Turkey Umber Pale"],[39,43,42,"Mars Black"],[44,50,50,"Ivory Black"],[27,31,30,"Intense Carbon Black"],[233,227,205,"Neutral White"],[253,252,247,"Titanium-Zinc White"]];const e=[[24,25,26,98,99,100,101,55,48,34,35,22,1,2],[23,101,24,84,63,48,83,3,21,39,73,88,97,69,46,37,2,9,25,16,10,33,52,41],[97,98,92,54,25,44,47,28,24,12,99],[10,24,53,84,16,56,97,5,1,61,99,21,98,33,43,63,58,86,25],[60,64,69,3,4,101,2,21,12,88,50,8,59,95,44,69,95,76],[39,52,12,24,3,16,28,49,2,101,44,33,33,69,77,7,43,28],[88,89,97,98,99,100,101,90,91,92,93,94,95,86,85,84,69,58,59,63],[48,98,85,2,38,9,100,3,5,14,90,99,97],[100,62,49,25,24,47,36,23,56,12,84,38,13,99,52,53],[25,15,26,19,17,16,6,5,84,101,100,92,94,95,88,99,98,69,46,35,48,36,37,58,55],[89,26,41,62,15,2,61,39,3,22,45,51,56,4,44],[100,21,91,10,1,25,2,62,15,81,74,8,18,29,60,53,38,39,56,47,12,55],[89,4,23,72,58,101,15,100,6,38,52,33,99],[12,101,10,4,60,82,68,56,50,58,72,93,35,21,83,34,52,53,91,22,89,1,34,25],[24,2,21,93,10,91,61,87,49,53,46,56,36,58,47,99,81,15,57,9,26,54,94,12]];paletteNames=["Eros","Gaia","Thoth","Ra","Varuna","Ishtar","Nyx","Anubis","Neptune","Enyo","Ceres","Helios","Vulcan","Elysia","Vesta"],selectedPalette=R.random_int(0,e.length-1),convertIndexToPalette(e[selectedPalette]),border=0;let a=getURLParams(),d=void 0!==a.highres&&Number(a.highres);console.log("Apophenies by Cory Haber"),paintCanvasW=3456,paintCanvasH=4608,browserRatio=WIDTH/HEIGHT,dflW=675,dflH=900,bufferRatio=paintCanvasW/paintCanvasH,browserRatio>bufferRatio?(M=HEIGHT/paintCanvasH,canvasW=HEIGHT/paintCanvasH*paintCanvasW,canvasH=HEIGHT):(M=WIDTH/paintCanvasW,canvasW=WIDTH,canvasH=WIDTH/paintCanvasW*paintCanvasH),M*=paintCanvasH/dflH;paintRadius=8,circleCounter=0;drawSteps=20,strokeLength=1.55,maxPerStep=35;let c=R.random_choice([1,2]),f=R.random_int(4,8);opacity=245,opactiyStreak=230,maxStreakLen=6;let t=R.random_choice([150,350,550,650,750,1e3]),r=[130,170,210,250,300,350],n=R.random_int(0,r.length-1),b=R.random_choice([-2,-1,0,1,2]),o=r[n],l=r[b+n<0?0:b+n>r.length-1?r.length-1:b+n],i=R.random_choice([100,150,200,250,300,400]),s=R.random_choice([150,200,230,250]),u=6+(o+l-300)/400*4;resolution=2,nameIndex=0;paletteNames[selectedPalette];pd=!1===d?pixelDensity():d,pixelDensity(pd),pdb=1,gridArr=new Float32Array(dflH*pdb*(dflW*pdb)),createCanvas(canvasW,canvasH),buffer=createGraphics(dflW,dflH),buffer.pixelDensity(pdb),primaryBuffer(t,o,l,i,s),gridPoints(10.2,f),scharr(gridArr),gaussBlur_4(scharrX,blurX,dflW,dflH,u),gaussBlur_4(scharrY,blurY,dflW,dflH,u),gridOfAngles(blurX,blurY,grid,resolution),precalculatePalette(),preprocessStrokes(strokes,buffer,c),colorNames=Array.from(colorsUsed);usedPaletteColors.filter(((e,a,d)=>a===d.findIndex((a=>JSON.stringify(a)===JSON.stringify(e)))));colorSort(1),sortedNames=sortedColorName(),background(229,211,175,255),drawStrokes()}function primaryBuffer(e,a,d,c,f){let t,r,n,b,o,l,i,s,u,p,x,h,m,g,k,y;palette.sort(((e,a)=>luminance(a)-luminance(e))),buffer.background(255),buffer.noStroke();for(let h=0;h<e;h++)t=R.random_int(0,dflW),r=R.random_int(0,dflH),n=R.random_int(10,a),b=R.random_int(10,d),o=R.random_int(0,c),l=R.random_int(0,palette.length-1),i=palette[l][0],s=palette[l][1],u=palette[l][2],p=t-n/2,x=r-b/2,buffer.fill(i,s,u,f),buffer.rect(p,x,n,b,o),150===f&&buffer.ellipse(t,r,n,b);buffer.loadPixels(),index=0;for(let e=0;e<dflH;e++){let a=e*dflW*pdb*pdb;for(let e=0;e<dflW;e++)h=4*(e*pdb+a),m=buffer.pixels[h],g=buffer.pixels[h+1],k=buffer.pixels[h+2],y=(m+g+k)/3|0,gridArr[index++]=y}}function preprocessStrokes(e,a,d){pointsWithColor.length=e.length;for(let c=0;c<e.length;c++)pointsWithColor[c]=getColor(int(e[c].x),int(e[c].y),a,colorsUsed,d)}function precalculatePalette(){for(let e=0;e<palette.length;e++){let a=palette[e][0],d=palette[e][1],c=palette[e][2];preCalculatedSq[e]=[a*a,d*d,c*c]}}function getColor(e,a,d,c,f){let t=4*(e*pdb+a*dflW*pdb*pdb),r=d.pixels[t],n=d.pixels[t+1],b=d.pixels[t+2],o=[];for(let e=0;e<palette.length;e++){let a=sq(palette[e][0]-r)+sq(palette[e][1]-n)+sq(palette[e][2]-b);o.push({dist:a,color:palette[e]})}o.sort(((e,a)=>e.dist-a.dist));let l=R.random_int(0,f),i=o[l].color,s=i[0],u=i[1],p=i[2],x=i[3],h=s+u+p;return c.add(x),colorsScore.add([x,h]),usedPaletteColors.push([s,u,p,x]),[e,a,s,u,p,x,l,h]}function gridPoints(e,a){for(let d=0;d<=dflH;d+=e)for(let c=0;c<=dflW;c+=e){let e=c+R.random_num(-a,a),f=d+R.random_num(-a,a),t=createVector(e,f);append(strokes,t)}}function gridOfAngles(e,a,d,c){let f;for(let t=0;t<dflH;t+=c)for(let r=0;r<dflW;r+=c){let n=r+t*dflW,b=r/c+t/c*(dflW/c),o=e[n],l=a[n];f=degrees(atan2(l,o))+90;let i=radians(f);d[b]=i}}function smoothAngles(){for(let e=1;e<grid.length-1;e++){let a=(grid[e-1]+grid[e]+grid[e+1])/3;avgGrid.push(a)}}async function drawStrokes(){if(nameIndex<sortedNames.length){const e=[0,30,60,90,120,150,180,210,240,270,300,330];let a=[];for(let d=0;d<pointsWithColor.length;d++){let c,f,t=pointsWithColor[d],r=color(t[2],t[3],t[4],opacity);if(noStroke(),t[5]===sortedNames[nameIndex]){for(let d=0;d<drawSteps;d++){let d=int(t[0]),n=int(t[1]),b=int(t[0]/resolution),o=int(t[1]/resolution);if(d>border&&d<dflW-border&&n>border&&n<dflH-border){let l=grid[b+o*(dflW/resolution)];c=strokeLength*cos(l),f=strokeLength*sin(l),t[0]+=c,t[1]+=f;let i=l<0?TWO_PI+l:l;i=degrees(i);let s=e.reduce(((e,a)=>abs(a-i)<abs(e-i)?a:e));noStroke();let u,p,x,h,m,g,k=R.random_int(5,maxPerStep);for(let e=0;e<k;e++)u=R.random_num(0,paintRadius),p=radians(R.random_int(0,360)),x=d+u*cos(p),h=n+u*sin(p),m=R.random_int(1,20),a.push([d*M,n*M]),m<=16?(fill(r),g=R.random_num(.1,1),ellipse(x*M,h*M,g*M,g*M)):paintParticles(x*M,h*M,maxStreakLen,r,s,opactiyStreak),circleCounter++}}beginShape();for(let e=0;e<a.length;e++)noFill(),r.setAlpha(100),stroke(r),strokeWeight(7*M),curveVertex(a[e][0],a[e][1]);a=[],endShape()}}nameIndex++,requestAnimationFrame(drawStrokes)}}function paintParticles(e,a,d,c,f,t){let r=R.random_num(-.01,-.14),n=int(red(c)),b=int(green(c)),o=int(blue(c)),[l,i,s]=adjustLightness(n,b,o,r);fill(l,i,s,t),push(),translate(e,a);let u=R.random_num(.5,1),p=R.random_num(1,d);noStroke(),beginShape();for(let e=0;e<360;e+=30){let a,d,c,t;c=u+R.random_num(-.5,.5),t=radians(e),e===f?(a=(p+c)*cos(t),d=(p+c)*sin(t)):(a=c*cos(t),d=c*sin(t)),curveVertex(a*M,d*M)}endShape(CLOSE),pop()}function colorSort(e){0===e?pointsWithColor.sort(((e,a)=>colorNames.indexOf(e[5])-colorNames.indexOf(a[5]))):1===e?pointsWithColor.sort(((e,a)=>e[7]-a[7])):pointsWithColor.sort(((e,a)=>a[7]-e[7]))}function sortedColorName(){let e=new Set;for(let a=0;a<pointsWithColor.length;a++){let d=pointsWithColor[a][5];e.add(d)}return Array.from(e)}function luminance(e){let[a,d,c]=e;return.299*a+.587*d+.114*c}function genTokenData(e){let a={},d="0x";for(var c=0;c<64;c++)d+=Math.floor(16*Math.random()).toString(16);return a.hash=d,a.tokenId=(1e6*e+Math.floor(1e3*Math.random())).toString(),a}class Random{constructor(){this.useA=!1;let e=function(e){let a=parseInt(e.substr(0,8),16),d=parseInt(e.substr(8,8),16),c=parseInt(e.substr(16,8),16),f=parseInt(e.substr(24,8),16);return function(){a|=0,d|=0,c|=0,f|=0;let e=(a+d|0)+f|0;return f=f+1|0,a=d^d>>>9,d=c+(c<<3)|0,c=c<<21|c>>>11,c=c+e|0,(e>>>0)/4294967296}};this.prngA=new e(tokenData.hash.substr(2,32)),this.prngB=new e(tokenData.hash.substr(34,32));for(let e=0;e<1e6;e+=2)this.prngA(),this.prngB()}random_dec(){return this.useA=!this.useA,this.useA?this.prngA():this.prngB()}random_num(e,a){return e+(a-e)*this.random_dec()}random_int(e,a){return Math.floor(this.random_num(e,a+1))}random_bool(e){return this.random_dec()<e}random_choice(e){return e[this.random_int(0,e.length-1)]}}function gaussBlur_4(e,a,d,c,f){var t=boxesForGauss(f,3);boxBlur_4(e,a,d,c,(t[0]-1)/2),boxBlur_4(a,e,d,c,(t[1]-1)/2),boxBlur_4(e,a,d,c,(t[2]-1)/2)}function boxBlur_4(e,a,d,c,f){for(var t=0;t<e.length;t++)a[t]=e[t];boxBlurH_4(a,e,d,c,f),boxBlurT_4(e,a,d,c,f)}function boxBlurH_4(e,a,d,c,f){for(var t=1/(f+f+1),r=0;r<c;r++){for(var n=r*d,b=n,o=n+f,l=e[n],i=e[n+d-1],s=(f+1)*l,u=0;u<f;u++)s+=e[n+u];for(u=0;u<=f;u++)s+=e[o++]-l,a[n++]=Math.round(s*t);for(u=f+1;u<d-f;u++)s+=e[o++]-e[b++],a[n++]=Math.round(s*t);for(u=d-f;u<d;u++)s+=i-e[b++],a[n++]=Math.round(s*t)}}function boxBlurT_4(e,a,d,c,f){for(var t=1/(f+f+1),r=0;r<d;r++){for(var n=r,b=n,o=n+f*d,l=e[n],i=e[n+d*(c-1)],s=(f+1)*l,u=0;u<f;u++)s+=e[n+u*d];for(u=0;u<=f;u++)s+=e[o]-l,a[n]=Math.round(s*t),o+=d,n+=d;for(u=f+1;u<c-f;u++)s+=e[o]-e[b],a[n]=Math.round(s*t),b+=d,o+=d,n+=d;for(u=c-f;u<c;u++)s+=i-e[b],a[n]=Math.round(s*t),b+=d,n+=d}}function boxesForGauss(e,a){var d=Math.sqrt(12*e*e/a+1),c=Math.floor(d);c%2==0&&c--;for(var f=c+2,t=(12*e*e-a*c*c-4*a*c-3*a)/(-4*c-4),r=Math.round(t),n=[],b=0;b<a;b++)n.push(b<r?c:f);return n}function scharr(e){scharrX=new Float32Array(dflW*dflH),scharrY=new Float32Array(dflW*dflH);let a=dflW;for(let d=1;d<dflH-1;d++)for(let c=1;c<dflW-1;c++){let f=c-1+a*(d-1),t=c+a*(d-1),r=c+1+a*(d-1),n=c-1+a*d,b=c+a*d,o=c+1+a*d,l=c-1+a*(d+1),i=c+a*(d+1),s=c+1+a*(d+1),u=e[f]*kx[0][0]+e[t]*kx[0][1]+e[r]*kx[0][2]+e[n]*kx[1][0]+e[b]*kx[1][1]+e[o]*kx[1][2]+e[l]*kx[2][0]+e[i]*kx[2][1]+e[s]*kx[2][2],p=e[f]*ky[0][0]+e[t]*ky[0][1]+e[r]*ky[0][2]+e[n]*ky[1][0]+e[b]*ky[1][1]+e[o]*ky[1][2]+e[l]*ky[2][0]+e[i]*ky[2][1]+e[s]*ky[2][2];scharrX[d*dflW+c]=u,scharrY[d*dflW+c]=p}}function convertIndexToPalette(e){for(let a=0;a<e.length;a++){let d=paletteSet[e[a]];palette.push(d)}}function delayTime(e){return new Promise((a=>setTimeout(a,e)))}function keyPressed(){83===keyCode&&saveOutput(),49===keyCode&&displayOption(1),50===keyCode&&displayOption(2),51===keyCode&&displayOption(3),52===keyCode&&displayOption(4)}function saveOutput(){delayTime(300).then((()=>save("Apophenies #"+invocation+".jpg")))}function reloadDisplay(){delayTime(500).then((()=>location.reload()))}function rgbToHsl(e,a,d){e/=255,a/=255,d/=255;let c,f,t=Math.max(e,a,d),r=Math.min(e,a,d),n=(t+r)/2;if(t==r)c=f=0;els
ode&&displayOption(4)}function saveOutput(){delayTime(300).then((()=>save("Apophenies #"+invocation+".jpg")))}function reloadDisplay(){delayTime(500).then((()=>location.reload()))}function rgbToHsl(e,a,d){e/=255,a/=255,d/=255;let c,t,f=Math.max(e,a,d),r=Math.min(e,a,d),n=(f+r)/2;if(f==r)c=t=0;else{let b=f-r;switch(t=n>.5?b/(2-f-r):b/(f+r),f){case e:c=(a-d)/b+(a<d?6:0);break;case a:c=(d-e)/b+2;break;case d:c=(e-a)/b+4}c/=6}return[c,t,n]}function hslToRgb(e,a,d){function c(e,a,d){return d<0&&(d+=1),d>1&&(d-=1),d<1/6?e+6*(a-e)*d:d<.5?a:d<2/3?e+(a-e)*(2/3-d)*6:e}if(0===a)r=g=b=d;else{let t=d<.5?d*(1+a):d+a-d*a,f=2*d-t;r=c(f,t,e+1/3),g=c(f,t,e),b=c(f,t,e-1/3)}return[Math.round(255*r),Math.round(255*g),Math.round(255*b)]}function adjustLightness(e,a,d,c){let[t,f,r]=rgbToHsl(e,a,d);return r=Math.min(Math.max(0,r+c),1),hslToRgb(t,f,r)}function displayBuffer(e){let a=createImage(dflW,dflH);a.loadPixels();for(let d=0;d<dflH;d++)for(let c=0;c<dflW;c++){let t=c+d*dflW;a.set(c,d,color(e[t]))}a.updatePixels(),image(a,0,0,canvasW,canvasH)}function displayOption(e){background(229,211,175,255),1===e?(window.location=window.location.pathname,reloadDisplay()):2===e?displayBuffer(blurX):3===e?displayBuffer(blurY):4===e&&displayBuffer(gridArr)}
escent Pearl"],[168,165,146,"Iridescent Silver"],[144,142,127,"Iridescent German Silver"],[80,86,84,"Iridescent Pewter"],[67,73,71,"Graphite Grey"],[36,42,40,"Lamp Black"],[229,211,175,"Unbleached Titanium"],[181,191,180,"Cerulean Grey"],[193,198,191,"Neutral Grey Pale"],[146,163,170,"Neutral Grey Light"],[120,137,145,"Neutral Grey Medium"],[86,104,118,"Neutral Grey Deep"],[104,107,88,"Turkey Umber Pale"],[39,43,42,"Mars Black"],[44,50,50,"Ivory Black"],[27,31,30,"Intense Carbon Black"],[233,227,205,"Neutral White"],[253,252,247,"Titanium-Zinc White"]];const e=[[24,25,26,98,99,100,101,55,48,34,35,22,1,2],[23,101,24,84,63,48,83,3,21,39,73,88,97,69,46,37,2,9,25,16,10,33,52,41],[97,98,92,54,25,44,47,28,24,12,99],[10,24,53,84,16,56,97,5,1,61,99,21,98,33,43,63,58,86,25],[60,64,69,3,4,101,2,21,12,88,50,8,59,95,44,69,95,76],[39,52,12,24,3,16,28,49,2,101,44,33,33,69,77,7,43,28],[88,89,97,98,99,100,101,90,91,92,93,94,95,86,85,84,69,58,59,63],[48,98,85,2,38,9,100,3,5,14,90,99,97],[100,62,49,25,24,47,36,23,56,12,84,38,13,99,52,53],[25,15,26,19,17,16,6,5,84,101,100,92,94,95,88,99,98,69,46,35,48,36,37,58,55],[89,26,41,62,15,2,61,39,3,22,45,51,56,4,44],[100,21,91,10,1,25,2,62,15,81,74,8,18,29,60,53,38,39,56,47,12,55],[89,4,23,72,58,101,15,100,6,38,52,33,99],[12,101,10,4,60,82,68,56,50,58,72,93,35,21,83,34,52,53,91,22,89,1,34,25],[24,2,21,93,10,91,61,87,49,53,46,56,36,58,47,99,81,15,57,9,26,54,94,12]];paletteNames=["Eros","Gaia","Thoth","Ra","Varuna","Ishtar","Nyx","Anubis","Neptune","Enyo","Ceres","Helios","Vulcan","Elysia","Vesta"],selectedPalette=R.random_int(0,e.length-1),convertIndexToPalette(e[selectedPalette]),border=0;let a=getURLParams(),d=void 0!==a.highres&&Number(a.highres);console.log("Apophenies by Cory Haber"),paintCanvasW=3456,paintCanvasH=4608,browserRatio=WIDTH/HEIGHT,dflW=675,dflH=900,bufferRatio=paintCanvasW/paintCanvasH,browserRatio>bufferRatio?(M=HEIGHT/paintCanvasH,canvasW=HEIGHT/paintCanvasH*paintCanvasW,canvasH=HEIGHT):(M=WIDTH/paintCanvasW,canvasW=WIDTH,canvasH=WIDTH/paintCanvasW*paintCanvasH),M*=paintCanvasH/dflH;paintRadius=8,circleCounter=0;drawSteps=20,strokeLength=1.55,maxPerStep=35;let c=R.random_choice([1,2]),t=R.random_int(4,8);opacity=245,opactiyStreak=230,maxStreakLen=6;let f=R.random_choice([150,350,550,650,750,1e3]),r=[130,170,210,250,300,350],n=R.random_int(0,r.length-1),b=R.random_choice([-2,-1,0,1,2]),o=r[n],l=r[b+n<0?0:b+n>r.length-1?r.length-1:b+n],i=R.random_choice([100,150,200,250,300,400]),s=R.random_choice([150,200,230,250]),u=6+(o+l-300)/400*4;resolution=2,nameIndex=0;paletteNames[selectedPalette];pd=!1===d?pixelDensity():d,pixelDensity(pd),pdb=1,gridArr=new Float32Array(dflH*pdb*(dflW*pdb)),createCanvas(canvasW,canvasH),buffer=createGraphics(dflW,dflH),buffer.pixelDensity(pdb),primaryBuffer(f,o,l,i,s),gridPoints(10.2,t),scharr(gridArr),gaussBlur_4(scharrX,blurX,dflW,dflH,u),gaussBlur_4(scharrY,blurY,dflW,dflH,u),gridOfAngles(blurX,blurY,grid,resolution),precalculatePalette(),preprocessStrokes(strokes,buffer,c),colorNames=Array.from(colorsUsed);usedPaletteColors.filter(((e,a,d)=>a===d.findIndex((a=>JSON.stringify(a)===JSON.stringify(e)))));colorSort(1),sortedNames=sortedColorName(),background(229,211,175,255),drawStrokes()}function primaryBuffer(e,a,d,c,t){let f,r,n,b,o,l,i,s,u,p,x,h,m,g,k,y;palette.sort(((e,a)=>luminance(a)-luminance(e))),buffer.background(255),buffer.noStroke();for(let h=0;h<e;h++)f=R.random_int(0,dflW),r=R.random_int(0,dflH),n=R.random_int(10,a),b=R.random_int(10,d),o=R.random_int(0,c),l=R.random_int(0,palette.length-1),i=palette[l][0],s=palette[l][1],u=palette[l][2],p=f-n/2,x=r-b/2,buffer.fill(i,s,u,t),buffer.rect(p,x,n,b,o),150===t&&buffer.ellipse(f,r,n,b);buffer.loadPixels(),index=0;for(let e=0;e<dflH;e++){let a=e*dflW*pdb*pdb;for(let e=0;e<dflW;e++)h=4*(e*pdb+a),m=buffer.pixels[h],g=buffer.pixels[h+1],k=buffer.pixels[h+2],y=(m+g+k)/3|0,gridArr[index++]=y}}function preprocessStrokes(e,a,d){pointsWithColor.length=e.length;for(let c=0;c<e.length;c++)pointsWithColor[c]=getColor(int(e[c].x),int(e[c].y),a,colorsUsed,d)}function precalculatePalette(){for(let e=0;e<palette.length;e++){let a=palette[e][0],d=palette[e][1],c=palette[e][2];preCalculatedSq[e]=[a*a,d*d,c*c]}}function getColor(e,a,d,c,t){let f=4*(e*pdb+a*dflW*pdb*pdb),r=d.pixels[f],n=d.pixels[f+1],b=d.pixels[f+2],o=[];for(let e=0;e<palette.length;e++){let a=sq(palette[e][0]-r)+sq(palette[e][1]-n)+sq(palette[e][2]-b);o.push({dist:a,color:palette[e]})}o.sort(((e,a)=>e.dist-a.dist));let l=R.random_int(0,t),i=o[l].color,s=i[0],u=i[1],p=i[2],x=i[3],h=s+u+p;return c.add(x),colorsScore.add([x,h]),usedPaletteColors.push([s,u,p,x]),[e,a,s,u,p,x,l,h]}function gridPoints(e,a){for(let d=0;d<=dflH;d+=e)for(let c=0;c<=dflW;c+=e){let e=c+R.random_num(-a,a),t=d+R.random_num(-a,a),f=createVector(e,t);append(strokes,f)}}function gridOfAngles(e,a,d,c){let t;for(let f=0;f<dflH;f+=c)for(let r=0;r<dflW;r+=c){let n=r+f*dflW,b=r/c+f/c*(dflW/c),o=e[n],l=a[n];t=degrees(atan2(l,o))+90;let i=radians(t);d[b]=i}}function smoothAngles(){for(let e=1;e<grid.length-1;e++){let a=(grid[e-1]+grid[e]+grid[e+1])/3;avgGrid.push(a)}}async function drawStrokes(){if(nameIndex<sortedNames.length){const e=[0,30,60,90,120,150,180,210,240,270,300,330];let a=[];for(let d=0;d<pointsWithColor.length;d++){let c,t,f=pointsWithColor[d],r=color(f[2],f[3],f[4],opacity);if(noStroke(),f[5]===sortedNames[nameIndex]){for(let d=0;d<drawSteps;d++){let d=int(f[0]),n=int(f[1]),b=int(f[0]/resolution),o=int(f[1]/resolution);if(d>border&&d<dflW-border&&n>border&&n<dflH-border){let l=grid[b+o*(dflW/resolution)];c=strokeLength*cos(l),t=strokeLength*sin(l),f[0]+=c,f[1]+=t;let i=l<0?TWO_PI+l:l;i=degrees(i);let s=e.reduce(((e,a)=>abs(a-i)<abs(e-i)?a:e));noStroke();let u,p,x,h,m,g,k=R.random_int(5,maxPerStep);for(let e=0;e<k;e++)u=R.random_num(0,paintRadius),p=radians(R.random_int(0,360)),x=d+u*cos(p),h=n+u*sin(p),m=R.random_int(1,20),a.push([d*M,n*M]),m<=16?(fill(r),g=R.random_num(.1,1),ellipse(x*M,h*M,g*M,g*M)):paintParticles(x*M,h*M,maxStreakLen,r,s,opactiyStreak),circleCounter++}}beginShape();for(let e=0;e<a.length;e++)noFill(),r.setAlpha(100),stroke(r),strokeWeight(7*M),curveVertex(a[e][0],a[e][1]);a=[],endShape()}}nameIndex++,requestAnimationFrame(drawStrokes)}}function paintParticles(e,a,d,c,t,f){let r=R.random_num(-.01,-.14),n=int(red(c)),b=int(green(c)),o=int(blue(c)),[l,i,s]=adjustLightness(n,b,o,r);fill(l,i,s,f),push(),translate(e,a);let u=R.random_num(.5,1),p=R.random_num(1,d);noStroke(),beginShape();for(let e=0;e<360;e+=30){let a,d,c,f;c=u+R.random_num(-.5,.5),f=radians(e),e===t?(a=(p+c)*cos(f),d=(p+c)*sin(f)):(a=c*cos(f),d=c*sin(f)),curveVertex(a*M,d*M)}endShape(CLOSE),pop()}function colorSort(e){0===e?pointsWithColor.sort(((e,a)=>colorNames.indexOf(e[5])-colorNames.indexOf(a[5]))):1===e?pointsWithColor.sort(((e,a)=>e[7]-a[7])):pointsWithColor.sort(((e,a)=>a[7]-e[7]))}function sortedColorName(){let e=new Set;for(let a=0;a<pointsWithColor.length;a++){let d=pointsWithColor[a][5];e.add(d)}return Array.from(e)}function luminance(e){let[a,d,c]=e;return.299*a+.587*d+.114*c}function genTokenData(e){let a={},d="0x";for(var c=0;c<64;c++)d+=Math.floor(16*Math.random()).toString(16);return a.hash=d,a.tokenId=(1e6*e+Math.floor(1e3*Math.random())).toString(),a}class Random{constructor(){this.useA=!1;let e=function(e){let a=parseInt(e.substr(0,8),16),d=parseInt(e.substr(8,8),16),c=parseInt(e.substr(16,8),16),t=parseInt(e.substr(24,8),16);return function(){a|=0,d|=0,c|=0,t|=0;let e=(a+d|0)+t|0;return t=t+1|0,a=d^d>>>9,d=c+(c<<3)|0,c=c<<21|c>>>11,c=c+e|0,(e>>>0)/4294967296}};this.prngA=new e(tokenData.hash.substr(2,32)),this.prngB=new e(tokenData.hash.substr(34,32));for(let e=0;e<1e6;e+=2)this.prngA(),this.prngB()}random_dec(){return this.useA=!this.useA,this.useA?this.prngA():this.prngB()}random_num(e,a){return e+(a-e)*this.random_dec()}random_int(e,a){return Math.floor(this.random_num(e,a+1))}random_bool(e){return this.random_dec()<e}random_choice(e){return e[this.random_int(0,e.length-1)]}}function gaussBlur_4(e,a,d,c,t){var f=boxesForGauss(t,3);boxBlur_4(e,a,d,c,(f[0]-1)/2),boxBlur_4(a,e,d,c,(f[1]-1)/2),boxBlur_4(e,a,d,c,(f[2]-1)/2)}function boxBlur_4(e,a,d,c,t){for(var f=0;f<e.length;f++)a[f]=e[f];boxBlurH_4(a,e,d,c,t),boxBlurT_4(e,a,d,c,t)}function boxBlurH_4(e,a,d,c,t){for(var f=1/(t+t+1),r=0;r<c;r++){for(var n=r*d,b=n,o=n+t,l=e[n],i=e[n+d-1],s=(t+1)*l,u=0;u<t;u++)s+=e[n+u];for(u=0;u<=t;u++)s+=e[o++]-l,a[n++]=Math.round(s*f);for(u=t+1;u<d-t;u++)s+=e[o++]-e[b++],a[n++]=Math.round(s*f);for(u=d-t;u<d;u++)s+=i-e[b++],a[n++]=Math.round(s*f)}}function boxBlurT_4(e,a,d,c,t){for(var f=1/(t+t+1),r=0;r<d;r++){for(var n=r,b=n,o=n+t*d,l=e[n],i=e[n+d*(c-1)],s=(t+1)*l,u=0;u<t;u++)s+=e[n+u*d];for(u=0;u<=t;u++)s+=e[o]-l,a[n]=Math.round(s*f),o+=d,n+=d;for(u=t+1;u<c-t;u++)s+=e[o]-e[b],a[n]=Math.round(s*f),b+=d,o+=d,n+=d;for(u=c-t;u<c;u++)s+=i-e[b],a[n]=Math.round(s*f),b+=d,n+=d}}function boxesForGauss(e,a){var d=Math.sqrt(12*e*e/a+1),c=Math.floor(d);c%2==0&&c--;for(var t=c+2,f=(12*e*e-a*c*c-4*a*c-3*a)/(-4*c-4),r=Math.round(f),n=[],b=0;b<a;b++)n.push(b<r?c:t);return n}function scharr(e){scharrX=new Float32Array(dflW*dflH),scharrY=new Float32Array(dflW*dflH);let a=dflW;for(let d=1;d<dflH-1;d++)for(let c=1;c<dflW-1;c++){let t=c-1+a*(d-1),f=c+a*(d-1),r=c+1+a*(d-1),n=c-1+a*d,b=c+a*d,o=c+1+a*d,l=c-1+a*(d+1),i=c+a*(d+1),s=c+1+a*(d+1),u=e[t]*kx[0][0]+e[f]*kx[0][1]+e[r]*kx[0][2]+e[n]*kx[1][0]+e[b]*kx[1][1]+e[o]*kx[1][2]+e[l]*kx[2][0]+e[i]*kx[2][1]+e[s]*kx[2][2],p=e[t]*ky[0][0]+e[f]*ky[0][1]+e[r]*ky[0][2]+e[n]*ky[1][0]+e[b]*ky[1][1]+e[o]*ky[1][2]+e[l]*ky[2][0]+e[i]*ky[2][1]+e[s]*ky[2][2];scharrX[d*dflW+c]=u,scharrY[d*dflW+c]=p}}function convertIndexToPalette(e){for(let a=0;a<e.length;a++){let d=paletteSet[e[a]];palette.push(d)}}function isMobile(){return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}let tapCount=0;function touchStarted(){return isMobile()&&(tapCount++,1===tapCount?displayOption(2):2===tapCount?displayOption(3):3===tapCount?displayOption(4):reloadDisplay()),!1}function delayTime(e){return new Promise((a=>setTimeout(a,e)))}function keyPressed(){83===keyCode&&saveOutput(),49===keyCode&&displayOption(1),50===keyCode&&displayOption(2),51===keyCode&&displayOption(3),52===keyC
e&&displayOption(4)}function saveOutput(){delayTime(300).then((()=>save("Apophenies #"+invocation+".jpg")))}function reloadDisplay(){delayTime(500).then((()=>location.reload()))}function rgbToHsl(e,a,d){e/=255,a/=255,d/=255;let c,t,f=Math.max(e,a,d),r=Math.min(e,a,d),n=(f+r)/2;if(f==r)c=t=0;else{let b=f-r;switch(t=n>.5?b/(2-f-r):b/(f+r),f){case e:c=(a-d)/b+(a<d?6:0);break;case a:c=(d-e)/b+2;break;case d:c=(e-a)/b+4}c/=6}return[c,t,n]}function hslToRgb(e,a,d){function c(e,a,d){return d<0&&(d+=1),d>1&&(d-=1),d<1/6?e+6*(a-e)*d:d<.5?a:d<2/3?e+(a-e)*(2/3-d)*6:e}if(0===a)r=g=b=d;else{let t=d<.5?d*(1+a):d+a-d*a,f=2*d-t;r=c(f,t,e+1/3),g=c(f,t,e),b=c(f,t,e-1/3)}return[Math.round(255*r),Math.round(255*g),Math.round(255*b)]}function adjustLightness(e,a,d,c){let[t,f,r]=rgbToHsl(e,a,d);return r=Math.min(Math.max(0,r+c),1),hslToRgb(t,f,r)}function displayBuffer(e){let a=createImage(dflW,dflH);a.loadPixels();for(let d=0;d<dflH;d++)for(let c=0;c<dflW;c++){let t=c+d*dflW;a.set(c,d,color(e[t]))}a.updatePixels(),image(a,0,0,canvasW,canvasH)}function displayOption(e){background(229,211,175,255),1===e?(window.location=window.location.pathname,reloadDisplay()):2===e?displayBuffer(blurX):3===e?displayBuffer(blurY):4===e&&displayBuffer(gridArr)}
escent Pearl"],[168,165,146,"Iridescent Silver"],[144,142,127,"Iridescent German Silver"],[80,86,84,"Iridescent Pewter"],[67,73,71,"Graphite Grey"],[36,42,40,"Lamp Black"],[229,211,175,"Unbleached Titanium"],[181,191,180,"Cerulean Grey"],[193,198,191,"Neutral Grey Pale"],[146,163,170,"Neutral Grey Light"],[120,137,145,"Neutral Grey Medium"],[86,104,118,"Neutral Grey Deep"],[104,107,88,"Turkey Umber Pale"],[39,43,42,"Mars Black"],[44,50,50,"Ivory Black"],[27,31,30,"Intense Carbon Black"],[233,227,205,"Neutral White"],[253,252,247,"Titanium-Zinc White"]];const e=[[24,25,26,98,99,100,101,55,48,34,35,22,1,2],[23,101,24,84,63,48,83,3,21,39,73,88,97,69,46,37,2,9,25,16,10,33,52,41],[97,98,92,54,25,44,47,28,24,12,99],[10,24,53,84,16,56,97,5,1,61,99,21,98,33,43,63,58,86,25],[60,64,69,3,4,101,2,21,12,88,50,8,59,95,44,69,95,76],[39,52,12,24,3,16,28,49,2,101,44,33,33,69,77,7,43,28],[88,89,97,98,99,100,101,90,91,92,93,94,95,86,85,84,69,58,59,63],[48,98,85,2,38,9,100,3,5,14,90,99,97],[100,62,49,25,24,47,36,23,56,12,84,38,13,99,52,53],[25,15,26,19,17,16,6,5,84,101,100,92,94,95,88,99,98,69,46,35,48,36,37,58,55],[89,26,41,62,15,2,61,39,3,22,45,51,56,4,44],[100,21,91,10,1,25,2,62,15,81,74,8,18,29,60,53,38,39,56,47,12,55],[89,4,23,72,58,101,15,100,6,38,52,33,99],[12,101,10,4,60,82,68,56,50,58,72,93,35,21,83,34,52,53,91,22,89,1,34,25],[24,2,21,93,10,91,61,87,49,53,46,56,36,58,47,99,81,15,57,9,26,54,94,12]];paletteNames=["Eros","Gaia","Thoth","Ra","Vulcan","Ishtar","Nyx","Anubis","Neptune","Enyo","Ceres","Helios","Kali","Varuna","Vesta"],selectedPalette=R.random_int(0,e.length-1),convertIndexToPalette(e[selectedPalette]),border=0;let a=getURLParams(),d=void 0!==a.highres&&Number(a.highres);console.log("Apophenies by Cory Haber"),paintCanvasW=3456,paintCanvasH=4608,browserRatio=WIDTH/HEIGHT,dflW=675,dflH=900,bufferRatio=paintCanvasW/paintCanvasH,browserRatio>bufferRatio?(M=HEIGHT/paintCanvasH,canvasW=HEIGHT/paintCanvasH*paintCanvasW,canvasH=HEIGHT):(M=WIDTH/paintCanvasW,canvasW=WIDTH,canvasH=WIDTH/paintCanvasW*paintCanvasH),M*=paintCanvasH/dflH;paintRadius=8,circleCounter=0;drawSteps=20,strokeLength=1.55,maxPerStep=35;let c=R.random_choice([1,2]),t=R.random_int(4,8);opacity=245,opactiyStreak=230,maxStreakLen=6;let f=R.random_choice([150,350,550,650,750,1e3]),r=[130,170,210,250,300,350],n=R.random_int(0,r.length-1),b=R.random_choice([-2,-1,0,1,2]),o=r[n],l=r[b+n<0?0:b+n>r.length-1?r.length-1:b+n],i=R.random_choice([100,150,200,250,300,400]),s=R.random_choice([150,200,230,250]),u=6+(o+l-300)/400*4;resolution=2,nameIndex=0;paletteNames[selectedPalette];pd=!1===d?pixelDensity():d,pixelDensity(pd),pdb=1,gridArr=new Float32Array(dflH*pdb*(dflW*pdb)),createCanvas(canvasW,canvasH),buffer=createGraphics(dflW,dflH),buffer.pixelDensity(pdb),primaryBuffer(f,o,l,i,s),gridPoints(10.2,t),scharr(gridArr),gaussBlur_4(scharrX,blurX,dflW,dflH,u),gaussBlur_4(scharrY,blurY,dflW,dflH,u),gridOfAngles(blurX,blurY,grid,resolution),precalculatePalette(),preprocessStrokes(strokes,buffer,c),colorNames=Array.from(colorsUsed);usedPaletteColors.filter(((e,a,d)=>a===d.findIndex((a=>JSON.stringify(a)===JSON.stringify(e)))));colorSort(1),sortedNames=sortedColorName(),background(229,211,175,255),drawStrokes()}function primaryBuffer(e,a,d,c,t){let f,r,n,b,o,l,i,s,u,p,x,h,m,g,k,y;palette.sort(((e,a)=>luminance(a)-luminance(e))),buffer.background(255),buffer.noStroke();for(let h=0;h<e;h++)f=R.random_int(0,dflW),r=R.random_int(0,dflH),n=R.random_int(10,a),b=R.random_int(10,d),o=R.random_int(0,c),l=R.random_int(0,palette.length-1),i=palette[l][0],s=palette[l][1],u=palette[l][2],p=f-n/2,x=r-b/2,buffer.fill(i,s,u,t),buffer.rect(p,x,n,b,o),150===t&&buffer.ellipse(f,r,n,b);buffer.loadPixels(),index=0;for(let e=0;e<dflH;e++){let a=e*dflW*pdb*pdb;for(let e=0;e<dflW;e++)h=4*(e*pdb+a),m=buffer.pixels[h],g=buffer.pixels[h+1],k=buffer.pixels[h+2],y=(m+g+k)/3|0,gridArr[index++]=y}}function preprocessStrokes(e,a,d){pointsWithColor.length=e.length;for(let c=0;c<e.length;c++)pointsWithColor[c]=getColor(int(e[c].x),int(e[c].y),a,colorsUsed,d)}function precalculatePalette(){for(let e=0;e<palette.length;e++){let a=palette[e][0],d=palette[e][1],c=palette[e][2];preCalculatedSq[e]=[a*a,d*d,c*c]}}function getColor(e,a,d,c,t){let f=4*(e*pdb+a*dflW*pdb*pdb),r=d.pixels[f],n=d.pixels[f+1],b=d.pixels[f+2],o=[];for(let e=0;e<palette.length;e++){let a=sq(palette[e][0]-r)+sq(palette[e][1]-n)+sq(palette[e][2]-b);o.push({dist:a,color:palette[e]})}o.sort(((e,a)=>e.dist-a.dist));let l=R.random_int(0,t),i=o[l].color,s=i[0],u=i[1],p=i[2],x=i[3],h=s+u+p;return c.add(x),colorsScore.add([x,h]),usedPaletteColors.push([s,u,p,x]),[e,a,s,u,p,x,l,h]}function gridPoints(e,a){for(let d=0;d<=dflH;d+=e)for(let c=0;c<=dflW;c+=e){let e=c+R.random_num(-a,a),t=d+R.random_num(-a,a),f=createVector(e,t);append(strokes,f)}}function gridOfAngles(e,a,d,c){let t;for(let f=0;f<dflH;f+=c)for(let r=0;r<dflW;r+=c){let n=r+f*dflW,b=r/c+f/c*(dflW/c),o=e[n],l=a[n];t=degrees(atan2(l,o))+90;let i=radians(t);d[b]=i}}function smoothAngles(){for(let e=1;e<grid.length-1;e++){let a=(grid[e-1]+grid[e]+grid[e+1])/3;avgGrid.push(a)}}async function drawStrokes(){if(nameIndex<sortedNames.length){const e=[0,30,60,90,120,150,180,210,240,270,300,330];let a=[];for(let d=0;d<pointsWithColor.length;d++){let c,t,f=pointsWithColor[d],r=color(f[2],f[3],f[4],opacity);if(noStroke(),f[5]===sortedNames[nameIndex]){for(let d=0;d<drawSteps;d++){let d=int(f[0]),n=int(f[1]),b=int(f[0]/resolution),o=int(f[1]/resolution);if(d>border&&d<dflW-border&&n>border&&n<dflH-border){let l=grid[b+o*(dflW/resolution)];c=strokeLength*cos(l),t=strokeLength*sin(l),f[0]+=c,f[1]+=t;let i=l<0?TWO_PI+l:l;i=degrees(i);let s=e.reduce(((e,a)=>abs(a-i)<abs(e-i)?a:e));noStroke();let u,p,x,h,m,g,k=R.random_int(5,maxPerStep);for(let e=0;e<k;e++)u=R.random_num(0,paintRadius),p=radians(R.random_int(0,360)),x=d+u*cos(p),h=n+u*sin(p),m=R.random_int(1,20),a.push([d*M,n*M]),m<=16?(fill(r),g=R.random_num(.1,1),ellipse(x*M,h*M,g*M,g*M)):paintParticles(x*M,h*M,maxStreakLen,r,s,opactiyStreak),circleCounter++}}beginShape();for(let e=0;e<a.length;e++)noFill(),r.setAlpha(100),stroke(r),strokeWeight(7*M),curveVertex(a[e][0],a[e][1]);a=[],endShape()}}nameIndex++,requestAnimationFrame(drawStrokes)}}function paintParticles(e,a,d,c,t,f){let r=R.random_num(-.01,-.14),n=int(red(c)),b=int(green(c)),o=int(blue(c)),[l,i,s]=adjustLightness(n,b,o,r);fill(l,i,s,f),push(),translate(e,a);let u=R.random_num(.5,1),p=R.random_num(1,d);noStroke(),beginShape();for(let e=0;e<360;e+=30){let a,d,c,f;c=u+R.random_num(-.5,.5),f=radians(e),e===t?(a=(p+c)*cos(f),d=(p+c)*sin(f)):(a=c*cos(f),d=c*sin(f)),curveVertex(a*M,d*M)}endShape(CLOSE),pop()}function colorSort(e){0===e?pointsWithColor.sort(((e,a)=>colorNames.indexOf(e[5])-colorNames.indexOf(a[5]))):1===e?pointsWithColor.sort(((e,a)=>e[7]-a[7])):pointsWithColor.sort(((e,a)=>a[7]-e[7]))}function sortedColorName(){let e=new Set;for(let a=0;a<pointsWithColor.length;a++){let d=pointsWithColor[a][5];e.add(d)}return Array.from(e)}function luminance(e){let[a,d,c]=e;return.299*a+.587*d+.114*c}function genTokenData(e){let a={},d="0x";for(var c=0;c<64;c++)d+=Math.floor(16*Math.random()).toString(16);return a.hash=d,a.tokenId=(1e6*e+Math.floor(1e3*Math.random())).toString(),a}class Random{constructor(){this.useA=!1;let e=function(e){let a=parseInt(e.substr(0,8),16),d=parseInt(e.substr(8,8),16),c=parseInt(e.substr(16,8),16),t=parseInt(e.substr(24,8),16);return function(){a|=0,d|=0,c|=0,t|=0;let e=(a+d|0)+t|0;return t=t+1|0,a=d^d>>>9,d=c+(c<<3)|0,c=c<<21|c>>>11,c=c+e|0,(e>>>0)/4294967296}};this.prngA=new e(tokenData.hash.substr(2,32)),this.prngB=new e(tokenData.hash.substr(34,32));for(let e=0;e<1e6;e+=2)this.prngA(),this.prngB()}random_dec(){return this.useA=!this.useA,this.useA?this.prngA():this.prngB()}random_num(e,a){return e+(a-e)*this.random_dec()}random_int(e,a){return Math.floor(this.random_num(e,a+1))}random_bool(e){return this.random_dec()<e}random_choice(e){return e[this.random_int(0,e.length-1)]}}function gaussBlur_4(e,a,d,c,t){var f=boxesForGauss(t,3);boxBlur_4(e,a,d,c,(f[0]-1)/2),boxBlur_4(a,e,d,c,(f[1]-1)/2),boxBlur_4(e,a,d,c,(f[2]-1)/2)}function boxBlur_4(e,a,d,c,t){for(var f=0;f<e.length;f++)a[f]=e[f];boxBlurH_4(a,e,d,c,t),boxBlurT_4(e,a,d,c,t)}function boxBlurH_4(e,a,d,c,t){for(var f=1/(t+t+1),r=0;r<c;r++){for(var n=r*d,b=n,o=n+t,l=e[n],i=e[n+d-1],s=(t+1)*l,u=0;u<t;u++)s+=e[n+u];for(u=0;u<=t;u++)s+=e[o++]-l,a[n++]=Math.round(s*f);for(u=t+1;u<d-t;u++)s+=e[o++]-e[b++],a[n++]=Math.round(s*f);for(u=d-t;u<d;u++)s+=i-e[b++],a[n++]=Math.round(s*f)}}function boxBlurT_4(e,a,d,c,t){for(var f=1/(t+t+1),r=0;r<d;r++){for(var n=r,b=n,o=n+t*d,l=e[n],i=e[n+d*(c-1)],s=(t+1)*l,u=0;u<t;u++)s+=e[n+u*d];for(u=0;u<=t;u++)s+=e[o]-l,a[n]=Math.round(s*f),o+=d,n+=d;for(u=t+1;u<c-t;u++)s+=e[o]-e[b],a[n]=Math.round(s*f),b+=d,o+=d,n+=d;for(u=c-t;u<c;u++)s+=i-e[b],a[n]=Math.round(s*f),b+=d,n+=d}}function boxesForGauss(e,a){var d=Math.sqrt(12*e*e/a+1),c=Math.floor(d);c%2==0&&c--;for(var t=c+2,f=(12*e*e-a*c*c-4*a*c-3*a)/(-4*c-4),r=Math.round(f),n=[],b=0;b<a;b++)n.push(b<r?c:t);return n}function scharr(e){scharrX=new Float32Array(dflW*dflH),scharrY=new Float32Array(dflW*dflH);let a=dflW;for(let d=1;d<dflH-1;d++)for(let c=1;c<dflW-1;c++){let t=c-1+a*(d-1),f=c+a*(d-1),r=c+1+a*(d-1),n=c-1+a*d,b=c+a*d,o=c+1+a*d,l=c-1+a*(d+1),i=c+a*(d+1),s=c+1+a*(d+1),u=e[t]*kx[0][0]+e[f]*kx[0][1]+e[r]*kx[0][2]+e[n]*kx[1][0]+e[b]*kx[1][1]+e[o]*kx[1][2]+e[l]*kx[2][0]+e[i]*kx[2][1]+e[s]*kx[2][2],p=e[t]*ky[0][0]+e[f]*ky[0][1]+e[r]*ky[0][2]+e[n]*ky[1][0]+e[b]*ky[1][1]+e[o]*ky[1][2]+e[l]*ky[2][0]+e[i]*ky[2][1]+e[s]*ky[2][2];scharrX[d*dflW+c]=u,scharrY[d*dflW+c]=p}}function convertIndexToPalette(e){for(let a=0;a<e.length;a++){let d=paletteSet[e[a]];palette.push(d)}}function isMobile(){return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}let tapCount=0;function touchStarted(){return isMobile()&&(tapCount++,1===tapCount?displayOption(2):2===tapCount?displayOption(3):3===tapCount?displayOption(4):reloadDisplay()),!1}function delayTime(e){return new Promise((a=>setTimeout(a,e)))}function keyPressed(){83===keyCode&&saveOutput(),49===keyCode&&displayOption(1),50===keyCode&&displayOption(2),51===keyCode&&displayOption(3),52===keyCod
let circleCounter,gridArr,bufferRatio,dflW,dflH,colorNames,canvasW,canvasH,paintRadius,paintCanvasW,paintCanvasH,cnv,M2,M,R,border,pd,pds,pdb,buffer,debug,img,drawSteps,opactiy,opactiyStreak,maxPerStep,strokeLength,maxStreakLen,resolution,sortedNames,nameIndex,selectedPalette,paletteNames,invocation,WIDTH=window.innerWidth,HEIGHT=window.innerHeight,scharrX=[],scharrY=[],blurX=[],blurY=[],grid=[],avgGrid=[],indices=[],strokes=[],pointsWithColor=[],paletteSet=[],palette=[],preCalculatedSq=[],usedPaletteColors=[],colorsUsed=new Set,colorsScore=new Set;const kx=[[-47,0,47],[-162,0,162],[-47,0,47]],ky=[[-47,-162,-47],[0,0,0],[47,162,47]];let seeds=["0x53fc8fe661875ef762a1be9aff7f7a7f2b545418670ce429807197b2de89259f","0xe787da2815d084956c7169eedd9549262a3e729d42f39174b32d86d0009f31fd","0x1c57173fb76b09797fa27506be0a94b6fd22836f9fa79eba404f8f37ed6fa9dd","0x6179ee1c7cbf11a682962a6d1f02744ade5b5262a28971734a3e6c97846a1a57","0xa4025ff829e1ec00b6c9eca9e53544c5699018fa1af71e4c33ae670a742d0889","0xd12b01c600b99071c72885861337a91bb8503fee4baad4e3c81234f2edbf4dd2","0x21ece90ba4068a6697a08c3747d2fdee84f6c6f5a1bb6581ba885d32993fcfcd","0x1c1e8afee4c28eb3eae455dbf79341be3dff3b9d0c59f53d3ac918fee85bcd47","0x50e7d0329297eb18cd7da8821fbee5f59a2bdf2f65bc8f49c4f0f3e8fe124c43","0x6997a68c626d2319c77f2587dfd29f1d1468f334fbe58f20f3e820a8b9973928","0x9d894a4987ad23b8417d6138cf6aa961702bd308810960273568ddb37a6df6f3","0xe4e686043a70e18ae9504d74333e36667a6eeb9ef9ce380906eeecee718e6d43","0x85c7cebbc91c3fc1e2fae27ce02666ea4137f01ebebdb63b41915283741a99b9","0x98bc4d1367316abfb6530cff3f93afea49e65b35a574506a0994a22c66b7e208","0x363602695f326dce85dd7756dc44b34a536fe4f091b75e7c7759bdb5a632aa64","0xe7c41d0163cb2649553f57afc90455bf22c9c56098bd20f301f131dca5fbf1ad","0x21de06e283f4037a6d14a6c277a2af218c85e525638ef46481a926566b40078a","0x92eb21a53e374c6438d6d0417a848136791206c934562d23a0484dafe28c8efc","0x9d19bba9395ddd3704e77e4647a1fbc0375b3b6307625c1b8e58a9ef94238bb1","0xd08522bd7c30eddd3be1f2803f410c70d1f6eb95513bc3d98874104ac679ed2a","0x99a48e8fa06907c6020510094e8aa15b6de357eb41b468657edf44756facc25b","0x14e7ba27e91decbfd04ae681b373f9993a1ad8857468f8e68b07ea5322fa80b9","0xdb76d3b43732401dfbf42acfdf9e8e41b4623963d8920d45e0427ac99accb8f6","0xca3624f86893d51c1d4a15ac5f1097ad399dc6782a08c41eae25b0c59845fc25","0x8812bb097363351e8d0b25c739bab12863ecdbb04281b32147d2e4bc5bc8a38e","0x22cd26986e76d13579275b4e94d91f116e43d895776e1b90ee59bd16e6264e35","0xa6ae184412c8830ba0fe6705a5a8203b20214bda67635bdf7fb7057b5b926f07","0xeb78acdc087fab56f35395416033d70457c26400ad3577dacd2422745710114e","0x0fbe69bd5dba84a91debb0d69905eb15633adc7dc6bb6e96b00b3a113349dae7","0x6d8da44bdeb37354107b5d5cd353db6292e016c57946081c4be181eecb84ebaa","0xd09a897f7ce2d0769db3cdad7397186797effb3fcbeed72c1b1fbd181a414828","0xce7920600adab46405b468099fbc84fc55661864ad83c2fcde995aa62f29c048","0xf05b23bc31a357891290e0e264919a729f2af2adeb906a658d233660824292ee","0x60492f4cfcb93f0296c503540d5e0686a51430ad35e59a9718c414cc199fccc5","0x6f0266688f9114e3b97144912ceda561b03598e39091c40d187f08524aba9148","0x524ed5521a6b16415e358d68456b51fac7998cc215100a31a15ca43220247851","0x7b7ecc758260259363d3630b1770aa801ec6d3e068f96c9fc09c50c1c901f0ec","0x44454f2dfb1624ef5cf94a916afc408649e109e883871f8b92957b237c676b9c","0xe264b1a4548fafac08f5997b02703a3b1a029705873479a066ab0d1626839675","0x495ae536dce80d8bb9277e902c825ece1af16e801e1c39c67221eb639b1de44a","0xe01474742fda2b6fc490b27012327605f079f3a57974056716391a70cc0a85f1","0x478e088fa6ee6024ff3355375b48dd7670fa1f152b5b6cc879fad932947652f5","0xf4c6619d3b1a882dc648ab11c709e2835b23f7a384f1a82a0106a1112af73091","0x8bfa727500663d69c3e8d6cd44cb558d4e5053e9fe14cc5f1713b48c88d9a3a4","0x09bed357b10ddca24a8e724e8731732299e9a29f4bb2c70eb2bc8115b41d59ac","0xc4ef13f99d774195271ac5d3275c884dde626d68e6e61cb80a37060856905706","0x2578f593e3b573c1a9435812526ed4d7044e90b184489fab5931292973952a15","0x3a353abe3c075e8853f046eabd078b23015d77a3f6de0eacd627fcfec596462c","0x701fa6f5b8bf4b86358adbdf1f585dc3652199a192b83d27f1c83b7563460b81","0xee2e2f500b5b3532ccda04ddc0a96362e177dcc2637571134b0a730af82f4e62","0xf92e67d4c8986e99ca7a6c886ff00f184b6acae7f73f80ac8f1b755fe74fd7b1","0xe79f8c0a431c60e595105323ab55995bd5b680458cb9d1c4a8c3f8a9db9d225e","0x0f3370e3d4f0663a5f50e1f48ef2520e925b5ade0ad912dcbe6d6b4be7343925","0x7ddc0416d380725fc4c9d20b4960b64bb3cb8e0a3e3ef819de01e56c05353e41","0x8dcbfe965b36862ea73a6d0e92d9d3d7b3ef7ca809f89d2b87503a520cb99127","0xf220c0f6e338d80ce05e914e8ade1999866b706845563df93c57a8a315b70cdc","0x470f24e85e08e5c04ee6757f6e5ccc197209e32851f7701fda73621a56f26b71","0xefa56562183e5c9a0444bc78caa6b3ec36e4846813d9124772f5e85a177740b0","0x2e2e089749704d6e0ca94ca7948446950ddf6951cdc245d45ad131fdfb92dd1f","0xe26f90a85605103eb785a570617eb38598493127a6a1dd4f810278fee9b756dc","0xb22b20933fdebf929aad1c7d5dbb9ffcebced6a7315ca0ed6806b24b7801bb48","0x3b03647d54308e111fc5959c666eaca38d7f3c3c035ebc6fe1d13d5ead3fff31","0x531fdf39d6dacac585f2e5b858d779d9c86fcfd63d2ab119d1b27d236d379dec","0x3f2bdbba613056ec144bafeaf494204cf40adfef5e47cac71ccab66cd52a2290","0x6873e6e0dc079d6c1cc79715c2aa6fa9a54e4be7a08bc4facc607e40a6f92706","0x001bfdac06d2c22985a05bd6272c5ba07994bb1ee5b5b4b392022e6e70d39672","0x45022acbaf7623d3fe40429f6df89ef22996a9897ba6487867ac0a6889843e37","0x939dcffc491b0330ff4807b73710524b216e819ee4d95830d12864560d2fac20","0x050f856d01d0c3a73257da4e86be31218823a5f35bd6491744bfe6da77b34a5f","0x278520b8d579d1bd54abf8fdde2b319c2c39d8290fc9ec849a3b0b682038f514","0x18c61c0ca95f757f1da7e1f91879da4adb6b191401d456ada4831e6c2faf2938","0x95f02e3c02f6c6c9d9d4783f308fb15a7a6f6839cc2e89bc29ece78df0c4e66b","0x49b8caa64d36f2097e643bcf12f17f24c020f84148f7098d2c02a67ed2ebd0d8","0x07f5c3305cc4f3f8bf26c69c90165462aa0c9db3969ea51c4fba6d13633b2668","0xb95c909c31d6b1779426ec05631a4e4d68f77cef3926d559cfdfcdf556ca5de2","0x5aa72893d1a13abc4728efa8f7060520ef55e5d8524c2e47b251cc1da7998dea","0xd0d706646409001478eebe377905bea15b659badf74c2d3701e44b81ccc7aa21","0xf68ffde579abcf540c2932ce97e2fb0752be95457e84e5064c3d86d6611ec8d5","0x50d9cb03d7a96a104d84a41d6cc773f019d92ef12524476aa5ebc21a76e284ac","0x78975b442714b37c839d08dc11db0c5b46428674bd4c834a71b07cc780278fad","0x6748eea181768e270229c12518961e80e6d14467f4843a90775afe4622fe141e","0x36785cbac609653d4fc5964eef88ef562bcefef50cc2f93d52a81c02193d5c90","0xd64691ce562f4c583ca02008ca4b8ab8bcfad097674bac8d3fa0142614ff88d3","0x14688b869724b022c4f1717028fd0cfffe2725a20ea0db83d58344c13ca2d54b","0x3e2c3dfd3a5aded1145b5ea26f13c50b3d296e45e1112a60de68f46166fb6a13","0x2fad67696cbfcb639445c3836e29584fb7981404d9084c87eb38fca8e6a1c407","0x284e0c31fcf1c9c05ee73db73c6d01a89ba094fab9fdd31c40f467a73d9fd82d","0x4ca6e18d4a2f8718a2fade3a4afdc10cd30ad4d86bc4bbf3849f5cc9318c3a89","0xc1a82c4c7f24c14c0572e565fd22de3b2910dcc15c8296d533d64b73f679c03b","0x001b27fe937e6f34395c9b0722d4f54a799634df7103bae73c8cbc34f21e6ca1","0x43038a6664841d40ed0cced3ab6df2dbbf9879299df1261bd4f922c260206a22","0x1f1e5c2950340f141a33b7e7930eaa5d35ad9445d3479b12079923c1347ab80d","0x35dab37eb76e1a0975f9650933fe367acbfc45bac6641c4645b6435a8236990e","0x82a22ad606c4bce03086e6cc3e377810e07fab3f067ca15659176d250fc5b7f5","0x24e0d979eb13f92d3bd66858e9571e5be1b844fabde52d80177dcf47555b0391","0x6222d4e01241244d526dd41dfac913dfa1eaab804e9bb8fef3b4ea594588179b","0xce95861bd45520db6e332c80332ef06703813de27918b58bcfe7d3401c08f501","0x361e841b07276407d9f8107bfc88a2fe6049b45aa2e950ca4d3578252c75455d","0xc28422b5b250d4aad8a06bbb6ffc88495e01df0d0e0d33953a4cb3457c1699ec","0xf6681620053c718b320383865d98127b0680d45c347108f397cb6c308d997dd6"];function setup(){invocation=Number(tokenData.tokenId)%1e6,tokenData.hash=seeds[invocation],document.body.style.backgroundColor="#000000",R=new Random,paletteSet=[[246,238,103,"Nickel Yellow"],[243,235,26,"Cadmium Yellow Light"],[245,224,11,"Cadmium Yellow Medium"],[244,194,19,"Cadmium Yellow Deep"],[243,112,34,"Cadmium Orange"],[238,58,35,"Cadmium Red Light"],[233,33,43,"Cadmium Red Medium"],[162,29,48,"Cadmium Red Deep"],[215,62,46,"Turkey Red"],[158,32,46,"Quinacridone Red"],[234,228,90,"Cadmium Lemon"],[242,197,54,"Cobalt Yellow"],[250,178,32,"Indian Yellow"],[238,206,107,"Naples Yellow"],[241,172,103,"Jaune Brillant"],[225,86,89,"Warm Pink"],[219,76,44,"Alizarin Orange"],[127,36,45,"Alizarin Crimson"],[122,42,53,"Magenta Earth"],[124,37,53,"Quinacridone Magenta"],[192,169,63,"Olive Yellow"],[231,225,165,"Green Gold Pale"],[247,244,203,"Brilliant Yellow Extra pale"],[240,223,180,"Sienna Yellow Extra Pale"],[245,214,212,"Scarlet Extra Pale"],[231,118,164,"Dianthus Pink"],[210,61,91,"Warm Rose"],[127,71,136,"Cobalt Violet Deep"],[64,49,72,"Egyptian Violet"],[96,56,90,"Manganese Violet"],[133,119,48,"Green Gold"],[75,80,58,"Green Earth"],[42,72,36,"Sap Green"],[185,209,177,"Celadon Green"],[188,220,243,"Cerulean Extra Pale"],[189,209,233,"Ultramarine Blue Pale"],[69,128,194,"Azure Blue"],[109,135,192,"King's Blue"],[94,117,185,"Provence Blue"],[88,86,151,"Ultramarine Violet"],[81,117,73,"Chromium Oxide Green"],[78,123,64,"Cadmium Green"],[101,172,76,"Permanent Green"],[38,142,89,"Veronese Green"],[177,223,213,"Phthalo Green Pale"],[53,174,195,"Cobalt Teal"],[56,100,171,"Cerulean Blue"],[46,132,193,"Manganese Blue Hue"],[17,28,155,"Cobalt Blue"],[44,62,136,"Ultramarine Blue"],[54,105,86,"Viridian"],[150,178,65,"Cadmium Green pale"],[84,180,176,"Malachite Green"],[40,118,157,"Turquoise Blue"],[54,86,109,"Cobalt Turquoise"],[37,55,121,"Phthalo Blue"],[23,38,71,"Prussian Blue"],[41,42,106,"Indanthrone Blue"],[48,57,62,"Indigo"],[48,50,62,"Blue Ochre"],[42,60,48,"Courbet Green"],[22,65,58,"Phthalo Green"],[35,52,68,"Phthalo Turquoise"],[55,65,56,"Turkey Umber Greenish"],[75,71,59,"Raw Umber"],[79,62,52,"Burnt Umber"],[98,64,54,"Burnt Sienna"],[113,50,41,"Brown Pink"],[78,47,52,"Sepia"],[53,58,64,"Payne's Grey"],[98,63,61,"Mars Violet"],[130,62,51,"Mars Red"],[140,65,72,"Sanguine Earth Deep"],[178,74,73,"Sanguine Earth Medium"],[181,88,71,"Sanguine Earth Light"],[144,84,60,"Mars Orange"],[155,114,50,"Mars Yellow Deep"],[173,136,56,"Mars Yellow Light"],[161,106,52,"Stil de Grain"],[158,107,54,"Raw Sienna"],[135,73,58,"Iridescent Copper"],[190,145,52,"Ancient Gold"],[219,143,59,"Iridescent Gold"],[220,187,116,"Iridescent Brass"],[214,208,184,"Irid
*Apophenies* is an exploration of our innate human drive to find patterns - even in places where they might not exist.  Our brains, remarkably efficient, sift through vast amounts of information on just a few watts of electricity. Yet, this efficiency sometimes leads us to perceive connections that might only exist in our individual perceptions. Consider the moments when you've gazed at a cloud and had an apophenia: a face or some other familiar shape suddenly became clear to you, but the person next to you sees something entirely different. An apophenia, like art, is personal.  No two people experience or interpret it in the same way.  *Apophenies*, an adaptation of the word “Apophenia,” underscores the series' theme of subjective interpretation. Each artwork is composed of randomly overlapping shapes. When these shapes intersect, they occasionally form patterns that will seem vaguely familiar. It's a testament to our inherent need to derive meaning from the world around us, even in pure randomness.  This series isn't just about what you see, but how you interpret. It's a call to reflect on our individual and collective tendencies to create meaning, even when faced with nothingness.  **Key Commands**: 1 : Reload the animation 2 : View the x-axis edge gradient 3 : View the y-axis edge gradient 4 : View the offscreen buffer composition S : Save JPG
 **URL Parameters:** ?highres=6 : Pass higher numbers for higher resolutions, then press 's' to save