memoscan
← all memos

Memo 0xbf7bb2c7…b7d801 on Ethereum

var num_backgrounds var num_horiz_stripes var num_vert_stripes var center_horiz_stripe = false var center_vert_stripe = false var woven = false var num_backgrounds_probs = [0.24,0.29,0.18,.29] var density_probs = [0.05,0.15,0.3,0.3,0.15,0.05] var center_horiz_stripe_prob = 0.1 var center_vert_stripe_prob = 0.1 var weave_prob = 0.72 var synth_size = 2000 var r_period_reset var g_period_reset var b_period_reset var r_period var g_period var b_period const sync_probs = [0.01, 0.05, 0.1, 0.5] var all_period_sync_prob var WIDTH = window.innerWidth var HEIGHT = window.innerHeight var output_img var x_offset = 0 var y_offset = 0 var r_incr = 0.0 var r_value = 0 var r_shifter = 1.0 var r_bot = 0 var r_range = 255 var g_incr = 0.0 var g_value = 0 var g_shifter = 1.0 var g_bot = 0 var g_range = 255 var b_incr = 0.0 var b_value = 0 var b_shifter = 1.0 var b_bot = 0 var b_range = 255 var R var drawn = false var loaded = false function setup() { createCanvas(WIDTH, HEIGHT) noStroke() //tokenData = genTokenData(123) // remove R = new Random() make_parameters() update_incrs() output_img = createImage(WIDTH,HEIGHT) } function make_parameters() { let nbp = [] for (let i = 0; i < 4; i++){ for (let j = 0; j < num_backgrounds_probs[i] * 100; j++){ nbp[nbp.length] = i + 1}} num_backgrounds = nbp[Math.floor(R.random_num(0,nbp.length))] let dp = [] for (let i = 0; i < 6; i++){ for (let j = 0; j < density_probs[i] * 100; j++){ dp[dp.length] = i + 1}} num_horiz_stripes = dp[Math.floor(R.random_num(0,dp.length))] num_vert_stripes = dp[Math.floor(R.random_num(0,dp.length))] woven = R.random_bool(weave_prob) if (woven && num_vert_stripes == 1) num_vert_stripes = 2 center_horiz_stripe = R.random_bool(center_horiz_stripe_prob) center_vert_stripe = R.random_bool(center_vert_stripe_prob) r_period_reset = Math.floor(synth_size / Math.floor(R.random_num(1, 6))) g_period_reset = Math.floor(synth_size / Math.floor(R.random_num(1, 6))) b_period_reset = Math.floor(synth_size / Math.floor(R.random_num(1, 6))) r_period = r_period_reset g_period = g_period_reset b_period = b_period_reset all_period_sync_prob = sync_probs[Math.floor(R.random_num(0, 4))] } function make_augury_image(){ switch (num_backgrounds) { case 1: output_img.copy(make_image(), 0, 0, Math.floor(R.random_num(250,synth_size)),Math.floor(R.random_num(250,synth_size)),0, 0, WIDTH, HEIGHT) break; case 2: output_img.copy(make_image(), 0, 0,Math.floor(R.random_num(250,synth_size)),Math.floor(R.random_num(250,synth_size)),0, 0, Math.floor(WIDTH/2), HEIGHT) output_img.copy(make_image(), 0, 0,Math.floor(R.random_num(250,synth_size)),Math.floor(R.random_num(250,synth_size)),Math.floor(WIDTH/2), 0, Math.floor(WIDTH/2), HEIGHT) break case 3: output_img.copy(make_image(), 0, 0,Math.floor(R.random_num(250,synth_size)),Math.floor(R.random_num(250,synth_size)),0, 0, WIDTH, Math.floor(HEIGHT/3)) output_img.copy(make_image(), 0, 0,Math.floor(R.random_num(250,synth_size)),Math.floor(R.random_num(250,synth_size)),0, Math.floor(HEIGHT/3), WIDTH, Math.floor(HEIGHT/3 * 2)) output_img.copy(make_image(), 0, 0,Math.floor(R.random_num(250,synth_size)),Math.floor(R.random_num(250,synth_size)),0, Math.floor(HEIGHT/3 * 2), WIDTH, HEIGHT) break case 4: output_img.copy(make_image(), 0, 0,Math.floor(R.random_num(250,synth_size)),Math.floor(R.random_num(250,synth_size)),0, 0, Math.floor(WIDTH/2), Math.floor(HEIGHT/2)) output_img.copy(make_image(), 0, 0,Math.floor(R.random_num(250,synth_size)),Math.floor(R.random_num(250,synth_size)),Math.floor(WIDTH/2), 0, WIDTH, Math.floor(HEIGHT/2)) output_img.copy(make_image(), 0, 0,Math.floor(R.random_num(250,synth_size)),Math.floor(R.random_num(250,synth_size)),0, Math.floor(HEIGHT/2), Math.floor(WIDTH/2), HEIGHT) output_img.copy(make_image(), 0, 0,Math.floor(R.random_num(250,synth_size)),Math.floor(R.random_num(250,synth_size)),Math.floor(WIDTH/2), Math.floor(HEIGHT/2), WIDTH, HEIGHT) break default: output_img.copy(make_image(), 0, 0, Math.floor(R.random_num(250,synth_size)),Math.floor(R.random_num(250,synth_size)),0, 0, WIDTH, HEIGHT) break; } var v_stripes = [] var v_stripes_C = 0.0 var h_stripes = [] var h_stripes_C = 0.0 var got_all = false if (center_horiz_stripe){ var h = Math.floor(R.random_num(HEIGHT/50,HEIGHT/7)) h_stripes_C = h num_horiz_stripes -= 1} var num_h_T = Math.floor(R.random_num(0,num_horiz_stripes+1)) var num_h_B = num_horiz_stripes - num_h_T var y = 0 var i = 0 while (!got_all){ got_all = true y = 0 for (i = 0; i < num_h_T; i++){ if (y > HEIGHT/4) got_all = false y = Math.floor(R.random_num(y, HEIGHT / 4)) h_stripes[i] = y y += HEIGHT/50}} got_all = false while (!got_all){ got_all = true y = HEIGHT - HEIGHT / 4 for (i = num_h_T; i < num_horiz_stripes; i++){ if (y > HEIGHT) got_all = false y = Math.floor(R.random_num(y, HEIGHT)) h_stripes[i] = y y += HEIGHT/50}} if (center_vert_stripe){ var w = Math.floor(R.random_num(WIDTH/50,WIDTH/7)) v_stripes_C = w num_vert_stripes -= 1} var num_v_L = Math.floor(R.random_num(0,num_vert_stripes+1)) var num_v_R = num_vert_stripes - num_v_L got_all = false while (!got_all){ got_all = true var x = 0 for (i = 0; i < num_v_L; i++){ if (x > WIDTH/4) got_all = false x = Math.floor(R.random_num(x, WIDTH / 4)) v_stripes[i] = x x += WIDTH/50}} got_all = false while (!got_all){ got_all = true let x = WIDTH - WIDTH / 4 for (i = num_v_L; i < num_vert_stripes; i++){ if (x > WIDTH) got_all = false x = Math.floor(R.random_num(x, WIDTH)) v_stripes[i] = x x += WIDTH/50}} if (woven){ if (center_vert_stripe) vert_stripe(Math.floor(WIDTH/2 - v_stripes_C / 2), v_stripes_C) if (center_horiz_stripe) horiz_stripe(Math.floor(HEIGHT/2 - h_stripes_C / 2), h_stripes_C) let v_done = 0 let h_done = 0 while (v_done < v_stripes.length || h_done < h_stripes.length){ if (v_done < v_stripes.length){ vert_stripe(v_stripes[v_done], Math.floor(R.random_num(25,WIDTH/7))) v_done += 1} if (h_done < h_stripes.length){ horiz_stripe(h_stripes[h_done], Math.floor(R.random_num(25,HEIGHT/7))) h_done += 1}}} else { if (center_horiz_stripe) horiz_stripe(Math.floor(HEIGHT/2 - h_stripes_C / 2), h_stripes_C) for (var i = 0; i < h_stripes.length; i++){horiz_stripe(h_stripes[i], Math.floor(R.random_num(25,HEIGHT/7)))} if (center_vert_stripe) vert_stripe(Math.floor(WIDTH/2 - v_stripes_C / 2), v_stripes_C) for (var i = 0; i < v_stripes.length; i++){vert_stripe(v_stripes[i], Math.floor(R.random_num(25,WIDTH/7)))}} } function horiz_stripe(y_start, h){ img_seg = get_image_segment() num_segs = Math.floor(R.random_num(2,10)) dest_w = WIDTH / num_segs dest_h = h dest_x = 0 dest_y = y_start for (n = 0; n < num_segs; n++){ output_img.copy(img_seg, 0, 0, img_seg.width, img_seg.height, Math.floor(dest_x), dest_y, Math.ceil(dest_w), dest_h) img_seg = mirror_h_image(img_seg) dest_x += dest_w} } function vert_stripe(x_start, w){ img_seg = get_image_segment() num_segs = Math.floor(R.random_num(2,10)) dest_w = w dest_h = HEIGHT / num_segs dest_x = x_start dest_y = 0 for (n = 0; n < num_segs; n++){ output_img.copy(img_seg, 0, 0, img_seg.width, img_seg.height, dest_x, Math.floor(dest_y), dest_w, Math.ceil(dest_h)) img_seg = mirror_v_image(img_seg) dest_y += dest_h} } function draw() { if (frameCount == 1){ background(0) return} if (!drawn) { make_augury_image() image(output_img, 0, 0, WIDTH, HEIGHT) drawn = true} } function mirror_h_image(orig_img) { var mirror_img = createImage(orig_img.width,orig_img.height) mirror_img.loadPixels() orig_img.loadPixels() orig_img_numcols = orig_img.width orig_img_numrows = orig_img.height orig_img_valsperrow = orig_img_numcols * 4 for (var pr = 0; pr < orig_img_numrows; pr++) { for (var pc = 0; pc < orig_img_numcols; pc++) { po = (pr * orig_img_valsperrow) + orig_img_valsperrow pm = (pr * orig_img_valsperrow) + (pc * 4); mirror_img.pixels[pm] = orig_img.pixels[po - ((pc*4) + 4)] mirror_img.pixels[pm+1] = orig_img.pixels[po - ((pc*4) + 3)] mirror_img.pixels[pm+2] = orig_img.pixels[po - ((pr*4) + 2)] mirror_img.pixels[pm+3] = orig_img.pixels[po - ((pc*4) + 1)]}} mirror_img.updatePixels() return mirror_img } function mirror_v_image(orig_img) { var mirror_img = createImage(orig_img.width,orig_img.height) mirror_img.loadPixels() orig_img.loadPixels() orig_img_numcols = orig_img.width orig_img_numrows = orig_img.height orig_img_valsperrow = orig_img_numcols * 4 for (var pr = 0; pr < orig_img_numrows; pr++) { for (var pc = 0; pc < orig_img_numcols; pc++) { po = ((orig_img_numrows - (pr +1) ) * orig_img_valsperrow) + (pc * 4) pm = (pr * orig_img_valsperrow) + (pc * 4) mirror_img.pixels[pm] = orig_img.pixels[po] mirror_img.pixels[pm+1] = orig_img.pixels[po+ 1] mirror_img.pixels[pm+2] = orig_img.pixels[po+ 2] mirror_img.pixels[pm+3] = orig_img.pixels[po + 3]}} mirror_img.updatePixels() return mirror_img } function make_image() { tmp_img = createImage(synth_size,synth_size) tmp_img.loadPixels() var y = 0 for (var j = 0; j < synth_size * synth_size; j++) { if (j % synth_size == 0) y = Math.floor(j / synth_size) var x = int(j % synth_size) pixel_i = int((y * synth_size + x) * 4) tmp_img.pixels[pixel_i] = Math.round(r_value) tmp_img.pixels[pixel_i + 1] = Math.round(g_value) tmp_img.pixels[pixel_i + 2] = Math.round(b_value) tmp_img.pixels[pixel_i + 3] = 255 increment_rbg(j)} tmp_img.updatePixels() if (R.random_bool(all_period_sync_prob)) sync_periods() return tmp_img } function get_image_segment() { var out_w = Math.floor(R.random_num(10,synth_size)) var out_h = Math.floor(R.random_num(10,synth_size)) var src_img = make_image() var tmp_img = createImage(out_w, out_h) var src_w = Math.floor(R.random_num(10,synth_size)) var src_h = Math.floor(R.random_num(10,synth_size)) var src_x = Math.floor(R.random_num(0,synth_size-src_w)) var src_y = Math.floor(R.random_num(0,synth_size-src_h)) tmp_img.copy(src_img, src_x, src_y, src_w, src_h,0,0,out_w,out_h) return tmp_img } function increment_rbg(mega_i) { r_value = ((r_range - abs(r_range - (mega_i % r_period) * r_incr)) + r_bot) * r_shifter if (r_value > 255) r_value = 255 if (Math.floor(r_value) <= r_bot) { if (R.random_bool(0.0001)) { r_period = random_period(r_period) update_incrs() } else if (R.random_bool(0.01)) { if (R.random_bool) { r_incr *= 1.0 + 0.001 } else { r_incr *= 1.0 - 0.001 } } } g_value = ((g_range - abs(g_range - (mega_i % g_period) * g_incr)) + g_bot) * g_shifter if (g_value > 255) g_value = 255 if (Math.floor(g_value) <= g_bot) { if (R.random_bool(0.0001)) { g_period = random_period(g_period) update_incrs() } else if (R.random_bool(0.01)) { if (R.random_bool) { g_incr *= 1.0001 } else { g_incr *= 0.9999 } } } b_value = ((b_range - abs(b_range - (mega_i % b_period) * b_incr)) + b_bot) * b_shifter if (b_value > 255) b_value = 255 if (Math.floor(b_value) <= b_bot) { b_value = 0 b_incr *= -1 if (R.random_bool(0.0001)) { b_period = random_period(b_period) update_incrs() } else if (R.random_bool(0.01)) { if (R.random_bool) { b_incr *= 1.0001 } else { b_incr *= 0.9999 } } } } function random_period(curr_period) { var p = curr_period p += R.random_num(-2, 2) if (p < 10) p = 10 return p } function sync_period(which) { if (which == "r") r_period = r_period_reset else if (which == "g") g_period = g_period_reset if (which == "b") b_period = b_period_reset update_incrs() } function sync_periods() { r_period = r_period_reset g_period = g_period_reset b_period = b_period_reset update_incrs() } function update_incrs() { if (r_period < 10) r_period = 10 if (g_period < 10) g_period = 10 if (b_period < 10) b_period = 10 r_incr = r_range / (r_period * 0.5) g_incr = g_range / (g_period * 0.5) b_incr = b_range / (b_period * 0.5) } class Random { constructor() { this.useA = false var sfc32 = function (uint128Hex) { var a = parseInt(uint128Hex.substr(0, 8), 16) var b = parseInt(uint128Hex.substr(8, 8), 16) var c = parseInt(uint128Hex.substr(16, 8), 16) var d = parseInt(uint128Hex.substr(24, 8), 16) return function () { a |= 0 b |= 0 c |= 0 d |= 0 var t = (((a + b) | 0) + d) | 0 d = (d + 1) | 0 a = b ^ (b >>> 9) b = (c + (c << 3)) | 0 c = (c << 21) | (c >>> 11) c = (c + t) | 0 return (t >>> 0) / 4294967296 } } this.prngA = new sfc32(tokenData.hash.substr(2, 32)) this.prngB = new sfc32(tokenData.hash.substr(34, 32)) for (var i = 0; i < 1e6; i += 2) { this.prngA() this.prngB() } } random_dec() { this.useA = !this.useA return this.useA ? this.prngA() : this.prngB() } random_num(a, b) { return a + (b - a) * this.random_dec() } random_bool(p) { return this.random_dec() < p } }