0x18b75119…b783sent to0x381233d5…7acd·#19,667,816·view on Etherscan
vec2 rotate(vec2 uv, float amp, float phase_offset, float speed) {
return uv * rot(amp*sin(speed*2.*PI+2.*PI*phase_offset));
}
vec2 translate(vec2 uv, float amp, float phase_offset, float speed) {
return uv + amp*sin(speed*2.*PI+2.*PI*phase_offset);
}
vec3 draw(vec2 uv) {
vec3 c = vec3(0.);
vec4 cOut = vec4(0., 0., 0., 1.);
vec2 point5 = vec2(0.5);
float aspect = uR.x/uR.y;
if (aspect < 1.) {
${w.aspectMult.v[0]} *= aspect;
} else {
${w.aspectMult.v[1]} *= 1./aspect;
}
vec2 uvTemp = uv;
float amp = ${R.random_num(.002, .015)};
float phase = ${R.random_dec()};
uv = rotate(uv, amp, phase, -uTS);
vec4 cA = getSvg(uv+.5, texA);
uv = uvTemp;
amp = ${R.random_num(.002, .015)};
phase = ${R.random_dec()};
uv = rotate(uv, amp, phase, -uTS);
vec4 cB = getSvg(uv+.5, texB);
uv = uvTemp;
amp = ${R.random_num(.002, .015)};
phase = ${R.random_dec()};
uv = rotate(uv, amp, phase, -uTS);
vec4 cC = getSvg(uv+.5, texC);
cOut = mix(cOut, cC, mix(0., cC.a, 1.));
cOut = mix(cOut, cB, mix(0., cB.a, 1.));
cOut = mix(cOut, cA, mix(0., cA.a, 1.));
uv = uvTemp;
c = vec3(cOut.r, cOut.g, cOut.b);
if (uColorize){
if (${i} > 0.) {
if (uv.x > 0.){
c = colorize(uv, vec4(c,1.));
}
} else {
c = colorize(uv, vec4(c,1.));
}
}
return c;
}
void main() {
vec2 uv = (gl_FragCoord.xy/uR.xy);
uv -= .5;
vec3 c = vec3(0.);
c = draw(uv);
const vec2 H2=vec2(.5698402909980532,.7548776662466927);
const float aa=1.5, ns=8.;
float ps=1./uR.y;
for(float i=0.;i<ns;i+=1.){
vec2 d=fract(H2*i+.5)-.5;
c += draw(uv+d*ps*aa);
}
c/=ns;
vec4 col = vec4(c,1.);
gl_FragColor = col;
}
`, A = function (A, g, I, C) { if (shader = g.createShader(g.VERTEX_SHADER), g.shaderSource(shader, I), g.compileShader(shader), g.attachShader(A, shader), shader = g.createShader(g.FRAGMENT_SHADER), g.shaderSource(shader, C), g.compileShader(shader), g.attachShader(A, shader), g.linkProgram(A), !g.getProgramParameter(A, g.LINK_STATUS)) throw new Error(g.getProgramInfoLog(A)); g.useProgram(A); var I = g.getAttribLocation(A, "aPosition"), C = g.getAttribLocation(A, "aTexCoord"), Q = g.createBuffer(), B = (g.bindBuffer(g.ARRAY_BUFFER, Q), g.bufferData(g.ARRAY_BUFFER, Float32Array.of(0, 1, 0, 0, 1, 1, 1, 0), g.STATIC_DRAW), g.createBuffer()); return g.bindBuffer(g.ARRAY_BUFFER, B), g.bufferData(g.ARRAY_BUFFER, Float32Array.of(0, 1, 0, 0, 1, 1, 1, 0), g.STATIC_DRAW), g.useProgram(A), g.enableVertexAttribArray(I), g.bindBuffer(g.ARRAY_BUFFER, Q), g.vertexAttribPointer(I, 2, g.FLOAT, !1, 0, 0), g.enableVertexAttribArray(C), g.bindBuffer(g.ARRAY_BUFFER, B), g.vertexAttribPointer(C, 2, g.FLOAT, !1, 0, 0), A }(gl.createProgram(), gl, `
precision highp float;attribute vec2 aPosition;attribute vec2 aTexCoord;varying vec2 vTC;
void main(){vTC=aTexCoord;vec4 p4=vec4(aPosition*2.-1.,0,1.);gl_Position=p4;}
`, A); colorMap = V(gl, clamp = !0), gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGB, palRgb.length / 3, 1, 0, gl.RGB, gl.UNSIGNED_BYTE, new Uint8Array(palRgb)), textures = [colorMap]; for (let A = 0; A < g.length; ++A)svg = V(gl, clamp = !0), gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, g[A]), textures.push(svg); for (let A = 0; A < textures.length; A++)gl.activeTexture(gl.TEXTURE0 + A), gl.bindTexture(gl.TEXTURE_2D, textures[A]); uR = gl.getUniformLocation(A, "uR"), uT = gl.getUniformLocation(A, "uT"), uTCM = gl.getUniformLocation(A, "uTCM"), uFPS = gl.getUniformLocation(A, "uFPS"), uFadeA = gl.getUniformLocation(A, "uFadeA"), uFadeB = gl.getUniformLocation(A, "uFadeB"), uZoomA = gl.getUniformLocation(A, "uZoomA"), uZoomB = gl.getUniformLocation(A, "uZoomB"), uColorize = gl.getUniformLocation(A, "uColorize"), texPal = gl.getUniformLocation(A, "texPal"), texA = gl.getUniformLocation(A, "texA"), texB = gl.getUniformLocation(A, "texB"), texC = gl.getUniformLocation(A, "texC"), gl.uniform1i(texPal, 0), gl.uniform1i(texA, 1), gl.uniform1i(texB, 2), gl.uniform1i(texC, 3), document.body.appendChild(J), addEventListener("keyup", X), addEventListener("resize", Z), Z(), L(), t("dl") && (E = !0, W())
}; function L() { 0 == B[0] && B != A && 0 < B.length && (q && U >= M && R.random_dec() < .7 && (o.fadeA < .5 ? (U = 0, M = f[0] == f[1] ? .8 * p : p * R.random_int(2, 4) * .8, f = [0, 1]) : R.random_dec() < .3 && (U = 0, M = f[0] == f[1] ? .8 * p : p * R.random_int(2, 4) * .8, f = [1, 0])), N && m >= K && R.random_dec() < .7 && (o.fadeB < .5 ? (m = 0, K = P[0] == P[1] ? .8 * p : p * R.random_int(2, 4) * .8, P = [0, 1]) : R.random_dec() < .3 && (m = 0, K = P[0] == P[1] ? .8 * p : p * R.random_int(2, 4) * .8, P = [1, 0])), IA = (y = gA % 2 == 0 ? (d = [1.4, 1.2], [.75, .9]) : (d = [1.2, 1.4], [.9, .75]), [0, 10]), gA++, S = 0), o.zoomA = D(S, d[0], d[1] - d[0], p), o.zoomB = D(S, y[0], y[1] - y[0], p), o.fadeA = D(U, f[0], f[1] - f[0], M), o.fadeB = D(m, P[0], P[1] - P[0], K), E && 0 != h || (gl.uniform2f(uR, c.w, c.h), gl.uniform1f(uT, h), gl.uniform1f(uTCM, o.uTCM), gl.uniform1f(uFPS, g), gl.uniform1f(uFadeA, o.fadeA), gl.uniform1f(uFadeB, o.fadeB), gl.uniform1f(uZoomA, o.zoomA), gl.uniform1f(uZoomB, o.zoomB), gl.uniform1f(uColorize, Y), gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4), [w.pal.v, palRgb] = $(palRand, u, w.cRep.v, o.positive_space_amt), gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGB, palRgb.length / 3, 1, 0, gl.RGB, gl.UNSIGNED_BYTE, new Uint8Array(palRgb)), gl.bindTexture(gl.TEXTURE_2D, textures[0])), !E && 0 < B.length && (A = B, setTimeout(A => requestAnimationFrame(() => { L(), h < 500 && (C ? (performance.now() != C && (I = (performance.now() - C) / 1e3), C = performance.now(), fpsIdx = h % 500, Q[fpsIdx] = 1 / I, g = _(Q), p = Math.floor(.8 * O * g)) : (C = performance.now(), g = 30)) }), T), S <= p && 0 < B.length && S++, U <= M && 0 < B.length && U++, m <= K && 0 < B.length && m++, h++), 0 == h && (B = [R.random_num(0, 1e3)]) } let BA = [[-24.6, 6.8, -10.4, 128.8946, .2144, .45, 15.574, .1215, .03, -12, 8.8, 12, 0, 0, 6, 22, 10], [-24.7, 8.7, -60, 216.2127, .3022, .6, 33.4396, .4727, .02, -15, 9.2, 3, 5, 14, 0, 17, 40]], oA = [[5, 164.8138, 412.0345, -1, 185.4155, 439.5034, -1, 123.6103, 618.0517, 741.662, 274.6896, 659.2551, 988.8827, 309.0258, 741.662, 1098.7585], [5, 164.8138, 412.0345, -1, 219.7517, 549.3793, -1, 247.2207, 618.0517, 741.662, 164.8138, 412.0345, -1, 164.8138, 618.0517, -1]]; window.onload = async () => { rayCount = 2 * Math.round(R.random_num(8, 20)), num_lines_A = R.random_choice([1, 2, 3, 3, 4, 4, 5, 6, 7]), num_lines_B = R.random_choice([1, 2, 3, 3, 4, 4, 5, 6, 7]), blur_amount_A = R.random_choice([5, 5, 5, .5]), blur_amount_C = R.random_choice([5, 5, 5, .5]), widthMultA = R.random_num(.1, .25), widthMultB = R.random_num(.1, .25), widthMultC = R.random_num(.1, .25), strokeMultA = R.random_num(.01, .05), strokeMultB = R.random_num(.01, .05), strokeMultC = R.random_num(.01, .05), w.perpetua.v && (num_lines_A = 1, num_lines_B = 1), 1 == (num_lines_A = 1 < blur_amount_A ? R.random_choice([1, 2, 3, 4]) : num_lines_A) && (widthMultA = R.random_num(.1, .3)), num_lines_A + num_lines_B == 2 && (rayCount = R.random_choice([20, 24, 28, 32, 36])), z(svgsTxt = [G(rayCount, num_lines = 1, widthMult = R.random_num(.01, .03), strokeMult = .05, opacity = .3, color = "red", blur_amount = .5, cutA = 0, cutB = R.random_num(.03, .3)), G(rayCount *= 2, num_lines = num_lines_A, widthMult = widthMultA, strokeMult = strokeMultA, opacity = .1, color = "white", blur_amount = blur_amount_A), G(rayCount *= 2, num_lines = num_lines_B, widthMult = widthMultB, strokeMult = strokeMultB, opacity = .1, color = "white", blur_amount = .5), F(), F(), F(), F(), F(), F()], QA), console.log("primary color:", w.pal.v[0]), await new Promise(A => setTimeout(A, 200)); let A = new AudioContext({ latencyHint: .2 }); A.suspend(); var g = 128 * Math.round(Math.max(1, A.sampleRate / 48e3)); let I = w.song.v, C = w.chords.v; t("preset") && (I = t("preset")), t("chords") && (C = t("chords")); var Q = oA[C], g = (await A.audioWorklet.addModule("data:application/javascript;base64," + btoa(`registerProcessor("w",class extends AudioWorkletProcessor{constructor(){super();this.port.onmessage=(e)=>{let m=new WebAssembly.Memory({initial:${g},maximum:${g}});WebAssembly.instantiate(e.data.w,{env:{memory:m,evt:(...a)=>this.port.postMessage(a)}}).then(wasm=>{this.w=wasm.instance.exports;this.o=new Float32Array(m.buffer,this.w.i1(sampleRate,${v},${BA[I].length + Q.length}));this.o.set(new Float32Array(e.data.p),256);this.w.i2();});};}process(i,o){if(!this.w)return true;this.w.p();o[0][0].set(this.o.subarray(0,128));o[0][1].set(this.o.subarray(128,256));return true;}})`)), worklet = new AudioWorkletNode(A, "w", { numberOfInputs: 0, numberOfOutputs: 1, outputChannelCount: [2] }), BA[I].map(A => "number" == typeof A ? A : 0 === A[0] ? R.random_num(...A[1]) : R.random_choice(A[1]))); worklet.port.postMessage({ w: Uint8Array.from(atob("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