Inputs are optional. Click 🎤 / 📷 to toggle live capture on or off; the ⚙ beside each opens its settings (input device — plus resolution & framerate for the webcam). Until enabled, Mic & Webcam nodes with demo: true synthesize input so every patch still runs. A Video node plays a file or URL with loop / stop / ping-pong playback and fit modes zoom / fit / letterbox / stretch / absolute plus an audio output so its soundtrack can feed any analyser chain; an Audio node plays a music file and exposes the same level/bass/mid/treble/beat analysis as the mic, plus progress (browsers need one click before sound can start). A 🔊 master volume slider in the toolbar scales all Output-routed sound. A BPM signals node estimates tempo from any audio (bpm signal, tempo-synced clock sawtooth, per-beat boolean pulse; sensitivity/smoothing/fold-range options). Audio & Video nodes carry a seekable progress bar (click to skip), the Audio node estimates BPM (shown on the node, exposed as a 60–200→0..1 signal), and an EQ Bands node splits any audio into low / mid / high with configurable frequency boundaries, per-band thresholds firing boolean trigger outputs, and a live spectrum display with boundary/threshold markers. The File Playlist pane (far left, collapsible, persisted) holds your media files — add via +/📁 or drag-and-drop, reorder by dragging, ⏮/⏭ or double-click to choose, 🗑 clears — and a Playlist source node plays its selection with pause, seeking, and both video and audio outputs (playback is shared, so template switches never interrupt it). Below it, the Template Playlist queues saved patches and switches between them seamlessly — manually (⏮/⏭, double-click), or automatically per entry (after n seconds / on file change) when its switch is on; it persists, imports/exports as JSON (⇧/⇩), and 🗑 clears it. Sound only reaches the speakers when a node's audio output is wired into the Output node's audio input — combine streams first with an Audio Mix node (blend/max, balance, plus its own level/bass/beat analysis of the mix). Texture chains combine with Video Mix (formerly "Mix" — old scripts still load). Dedicated VideoPlaylist / AudioPlaylist nodes hold an ordered list of clips — each with its own mode and repeat count (0 = forever) — and drive a Video/Audio source through the purple ctl cable, auto-advancing and wrapping. Add clips by URL, file picker, or drag-and-drop straight onto the node; drag rows to reorder — no playlist file needed.
Chains. Drag from an output dot to a compatible input dot. One output can feed many inputs (split); a Mix node merges two texture chains (combine). Port colors: audio · texture · signal · boolean · playlist control. Right-click the editor background to add a node right there; the ⇥ sort button auto-arranges all nodes into tidy left-to-right columns, the − / + zoom controller scales the whole editor (click the percentage to reset), and ⟲/⟳ (Ctrl+Z / Ctrl+Y) undo/redo any graph change. Saved templates import/export as JSON via the toolbar ⇧/⇩ buttons.
Pins. Drop any cyan signal (level, bass, beat, motion, LFO, video/audio progress…) onto any numeric parameter of another node — that parameter is then driven live across its full range. Shape signals with Gain (scale/offset/smooth) or Range (input & output min/max windows with a choice of interpolation curves and a live mapping graph), and fan one signal out tidily with Clone (1 → 4 outputs). A Threshold node turns any signal into an on/off boolean (trigger level, hysteresis, invert) — and every checkbox parameter is itself a pink boolean input port, so you can beat-gate a mirror, wireframe, invert, demo switch… A Formula node applies math functions (sin, sqrt, quantize…) or evaluates a freetext expression over inputs x, y and time t with all of Math in scope.
Parameters. Drag the sliders, or click a value label to type an exact number. Hue parameters show a color swatch — click it for a visual picker; color parameters (e.g. on Solid) use a full picker, and both are wireable: pin a signal to drive the hue, and the on-node swatch/picker displays the live colour. Click a node's id badge to rename it (wires and script follow along). Many texture nodes offer a transparent checkbox — the background stays see-through (trails use alpha-fade) so layers composite cleanly through Video Mix. Range can drop its limits entirely via its clamp checkbox; Model3D offers origin (base rotation), position, and an applyHue switch that leaves textures untinted.
Fractals (their own "Fractal Generators" group in the add menus). Julia & Mandelbrot escape-time sets (pin bass/mid to cx/cy for audio-morphing), Newton root basins of zᵖ−1 (power, spin, convergence shading), Sierpinski gasket / carpet (recursive depth, spin), FractalNoise (domain-warped FBM), a Tesla generator (branching lightning, performance-tuned batched rendering — pin the beat to energy), a Starfield generator (fly through stars; negative speed reverses; three pickable star colours and an optional glitter/sparkle twinkle), Fireworks (rockets + bursts — pin the beat to rate), a Flames effect (cellular fire whose ignite option makes bright areas of the input video catch fire — the image's shapes burn; optional floor fire, wind/height/palette-hue), a Strobe effect (rate/duty/depth with blackout, whiteout or colour flashes), a Crop & Resize effect (crop via Left/Right/Top/Bottom trims → destination rect, all pinnable), and IFS chaos-game attractors (sierpinski, fern, dragon, tree, maple, spiral) with auto-fitted bounds and pinnable jitter/spin.
Camera effects. BgRemove cuts you out of the background: step out of frame, click 📸 capture background on the node, step back in — the subject composites over any chain via Mix. ChromaKey keys out green/blue/magenta screens; Edges draws glowing Sobel outlines.
3D (three.js). Tunnel3D wraps any texture chain around an endless perspective fly-through tunnel (speed, twist, wobble, sides all pinnable). Model3D has a shape / gltf source toggle: shape mode offers knot, cube, sphere, torus, icosa, pyramid, prism, star, geodesic dome, heart and a strut-built tesseract whose w4 parameter rotates it through the fourth dimension (pin an LFO!); Tunnel3D's speed goes negative to fly backwards (with a sides option where it applies); gltf mode shows the URL field and 📁 loader. Spin, scale, origin, position and distance are audio-pinnable, optionally texture-mapped by its input chain. three.js is bundled locally in lib/ (works offline) with CDN fallback.
Templates. 💾 saves the current patch under a name — it appears in the preset dropdown as ★ and persists in this browser. ✏ renames it (the template playlist follows), 🗑 deletes it.
Script. The bottom-right panel is the patch as code, regenerated live from the editor. Edit it and press apply (Ctrl+Enter) — the same language works in both directions, and you can copy/paste whole patches.
Settings. ⚙ settings holds app-wide options: output resolution (Auto = fit the window, or fixed 360p–1440p — the display and pop-out render at exactly this size, letterboxed), node render resolution (the internal 16:9 canvas every texture node draws at — lower is faster, higher is sharper; the graph rebuilds live when changed), a frame cap, editor-hint visibility, and pop-out on top (uses Chromium's always-on-top Document Picture-in-Picture window when available). Everything persists in this browser.
Layout. Drag the splitters to resize the panes; the buttons on them collapse the editors / the script panel. ⧉ pops the visualisation out into its own window — the main output collapses (editors expand) while popped out, double-click the pop-out to toggle fullscreen (its mirror runs on the pop-out's own frame loop, so fullscreen keeps rendering even when this window is hidden), and closing it brings the output back here. Custom node types can be added in js/extensions.js.
Cables: click to select, Delete to remove. Feedback cycles are allowed (evaluated with a 1-frame delay).