<head>
<meta charset="utf-8">
<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>html,body {
margin: 0;
position: relative;
min-height: 100vh;
}
canvas {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
max-width: 100%;
max-height: 100%;
object-fit: scale-down;
filter: drop-shadow(0.3rem 0.3rem 0.3rem rgba(0,0,0,0.43));
}</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>
const hash = options.hash;
const rnd = new Random(hash, 5);
let paleta,fundao;function createWeightedSelector(e){const a=[];for(const F of e)for(let e=0;e<F.weight;e++)a.push(F.value);return function(){return a[Math.floor(rnd_btw(0,1)*a.length)]}}const pickPaleta=createWeightedSelector([{weight:2,value:"Outono"},{weight:2,value:"Fronce"},{weight:2,value:"Mondrian"},{weight:1,value:"BW"},{weight:1,value:"Inverse BW"},{weight:2,value:"Riso"},{weight:2,value:"Antigo"},{weight:2,value:"Blue dreams"},{weight:2,value:"cmyk"},{weight:1,value:"Rubro"},{weight:1,value:"Garden"},{weight:2,value:"Vapor"},{weight:1,value:"Munch"},{weight:2,value:"Electric Night"},{weight:2,value:"Contrasting Emotions"},{weight:2,value:"Nebula Nights"}]);let pickBg,corzinha=pickPaleta();"Outono"==corzinha?paleta={colors:["#053043","#F37247","#FDAF3A"],bg:["#fcd5ce","#fae1dd","#f8edeb","#e8e8e4","#d8e2dc","#ece4db","#ffe5d9","#ffd7ba","#effaf8"],name:"Outono"}:"Fronce"==corzinha?paleta={colors:["#800016","#a0001c","#c00021","#ff002b","#1565c0","#407ba7","#004e89","#002962","#002962","#00043a"],bg:["#F2F2F2","#FFF1E0","#F2E7C4"],name:"Bic"}:"Mondrian"==corzinha?paleta={colors:["#EDC917","#0B0C0C","#FD3E4D","#6886DC"],bg:["#F8F5F5","#FFF1E0"],name:"Mondrian"}:"BW"==corzinha?paleta={colors:["#0B0C0C"],bg:["#F8F5F5","#FFF1E0"],name:"BW"}:"Inverse BW"==corzinha?paleta={bg:["#0B0C0C"],colors:["#F8F5F5","#FFF1E0"],name:"Inverse BW",dark:!0}:"Riso"==corzinha?paleta={colors:["#1851BB","#F7AFE1","#39104A","#FF3F00","#F3D701"],bg:["#E8E7E3","#FFF1E0"],name:"Riso"}:"Antigo"==corzinha?paleta={colors:["#000005","#FFF"],bg:["#F4D075","#F4D09D"],name:"Antigo"}:"Blue dreams"==corzinha?paleta={colors:["#FF5995","#D958FA","#8762F5","#5E5CE6","#00BFFF"],bg:["#F8F5F5","#FFF1E0"],name:"Blue dreams"}:"cmyk"==corzinha?paleta={colors:["cyan","magenta","yellow","black"],bg:["#F4D075","#FFF1E0"],name:"Cmyk"}:"Rubro"==corzinha?paleta={colors:["#0F0F0F","#F22233"],bg:["#F4D075","#FFF1E0"],name:"Rubro"}:"Garden"==corzinha?paleta={colors:["#2E5902","#65A603","#558C03","#338C03","#338C32"],bg:["#ECFFCB","#D6FFD6","#E1FFE9","#F0FFD4"],name:"Garden"}:"Munch"==corzinha?paleta={colors:["#4278A1","#E69352","#EDB830","#E4512F","#272A2A"],bg:["#f7f3f2","#F2F0D0"],name:"Edvard Munch"}:"Vapor"==corzinha?paleta={colors:["#D7E8FC","#b7d3f2","#afafdc","#9370FD","#84afe6","#79beee","#BA72F1","#FFFFFF"],bg:["#142638","#141938","#0B0E1F","#181024"],name:"Vapor",dark:!0}:"Electric Night"==corzinha?paleta={colors:["#011627","#D5D8E2","#05AF9F","#EB0925","#EB8A06","#001219","#4C4C4C","#0CA798","#A81326","#D67D04"],bg:["#f7f3f2","#F2F0D0"],name:"Electric Night",dark:!1}:"Contrasting Emotions"==corzinha?paleta={colors:["#9e0031","#8e0045","#770058","#600047","#44001a","#9e0031","#EAF0E4","#7C2465","#6E285C","#F5A7B0","#5B3D3A","#90C5E5"],bg:["#f7f3f2","#F2F0D0"],name:"Contrasting Emotions",dark:!1}:"Nebula Nights"==corzinha&&(paleta={colors:["#31263e","#eca72c","#523086","#ee5622","#100A16","#D4A146","#463561","#88381C","#31263e","#FCA202"],bg:["#f7f3f2","#F2F0D0"],name:"Nebula Nights",dark:!1}),pickBg=paleta.dark?createWeightedSelector([{weight:2,value:"0B0E1F"},{weight:2,value:"181024"},{weight:2,value:"0B0C0C"},{weight:2,value:"956450"},{weight:2,value:"10151A"},{weight:0,value:"B27734"},{weight:2,value:"E3AF53"}]):createWeightedSelector([{weight:2,value:"FFF1E0"},{weight:2,value:"f7f3f2"},{weight:2,value:"F8F5F5"},{weight:2,value:"F2E7C4"},{weight:2,value:"F4D075"},{weight:2,value:"F4D09D"},{weight:2,value:"F2F2F2"},{weight:2,value:"212121"}]);let fundo=pickBg();"FFF1E0"==fundo?fundao={cor:"#FFF1E0",name:"FFF1E0"}:"f7f3f2"==fundo?fundao={cor:"#f7f3f2",name:"f7f3f2"}:"F8F5F5"==fundo?fundao={cor:"#F8F5F5",name:"F8F5F5"}:"F2E7C4"==fundo?fundao={cor:"#F2E7C4",name:"F2E7C4"}:"F4D075"==fundo?fundao={cor:"#F4D075",name:"F4D075"}:"F4D09D"==fundo?fundao={cor:"#F4D09D",name:"F4D09D"}:"F2F2F2"==fundo?fundao={cor:"#F2F2F2",name:"F2F2F2"}:"181024"==fundo?fundao={cor:"#181024",name:"181024"}:"0B0E1F"==fundo?fundao={cor:"#0B0E1F",name:"0B0E1F"}:"0B0C0C"==fundo?fundao={cor:"#0B0C0C",name:"0B0C0C"}:"B27734"==fundo?fundao={cor:"#B27734",name:"B27734"}:"E3AF53"==fundo?fundao={cor:"#E3AF53",name:"E3AF53"}:"956450"==fundo?fundao={cor:"#956450",name:"956450"}:"10151A"==fundo?fundao={cor:"#10151A",name:"10151A"}:"212121"==fundo&&(fundao={cor:"#212121",name:"212121"});
function rnd_btw(n,r){return rnd.random_between(n,r)}function rnd_int(n,r){return rnd.random_int(n,r)}function rnd_arr(n){return n[rnd_int*n.length]}
let seed=rnd_btw(0,1e4),rnd_cor=rnd_int(0,paleta.colors.length-1),rnd_bege=rnd_int(0,paleta.bg.length-1),cor=paleta.colors,tam_cor=cor.length-1,cnv={w:1e3,h:1e3},prob_view=rnd_int(25,85)/100,prob_divide=rnd_int(2,15)/100,padding_h=cnv.h*rnd_btw(.05,.2),padding_w=cnv.w*rnd_btw(.05,.2),easein=rnd_btw(0,1)>.5;function setup(){noiseSeed(rnd_btw(0,9999999)),randomSeed(rnd_btw(0,9999999)),createCanvas(cnv.w,cnv.h),pixelDensity(options.pixelDensity),background(fundao.cor)}function draw(){noLoop(),texturinha(0,0,cnv.w,cnv.h),drawAdaptiveRectangles(padding_w,padding_h,cnv.w-padding_w,cnv.h-padding_h),prob_view=rnd_int(10,35)/100,drawAdaptiveRectangles(padding_w,padding_h/2,cnv.w-padding_w,cnv.h-padding_h/2);let t="none";quantity<=70?t="Few":quantity<=200?t="Many":quantity>200&&(t="Too many"),granulate(8),setMetadata("Palette",paleta.name),setMetadata("Background",fundao.name),setMetadata("Stretched",stretched),setMetadata("Quantity",t),onDone(),console.log(METADATA)}let stretched,size_thing={x:rnd_btw(.01,.5),y:rnd_btw(.01,.5)};size_thing.x>size_thing.y?stretched="Stretched out":size_thing.x<size_thing.y?stretched="Stretched up":size_thing.x==size_thing.y&&(stretched="Equal sizes");let quantity=0;function drawAdaptiveRectangles(t,n,e,i){let d=t,r=n;for(;r<i;){let n=i*rnd_btw(.001,size_thing.y);r+n>i&&(n=i-r),d=t;let a=!1;for(;d<e&&!a;){quantity++;let t=e*rnd_btw(.001,size_thing.x);d+t>e&&(t=e-d,a=!0),rnd_btw(0,1)<prob_view&&(rnd_btw(0,1)<prob_divide?(rnd_rect(d,r,t/2,n/2),rnd_rect(d+t/2,r,t/2,n/2),rnd_rect(d,r+n/2,t/2,n/2),rnd_rect(d+t/2,r+n/2,t/2,n/2)):rnd_rect(d,r,t,n)),d+=t}r+=n}}function rnd_rect(t,n,e,i){rnd_btw(0,1)>.15?(noFill(),stroke(cor[rnd_int(0,tam_cor)]),drawCircles(t,n,e,i)):(noStroke(),fill(cor[rnd_int(0,tam_cor)]),scribbleRectangle(t,n,e,i))}
function scribbleRectangle($,e,_,t){offsete=2,steps=25,strokeWeight(1),beginShape(),vertex($,e);for(let n=0;n<_;n+=steps){let u=$+n+map(noise(.1*n,.1*e),0,1,-offsete,offsete),r=e+map(noise(.1*$,.1*n),0,1,-offsete,offsete);vertex(u,r)}vertex($+_,e);for(let i=0;i<t;i+=steps){let o=$+_+map(noise(.1*_,(e+i)*.1),0,1,-offsete,offsete),c=e+i+map(noise(($+_)*.1,.1*i),0,1,-offsete,offsete);vertex(o,c)}vertex($+_,e+t);for(let f=0;f<_;f+=steps){let l=$+_-f+map(noise((_-f)*.1,(e+t)*.1),0,1,-offsete,offsete),a=e+t+map(noise(($+_)*.1,(t+f)*.1),0,1,-offsete,offsete);vertex(l,a)}vertex($,e+t);for(let s=0;s<t;s+=steps){let b=$+map(noise(.1*$,(e+t-s)*.1),0,1,-offsete,offsete),C=e+t-s+map(noise(.1*s,(e+t)*.1),0,1,-offsete,offsete);vertex(b,C)}endShape(CLOSE)}function drawCircles($,e,_,t){push(),translate($,e),qtt=Math.min(_,t)*rnd_btw(30,125);for(let n=0;n<qtt;n++){ease=easein?easeInCubic(rnd_btw(0,1)):easeOutCubic(rnd_btw(0,1));let u;point(rnd_btw(0,_),map(ease,0,1,0,t),2)}pop()}function easeInExpo($){return 0==$?0:pow(2,10*($-1))}function easeInCirc($){return 1-sqrt(1-pow($,2))}function easeInCubic($){return $*$*$}function easeInOutCubic($){return $<.5?4*$*$*$:1-Math.pow(-2*$+2,3)/2}function easeInOutQuad($){return $<.5?2*$*$:1-Math.pow(-2*$+2,2)/2}function easeOutCubic($){return 1-Math.pow(1-$,3)}function texturinha($,e,_,t){push(),translate($,e);let n=createVector();stroke(texturinha_cor=paleta.dark?rnd_btw(240,255):rnd_btw(0,25),40),strokeWeight(.55);for(let u=0;u<_;u+=2)n.x=3.5*u,n.y=3.5*u*rnd_btw(.85,2),strokeWeight(.4),line(n.x,0,n.x,t),strokeWeight(.15),line(0,n.y,_,n.y);pop()}
function granulate(i){loadPixels();let e=pixelDensity(),l=width*e*4*(height*e);for(let e=0;e<l;e+=4)grainAmount=rnd_btw(-i,i),pixels[e]=pixels[e]+i,pixels[e+1]=pixels[e+1]+grainAmount,pixels[e+2]=pixels[e+2]+grainAmount,pixels[e+3]=pixels[e+3]+grainAmount;updatePixels()}
</script></body>