0x86414e2d…61b5sent to0x71aa097b…d4ca·#17,111,198·view on Etherscan
<head>
<meta charset="UTF-8">
<title>Fibrant</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.0/p5.js"></script>
<script id="genart-tweaks">const tweaks = {"tweak_range":1,"tweak_range_2":1,"bool":true,"tweak_select":"sin","hex_color":"#ff005b","rgba_color":{"r":248,"g":214,"b":40,"a":1}};</script></head>
<body>
<style> body {
background: #000;
width: 100vw;
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
flex-direction: row;
margin: 0
}
canvas {
margin: auto;
display: block;
box-shadow: 0 2px 12px -2px rgba(0, 0, 0, .15)
}</style><script>window.METADATA = {};
function onMetadata() {
window.top?.postMessage(
`genart:metadata:${JSON.stringify(window.METADATA)}`,
"*"
);
}
function onDone(index = 0) {
window["RENDERED_INDEX"] = index;
window.top?.postMessage(`genart:done:${index}`, "*");
window.onImageRendered && window.onImageRendered(index);
}
function random_hash() {
let chars = "0123456789abcdef";
let result = "0x";
for (let i = 64; i > 0; --i)
result += chars[Math.floor(Math.random() * chars.length)];
return result;
}
function setMetadata(prop, value) {
window.METADATA[prop] = value;
}
function getMetadata(prop) {
return window.METADATA[prop];
}
class Random {
seed;
decimals;
constructor(hash, decimals = 3) {
this.seed = parseInt(hash.slice(0, 16), 16);
this.decimals = decimals;
}
random_dec() {
this.seed ^= this.seed << 13;
this.seed ^= this.seed >> 17;
this.seed ^= this.seed << 5;
return (
((this.seed < 0 ? ~this.seed + 1 : this.seed) % 10 ** this.decimals) /
10 ** this.decimals
);
}
random_between(a, b) {
return a + (b - a) * this.random_dec();
}
random_int(a, b) {
return Math.floor(this.random_between(a, b + 1));
}
random_choice(x) {
return x[Math.floor(this.random_between(0, x.length * 0.99))];
}
}
function createKeyListeners(ls) {
const l = {};
const add = (ks, f) => (l[ks.join("_")] = f);
const c = (n) => l[n] && l[n]();
const d = document.body;
let ks = [];
d.addEventListener("keydown", (e) => {
ks.push(e.key);
if (ks.length == 2) c(ks.join("_"));
});
d.addEventListener("keyup", () => {
if (ks.length == 1) c(ks.join("_"));
ks = [];
});
ls.forEach((l) => add(l.keys, l.fn));
}
</script><script id="genart-options">const options = { hash: random_hash() }</script><script>let canvas,DIM,bgc=[{n:"Light",c:[[42,26,89]]},{n:"Dark",c:[[0,0,0]]}],plts=[{n:"Tokyo",c:[[354,90,58],[348,80,59],[184,69,40],[187,37,69],[249,19,7],[199,49,16]]},{n:"Glass rose",c:[[355,91,42],[1,93,65],[192,60,16],[84,38,25],[49,92,86],[35,84,61]]},{n:"Bones",c:[[0,92,44],[0,0,95],[0,0,65],[0,0,6],[0,0,49]]},{n:"Tuna",c:[[27,35,46],[26,48,26],[27,49,85],[355,65,38],[355,100,74],[14,82,75],[16,85,58]]},{n:"Subway",c:[[183,89,70],[194,100,32],[167,55,77],[165,30,49],[86,100,20],[151,100,23],[78,42,52],[213,100,19]]},{n:"Peace",c:[[61,51,50],[57,71,38],[71,46,18],[69,56,10],[351,14,10],[21,29,15],[40,71,32],[41,87,42],[140,17,43],[95,47,78],[66,97,85]]},{n:"Rainbow",c:[[318,99,32],[238,74,38],[143,58,84],[103,54,69],[56,81,64],[352,77,61]]},{n:"Firehead",c:[[0,88,56],[36,87,64],[39,91,66],[354,74,21],[4,97,56],[5,91,54]]},{n:"Seth",c:[[359,72,43],[355,74,46],[19,59,53],[21,91,65],[208,77,65],[52,23,86],[61,100,90],[44,96,10],[55,33,43],[45,100,67]]},{n:"AutoHaus",c:[[357,84,33],[40,100,49],[208,100,19]]},{n:"Robot",c:[[23,84,47],[33,81,52],[42,34,85],[82,14,77],[198,80,16],[192,91,21],[179,43,43]]},{n:"Poco",c:[[195,60,13],[188,54,47],[2,98,50],[38,98,50],[27,96,80],[45,82,85]]},{n:"B&W",c:[[0,0,0],[0,0,100]]},{n:"Dinnertime",c:[[60,95,77],[51,82,59],[218,60,17],[234,91,5],[135,67,99],[120,6,50],[176,31,17],[8,89,35],[2,100,30]]},{n:"IceVulcano",c:[[359,99,48],[359,76,27],[187,53,34],[178,52,32],[110,12,10],[220,60,99],[135,2,43],[37,87,60],[22,72,31]]},{n:"MJ",c:[[5,75,49],[27,82,54],[251,74,5],[204,85,11],[171,78,37],[168,62,51],[12,63,58],[22,87,66],[336,26,28],[303,53,7]]},{n:"Watercolor",c:[[30,100,45],[32,59,67],[174,15,47],[41,39,85],[191,100,27],[171,89,7]]},{n:"Church",c:[[28,100,79],[200,100,50],[96,89,38],[114,74,15],[47,97,54],[180,8,90]]},{n:"Primary",c:[[192,100,35],[0,96,53],[36,99,54],[47,100,50]]},{n:"Rooster",c:[[192,100,35],[0,96,53],[212,89,14],[47,100,50]]},{n:"Spring",c:[[69,98,36],[128,96,18],[356,97,74],[16,100,74]]},{n:"Mars",c:[[71,22,90],[221,36,38],[5,67,50],[51,100,56]]},{n:"Purple Haze",c:[[39,100,50],[47,100,50],[324,63,30],[324,56,52]]},{n:"Bruise",c:[[324,63,30],[0,0,10],[39,100,50],[47,100,50]]},{n:"Coral",c:[[29,100,75],[326,100,75],[0,96,48],[0,100,51]]},{n:"Subzero Ice",c:[[192,100,35],[212,89,14],[0,0,98],[0,0,81]]},{n:"Subzero Rose",c:[[192,100,35],[212,89,14],[0,0,98],[0,96,48]]},{n:"Subzero Red",c:[[192,100,35],[212,89,14],[0,96,53],[0,96,48]]},{n:"Sprout",c:[[20,94,63],[42,93,64],[94,38,59],[162,43,46]]},{n:"Mango",c:[[29,100,75],[36,100,54],[326,100,75],[347,87,57]]},{n:"Fire",c:[[29,100,75],[0,96,48],[30,100,45],[49,100,50]]}];const DS=1600;let WIDTH=window.innerWidth,HEIGHT=window.innerHeight;const ES=1600;DIM=WIDTH>4*HEIGHT/5?4*HEIGHT/5:WIDTH;let rHs,bgCl,bgClP,pSWMi,pSWMa,cSW,lLP,paR,paC,sEP,nSYV,cuF,wLMi,nSXSM,nSYSM,maWi,maHe,dP1,nOL,cPlC,cPlC2,sp,ep,osp,oep,cl,noC,mP1o,mP2o,cBC,mP,wLs,colorshademode,M=DIM/DS,rHss=options.hash,pAL=.6,particleAlphaHigh=.9,lLPMa=.4,lLPMiT=.15,gMWi=0,gMHe=0,grPA=[],aEPA=[],clA=[],wLMa=0,sCMo=1,nLSc=1,lLPMi=-1,lSp=!1,cC=0,iOCx=!1,iOCy=!1,mSlYT=1,exportToFile=!1,nLD=0,nLPf=20,prv=0,pcv=0,cPD=options.pixelDensity,mPD=1;function setup(){let e=getURLParams();null!=e.hash?(rHs=new Random(e.hash,4),rHss=e.hash):rHs=new Random(rHss,4),null!=e.pixeldensity&&(mPD=int(e.pixeldensity)),null!=e.exportToFile&&(exportToFile=boolean(e.exportToFile)),print("currentHash: "+rHss),cPD<mPD&&(cPD=mPD),1==exportToFile&&(pixelDensity(cPD),DIM=ES,WIDTH=ES,HEIGHT=2e3,M=DIM/DS),DW=DS,DH=2e3,canvas=createCanvas(DW*M,DH*M),colorMode(HSL,360,100,100,1),angleMode(DEGREES),seed=round(1e9*rHs.random_dec()),noiseSeed(seed),window.METADATA={},createNewDrawing()}function createNewDrawing(){noC=rHs.random_int(140,160),sEP=w_r([1,2,5,6,8],[10,10,1,6,5]),colorshademode=w_r([0,3,4],[15,2,1]),1==sEP||6==sEP||8==sEP?(prv=w_r([[2,8],[500,2e3]],[1,3]),paR=rHs.random_int(prv[0],prv[1]),paC=rHs.random_int(3,15),iOCx=!0):2==sEP&&(paR=rHs.random_int(3,15),pcv=w_r([[2,8],[500,2e3]],[1,3]),paC=rHs.random_int(pcv[0],pcv[1]),lLPMi=DH/paR/DH,iOCy=!0),5==sEP&&(prv=w_r([[10,15],[500,2e3]],[50,15]),paR=rHs.random_int(prv[0],prv[1]),nLSc=.5,paC=rHs.random_int(13,30),cSz=rHs.random_between(DW/3,DW/2.2),noC*=3,lLPMa=.5),6==sEP&&(paR=rHs.random_int(40,50),noC=floor(noC/2),paC=rHs.random_int(4,15),wLs=w_r([[20,30,0],[50,80,1],[200,250,2],[500,1e3,3],[2e3,5e3,4],[2e4,5e4,5]],[1,1,1,1,1,1]),wLMi=wLs[0],wLMa=wLs[1],nSXSM=w_r([.1,1,3,5],[1,1,1,1]),nSYSM=w_r([3,5],[1,1]),lLPMa=.7,lLPMiT=.2,iOCx=!0),8==sEP&&(gMWi=rHs.random_between(.2,.6),gMHe=rHs.random_between(.2,.6),paR=rHs.random_int(50,100),sCMo=.5,iOCx=!0,mSlYT=.5),-1==lLPMi&&(lLPMi=DW/paC/DW),lLPMi<lLPMiT&&(lLPMi=lLPMiT),lLP=rHs.random_between(lLPMi,lLPMa),pSWMi=.08,pSWMa=.12,bgClP=bgc[rHs.random_int(0,1)],daPsh=rHs.random_int(0,bgClP.c.length-1),bgCl=bgClP.c[daPsh],background(bgCl),1!=sEP&&2!=sEP||(lSp=w_r([!0,!1],[1,5])),mP=plts[rHs.random_int(0,plts.length-1)],nSYV=w_r([[1,10],[1,200]],[0,10]),updateGridMargins(),createGridPointArray(paR,paC),assignColorsTogridPoints(),populateMetadata(),generateBezierClusters()}function assignColorsTogridPoints(){grPA.forEach((function(e,r){e.pCo=color(prcP())}))}function generateBezierClusters(){for(let e=0;e<noC;e++)prepCluster(),generateBeziers()}function draw(){noFill(),cuF=frameCount,1==exportToFile?drawForExport():(0==linesLeftToDraw()&&(noLoop(),onDone()),drawLinesForFrame(nLD,nLPf),nLD+=nLPf)}function linesLeftToDraw(){let e=!0;return clA.forEach((function(r,o){0==r.clusterFinishedDrawing&&(e=!1)})),0==e}function drawLinesForFrame(e,r){clA.forEach((function(o,n){let t;e+r>o.bCA.length-1?(t=o.bCA.length-1,o.clusterFinishedDrawing=!0):t=e+r;for(let r=e;r<t;r++)strokeWeight(o.bCA[r].beSw*M),stroke(o.bCA[r].sCol),bezier(o.bCA[r].obSP.x*M,o.bCA[r].obSP.y*M,o.bCA[r].obMP1.x*M,o.bCA[r].obMP1.y*M,o.bCA[r].obMP2.x*M,o.bCA[r].obMP2.y*M,o.bCA[r].obEP.x*M,o.bCA[r].obEP.y*M)}))}function drawForExport(){let e=0;for(;1==linesLeftToDraw();)e+=1,drawLinesForFrame(nLD,nLPf),nLD+=nLPf;print("Animation finished, exported: "+e+"frames."),saveCanvasToFile(),noLoop(),onDone()}function prepCluster(){let e;cBC=new BezierCurveCluster,cl=0;let r=w_r([200,300,600,5e3],[1,1,12,10]),o=w_r([300,500,800,1e4],[1,1,12,10]);r*=nLSc,o*=nLSc,6==sEP&&(r=w_r([1e3,2e4,3e4],[1,5,5]),o=w_r([2e4,3e4,4e4],[1,5,5])),nOL=rHs.random_int(r,o);let n,t=caMaCLl(),s=caMaRLl();if(wL=rHs.random_int(wLMi,wLMa),1==sEP||5==sEP||6==sEP||8==sEP){let r=rHs.random_int(0,paR-1);aEPA=[],grPA.forEach((function(e,o){e.row==r&&aEPA.push(e)}));let o=rHs.random_int(0,aEPA.length-2);n=o<aEPA.length-1-t?t+o:aEPA.length-1;let s=rHs.random_int(o+1,n);e=aEPA[o],sp=createVector(e.gp.x,e.gp.y);let a=aEPA[s];ep=createVector(a.gp.x,a.gp.y)}if(2==sEP){let r=rHs.random_int(0,paC-1);aEPA=[],grPA.forEach((function(e,o){e.column==r&&aEPA.push(e)}));let o=rHs.random_int(0,aEPA.length-2);o<aEPA.length-1-s?eRMa=s+o:eRMa=aEPA.length-1;let n=rHs.random_int(o+1,eRMa);e=aEPA[o],sp=createVector(e.gp.x,e.gp.y);let t=aEPA[n];ep=createVector(t.gp.x,t.gp.y)}dP1=w_r([1,-1],[1,1]),osp=sp.copy(),oep=ep.copy(),cPlC=e.pCo,0==colorshademode&&(cPlC=geCoD(cPlC,8),cPlC2=e.pCo),3==colorshademode&&(cPlC2=geCoD(cPlC,30)),4==colorshademode&&(cPlC2=geCoH(cPlC,50)),dP1=w_r([-1,1],[1,1]),cC+=1}function generateBeziers(){for(let e=0;e<nOL;e++){let r=new BezierCurve;cl+=1;let o=rHs.random_between(pSWMi,pSWMa);cPlC=color(hue(cPlC),saturation(cPlC),lightness(cPlC),rHs.random_between(pAL,particleAlphaHigh)),cPlC2=color(hue(cPlC2),saturation(cPlC2),lightness(cPlC2),rHs.random_between(pAL,particleAlphaHigh)),spSc=o;let n=rHs.random_int(nSYV[0],nSYV[1]),t=rHs.random_int(1,10);if(2==sEP){let e=n;n=t,t=e}6==sEP&&(t*=nSXSM,n*=nSYSM),3!=colorshademode&&4!=colorshademode||(r.sCol=lerpColor(cPlC,cPlC2,cl*(1/nOL)));let s=ep.x-sp.x,a=ep.y-sp.y;1==lSp&&(1==sEP&&s/DW<.5&&(n*=s/DW*3),2==sEP&&a/DH<.4&&(t*=a/DH*2));let c=createVector(sp.x+s*rHs.random_between(.1,.5),sp.y+a*rHs.random_between(.1,.5)),i=createVector(sp.x+s*rHs.random_between(.6,1),sp.y+a*rHs.random_between(.5,1)),l=createVector(0,0),p=createVector(0,0),P=createVector(0,0),d=createVector(0,0);1==cl&&(mP1o=c,mP2o=i),1!=sEP&&8!=sEP||(r.obSP=createVector(sp.x+noise(sp.x,sp.y)*t*w_r([-1,1],[1,1]),sp.y+noise(sp.x,sp.y)*n*w_r([-1,1],[1,1])),r.obMP1=createVector(c.x,c.y+noise(c.x,c.y)*n*w_r([-1,1],[1,1])),r.obMP2=createVector(i.x,i.y+noise(i.x,i.y)*n*w_r([-1,1],[1,1])),r.obEP=createVector(ep.x+noise(ep.x,ep.y)*t*w_r([-1,1],[1,1]),ep.y+noise(ep.x,ep.y)*n*w_r([-1,1],[1,1]))),2==sEP&&(r.obSP=createVector(sp.x+noise(sp.x,sp.y)*t*w_r([-1,1],[1,1]),sp.y+noise(sp.x,sp.y)*n*w_r([-1,1],[1,1])),r.obMP1=createVector(c.x+noise(c.x,c.y)*t*w_r([-1,1],[1,1]),c.y),r.obMP2=createVector(i.x+noise(i.x,i.y)*t*w_r([-1,1],[1,1]),i.y),r.obEP=createVector(ep.x+noise(ep.x,ep.y)*t*w_r([-1,1],[1,1]),ep.y+noise(ep.x,ep.y)*n*w_r([-1,1],[1,1]))),5==sEP&&(l.x=sp.x+noise(sp.x,sp.y)*t*w_r([-1,1],[1,1]),l.y=sp.y+noise(sp.x,sp.y)*n*w_r([-1,1],[1,1]),P.x=c.x,P.y=c.y+noise(c.x,c.y)*n*w_r([-1,1],[1,1]),d.x=i.x,d.y=i.y+noise(i.x,i.y)*n*w_r([-1,1],[1,1]),p.x=ep.x+noise(ep.x,ep.y)*t*w_r([-1,1],[1,1]),p.y=ep.y+noise(ep.x,ep.y)*n*w_r([-1,1],[1,1]),1==chPIc(l,createVector(DW/2,DH/2),cSz)&&1==chPIc(P,createVector(DW/2,DH/2),cSz)&&1==chPIc(d,createVector(DW/2,DH/2),cSz)&&1==chPIc(p,createVector(DW/2,DH/2),cSz)&&(r.obSP=l,r.obMP1=P,r.obMP2=d,r.obEP=p)),6==sEP&&(r.obSP=createVector(sp.x,sp.y+noise(sp.x,sp.y)*t*w_r([-1,1],[1,1])),r.obMP1=createVector(c.x,c.y+noise(c.x,c.y)*n*w_r([-1,1],[1,1])),r.obMP2=createVector(i.x,i.y+noise(i.x,i.y)*n*w_r([-1,1],[1,1])),r.obEP=createVector(ep.x,ep.y+noise(ep.x,ep.y)*t*w_r([-1,1],[1,1]))),r.beSw=o,r.sCol=cPlC,null!=r.obSP&&cBC.bCA.push(r),1==sEP||8==sEP||5==sEP?(sp.y=osp.y+cl*spSc*sCMo*dP1,ep.y=oep.y+cl*spSc*sCMo*dP1):2==sEP?(sp.x=osp.x+cl*spSc*dP1,ep.x=oep.x+cl*spSc*dP1):6==sEP&&(sp.y=osp.y+cl*pSWMi*dP1,ep.y=oep.y+cl*pSWMi*dP1,1==dP1?(sp.x=osp.x+100*sin(TWO_PI/wL*cl),ep.x=oep.x+100*sin(TWO_PI/wL*cl)):(sp.x=osp.x+100*cos(TWO_PI/wL*cl),ep.x=oep.x+100*cos(TWO_PI/wL*cl))),1!=iOCy&&(sp.y>DH-maHe/2||ep.y>DH-maHe/2||sp.y<maHe*mSlYT||ep.y<maHe*mSlYT)&&(e=nOL),1!=iOCx&&(sp.x>DW-maHe/2||ep.x>DW-maHe/2||sp.x<maHe||ep.x<maHe)&&(e=nOL)}clA.push(cBC)}function chPIc(e,r,o){return e.dist(r)<o}function caMaCLl(){let e=DW*lLP,r=(DW-maWi)/paC;return Math.floor(e/r)}function caMaRLl(){let e=DH*lLP,r=(DH-maHe)/paR;return Math.floor(e/r)}function createGridPointArray(e,r){aSpWi=DW-maWi,aSpHe=DH-maHe;for(let o=0;o<=e;o++)for(let n=0;n<=r;n++){let t=new Gridpoint,s=createVector(aSpWi/r*n+maWi/2,aSpHe/e*o+maHe/2);t.column=n,t.row=o,t.gp=s,grPA.push(t)}}function reloadAfter5seconds(){location.reload()}function saveCanvasToFile(){print("Exporting: "+rHss),saveCanvas("Fibrant_by_jenslabs_"+options.tokenId+"_"+rHss,"png"),print("Export finished")}function updateGridMargins(){maWi=DW*gMWi,maHe=DH*gMHe}function prcP(){return slCo=mP.c[rHs.random_int(0,mP.c.length-1)],slCo}function geCoD(e,r){let o=e,n=0,t=0,s=0,a=rHs.random_int(-r,r),c=rHs.random_int(-r,r),i=rHs.random_int(-r,r);return n=lightness(e)>255-a?255:lightness(e)-a<0?0:lightness(e)+a,t=saturation(e)>255-c?255:saturation(e)-c<0?0:saturation(e)+c,s=hue(e)>359-i?359:hue(e)-i<0?0:hue(e)+i,o=color(round(s),round(t),round(n)),o}function geCoH(e,r){let o=e,n=0,t=rHs.random_int(-r,r);return n=hue(e)>359+t?359:hue(e)+t<0?0:hue(e)+t,o=color(round(n),saturation(o),lightness(o)),o}function keyReleased(){"e"==key&&saveCanvasToFile()}function w_r(e,r){let o;for(o=0;o<r.length;o++)r[o]+=r[o-1]||0;let n=rHs.random_between(0,1)*r[r.length-1];for(o=0;o<r.length&&!(r[o]>n);o++);return e[o]}function populateMetadata(){let e=0,r=0,o="N/A";paC>100&&(e=1),paR>100&&(r=1),null!=wLs&&(o=["20-30","50-80","200-250","500-1000","2000-5000","20000-50000"][wLs[2]]),setMetadata("Palette",mP.n),setMetadata("Background Color",bgClP.n),setMetadata("No of Rows",["Low","High"][r]),setMetadata("No of Columns",["Low","High"][e]),setMetadata("Form",["","Vertical","Horizontal","","","Circle","Snakes","","Square"][sEP]),setMetadata("Flow hertz",o),setMetadata("Constrained spread",lSp),setMetadata("Color depth",["Low","","","Medium","High"][colorshademode]),onMetadata()}class Gridpoint{constructor(){this.row,this.column,this.gp=createVector(0,0),this.pCo}}class BezierCurve{constructor(){this.obSP,this.obMP1,this.obMP2,this.obEP,this.beSw,this.sCol}}class BezierCurveCluster{constructor(){this.clusterNumber,this.bCA=[],this.clusterFinishedDrawing=!1}}</script></body>