VISUALSOUND is a modular instrument where audio and visuals live on the same canvas. Oscillators sit next to fluid simulations, a sequencer can play a filter or a kaleidoscope, and the same LFO that breathes through your delay can breathe through your colors. Signal flows left → right, always.
There are no pages, no hidden menus, no mode switches between "making sound" and "making image". You patch, it plays. The canvas zooms from the whole show down to a single knob, and everything you see — every cable, every meter, every glow — is the actual signal, live.
Six kinds of signal
- Audio — sample-rate sound. Oscillators, samplers, effects, the master OUT.
- Control — slower signals that play knobs: LFO, envelopes, sequencers, MIDI, math.
- Visual — GPU textures flowing between generators and effects, ending at VOUT.
- Geometry — 3D shape flowing between sculpting nodes, rendered by the LENS (see 3D Geometry).
- Data — words, numbers and flags at tick rate: SCRIBE writes them, TEXT reads them (silver cables).
- Notes & gates — pitch and trigger streams riding the control domain (SEQ, ARP, MIDI, VOICES).
Each domain has its own cable color, and ports only accept matching cables — the patch stays honest by construction. Audio reaches the visual world through one gate only: the FFT bridge (see Cables & Domains).
TIPEverything in this manual is in the app right now — open the module browser with the + button and patch along as you read.
Sound
- Tap the + button (bottom right) and add an OSC, a FILTER and an OUT.
- Drag from OSC's output port to FILTER's
in, then FILTER's output to OUT. - Press PLAY in the header. Drag the
cutoff bar on the FILTER — the sound follows your finger.
Movement
- Add an LFO. Cable its output into FILTER's
cut port — the cutoff now breathes on its own. - Add a SEQ and cable
note → OSC note. Open its editor (the ≡ chip on the node) and draw a phrase.
Light
- Add an FFT, a PLASMA and a VOUT.
- Cable OUT's source (or the FILTER output) into FFT
in, FFT out into PLASMA's warp inlet, PLASMA into VOUT. - The canvas background ignites — the plasma is now dancing to your filter.
TIPDouble-click any cable to open a probe: a live inspector bubble — waveform for audio, value for control, thumbnail for visual. Double-click again to close it.
That's the whole grammar: sources → processors → OUT for sound, generators → effects → VOUT for image, and control signals played into any port that will take them. The rest of this manual is depth, not new rules.
Moving around
drag empty spacepan the canvas
pinch / scroll / mouse wheelzoom — from the whole patch to one knob
⤢ buttonfit the whole patch in the window (bouncy)
double-tap a nodezoom in on it
Editing
drag a node headermove it (snaps to the grid when SNAP is on)
drag port → portconnect — only matching domains take
drag a cable endre-route it; drop in space to delete
marquee button + dragrubber-band select many nodes
wand buttonauto-arrange the patch left → right
⌘C / ⌘V / ⌫copy, paste, delete the selection
On every node
- Power LED (top-left): tap to bypass. Audio passes through clean, everything else mutes; the node dims under a veil. Saved with the patch.
- Editor chip (≡ or </> top-right): opens the node's dedicated editor — SEQ, KINETIC, GRANULAR, WTABLE, REEL, AURIS, LUMEN, SCRIBE, NOTES.
- ? chip (just left of the editor chip — on EVERY node): the node's full inline manual — what it does, every inlet, outlet and parameter explained, and a TRY THIS patch. For deep help on any module, the ? is always the shortest path.
- Param bars: drag horizontally to set, double-tap to reset to default — the app-wide law.
- Chips (dropdown values): tap to open the picker; discrete values switch instantly, no zipper.
- SPARK nodes put a playable button right on the node face — tap fires a gate, or flips a toggle.
Probes
Double-click any cable to spawn an inspector right where you clicked: audio cables show a live waveform, control cables a numeric readout, visual cables a texture thumbnail. Probes ride with the patch until you close them.
Grid & snap
The dotted working grid keeps large patches tidy; SNAP quantizes node positions to it. When a VOUT drives the background the grid politely hides — the visuals own the stage. (You can bring the grid back at any time with the visuals-off button, next chapter.)
TIPSelected node? The footer shows its type and a rename field. Names live on the node face and in exposed subpatch controls.
CABLES & DOMAINS
Typed, colored, honest.
Every port has a domain, every cable takes its color from its source, and connections only land where the domain matches. Thick cables carry textures; audio cables that go stereo draw as a twin strand so you can read the signal path at a glance.
Stereo
STEREO merges two mono signals into one stereo cable; GRANULAR, KINETIC, SAMPLER, LOOPER and the big effects (DELAY, REVERB, PITCH, FREEZE, RESONATOR) are stereo by nature. Stereo-ness propagates through processors automatically — GAIN on a stereo signal stays stereo, and the twin strand shows it.
The FFT bridge law
Audio never plugs straight into a visual port. It crosses through FFT — an analysis bridge with gain, band select (FULL / LOW / MID / HIGH), attack, release, floor and invert. That shaping is what makes visuals playable: a loud mix doesn't pin everything at maximum, a kick can hit only the low band, and an inverted envelope can carve darkness into light.
…and the reverse gate
The loop closes the other way through SONIFY: a texture scanline becomes a single-cycle wave — light drives sound. Point it at a LUMEN, feed its output back through the FFT, and the patch listens to what it paints.
Control into anything
Every audio node carries control inlets for its main parameters — cutoff, drive, mix, threshold, level… — and every visual node has one control inlet per knob. A patched control signal adds to the knob, clamped to its range: the knob sets the center, the signal plays around it.
PORTAL — wireless cables
PORTAL▸ transmits, ▸PORTAL receives: same channel + same type = a connection with no cable drawn, working across subpatch boundaries and in every domain, textures included. For big patches and clean stages.
NOTECables to vanished ports (say, after re-shaping a subpatch) are dropped automatically — the patch never plays ghosts.
SOURCES 14
MIDI IN
MIDI note + gate from a controller
SEQ
Harmonic sequencer — melody, chords, poly voices, evolve
OSC
Morphing oscillator — sine → tri → saw → square
GRANULAR
Beat-locked glitch machine — feed it any sample
KINETIC
Drum machine — 8 pads, 16 steps, classic voices
STRING
Plucked string — physical modeling voice
FM
Two-operator FM voice with feedback
WTABLE
Wavetable oscillator — import WAVs, draw your own
SAMPLER
Sample player — pitch it, loop it
LOOPER
Bar-synced audio looper with overdub
MIC
Live input — the room enters the patch
SONIFY
LIGHT becomes SOUND — a texture scanline is the wave
MODULATION 9
LFO
Cyclic modulator, free or tempo-synced
S&H
Sample & hold with glide
ENV
ADSR envelope with gate + retrig
FOLLOW
Envelope follower — audio to control
CLOCK
Transport clock — gate, swing, probability
RANDOM
Random CV — walk, Turing machine, drift
ARP
Chord arpeggiator from a single note
VOICES
Polyphonic voice allocator — 4 MIDI voices
CHAOS
Strange attractor CV — Lorenz drift on three outs
FILTERS 2
FILTER
State-variable filter — LP / BP / HP
EQ
Three-band tone control
SHAPING 6
SLEW
Smooth / glide a control signal
FOLD
West-coast wavefolder
DRIVE
Warm tanh saturation
VCA
Voltage-controlled amplifier
COMP
Compressor with sidechain input
EFFECTS 8
DELAY
Tape-style delay — sync, ping-pong, tone
REVERB
Feedback-network reverb — size to shimmer
PITCH
Pitch shifter — dual-head granular
RESON
Modal resonator bank — harm, metal, wood
FREEZE
Spectral-style freeze — hold and shimmer
TAPE
Varispeed reel — wow, flutter, the tape stop
SLICER
Clock-synced beat repeat — stutter on demand
VOCODER
16-band vocoder — your voice wears the synth
MATH 7
MUL
Multiply signals — ring mod / AM
LOGIC
Gate logic — AND, OR, XOR, compare
QUANT
Pitch quantizer — snap CV to a scale
MATH
CV arithmetic — add, sub, mul, div a constant
CODE 3
AURIS
Your own per-sample DSP — speaks GRAIN
SCRIBE
Words and values from your signals — GRAIN DATA
LUMEN
Your own per-pixel light — GRAIN on the GPU
STRUCTURE 4
SUB
A patch inside a module — group and reuse
INLET
An input port of the enclosing subpatch
OUTLET
An output port of the enclosing subpatch
NOTES
A yellow sticky note — write on the patch
WIRING 15
PORTAL▸
Wireless send — named channel, any domain
▸PORTAL
Wireless receive — pairs with PORTAL▸
FORK
Condition picks A or B, with crossfade
SPARK
A big playable button — gate under your finger
RESHAPE
Remap a CV range with a curve
RAMP
Trigger → timed ramp, beats-synced
TALLY
Counts triggers into stepped CV
RAILS
Four-way signal selector, crossfaded
TRIPWIRE
Fires when a signal crosses your threshold
LADDER
Eight drawn CV values stepped by a clock
DEFER
Delays a gate or CV — call and response
EYE
Inline probe — see the value flowing through
WRAP
Wrap or fold CV — overflow becomes pattern
XPOSE
Transpose a note stream in semitones
MACRO
One gesture, four shaped destinations
MIXING 8
MIX
Mixer — up to 8 inputs, per-channel level
STEREO
Two mono ins become ONE stereo cable
KEY
Luma key — cut one image into another
SWITCH
A/B cut on a trigger — VJ switch
VMIX
Crossfade two textures
VBLEND
Blend two textures — add, mult, screen
VSTACK
Visual mixer — 8 layers, a playable fader each
MASK
One texture cuts a hole in another
BRIDGE 2
FFT
Audio → control bridge — band, atk/rel, floor
OCULUS
Camera → control — play with hands or face
VISUAL 36
SHADER
Generative reactive texture
PLASMA
Organic noise field — flowing color
SCOPE
Oscilloscope — your waveform, drawn in light
SPECTRUM
Spectrum analyser — bars or radial
TUNNEL
Infinite tunnel — retro-demo depth
SHAPES
Parametric polygons — geometry source
PHOSPHOR
XY vector scope — L against R, phosphor trails
BRUSH
Control signals paint light on a persistent canvas
GRADIENT
Animated colour ramp — palette source
VORONOI
Cellular tessellation, edges that glow
METABALL
Fused liquid blobs, audio-sizeable
SDF3D
Raymarched 3D forms — morph, spin, light
PARTICLES
GPU particle field — bursts on the beat
TEXT
Reactive typography — the node's name, lit
MEDIA
Image as a texture — drop art into the flow
CAMERA
Live camera feed as a texture
REEL
Video sampler — slice, scrub and play a movie like an instrument
FEEDBACK
Ping-pong trails — zoom & rotate
KALEIDO
N-fold mirror kaleidoscope
WARP
Noise-driven domain warp
BLOOM
Glow — threshold + halo
GLITCH
Block displacement + RGB tear, triggerable
CHROMA
Chromatic aberration — RGB split
POSTER
Color banding + dither — retro print
COLOR
Remap brightness to a palette
ROTO
Continuous rotate + zoom transform
XFORM
Pan, zoom, spin, tile — the texture gimbal
MIRROR
Mirrors and mirrored grids
BLUR
Gaussian, radial or directional blur
LEVELS
Lift, gamma, gain, saturation
DISPLACE
Displace pixels of A using B as a map
REACTION
Reaction-diffusion — living organic growth
FLOW
Curl-noise flow — advected light trails
FLUID
Smoke solver — swirling reactive fluid
VOUT
Visual output — the screen
GEOMETRY 12
FORM
3D primitive — orb, cube, ring, gyroid…
TERRAIN
Infinite landscape — noise and spectrum ridges
MELD
Smoothly fuse two forms — liquid geometry
CARVE
Cut one form out of another, or intersect
TWIST
Twist geometry around an axis
RIPPLE
Wave displacement across a surface
SWELL
Inflate a form, or hollow it to a shell
REFLECT
Mirror geometry across axes — instant symmetry
LATTICE
Repeat a form into an infinite grid
TRACE
The waveform, extruded — audio as 3D ribbon
GLYPH
3D type in the geometry domain — words as sculpture
LENS
Renders geometry — camera, light, fog, texture out
OUTPUT 1
THE REAL EDITOR

SEQ is a 16-step generative sequencer built around one idea: key and character are separate controls. ROOT and MODE are set once, in the editor's key menu; the ten VARIATION moods change everything else — progressions, sevenths, chord rhythm, melodic contour, register, hit density — computed in degree space, so two SEQs in the same key can never clash.
The editor
- Pitch grid — draw degrees; colors mark chord roles (root / 3rd / 5th / 7th / passing). Tap toggles a step, drag draws.
- RATCHET lane — 1–4 retriggers inside the gate window, per step.
- CONDITION lane — fire always, every 2nd loop, every 4th, or on the FILL pass.
- Chord track — when harmony is on, tap a card to repick the chord; the playing card lights up.
- New phrase — regenerates the melody inside the current mood. Same key, new sentence.
- Evolve — the machine plays itself: every N bars the phrase mutates by the amount you set.
Outputs
| port | what it carries |
|---|
| note | pitch as MIDI note number, microtuning-aware downstream |
| gate | trigger with the GATE length you set |
| vel | per-step velocity as control voltage |
| c1…c4 | POLY: the chord's four voices, voice-led |
| cgate | POLY: a gate that fires when the chord changes |
POLY — one timbre per chord voice
Flip POLY on the node face and the progression that was already playing under your melody becomes patchable: c1…c4 carry the chord's voices, cgate fires at every chord change. Patch each voice into a different instrument — c1 → OSC, c2 → WTABLE, c3 → FM, c4 → KARPLUS — and one envelope on cgate plays them as a single ensemble. The melody keeps running on note/gate, a fifth voice on top.
- Voice-leading (LEAD): each voice moves to the chord tone nearest its previous note — chords glide, and your timbres migrate through the harmony. CLOSE / OPEN / SPREAD force classic dispositions instead.
- Both layers at once: stabs come from
gate (step rate), pads from cgate (chord rate) — no mode switch, just patch both. - Custom chords: every card in the harmony track takes a quality — sus2, sus4, add9, 6th, quartal, power, cluster — or four hand-set tone offsets. All in degree space, so custom chords stay in key; on the CHROM scale the offsets become semitones and anything goes.
- Triads on four voices double the root an octave up — a patched timbre never goes silent.
- Harmony off + POLY on = unison ×4: four timbres, one line.
TIPThe node face shows the key read-only and a live step strip — the full instrument is behind the ≡ chip.
THE REAL EDITOR

Eight pads (BD SD CH OH CP RS CB CY), a classic analog-style kit synthesized on load, your own samples on any pad, and a step sequencer that goes far beyond on/off. The closed hat chokes the open one. It's the law.
Pattern length — up to 64, any number
LEN runs from 1 to 64 — any value, not just multiples of 16. The grid pages 16 steps at a time; page chips appear past 16, with a white dot tracking where the playhead is running. Odd lengths against 16-step material are instant polymeters: try 23 against a SEQ and let it drift.
Per-step layers
| layer | what it does |
|---|
| STEP | tap: on → accent (ringed) → off. Accents hit ×1.35. |
| VEL | per-step velocity 1–127 — drag the meter, double-tap for full |
| PROB | trigger probability — the dice roll at fire time |
| RATCH | 1–4 retriggers inside the step |
| COND | always · 1:2 · 1:4 · FILL (every 4th loop) |
Sound & mixer
- Per pad: LVL, TUNE (±12 st), DECAY, START, PAN, CUTOFF with LP/HP filter, REVERSE — all on orange knobs, double-tap resets.
- The MIXER page is a classic console: per-pad fader + pan, levels also exposed as node params (so scenes and MIDI learn can play them).
- Single outs: each pad has its own output port, PRE or POST the internal mixer — feed a pad to its own effect chain.
- External control:
note picks a pad (60 + pad), gate retriggers — play KINETIC from SEQ, ARP or MIDI.
Kits
The machine has its own bank: factory grooves plus your kits (pattern + pad settings + imported audio, saved as one preset). Imported samples ride inside the kit file.
TIPSwing lives on the pattern strip — odd steps land late, up to 75%. Combine swing with ratchets for rolls that breathe.
THE REAL EDITOR

GRANULAR scatters windowed grains over a sample and plays the cloud as an instrument. Feed it a note stream and it becomes a pitched voice; leave it free and it's a texture engine.
The editor
- Waveform theatre — zoom, pan, set the trim region by dragging its edges; the active region is what the cloud grazes.
- Slices — drop markers; slice mode walks them as scan anchors.
- Audition — preview the sample (or a slice) through the master, even with the transport stopped.
- Destructive tools (normalize, reverse) keep your slice markers where they belong.
Ports
| port | role |
|---|
| note | transposes the cloud — play it like a sampler |
| chaos | scatters position/size/pan per grain |
| gate | triggers/gates the cloud envelope |
TIPSmall grains + high density = smeared pads. Large grains + low density = rhythmic stutter. Chaos turns either into weather.
THE REAL EDITOR

A wavetable oscillator: single-cycle frames of 2048 samples, swept through with POS (knob or CV — an LFO on morph makes the timbre travel while you play). Empty, it ships with eight built-in shapes; the editor makes the table yours.
The editor
- Import standard wavetable WAVs (2048-frame files land as-is).
- Draw frames by hand and reprocess them — the strip shows every frame, the morph path is what POS travels.
- NOTE in plays it like any voice; DETUNE in semitones on the face.
TIPSEQ note → WTABLE note · LFO → morph — the classic moving-timbre voice in two cables.
THE REAL EDITOR

Import a clip and REEL turns it into a playable machine: the video is transcoded once to an all-keyframe proxy (every jump lands instantly) and analyzed — scene cuts and audio onsets become markers, markers make slices, and the clip's own audio is sliced in sample-sync with the picture.
Modes
| mode | behavior |
|---|
| LOOP | plays A→B at RATE — negative RATE runs the film backwards, pitch follows (tape law) |
| SLICE | notes fire slices: note 60 = slice 0, 61 = slice 1… A slice plays to the NEXT marker; only a new slice cuts it short — rests never interrupt (the sampler law) |
| SCRUB | the head chases the scrub CV — an LFO here is video scratching |
The editor
- Zoom — pinch, or the − / FIT / + chips; keyframes and waveform re-render for the window you're in.
- Preview transport — play/stop the clip through the master, fully detached from the patch: position markers with the sound in your ears.
- Marker flow — click the timeline to place the edit cursor, hit SET MARKER to plant one; drag markers to move, drag them out of the lane to delete.
- AUTO row — CUTS (scene changes), ONSETS (audio transients), GRID n, CLEAR: all STAGED — nothing touches the engine until ✓ MARKERS.
- ✦ VISION — content markers, computed on demand and cached: FACES (a face appears, moves, leans in) and SUBJECT (the scene changes meaning, not just brightness).
Performance ports & outs
| port | role |
|---|
| slice / gate / scrub | the playing inputs — note-select, fire, chase |
| stut / jump / frz | stutter window · chance-jump to a random marker · freeze picture+sound |
| x / y / zoom / spin | the frame's own XFORM — place several REELs on one canvas |
| out | the clip's audio, stereo, sliced with the picture |
| tex | the picture — process it like any visual |
| lum / mrk | frame brightness as CV · a pulse on every marker crossing |
TIPMRK → KINETIC gate: the montage plays the drums. LUM → FILTER cut: bright scenes open the sound.
THE REAL EDITOR

AURIS is the node that speaks GRAIN AUDIO — VISUALSOUND's own DSP language, created by Mike Gazzaruso. You type signal math; the node compiles it live into a bytecode program that runs on the audio thread — 48 000 times a second, allocation-free, glitch-free.
//! name: My First Grain
inlet level = 0.8;
out1 = in1 * level;
out2 = in2 * level;
Why it matters
param lines become real knobs on the node face; inlet lines add control ports — LFOs and envelopes modulate your code at audio rate.buf delay lines survive live recompiles: edit the code while the echo rings, the tail keeps ringing.- The LIBRARY chip loads six complete factory effects — Tape Echo, Cathedral, Dream Chorus, Liquid Flanger, Lo-Fi Crusher, Cosmic Comb — each a readable lesson.
- Scripts export/import as
.grain text files. Share them anywhere.
Strict, like a stage
An AURIS that doesn't compile shows a red border and blocks Play — the last good program keeps running meanwhile, and the error points at line and column. No half-broken shows.
And the language doesn't stop at sound: LUMEN runs the same GRAIN code once per pixel on the GPU, SCRIBE once per tick over words and values — the next two chapters.
The full language reference — every keyword, operator, function, buffer command and recipe — is one tap away:
LUMEN is a visual node that speaks GRAIN. The exact same language — same knobs, same math, same compiler — but the program runs once per pixel, every frame, on the GPU. Type a line, see light. Keystroke to pixels is one live recompile: this is an instrument you can live-code on stage.
inlet glow = 0.6;
let cx = x - 0.5;
let cy = y - 0.5;
let d = sqrt(cx * cx + cy * cy);
r = (0.5 + 0.5 * sin(d * 28 - t * 3)) * glow + bass;
b = (1 - d * 1.4) * glow + high * 0.5;
What changes from GRAIN
| builtin | meaning |
|---|
| x, y | this pixel's position, 0…1 (y grows upward) |
| r, g, b | the color you emit — black unless you say otherwise |
| level bass mid high | the node's audio: wire its audio port, or it follows the master mix |
| pick(dx, dy) | brightness of the input texture at an offset — warps, lenses, CRT looks |
| state | THIS PIXEL one frame ago — trails, decay, peak-hold |
param and inlet work exactly as in GRAIN: knobs on the node face, control ports on the node — an LFO plays your code.- Audio-only pieces (
in1/out1, sr, buf) are clear compile errors: the editor tells you what to use instead. - The LIBRARY chip ships eight looks — Aurora, Scanlines, Neon Rain, Stardust, Warp Lens, Meter, plus Pump Zoom and Edge Fire, which drive the tex AND audio inputs together.
- LUMEN has a texture input (for
pick) and an audio input (for the bands) — it's a generator and an effect.
Light, not sound
A broken LUMEN never blocks Play. It wears the red border and keeps rendering the last good look while you fix the line — the strict rule protects the stage, and pixels aren't the stage's heartbeat.
TIPLUMEN's output is an ordinary texture: send it through BLOOM, FEEDBACK, KALEIDO — or into another LUMEN's tex input and process it with code.
The full reference — with a dedicated visual-context section — is one tap away:
SCRIBE is the third body of GRAIN. It runs about 30 times a second on the main thread — far from the audio path, which is why it can do what the other two can't: strings. It reads your signals (data, control, notes, gates, audio features) and emits DATA — text, numbers, flags — on silver cables.
state word = "READY";
word = rise(gate) ? notename(note) : word;
out1 = word + " · " + format(bpm, 0) + " BPM";
The set, solved
Wire o1 into a TEXT node's text port and whatever string you compose replaces the text on screen, live — the playing note by name, the bar counter, a peak readout, a message that answers another SCRIBE. No pre-written lines: the text is computed.
Ports
| port | role |
|---|
| d1, d2 | DATA in — values from other SCRIBEs |
| c1, c2 | control in — CV sampled every tick |
| note, gate | a note stream (notename, rise/fall) |
| audio | read as level / bass / mid / high in code |
| o1 … o4 | DATA out — text, numbers, flags |
param/inlet work exactly as in AURIS and LUMEN — same knobs, same additive law.state persists between ticks and can hold TEXT: counters, peaks, the last word seen.- The LIBRARY ships Note Ticker, Peak Meter and Bar Counter — three readable lessons.
- A broken SCRIBE never blocks Play: last good program keeps ticking, red border while you fix it.
TIPChain SCRIBEs: d1/d2 carry values BETWEEN them, so one can compute and another can phrase. out2 flags make cheap logic — trip a message when the peak clips.
The full GRAIN DATA reference is one tap away:
THE REAL EDITOR

The Geometry domain is a fourth cable type: violet ports that carry shape, not sound or pixels. Geometry nodes never render anything themselves — they describe a 3D scene as pure mathematics (signed distance fields), and one node turns it into image: LENS, the camera. Everything upstream of a LENS is sculpture; everything downstream is ordinary visual signal, so BLOOM, FEEDBACK, KALEIDO and the whole 2D chain work on 3D for free.
The modules
| node | one-line job |
|---|
| FORM | a primitive: orb, cube, ring, pill, octa, gyroid — sized, placed, colored |
| TERRAIN | an infinite landscape from noise — and from the audio spectrum |
| MELD | smoothly fuse two shapes; K sets how liquid the weld is |
| CARVE | boolean sculpting: cut B out of A, or keep only the overlap |
| TWIST | wring the space around an axis |
| RIPPLE | wave displacement across any surface |
| SWELL | inflate a form — or hollow it into a shell |
| REFLECT | mirror across axes: one form becomes a symmetric family |
| LATTICE | repeat a form into an infinite grid, in 1, 2 or 3 dimensions |
| LENS | the camera: orbit, pitch, dolly, fov, light, fog, glow, material → texture out |
| TRACE | the audio waveform, extruded — your bass line as a 3D ribbon |
| GLYPH | 3D type: the node's text as sculpture (rename the node, resculpt the word) |
Two minutes to liquid 3D
- Add two FORMs (make one a CUBE), a MELD, a LENS and a VOUT.
- Cable FORM → MELD
a, FORM → MELD b, MELD → LENS geo, LENS → VOUT. - Drag the forms'
x apart, then raise MELD's k — watch them fuse like mercury. - Cable an FFT into MELD's
k inlet: the music now welds the geometry. - Cable an LFO into LENS
orbit: the camera circles your sculpture on its own.
Sound in, shape out
Every geometry parameter has a control inlet — the same law as everywhere else: CV adds to the knob, clamped to its range. The LENS also has a REACT knob (audio pulses light, glow and a subtle dolly-push) and an audio input: wire a signal there and any TERRAIN in the scene grows spectrum ridges — your mix becomes a mountain range scrolling under the camera.
Materials & color
- PRISM — every FORM wears its own
hue; MELD blends colors where shapes fuse. - CHROME — iridescence from the surface normal, tinted by the LENS hue.
- MONO — one hue for everything: the sculpture as a single material.
TIPDouble-click any violet cable for a live 3D probe — a mini-render of the geometry flowing through that exact point of the chain, default camera, always spinning.
NOTEThe scene compiles to a distance program the GPU walks per pixel. It is capped at 48 ops — REFLECT and LATTICE are the cheap way to look infinite; chains of MELDs off one shared FORM are the expensive way.
SUBPATCH
- Select two or more nodes and hit GROUP — they collapse into one box; cables through the boundary become INLET / OUTLET pass-throughs automatically.
- INLET / OUTLET nodes define the box's ports (top-to-bottom order); their dropdown sets the domain.
- Double-tap the box to enter it — the breadcrumb bar tracks where you are. Subpatches nest freely.
- EXPOSE a node inside and its params appear on the box face, grouped under its name, in its color — with the editor chip riding along for SEQ/AURIS/KINETIC.
Wiring utilities
| node | one-line job |
|---|
| PORTAL▸ / ▸PORTAL | wireless cable per channel + type, all domains, cross-subpatch |
| FORK | route one signal to a or b on a condition |
| RAILS | four drawn CV lanes, stepped by a clock |
| RESHAPE | remap a range with a curve |
| RAMP | a triggered line generator |
| TALLY | count triggers into a CV |
| TRIPWIRE | fire when a signal crosses a threshold |
| LADDER | stepped quantize of a CV |
| DEFER | delay a control signal |
| S&H / QUANT / LOGIC | sample-and-hold, pitch quantize, boolean math |
| EYE | a live value readout pinned to the canvas |
| SPARK | a bang/toggle button on the node face |
TIPMACRO turns one knob into four scaled outputs (amount + offset each) — one gesture, four destinations. VOICES unpacks poly MIDI into 4 note+gate pairs.
Scenes
- Eight pads in the footer. Hold to store the current knob state, tap to recall.
- Recalled while playing, scenes morph in time: the chip cycles CUT / 1 / 2 / 4 / 8 bars. Continuous params glide, discrete ones switch at the halfway point. Stopped = instant.
- Stored pads show a lit LED; the active pad glows solid. Scenes save with the preset.
MIDI learn
Arm MIDI, tap any knob (canvas bars included), move a controller CC — bound. The map is per-preset; tapping a bound knob in learn mode unbinds it. Bindings resolve to the actual engine parameter, so they keep working inside subpatches.
Motion record
Arm MOT and play: every knob gesture is recorded into a dense 4-bar loop (8 samples per beat) and replays on the transport clock. Touch the knob again and your hand takes over; release and the loop resumes. Long-press MOT to clear everything.
Installation mode
The sparkles.tv button (or the Settings toggle, for launch-time) hides every scrap of interface and gives the room to the visuals, at full brightness. Tap or Esc brings the cockpit back. With autoplay on, the piece starts itself — gallery-ready.
A LIVE SESSION, IN THE HAND
Run VisualSound on an iPhone and it becomes a remote controller for the instrument on your iPad or Mac — same app, same Wi-Fi, no extra hardware. Blackout the interface with installation mode, give the projector the whole canvas, then walk the room and play every exposed parameter from your pocket.
Linking up
- On the host (iPad/Mac): arm LINK in the header. The chip shows how many remotes are on the line.
- On the iPhone: open the app — hosts on your Wi-Fi appear by name. Tap one to connect.
- Several phones can join at once; the last touch wins on any control.
Exposing modules
- With LINK armed, select any module and tap EXPOSE TO REMOTE in the footer — its params land on every connected phone, grouped under the machine's name, with real values and real units.
- Exposed modules wear a small teal ring next to their power LED.
- The exposed set is remembered per project: close and reopen the session, the phone finds the same surface.
Playing from the phone
- Faders — continuous params are full-width horizontal faders: drag left/right to play, up/down still scrolls the page. Double-tap resets to default, as everywhere.
- Chips & toggles — tap cycles an option (long-press for the full menu); toggles flip on tap.
- Transport — start/stop the set, roll a recording, arm motion record and step the tempo, all from the phone.
- Scenes — the host's eight PERFORM pads ride along: recall (and morph) the whole show from across the room.
- Long-press a module's nameplate to choose which of its params show on the surface.
DECKs
A DECK is your own arrangement of the surface: which modules, in what order, with which params visible. Decks are saved on the phone, bound to the host project, and every edit saves itself — they reappear whenever that project is loaded. Each session opens on ALL (everything exposed, host order); build a deck from the menu when the show has a shape.
TIPThe remote never needs the patch on screen: it works exactly the same while the host is in installation mode — that's the point.
Live capture
- REC captures the master, sample-accurate, straight from the audio engine.
- When a VOUT is live, video records too — timestamped from the audio clock, so image and sound can never drift.
- Stop → one shareable file: a
.mov with both, or a .wav for audio-only takes. The share bar slides up when it's ready.
Offline bounce
- Long-press REC: Master at 4, 8 or 16 bars — rendered offline, faster than real time, bar-exact.
- Stems: one file per OUT node. Name your OUTs, get named stems.
Patch as text
Presets export and import as .vspatch files — the whole canvas as JSON, embedded samples included. Mail a patch, version it, post it. The preset browser has both buttons.
NOTERecording runs on a lock-free path that never touches the audio thread's timing — but video capture is real GPU work; on battery, expect the fans to know.
MIDI in
- The MIDI node turns your controller into patch signals: note + gate/velocity CV, port and channel selectable on the node.
- VOICES unpacks polyphony: four voices, four note+gate pairs, oldest-note stealing — wire four OSCs and play chords.
- MIDI learn (header) binds CCs to any knob — see Performing.
Microtuning
Tuning is global: every pitched module — oscillators, samplers, strings, FM, resonators — resolves notes through one table. In Settings, pick 12-TET, any EDO from 5 to 96, or import a Scala .scl file (cents and ratios both supported, one degree per semitone from middle C).
TIP19-EDO on a KARPLUS with a slow ARP is a cheap ticket to somewhere else entirely.
Settings
- Power Saver — drops the canvas to 30 fps when truly idle. The moment you touch anything, full rate.
- Autoplay — the transport starts itself at launch.
- Installation at launch — boots straight into the full-screen visual stage.
- LUMEN half resolution — renders LUMEN nodes at half size and upsamples; off by default, relief for older iPads.
- Tuning — the global microtuning table (previous chapter).
- macOS: Settings live under ⌘, — iPad has the gear in the header.
Inside a DAW
- VISUALSOUND ships as an AUv3 on Mac and iPad — the full canvas inside your host.
- The host owns tempo and transport: BPM becomes a readout, the beat clock follows the project, synced LFOs and sequencers land on the grid.
- The entire patch saves inside the project file — reopen the session anywhere and the canvas is exactly where you left it.
Performance honesty
The CPU meter reads like Activity Monitor: 100% = one core. The audio engine is lock-free and allocation-free by design; the canvas culls what you can't see and sleeps when nothing moves. If the meter climbs, it's the patch working — not the paint.
Canvas
drag spacepan
pinch / scroll / wheelzoom
drag node headermove node
drag port → portconnect
double-tap nodezoom to node
double-tap paramreset to default
double-click cabletoggle probe
tap power LEDbypass node
Editing
⌘C ⌘V ⌫copy · paste · delete selection
⌘Z ⇧⌘Zundo · redo
marquee + dragmulti-select
GROUP (footer)selection → subpatch
Performance
hold scene padstore scene
tap scene padrecall (morphs in time while playing)
morph chipcycle CUT / 1 / 2 / 4 / 8 bars
long-press MOTclear motion loops
long-press RECoffline bounce menu
Escleave installation mode
Everywhere
double-tap any knobreset to default
⌘, (macOS)Settings