Realtime generative visuals for VJing. Native Rust and wgpu, feeding Resolume, TouchDesigner and MadMapper over Syphon and NDI, played live over OSC and MIDI.
Apple Silicon and Intel. signed & notarized
— it opens with a normal double-click, checked with spctl in CI
before every release. Windows builds from source and is tested in CI;
there is no Windows installer yet.
Or one line in a terminal, which puts it in Applications:
curl -fsSL https://raw.githubusercontent.com/legofsalmon/vizz/main/scripts/install.sh | bash
Syphon is embedded in the bundle — nothing else to install. Double-clicking runs 1280×720 with OSC on udp/7000 and Syphon on.
Built to survive a live set: the render thread never waits on anything.
Syphon on macOS, zero-copy on the same Metal queue. NDI on the network, with frames dropped rather than awaited — losing an NDI frame is survivable, missing vsync is not.
OSC and MIDI on every parameter. Sixteen assignable faders on the performance layout, each with MIDI learn and a ghost mark showing where modulation has actually pushed it.
Design a look, save it as a preset, put it on one of sixteen pads, and fire it mid-set — the blend takes musical time and moves the parameters, not a crossfade. Edit a preset once and every pad playing it follows.
Four attractors and repulsors bend the cloud from a layer over the scenes, with their own presets and their own sixteen-pad grid. Looks and wells compose instead of overwriting each other.
LFOs, a beat clock, and four configurable audio bands with tempo detection, wired on a pannable canvas. Modulation is an offset on top of your value, so a fader you set stays where you set it.
Eight morphing modes including two strange attractors. Drop a PLY, XYZ, PTS or CSV onto the window to load a scan, colour included. A real camera with depth of field, and a wireframe room sized to the frame for forced perspective.
Stream PLY in over TCP, or watch a file that gets rewritten. Frames morph against loaded scans and attractors like any other cloud. No wrapper protocol — a PLY header is its own frame length.
Every external dependency fails soft. Health monitoring with frame-time percentiles, and a headless mode that renders the same frame path as a live set for benchmarking.
Nine built in, on the number keys — the six particle looks shown here, and three prints on 7, 8 and 9. Every one of these is a real frame, rendered headlessly from the preset itself.






Newest first. Full notes on each release page.
THIRD_PARTY_NOTICES.md, inside the app./deck/next and /deck/prev step through
the set list and stop at the ends; the APC40 ships a blackout, a
tap and its scene-launch row on the pages. The words on screen
are accepted on the wire as OSC aliases.take.json sits beside the
frames, reveal opens the folder, and a countdown can be
cancelled from the stage. Bands, the recording setup and the
screen you left on survive a restart.sim:life shipped in the Clouds rule, which grows
into masses and then holds them: sixty changed cells a
generation out of a hundred and ten thousand, which in a live
slot is a still image with a name on it. Every test passed,
because they asked that it neither die nor flood. It now ships
in Pyroclastic, which boils; a test measures the churn rather
than the census; and any rule that stops is started again.--cloud gen:thomas,
fills a slot from a formula instead of a file: twenty-three
strange attractors — Thomas, Halvorsen, Dadras, Rössler,
four-wing, Chen, Sprott B, Nosé–Hoover, Arneodo, Burke–Shaw,
Chua, Hadley, Rucklidge, three-scroll, Rabinovich–Fabrikant,
Aizawa, Newton–Leipnik, Sakarya, the Rikitake dynamo,
Shimizu–Morioka, the finance system, Coullet, Genesio–Tesi —
traced in time order so the cloud crawls along itself; the
Clifford and de Jong maps lifted into depth; a Gielis supershape;
a real spherical harmonic drawn as an orbital; a Lissajous knot
and a torus knot; the Hopf fibration; Chladni sand; four
L-system plants; a Voronoi foam; a fractal flame, the Buddhabrot and a hyperbolic
tiling; a seashell; the Sierpinski tetrahedron, the
Menger sponge and the Mandelbulb; the Mandelbrot and a Julia set
as reliefs. Each is a cloud like any other once made — chosen by
name, crossed to with a scene change, captured as a look's source
— and comes back on launch./shape/wind
blows through the field — an Arnold–Beltrami–Childress flow, a
steady solution of Euler's equations, divergence-free and chaotic
in its streamlines — read as a displacement of where each point
already is, so it costs no state and works on a scan exactly as
on a sphere. Zero by default; every look saved before it draws
as it did.gen:torus-knot?p=2;q=5. quadratic is
Sprott's search for a chaotic quadratic map, and its one knob is
the seed: roll is an attractor nobody has seen.
quadratic flow is the same search with an
integrator inside it — random quadratic vector fields rather than
maps, which give smooth ribbons where the maps give dust./shape/wind blows,
with the links solved as constraints rather than springs,
because a constraint pass cannot add energy.4/4/5 is a spiking crystal,
4-7/6-8/10 boils./lN/drift now, so it takes a fader, learns a MIDI
control, can be modulated, runs backwards, and zero is
genuinely still. Existing looks are unchanged.~ means "this is moving".
It used to mean "has a modulation route", which is a different
question from the one you ask: a scene blend in flight or a
preset still arriving moved the picture and lit nothing. When
something moves with nothing routed to it, the hover says so.VIZZ_PAD_COLOURS.V to stand the controls
aside entirely and watch the output.pal, vec and
four peers called l1…l4. It is now
organised into SHAPE, LOOK, PRINT, STAGE and OUTPUT, in the
order a look gets built, with a caption on every group saying
what it is for.vizz-0.14.0.app.zip, so a Downloads folder
holding several of them can be told apart without unzipping
each one./vec/place switches the stack
between living inside the feedback chain and printing clean
over the top.vizz-design crate — one meaning, one colour,
everywhere, enforced by a test that fails if a screen restates
a state colour by hand./video/depth sets how far the
relief pushes and /video/relief chooses what
drives it.--fullscreen starts venues that way. New
/record/active captures the master as a PNG
sequence that never stalls the show — drops are counted on the
red REC chip, and a full disk stops the take with one notice.XDG_CONFIG_HOME like everything else,
re-dropping an edited palette reloads it in place, and quitting
flushes the newest MIDI binding.--width
precedence, a title bar that only claims what bound, and quit
without the two-second stall..gpl or a list of hex colours. Both come back on the
next launch.midi.json files load
unchanged.fit sets
every band from what is actually arriving.mod would not turn off. Each
press added another route on top of the last, so the modulation only
ever got deeper. It is a toggle now.? shortcut list now opens with the panel hidden and
from the performance layout — the two places you would ask for it./, modulated ones
marked, stepped ones named rather than numbered.fit on the node canvas.