memoscan
← all memos

Memo 0x0377601c…85a6d9 on Ethereum

[1 ,()=>{console.log("Artist 44. Obvious -- platform 1 ");function stretchPalette(f,e,a){let t=[],o=e.length-1,n=e.map((e=>{let a=f.color(e);return rgbToHsb(f,f.red(a),f.green(a),f.blue(a))}));for(let e=0;e<a;e++){let i=e/(a-1)*o,r=f.floor(i),l=(r+1)%n.length,s=i-r,c=n[r],d=n[l],g=hsbToRgb((c[0]+s*(d[0]-c[0]))%360,f.lerp(c[1],d[1],s),f.lerp(c[2],d[2],s)),u="#"+f.hex(g[0],2)+f.hex(g[1],2)+f.hex(g[2],2);t.push(u)}return t}function drawInfos(f){console.log("Draw infos...",f.config),drawSeed(f),drawPaletteSquares(f)}function drawSeed(f){const e=10*f.config.scale,a=14*f.config.scale;f.textSize(a);const t=f.textWidth("# "+f.config.seed),o=a,n=f.config.height-e-o-e,i=t+2*e,r=o+2*e;f.fill(255),f.noStroke(),f.rect(0,n,i,r),f.fill(55),f.noStroke(),f.text("# "+f.config.seed,e,f.config.height-e)}function drawPaletteSquares(f){const e=5*f.config.scale,a=25*f.config.scale,t=0*f.config.scale;let o=f.config.palette.length*(a+t)+2*e,n=a+2*e,i=f.config.width-o-0,r=f.config.height-n-0;f.fill(255),f.noStroke(),f.rect(i,r,o,n);let l=f.config.width-o+e,s=f.config.height-n+e;f.config.palette.forEach(((e,o)=>{f.fill(e),f.noStroke(),f.rect(l,s,a,a),l+=a+t}))}function rgbToHsb(f,e,a,t){let o,n,i,r=[],l=f.max(e,a,t),s=f.min(e,a,t),c=l-s;return o=l===s?0:l===e?(a-t)/c%6*60:l===a?60*((t-e)/c+2):60*((e-a)/c+4),n=0===l?0:c/l*255,i=l,r[0]=o,r[1]=n,r[2]=i,r}function hsbToRgb(f,e,a){let t,o,n,i=[],r=a/255*(e/255),l=r*(1-Math.abs(f/60%2-1)),s=a/255-r;f>=0&&f<60?(t=r,o=l,n=0):f>=60&&f<120?(t=l,o=r,n=0):f>=120&&f<180?(t=0,o=r,n=l):f>=180&&f<240?(t=0,o=l,n=r):f>=240&&f<300?(t=l,o=0,n=r):(t=r,o=0,n=l);let c=Math.round(255*(t+s)),d=Math.round(255*(o+s)),g=Math.round(255*(n+s));return i[0]=c,i[1]=d,i[2]=g,i}function opacifyLayer(f){f.loadPixels();for(let e=0;e<f.pixels.length;e+=4)f.pixels[e+3]=255;f.updatePixels()}function drawWaterLayer(f){const e=f.createGraphics(f.finalWorkingSize.width,f.finalWorkingSize.height,{willReadFrequently:!0});let a=[],t=[],o=[];for(let e=0;e<50;e++)a.push(f.createVector(f.random(f.finalWorkingSize.width),f.random(f.finalWorkingSize.height)));for(let e=0;e<a.length;e++){let o=50*f.sin(360+6*a[e].x)+a[e].x,n=50*f.cos(360+6*a[e].y)+a[e].y;t.push(f.createVector(o,n))}for(let e=0;e<f.finalWorkingSize.width;e++)for(let a=0;a<f.finalWorkingSize.height;a++){let n=[];for(let f=0;f<t.length;f++){let o=(e-t[f].x)**2+(a-t[f].y)**2;n[f]=o}let i=f.sort(n),r=Math.sqrt(i[0]),l=4*(e+a*f.finalWorkingSize.width);o[l+0]=waveColor(r,2*f.modifier*14.5,44,2.5),o[l+1]=waveColor(r,2*f.modifier*21,169,2.5),o[l+2]=waveColor(r,2*f.modifier*40,225,3),o[l+3]=255}e.loadPixels();for(let f=0;f<o.length;f+=4)e.pixels[f+0]=o[f+0],e.pixels[f+1]=o[f+1],e.pixels[f+2]=o[f+2],e.pixels[f+3]=o[f+3];return e.updatePixels(),e}function waveColor(f,e,a,t){return f<0?a:Math.pow(f/e,t)+a}function hexToBinary(f){try{let e="";for(let a=0;a<f.length;a++){const t=f[a];e+=parseInt(t,16).toString(2).padStart(4,"0")}return e}catch(f){return console.error("Erreur : La chaîne hexadécimale fournie est invalide."),null}}function drawBorder(f,e,a,t){e.noFill(),e.stroke(255),e.strokeWeight(f.config.externalStrokeSize),e.rect(0,0,a-1,t-1)}function drawSanskritLayer(f){const e=hexToBinary(f.config.letterData);console.log("Binary sanskrit letter : ",e);const a=f.createGraphics(f.workingSquareSize,f.workingSquareSize,{willReadFrequently:!0});f.config.hasStrokeOnBorders&&drawBorder(f,a,f.workingSquareSize,f.workingSquareSize),a.loadPixels();const t=f.color(f.config.letterFill);let o=f.workingSquareSize,n=0,i=f.workingSquareSize,r=0;for(let a=0;a<f.config.letterResolution;a++)for(let t=0;t<f.config.letterResolution;t++){"1"===e[t*f.config.letterResolution+a]||(o=Math.min(o,a*f.config.blockSize),n=Math.max(n,(a+1)*f.config.blockSize),i=Math.min(i,t*f.config.blockSize),r=Math.max(r,(t+1)*f.config.blockSize))}const l=(o+n)/2,s=(i+r)/2,c=f.workingSquareSize/2,d=f.workingSquareSize/2;console.log("minX : ",o),console.log("maxX : ",n),console.log("minY : ",i),console.log("maxY : ",r);let g=0,u=0;if(f.config.isLetterCentered)console.log("Letter is centered"),g=c-l-f.config.letterOffsetX,u=d-s-f.config.letterOffsetY;else{console.log("Letter is not centered");const e=f.random()>.5?f.random()>.5?0:1:f.random()>.5?2:3,a=f.config.externalStrokeSize;switch(e){case 0:console.log("Stick to left border"),g=-(f.workingSquareSize/2-a/2)+(n-o)/2,u=d-s-f.config.letterOffsetY;break;case 1:console.log("Stick to right border"),g=+(f.workingSquareSize/2-a/2)-(n-o)/2,u=d-s-f.config.letterOffsetY;break;case 2:console.log("Stick to top border"),u=-(f.workingSquareSize/2-a/2)+(r-i)/2,g=c-l-f.config.letterOffsetX;break;case 3:console.log("Stick to bot border"),u=+(f.workingSquareSize/2-a/2)-(r-i)/2,g=c-l-f.config.letterOffsetX}}for(let o=0;o<f.config.letterResolution;o++)for(let n=0;n<f.config.letterResolution;n++){if(!("1"===e[n*f.config.letterResolution+o])){const e=o*f.config.blockSize+g,i=n*f.config.blockSize+u;for(let o=e;o<e+f.config.blockSize;o++)for(let e=i;e<i+f.config.blockSize;e++)o>=0&&o<f.workingSquareSize&&e>=0&&e<f.workingSquareSize&&a.set(o,e,t)}}return a.updatePixels(),a.filter(f.BLUR,f.config.letterBlur),f.config.currentStep++,a.get()}function drawOutlinesLayer(f){const e=f.createGraphics(f.workingSquareSize,f.workingSquareSize,{willReadFrequently:!0});e.image(f.sanskritImage,0,0,f.workingSquareSize,f.workingSquareSize),e.filter(f.BLUR,f.config.letterRoundBlur),e.filter(f.THRESHOLD,.5),e.loadPixels();for(let f=0;f<e.pixels.length;f+=4)e.pixels[f+3]>128?e.pixels[f+3]=255:e.pixels[f+3]=0;return e.updatePixels(),f.config.letterOutlines.forEach((a=>{drawOutline(f,e,a)})),f.config.isOutlineBlurred&&e.filter(f.BLUR,f.config.letterBlur),e}function drawOutline(f,e,a){let t=new Set;e.loadPixels();for(let o=0;o<e.height;o++)for(let n=0;n<e.width;n++){let i=4*(n+o*e.width);0===e.pixels[i+3]&&hasNonTransparentNeighbour(f,e,n,o,a.thickness,t)&&(e.pixels[i]=a.color[0],e.pixels[i+1]=a.color[1],e.pixels[i+2]=a.color[2],e.pixels[i+3]=a.opacity,t.add(i))}e.updatePixels()}function hasNonTransparentNeighbour(f,e,a,t,o,n){for(let i=-o;i<=o;i++)for(let r=-o;r<=o;r++)if(0!==r||0!==i){let o=a+r,l=t+i;if(o>=0&&o<f.workingSquareSize&&l>=0&&l<f.workingSquareSize){let a=4*(o+l*f.workingSquareSize);if(0!==e.pixels[a+3]&&!n.has(a))return!0}}return!1}function stretchValues(f,e){e.loadPixels();let a=255,t=0;for(let f=0;f<e.pixels.length;f+=4){let o=e.pixels[f];o<a&&(a=o),o>t&&(t=o)}console.log("minValue : ",a),console.log("maxValue : ",t);for(let o=0;o<e.pixels.length;o+=4)e.pixels[o]=f.map(e.pixels[o],a,t,0,255),e.pixels[o+1]=e.pixels[o],e.pixels[o+2]=e.pixels[o];e.updatePixels()}function drawChladniLayer(f){let e=f.config.chladniParams.a,a=f.config.chladniParams.b,t=f.config.chladniParams.n,o=f.config.chladniParams.m,n=f.createGraphics(f.workingSquareSize,f.workingSquareSize,{willReadFrequently:!0}),i=f.createGraphics(f.workingSquareSize,f.workingSquareSize,{willReadFrequently:!0}),r=t*t+o*o;n.loadPixels();for(let i=0;i<f.workingSquareSize;i++)for(let l=0;l<f.workingSquareSize;l++){let s=f.map(i,0,f.workingSquareSize,-1,1),c=f.map(l,0,f.workingSquareSize,-1,1),d=e*f.sin(f.PI*t*s)*f.sin(f.PI*o*c)+a*f.sin(f.PI*o*s)*f.sin(f.PI*t*c),g=f.map(f.abs(d),0,f.sqrt(r),0,f.config.maxLevel),u=4*(i+l*n.width);n.pixels[u]=g,n.pixels[u+1]=g,n.pixels[u+2]=g,n.pixels[u+3]=255}if(n.updatePixels(),n.image(f.outlinesImage,0,0,f.workingSquareSize,f.workingSquareSize),f.config.isChladniColorsReversed&&reverseLayerColors(f,n),f.config.debug)n.image(n,0,0);else for(let e=0;e<f.workingSquareSize;e++)for(let a=0;a<f.workingSquareSize;a++){drawSandGrainColor2(f,i,e,a,n.get(e,a)[0])}return opacifyLayer(i),console.log("Sanskrit layer done"),i}function reverseLayerColors(f,e){e.loadPixels();for(let f=0;f<e.pixels.length;f+=4)e.pixels[f]=255-e.pixels[f],e.pixels[f+1]=255-e.pixels[f+1],e.pixels[f+2]=255-e.pixels[f+2];e.updatePixels()}function drawSandGrainColor2(f,e,a,t,o){f.colorMode(f.HSB);for(let n=0;n<f.config.numberOfLayers;n++)if(o>=f.config.layerStep*n&&o<=f.config.layerStep*(n+1)){let i,r,l=f.config.palette[n],s=f.hue(l),c=f.saturation(l),d=f.brightness(l);f.config.hasGradientInsideLayers?(r=f.map(o,0,255,1.2,.8),i=f.map(o,0,255,1,1.5)):(r=1,i=1);const g=.2;r+=f.random(-g,g),i+=f.random(-g,g);let u=f.color(s,f.config.hasSandGrain?c*i:c,f.config.hasSandGrain?d*i:d);e.stroke(u),e.point(a,t)}f.colorMode(f.RGB)}let hexData=[{name:"II",data:"ffffffffffffd6be67e67d6bffffffffffff"},{name:"VI",data:"ffffffffffffeafe6fe6feafffffffffffff"},{name:"VII",data:"ffffffffffffdd7defde7dd7ffffffffffff"},{name:"IX",data:"ffffffffffff9b592fb2fab5ffffffffffff"},{name:"IV",data:"ffffffffffffe97e97e97e97ffffffffffff"},{name:"XI",data:"ffffffffffffc2be6fe6fdafffffffffffff"},{name:"XII",data:"ffffffffffffeabdebdebcabffffffffffff"},{name:"XV",data:"fffffffffffff57ef7ef7f57ffffffffffff"},{name:"XX",data:"ffffffffffffdd7dd7dd7defffffffffffff"},{name:"XL",data:"ffffffffffffbb5badbcdbcdffffffffffff"},{name:"LI",data:"ffffffffffffed7ed7ed7ed7ffffffffffff"},{name:"LII",data:"fffffffffffff6ff6ff6ff6fffffffffffff"},{name:"LV",data:"ffffffffffffe97ed7ed7e97ffffffffffff"},{name:"LVI",data:"ffffffffffffcebddfddfcabffffffffffff"},{name:"LX",data:"ffffffffffffd6bdabdabd6bffffffffffff"},{name:"XC",data:"ffffffffffffd5bdabda7d67ffffffffffff"},{name:"CI",data:"ffffffffffff92d92b933ab3ffffffffffff"},{name:"CII",data:"ffffffffffff9b5935a35ab5ffffffffffff"},{name:"CV",data:"ffffffffffffcdbdd7de7ce7ffffffffffff"},{name:"CX",data:"ffffffffffffd6bd27d27c4bffffffffffff"},{name:"CC",data:"ffffffffffffcdbcbbd1bd1bffffffffffff"},{name:"DI",data:"ffffffffffffcd7de7de7cd3ffffffffffff"},{name:"DII",data:"ffffffffffffeb7eafecfecfffffffffffff"},{name:"DV",data:"fffffffffffff57f37f37f57ffffffffffff"},{name:"DX",data:"ffffffffffffd5be6be67d67ffffffffffff"},{name:"MI",data:"ffffffffffffeabe6be6bdabffffffffffff"},{name:"MII",data:"ffffffffffffdabeabe6be6bffffffffffff"},{name:"MV",data:"ffffffffffffeafecfecfeafffffffffffff"},{name:"MC",data:"ffffffffffffed7f57f37f37ffffffffffff"},{name:"III",data:"fffffffffffff6ff6ff6ff6fffffffffffff"}],palettes=[["#434567","#416881","#4C9B9E","#8BC5BE"]];function generateVariationsForPalette(f,e,a){return e.map((e=>{let t=f.color(e),o=rgbToHsl(f.red(t),f.green(t),f.blue(t)),n=hslToRgb((o[0]+f.random(-a,a))%360,o[1],f.constrain(o[2]+f.random(-a,a),0,100));return rgbToHex(n[0],n[1],n[2])}))}function rgbToHsl(f,e,a){f/=255,e/=255,a/=255;let t,o,n=Math.max(f,e,a),i=Math.min(f,e,a),r=(n+i)/2;if(n==i)t=o=0;else{var l=n-i;switch(o=r>.5?l/(2-n-i):l/(n+i),n){case f:t=(e-a)/l+(e<a?6:0);break;case e:t=(a-f)/l+2;break;case a:t=(f-e)/l+4}t/=6}return[360*t,100*o,100*r]}function hslToRgb(f,e,a){let t,o,n;if(0==e)t=o=n=a;else{function i(f,e,a){return a<0&&(a+=1),a>1&&(a-=1),a<1/6?f+6*(e-f)*a:a<.5?e:a<2/3?f+(e-f)*(2/3-a)*6:f}let r=a<.5?a*(1+e):a+e-a*e,l=2*a-r;e/=100,a/=100,t=i(l,r,(f/=360)+1/3),o=i(l,r,f),n=i(l,r,f-1/3)}return[Math.round(255*t),Math.round(255*o),Math.round(255*n)]}function rgbToHex(f,e,a){return"#"+((1<<24)+(f<<16)+(e<<8)+a).toString(16).slice(1)}function swapLastTwoElements(f){if(f.length>=2){const e=f.length-1,a=f.length-2;[f[e],f[a]]=[f[a],f[e]]}}const getRandomNumber=()=>Math.floor(1e4*Math.random()),genTokenData=f=>{let e={},a="0x";for(var t=0;t<64;t++)a+=Math.floor(16*Math.random()).toString(16);return e.hash=a,e.tokenId=(1e6*f+Math.floor(1e3*Math.random())).toString(),e},getRandomTokenData=()=>(console.log("TokenData is not defined, generating fake one..."),genTokenData(getRandomNumber())),getSeedFromToken=tokenData=>parseInt(tokenData.hash.slice(0,16),16);let TOTAL_IMAGES=hexData.length,SEED=123456789;function mulberry32(f){let e=f;return function(){e|=0,e=e+1831565813|0;let f=Math.imul(e^e>>>15,1|e);return f^=f+Math.imul(f^f>>>7,61|f),((f^f>>>14)>>>0)/4294967296}}function fisherYatesShuffle(f,e){let a,t,o=e.length;const n=mulberry32(f);for(;0!==o;)t=Math.floor(n()*o),o-=1,a=e[o],e[o]=e[t],e[t]=a;return e}function generateIndices(f,e){return fisherYatesShuffle(f,Array.from({length:e},((f,e)=>e)))}function selectImage(f,e){return generateIndices(SEED,e)[f%e]}window.tokenData={hash:"0x44ffc615aaa41c1b8cb3d8a8edaafb5d7f654e3681157b6688cb70e65c021da8",tokenId:"7101000228"};const sketch=function(f){f.keyPressed=function(){if(13===f.keyCode){let e=`bright-moments-sanskrit--${f.config.seed}.png`;f.saveCanvas(e,"png")}},f.setup=function(){let e=getSeedFromToken(tokenData);console.log("Seed : "+e),f.randomSeed(e),f.noiseSeed(e);let a=window.innerWidth,t=window.innerHeight,o=9/16,n=t*o,i=a/o;n>a?(n=a,i=n/o):(i=t,n=i*o);let r=Math.floor(n),l=Math.floor(i);f.finalCanvasSize={width:r,height:l},console.log("s.finalCanvasSize",f.finalCanvasSize);let s=562.5,c=1e3;s>r?(s=r,c=s/o):(c=l,s=c*o),f.finalWorkingSize={width:Math.floor(s),height:Math.floor(c)},console.log("s.finalWorkingSize",f.finalWorkingSize);let d=Math.min(f.finalWorkingSize.width,f.finalWorkingSize.height);f.finalSquareSize=d,f.workingSquareSize=1e3,f.modifier=f.finalSquareSize/f.workingSquareSize,console.log("s.modifier",f.modifier),console.log("s.finalSquareSize",f.finalSquareSize),a=2*Math.floor(a/2),t=2*Math.floor(t/2);const g=f.workingSquareSize,u=f.workingSquareSize,h=f.random(-30,30)*f.modifier,S=f.random(-30,30)*f.modifier;let m=f.modifier/2*7;m=m<5?5:m;let k=f.modifier/2*7;k=k<5?5:k,m=6,k=6,console.log("letterBlur",m),console.log("letterRoundBlur",k);let b=100*f.modifier/2;b=b<100?100:b;const w=f.random()>.8;let p=palettes[f.floor(f.random(0,palettes.length))];f.random()>.8&&swapLastTwoElements(p),generateVariationsForPalette(f,p,10),console.log(p),p=stretchPalette(f,p,4);const x=selectImage(tokenData.tokenId,hexData.length);console.log("chosenLetterIndex",x),f.config={seed:e,currentStep:0,debug:!1,width:g,height:u,modifier:f.modifier,isWebGL:!1,showInfos:!1,pixelDensity:1,hasStrokeOnBorders:!0,letterResolution:12,letterOffsetX:h,letterOffsetY:S,externalStrokeSize:b,isChladniColorsReversed:!0,hasGradientInsideLayers:!0,isLetterCentered:w,backgroundColor:{r:255,g:255,b:255},letterRoundBlur:k,letterBlur:m,letterFill:255,hasToErodeEdges:!1,isOutlineBlurred:!0,blockSize:g>u?u/12:g/12,chladniParams:{a:f.random(-8,-10),b:f.random(-8,-10),n:f.random(-10,10),m:f.random(-10,10)},maxLevel:255,numberOfLayers:4,layerStep:63.75,hasSandGrain:!1,letterOutlines:[{thickness:f.floor(10*f.modifier),color:[0,0,0],opacity:220},{thickness:f.floor(8*f.modifier),color:[0,0,0],opacity:180},{thickness:f.floor(6*f.modifier),color:[0,0,0],opacity:120},{thickness:f.floor(4*f.modifier),color:[0,0,0],opacity:80},{thickness:f.floor(4*f.modifier),color:[0,0,0],opacity:60}],letterData:hexData[x].data,letterName:hexData[x].name,palette:p},console.log("chladniParams",f.config.chladniParams),f.pixelDensity(1),f.createCanvas(f.finalCanvasSize.width,f.finalCanvasSize.height,f.config.isWebGL?f.WEBGL:f.P2D)},f.draw=function(){console.log("Draw start..."),f.sanskritImage=drawSanskritLayer(f),f.outlinesImage=drawOutlinesLayer(f),f.chladniImage=drawChladniLayer(f),f.background(f.config.palette[0]),f.waterImage=drawWaterLayer(f);let e=(f.finalCanvasSize.width-f.finalSquareSize)/2,a=(f.finalCanvasSize.height-f.finalSquareSize)/2,t=f.createGraphics(f.finalSquareSize-4,f.finalSquareSize-4);t.copy(f.chladniImage,2,2,f.workingSquareSize-4,f.workingSquareSize-4,0,0,f.finalSquareSize-4,f.finalSquareSize-4),f.image(t,e,a,f.finalSquareSize,f.finalSquareSize),f.blend(f.waterImage,0,0,f.finalCanvasSize.width,f.finalCanvasSize.height,0,0,f.finalCanvasSize.width,f.finalCanvasSize.height,f.OVERLAY),console.log("Draw end."),f.noLoop()}},sketchInstance=new p5(sketch,document.getElementById("sketch")); }],