let url = "https://coolors.co/1f2041-4b3f72-ffc857-119da4-19647e";
colorMode(HSB, 360, 100, 100, 100);
palette = createPalette(url);
let cells = int(random(1, 8));
let cellSize = (width - offset * 2 - margin * (cells - 1)) / cells;
for (let j = 0; j < cells; j++) {
for (let i = 0; i < cells; i++) {
let x = offset + i * (cellSize + margin) + cellSize / 2;
let y = offset + j * (cellSize + margin) + cellSize / 2;
let step = int(random(7, 12));
for (let d = cellSize; d > 1; d -= cellSize / step) {
rotate(angle + n * 360 / 7);
drawPatternArc(0, 0, d, d, 0, 120, PIE);
function drawPatternArc(x, y, w = 1, h = 1, a1, a2, SHAPE) {
let colors = shuffle(palette.concat());
let g1 = createGraphics(w, h);
let g2 = makePattern(w, h, c2);
g1.arc(w / 2, h / 2, w - 2, h - 2, a1, a2, SHAPE);
drawingContext.shadowColor = color(0, 0, 0, 30);
drawingContext.shadowBlur = min(w, h) / 5;
function makePattern(w, h, c) {
let g = createGraphics(w, h);
let step = int(random(5, 25));
let ww = sqrt(sq(gw) + sq(gh));
g.strokeWeight(step / random(1.5, 3));
g.translate(gw / 2, gh / 2);
g.translate(-ww / 2, -ww / 2);
for (let j = 0; j < ww; j += step) {
for (let i = 0; i < ww; i += step) {
function createPalette(_url) {
let slash_index = _url.lastIndexOf('/');
let pallate_str = _url.slice(slash_index + 1);
let arr = pallate_str.split('-');
for (let i = 0; i < arr.length; i++) {
arr[i] = color('#' + arr[i]);