A 2-hour workshop. Turn the most boring software in the world — a spreadsheet — into a generative visualizer. Use your own AI to invent formulas you'd never write by hand. No design or coding background needed. Just curiosity.
📋 Make your copy of the starter sheet Opens Google Sheets · click "Make a copy"Tab: 1. visual (manual) · ~10 min · zero formulas to write
The first tab is alive already. There's a 30×30 grid of colored squares, and one yellow cell on the right with the word สวัสดี in it. That's the only thing you control.
Every cell in the grid runs the exact same formula:
=RANDBETWEEN(0, LEN($AF$2))
Translation: "give me a random integer between 0 and the length of cell AF2's text". Twelve conditional-formatting rules map each integer (0..11) to a color. LEN("สวัสดี") = 6, so cells take values 0–6, lighting up the first 7 colors.
Spreadsheets recalculate every time anything changes. So every edit = a new random draw = a new visual. That's your frame rate.
| # | Do this | What happens | Why |
|---|---|---|---|
| 1 | Replace สวัสดี with hi | Grid goes mostly dark — only 2 colors | LEN("hi") = 2 |
| 2 | Replace it with กระบือ or another long Thai word | Brightens — all colors light up | Thai uses separate codepoints for vowels & tones → higher LEN |
| 3 | Hold Cmd/Ctrl + R (force reload of formulas) | Whole grid re-rolls | Recalc cycle = frame rate |
| 4 | Open Format → Conditional formatting, change one color in the palette | That number in the grid changes color everywhere | CF rules = palette dictionary |
| 5 | Change the formula to =RANDBETWEEN(5, LEN($AF$2)) | Dark colors disappear | You raised the floor |
Cmd/Ctrl+A to select the whole grid, then paste a new formula into the formula bar with Cmd/Ctrl+Enter. The formula goes into every cell at the same time.
Tab: 2. mandala (formula) · ~20 min · turn random into structure
Same idea — one formula, every cell, 12 colors. But the formula now uses each cell's position to compute the color, not random. Result: a structured pattern instead of noise.
=MOD(
ABS(ROUND(
SQRT((ROW()-25.5)^2 + (COLUMN()-40.5)^2) * $CE$2 ← distance from center × ring spacing
- $CE$9 ← - time (animation)
+ $CE$3 * COS(ATAN2(COLUMN()-40.5, ROW()-25.5)
* $CE$4 + $CE$5) ← petal warp × twist
)),
$CE$6 ← mod base = palette size
)
Six knob cells in the panel on the right control the shape:
| Knob | What it controls | Try |
|---|---|---|
$CE$2 ring spacing | How tight the rings are | 0.2, 1, 3 |
$CE$3 petal amp | How much petals warp the rings | 0, 6, 20 |
$CE$4 petals | Number of petals | 3, 8, 25 |
$CE$5 twist (rad) | Rotation offset | 0, 1.5, 3.14 |
$CE$6 mod base | How many colors used (max = 12) | 3, 12, 24 |
$CE$9 time | Animation channel (manually nudge for now) | type a new number — pattern shifts |
mandala-zoom.ts script pumps $CE$9 from outside every 500ms → continuous animation. Same script also pumps the seed word for the LEN trick on this tab.
| # | Try | You'll see |
|---|---|---|
| 1 | Set petals = 1, twist = 0 | Pure concentric rings |
| 2 | Set petals = 25, petal amp = 20 | Flower / mandala |
| 3 | Set petals = 100 | Optical-illusion stripes |
| 4 | Swap palette on the 🎨 palettes tab — copy hex codes into the CF rules | Same shape, different mood |
| 5 | Change SQRT to SUMSQ or remove it | Pattern explodes into squares — break things on purpose |
Tab: 3. AI lab · ~30 min · bring your own AI
The grid is empty. The knob panel is set up: 5 knobs, a seed-word cell, a time cell. Conditional formatting is already in place — paste any formula that returns 0–11 and the colors light up automatically.
Your job: tell your AI what pattern you want. Their job: write the formula. You paste it into A1, hit Cmd/Ctrl+A then paste-fill the whole grid.
=MOD(INT( YOUR_AI_FORMULA ), 12)
That forces the output to an integer in 0..11. Works every time. Make this your default paste pattern.
Any of these work — they all know Google Sheets formula syntax:
Don't have one? Wave's Gemini is on the projector — call out your wish, we'll co-prompt.
Paste this template into your AI, fill in the brackets:
$BA$2..$BA$6 as knobs and $BA$7 as text seed.$BA$9 for time animation.If you don't know what to wish for, steal one of these:
| Wish | What you'd see |
|---|---|
| Make it ripple like dropping a stone in water | Concentric waves moving outward |
| Make it spiral like a galaxy | Curved arms rotating from center |
| Make it spell my name across the grid | Letters from the seed word raining across cells |
| Make it react to one number — small = quiet, big = chaos | One knob controls overall intensity |
| Make it look like rain / fire / static / my mood today | Whatever vibe you ask for |
It will. Spreadsheet formulas are precise and AIs sometimes hallucinate function names or argument orders. The workshop loop:
A1. If it works → fill the grid.#NAME? or #ERROR! → click the cell, click the little orange error indicator, copy the error text.Once you've paste-fixed-paste a few times, try this mega-prompt:
Tab: 🎨 palettes — copy hex codes into your Conditional Formatting rules to mood-swap any tab
Each palette is 12 colors. Replace the colors in Format → Conditional formatting → Edit rule on any tab to swap the entire mood without touching the formula.
This is the #1 thing that goes wrong — covered up in Block 3, repeated here. Wrap your formula:
=MOD(INT( YOUR_FORMULA ), 12)
Why: 12 CF rules use NUMBER_EQ "0"..."11" — exact integer match. Decimals (5.0001) or out-of-range (15) won't match. INT(...) forces integer; MOD(..., 12) clamps to 0..11. Other things to check:
VALUE(...) to force numericThe "hide numbers" trick is missing. In every CF rule, set text color = background color. Numbers stay there for the formula but become invisible.
Your formula returns a constant. Check if it actually uses ROW() and COLUMN(), or your random source (LEN, RANDBETWEEN, time cell).
You probably pasted the formula into way more cells than the visible grid. Trim the grid to ~40×50 — that's 2,000 cells, still fast.
Cmd/Ctrl+Z as many times as you need. Or revisit the starter copy URL and make a fresh one.