newspeech / visualizers / readme.txt

about the visualizers

each piece is a fullscreen, audio-reactive 2D canvas sketch. they share a small bit of plumbing — a slow-LFO mood envelope, mouse-activity tap, mic analyser — and otherwise each one is its own idea.

they're meant to be left running. low-key by default, more active when you move the cursor or feed them audio.

two categories

self-contained
generative — the visual is drawn from scratch, no input needed.
source-driven
consume a still image or video you drop in. the source's edges, brightness, or color drive the field. drag-and-drop or use the file picker in the params panel.

keyboard

0
toggle the params panel (per-page sliders, bottom right)
9
toggle the audio / midi panel (bottom left)
a
toggle the microphone on / off
m
toggle midi learn mode

params panel · 0

per-visualizer sliders — 4–6 of the most meaningful knobs for that piece. tweak freely; nothing persists between reloads.

at the bottom are two global controls that apply across every visualizer:

both global states persist in localStorage, so the look you set carries across reloads and pages.

on mobile the panel has an [x] close button and a [params] tap-handle to reopen, since there's no keyboard.

audio · 9 · a

press a to grant mic access. while the mic is on, audio amplitude drives the visualizer's intensity directly — every piece reacts without any per-page setup. when the mic is off, intensity falls back to a slow ambient envelope plus your mouse movement.

the audio panel (9, bottom-left) holds:

midi · m

plug in any USB midi controller that sends CC messages and you can drive the params-panel sliders from hardware. mappings are by panel slot position — knob 1 controls the first slider on whatever visualizer is open, knob 2 the second, and so on.

to bind a knob:

mappings are global (cc → slot index) and persist in localStorage, so the same physical knob keeps its slot across pages and reloads. [clear] wipes them.

web midi works on chromium browsers (chrome, edge, brave, opera) and safari 18+. firefox shows an "unsupported" status.

source-driven specifics

visualizers in the second list have an extra source row at the top of their params panel. drop in any image or video file — the visualizer rebuilds its underlying field (edge map, slitscan column, sort buffer, etc.) from your source and runs from there. video sources keep updating per-frame.

nothing is uploaded; everything happens locally in the browser tab.

↩ back to visualizers