let hash,R,M,mainCanvas,defaultHeight=5e3,defaultWidth=9*defaultHeight/16,saveBoolean=!1,hashPairs=[],decPairs=[],circles=[];const browserName=function(e){switch(!0){case e.indexOf("edge")>-1:return"MS Edge";case e.indexOf("edg/")>-1:return"Edge/Chromium";case e.indexOf("opr")>-1&&!!window.opr:return"Opera";case e.indexOf("chrome")>-1&&!!window.chrome:return"Chrome";case e.indexOf("trident")>-1:return"MS IE";case e.indexOf("firefox")>-1:return"Mozilla Firefox";case e.indexOf("safari")>-1:return"Safari";default:return"other"}}(window.navigator.userAgent.toLowerCase());function setup(){setupParams(),setupCanvas(),circles=createCirclePacking(100,defaultWidth*M,defaultHeight*M,params.Composition)}function draw(){switch(background(decPairs[8]%2==0?color(0,0,15):color(0,0,90)),drawGradientFrame(),push(),translate(defaultWidth/2*M,defaultHeight/2*M),push(),rotate(30*R.random_dec()*(R.random_dec()>.5?-1:1)),"On"==params.Shear&&(shearX(5*R.random_dec()*(R.random_dec()>.5?-1:1)),shearY(5*R.random_dec()*(R.random_dec()>.5?-1:1))),params.order){case"Accend":circles.sort(((e,a)=>a.diameter-e.diameter));break;case"Descend":circles.sort(((e,a)=>e.diameter-a.diameter))}let e=0;if("Back"==params.Spot)for(let a of circles)e++<100&&drawSpot(a.x,a.y,6*a.diameter,100);drawingContext.shadowColor=color(0,0,0,33),drawingContext.shadowBlur=M*defaultHeight/50;for(let e of circles)recursiveArc(e.x,e.y,0,360,0,3*e.diameter,3);if("Front"==params.Spot)for(let a of circles)e++<100&&drawSpot(a.x,a.y,6*a.diameter,100);pop(),pop(),push(),translate(defaultWidth/2*M,defaultHeight/2*M),drawPostEffect(),pop(),noLoop(),saveBoolean&&save("Marching_Resonances_"+hash+".png")}function drawGradientFrame(){let e=360*R.random_dec(),a=R.random_dec()*defaultWidth*M/2,r=R.random_dec()*defaultHeight*M/2;if(push(),strokeWeight(.5*M),"On"==params.Frame){for(let o=0;o<2;o++){let n=defaultWidth/map(o,0,2,20,7)*M;if(push(),1==o){let o=360*R.random_dec(),n=drawingContext.createConicGradient(o,width/2+cos(e)*a,height/2+sin(e)*r);n.addColorStop(0,params.Colors[0]),n.addColorStop(1/3,params.Colors[1]),n.addColorStop(2/3,params.Colors[2]),n.addColorStop(1,params.Colors[0]),drawingContext.fillStyle=n}else fill(55,5,95);setupFrame(n,n,width-2*n,height-2*n),pop()}drawingContext.clip()}}function setupParams(){hash=tokenData.hash,console.log("hash : "+hash),seed=parseInt(hash.slice(0,16),16),noiseSeed(seed),randomSeed(seed);for(let e=0;e<32;e++)hashPairs.push(hash.slice(2+2*e,4+2*e));decPairs=hashPairs.map((e=>parseInt(e,16))),params=getParams(decPairs),console.log("================================================"),console.log("Frame : ",params.Frame),console.log("Order : ",params.Order),console.log("Shape : ",params.Shape),console.log("Shear : ",params.Shear),console.log("Colors : ",params.Colors),console.log("Gradient : ",params.Gradient),console.log("Composition : ",params.Composition),console.log("Palette : ",params.Palette),console.log("Constant : ",params.Constant),console.log("Spot : ",params.Spot),console.log("================================================")}function setupCanvas(){let e,a;saveBoolean?(e=9*defaultHeight/16,a=defaultHeight):(e=9*windowHeight/16,a=windowHeight),mainCanvas=createCanvas(e,a),colorMode(HSB,360,100,100,100),angleMode(DEGREES),smooth(),pixelDensity(1),grainBuffer=createGraphics(width,height,WEBGL),grainShader=grainBuffer.createShader(vert,frag),console.log("width : "+width),console.log("height : "+height),console.log("================================================"),M=height/defaultHeight,console.log("M : "+M),R=new Random}function keyPressed(){"s"!=key&&"S"!=key||(saveBoolean=!0,setup(),draw())}class Random{constructor(){this.useA=!1;let e=function(e){let a=parseInt(e.substr(0,8),16),r=parseInt(e.substr(8,8),16),o=parseInt(e.substr(16,8),16),n=parseInt(e.substr(24,8),16);return function(){a|=0,r|=0,o|=0,n|=0;let e=(a+r|0)+n|0;return n=n+1|0,a=r^r>>>9,r=o+(o<<3)|0,o=o<<21|o>>>11,o=o+e|0,(e>>>0)/4294967296}};this.prngA=new e(hash.substr(2,32)),this.prngB=new e(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 getParams(e){const a=["On","Off"],r=["Curve","Straight","Mix"],o=["Conic","Radial","Mix","Solid"],n=["Accend","Descend","Mix"],t=colorScheme[e[1]%colorScheme.length];let s=e[10]%9,i=e[12]%9;switch(s){case 0:case 1:case 2:case 3:case 4:case 5:case 6:s=n[0];break;case 7:s=n[1];break;case 8:s=n[2]}switch(i){case 0:case 2:case 4:case 6:i=r[0];break;case 1:case 3:case 5:case 7:i=r[2];break;case 8:i=r[1]}return{Frame:e[0]%10>3?"On":"Off",Palette:t.name,Colors:t.colors,Composition:e[2]%10>5?"Random":"Packing",Shear:a[e[3]%a.length],Shape:r[e[8]%r.length],Order:s,Gradient:o[e[5]%o.length],Constant:1+e[12]%10,Spot:e[13]%2==0?"Back":"Front"}}const colorScheme=[{name:"Golden Thread Butterfly",colors:["#f19b4e","#7f6640","#dc5845","#e4d6c8","#929e79","#472c2a"]},{name:"Navy Lion Peony",colors:["#83834f","#e0c786","#30363d","#db2f38","#66989c","#e9ded1"]},{name:"Charcoal Wind",colors:["#151015","#511a28","#8e563a","#fcfbfa","#bf9969","#718282"]},{name:"Wisteria Spring",colors:["#e6bc8a","#da4742","#202125","#909062","#dba380","#dcc6b9"]},{name:"Fragrant Ground",colors:["#73924d","#eb9f48","#b19564","#aabcb2","#f0e3d7","#6b4b2b"]},{name:"Lagenaria Siceraria",colors:["#f0ebe1","#d8ccb3","#cd2a41","#8bc08f","#f69fac","#c4714c"]},{name:"Tang grass",colors:["#f9f5ec","#d8ae6a","#d4824b","#588c92","#89bfb3","#b55847"]},{name:"Pearl and Dragon",colors:["#dad7c3","#c7895a","#343530","#899c63","#60827d","#d6b58a"]},{name:"Red Dragon",colors:["#e5e9e9","#da2034","#8db4bb","#4f6a31","#6ab26d","#e4bc89"]},{name:"Phoenix Peony",colors:["#3c3e46","#ddded7","#c07552","#5b6984","#809c73","#c3ae98"]},{name:"Kara Ori",colors:["#4d4638","#f77843","#fbc836","#d8b85a","#6c6e47","#b0e3ee"]},{name:"Yu-Zen Dyeing",colors:["#f5da30","#338ab6","#8a8740","#73563f","#332321","#e0dfdf"]},{name:"Bird and Flower",colors:["#abb163","#e9e1cb","#9b7c4a","#74a7a0","#e46641","#5a5925"]},{name:"Japanese Ink",colors:["#000000","#aaaaaa","#7f7f7f","#c9c9c9","#ffffff","#7f6640"]}],vert="\nprecision highp float;\nattribute vec3 aPosition;\nattribute vec2 aTexCoord;\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nvarying vec2 vVertTexCoord;\nvoid main(void) {\n vec4 positionVec4 = vec4(aPosition, 1.0);\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n vVertTexCoord = aTexCoord;\n}\n",frag="\nprecision highp float;\nvarying vec2 vVertTexCoord;\n\nuniform sampler2D source;\nuniform float noiseSeed;\nuniform float noiseAmount;\n\nfloat rand(vec2 n) { \n return fract(sin(dot(n, vec2(12.9898, 4.1414))) * 43758.5453);\n}\n\nvoid main() {\n // GorillaSun's grain algorithm\n vec4 inColor = texture2D(source, vVertTexCoord);\n gl_FragColor = clamp(inColor + vec4(\n mix(-noiseAmount, noiseAmount, fract(noiseSeed + rand(vVertTexCoord * 1981.820))),\n mix(-noiseAmount, noiseAmount, fract(noiseSeed + rand(vVertTexCoord * 1990.116))),\n mix(-noiseAmount, noiseAmount, fract(noiseSeed + rand(vVertTexCoord * 2020.118))),\n 0.\n ), 0., 1.);\n}\n";function setupFrame(e,a,r,o){drawFrame(createPoints(e,a,r,o))}function createPoints(e,a,r,o){let n=[createVector(e,a),createVector(e+r,a),createVector(e+r,a+o),createVector(e,a+o)],t=[];for(let e=0;e<n.length;e++){let a=n[e],s=n[(e+1)%n.length],i="On"==params.Shear?min(r,o)/80:0;for(let e=0;e<1;e+=.1){let n=p5.Vector.lerp(a,s,e),d=noise(r/2+n.x/r,o/2+n.y/o)*TWO_PI;n.add(p5.Vector.fromAngle(d).mult(i)),t.push(n)}}return t}function drawFrame(e){strokeWeight(.5*M),stroke(0,0,20),beginShape();for(let a=0;a<e.length;a++)vertex(e[a%e.length].x,e[a%e.length].y);endShape(CLOSE)}function createCirclePacking(e,a,r,o){let n=[];if("Random"===o)for(let o=0;o<e/2;o++){let e={x:(R.random_dec()-.5)*a,y:(R.random_dec()-.5)*r,diameter:r/15+R.random_dec()*r/15};n.push(e)}else{let o=0;const t=100;for(;n.length<e&&o<t;){let e={x:(R.random_dec()-.5)*a,y:(R.random_dec()-.5)*r,diameter:r/15+R.random_dec()*r/15},t=!0;for(let a=0;a<n.length;a++)if(dist(e.x,e.y,n[a].x,n[a].y)<(e.diameter+n[a].diameter)/2){t=!1;break}t&&n.push(e),o++}}return n}function recursiveArc(e,a,r,o,n,t,s){if(s<0)return;if(r>o){let e=r;r=o,o=e}if(n>t){let e=n;n=t,t=e}push(),translate(e,a);let i=1e3*R.random_dec(),d=1e3*R.random_dec(),c=90*noise(i,d),l=r+(sin(i+a/100+c*s)/2+.5)*(o-r),h=n+(cos(d+e/100+c*s)/2+.5)*(t-n);0==s?(drawArc(0,0,r,l,n,h),drawArc(0,0,l,o,n,h),drawArc(0,0,r,l,h,t),drawArc(0,0,l,o,h,t)):(recursiveArc(0,0,r,l,n,h,s-1),recursiveArc(0,0,l,o,n,h,s-1),recursiveArc(0,0,r,l,h,t,s-1),recursiveArc(0,0,l,o,h,t,s-1)),pop()}function drawArc(e,a,r,o,n,t){let s,i=params.Colors.concat(),d=R.random_dec()>.5,c=R.random_choice([4,2,1,.5,1/4,1/8,1/16,1/32,1/64])*params.Constant/5,l=R.random_choice([4,2,1,.5,1/4,1/8,1/16,1/32,1/64])*params.Constant/5;l=c,i=arrayShuffle(i),push(),translate(e,a),rotate(90*R.random_dec());let h=radians(r);switch("Safari"==browserName&&(h+=PI/2),params.Gradient){case"Conic":s=drawingContext.createConicGradient(h,0,0),d=!0;break;case"Solid":case"Mix":s=d?drawingContext.createConicGradient(h,0,0):drawingContext.createRadialGradient(0,0,max(0,n/2),0,0,max(0,2*t));break;case"Radial":s=drawingContext.createRadialGradient(0,0,max(0,n/2),0,0,max(0,3*t/2)),d=!1}if(d&&"Solid"!=params.Gradient?(s.addColorStop(0,i[0]),s.addColorStop(1,i[0]),s.addColorStop(constrain(1*(o-r)/360/2,0,1),i[2]),s.addColorStop(constrain(1*(o-r)/360,0,1),i[1])):"Solid"!=params.Gradient&&(s.addColorStop(0,i[0]),s.addColorStop(.5,i[2]),s.addColorStop(1,i[1])),"Solid"==params.Gradient){let e,a=0;for(let r=0;r<o/360;r+=e){let n=decPairs[a++%decPairs.length];e=o/(decPairs[n%decPairs.length]%5+2)/360,s.addColorStop(r,i[n%i.length]),0==r&&s.addColorStop(1,i[n%i.length]);let t=constrain(r+e-.001,0,1);isNaN(t)&&(t=0),s.addColorStop(t,i[3*n++%i.length])}}o-r<3||n<5*M||t-n<30*M?(noFill(),noStroke()):(stroke(0,0,20),strokeWeight(.5*M),fill(0,0,90)),drawingContext.fillStyle=s,push();let m=R.random_dec()>.5?-1:1;"On"==params.Shear&&(shearX(m*R.random_dec()*9),shearY(m*R.random_dec()*9));let f=1,u=[];switch(beginShape(),params.Shape){case"Straight":f=R.random_dec()<.9?.334*abs(o-r):1;break;case"Curve":f=1;break;case"Mix":f=R.random_dec()>.5?1:.5*abs(o-r)}for(let e=r;e<=o;e+=f){u.push(f);let a=t*sin(.5*e)*map(sin(map(e,r,o,0,360*c)),-1,1,.5,1);vertex(cos(e)*a,sin(e)*a)}u.reverse();for(let e=o;e>=r;e-=f){f=u[0],u.splice(0,1);let a=n*sin(.5*e)*map(sin(map(e,r,o,0,7*l)),-1,1,.5,1);vertex(cos(e)*a,sin(e)*a)}endShape(CLOSE),pop(),pop()}function arrayShuffle(e){for(let a=e.length-1;0<a;a--){let r=Math.floor(R.random_dec()*(a+1)),o=e[a];e[a]=e[r],e[r]=o}return e}function drawSpot(e,a,r,o){push(),translate(e,a),drawingContext.shadowBlur=0,drawingContext.shadowColor=null;for(let e=0;e<o;e++){let e=360*R.random_dec(),a=randomGaussian(.1,.5)*r/2;blob(cos(e)*a,sin(e)*a,1+randomGaussian(.1,R.random_dec())*a/25)}blendMode(BLEND),pop()}function blob(e,a,r){push(),translate(e,a),noStroke(),decPairs[8]%2==0?(blendMode(ADD),fill(0,0,100,4)):(blendMode(MULTIPLY),fill(0,0,0,2)),curveTightness(-2*R.random_dec()-1),beginShape();let o=[];for(let e=0;e<3;e++){let a=120*e,n=r/2+R.random_dec()*r,t={x:cos(a)*n,y:sin(a)*n};curveVertex(t.x,t.y),o.push(t)}for(let e of o)curveVertex(e.x,e.y);endShape(),pop()}function drawPostEffect(){imageMode(CENTER);let e=getTexture(width,height);push(),"Chrome"==browserName?drawingContext.globalAlpha=.6:("Safari"==browserName||"Mozilla Firefox"==browserName)&&(drawingContext.globalAlpha=.05),image(e,0,0,width,height),e.remove(),drawingContext.globalAlpha=1,pop(),grainBuffer.clear(),grainBuffer.reset(),grainBuffer.push(),grainBuffer.shader(grainShader),grainShader.setUniform("source",mainCanvas),grainShader.setUniform("noiseAmount",map(M,.1,2,.001,.1)),grainBuffer.rectMode(CENTER),grainBuffer.noStroke(),grainBuffer.rect(0,0,width,height),grainBuffer.pop(),push(),image(grainBuffer,0,0,width,height),grainBuffer.remove(),resetShader(),pop()}function getTexture(e,a){const r=createGraphics(e,a);r.randomSeed(seed),r.colorMode(HSB,360,100,100,100),r.angleMode(DEGREES),r.strokeWeight(1*M);for(let o=0;o<e;o+=20*e/defaultWidth)for(let n=0;n<a;n+=20*a/defaultHeight){let t=R.random_num(75,105),s=max(e,a)/2;r.stroke(0,0,100,3*R.random_dec()),r.line(o+r.cos(t)*s,n+r.sin(t)*s,o+r.cos(t+180)*s,n+r.sin(t+180)*s)}return r}
↓ show full (12,616 bytes)