Palinopsia · Opsia · a visual instrument

A visual instrument you play.

Palinopsia is a WebGL2 compositor you perform, not a tool you wire. It stacks layers of generated and treated video, plus a layer of sound, masters the whole picture through a fixed set of stages, and lets you steer every parameter live: by hand, by an internal modulation brain, over OSC and MIDI, from the other instruments of a dataflou mesh, from an AI agent on the same computer, or with your own body. With Ableton Link, it keeps time with your music.

Free and open source, for Windows, macOS and Linux. The name is the persistence of a visual image after the stimulus is gone.

4layers
47sources
56effects
11sonify voices
121one-click recipes
OSC·MIDI·Link·body·meshplayed by
↓ Download Quickstart Free & open source · source on GitHub
The Palinopsia interface: live preview and scene bank top-left, the Inspector below, the Master FX strip with the three finishing stages under that, and the layers down the right column, each read top to bottom in four steps (IN, MIX, FX, OUT), the Audio Layer under them.
The instrument at rest. Live preview and scene bank top-left, the Inspector for whatever is selected below it, the master effects and the three finishing stages under that, and the layers down the right column, each in the order the picture goes through it : IN, MIX, FX, OUT. The Audio Layer sits under Layer 4.

Download

The latest release for every platform. Built by CI, unsigned for now.

Windows

Installer (.exe) or a portable single file. x64.

Get the latest ↗

SmartScreen may warn on an unsigned build: More info → Run anyway.

macOS

A .dmg for Apple Silicon (arm64). On an Intel Mac, build it from source.

Get the latest ↗

Not notarized: drag Palinopsia into Applications first, then run xattr -cr /Applications/Palinopsia.app once in Terminal (or open it, then System Settings → Privacy & Security → Open Anyway).

Linux

.AppImage (portable) or .deb. x64.

Get the latest ↗

chmod +x the AppImage, then run it.

Or build it yourself: npm install, npm run fetch:depth (the depth AI, once), then npm run dev. The whole app is on GitHub, free software under the GPL (version 3 or later).

What it can make

Every frame below was built by the app alone, no external footage. Pick a recipe from Generate and it composes the whole session for you.

Op-Art
Op-Art. A grid warped and folded until it breathes.
Datamosh
Datamosh. A slit-scan torn into RGB compression noise.
Mycelial
Mycelial. Reaction-diffusion filaments, grown then eroded.
Cathode Ray
Cathode Ray. Phosphor scanlines, one colour on black.
Analog moiré
Analog moiré. A wobbulated interference field.
Cut-Up
Cut-Up. A wall of films, each in its own torn piece.
Gravity Well
Gravity Well. A floor of points sinking into a funnel, ringing with ripples.
Line Wall
Line Wall. Machine-cut bars laid on a wall that runs off to the side.
Crossing
Crossing. Full-height bars, each leaning its own way.
Oil Cloud
Oil Cloud. One billowing cloud painted in oil, gold toward the light, blue in its folds.
Orbit
Orbit. A figure of dots the camera circles : a ring rolling through itself, a globe, a galaxy.
Oil Sky
Oil Sky. A sky of billowing cloud over the horizon, painted in thick oil.
Marbling
Marbling. Drops of paint floating on water, each new one pushing the others into rings.
Marbled Paper
Marbled Paper. Slow currents comb the paint into veins, like the endpapers of an old book.
Night Bath
Night Bath. Bright inks on dark water, carried along by currents and swirls.

Your first five minutes

  1. You land on a fresh, random one-layer scene. Press R a few times. Each press re-rolls the whole instrument (sources, effects, blends, modulators) from curated ranges and crossfades over the morph time. This is the fastest way to feel the range of the thing. Anything you made Persistent (right-click a control, an effect or a source) stays where it is.
  2. Open the Feel tab with G and drag Density, Flow and Drift. These are whole-image macros: one slider reshapes the entire picture at once. Double-click any slider to reset it to neutral.
  3. In a layer's IN step, click its A button (or pick another source from the menu beside it) and play with its parameters in the Inspector under the preview. Every slider carries a dice for a curated random value, a preset menu, and an M button to attach a modulator.
  4. Keep something you like: click + in the scene bank to save it, then press 1–9 to recall your scenes live. Recalls morph over the Morph time, live: set it long and one scene slowly becomes the next.
  5. Go big: press O for the Output page (it opens inside the app), pick a display, and go fullscreen. Or reach for Generate in the toolbar: 126 recipes, each building a whole coherent session (visuals, palette, world and feel) in one click.
Lost at any point? Press ? for the full keyboard cheat-sheet, in the app. Esc closes it. Looking for something? Ctrl+K finds any effect, source, preset or control as you type.

Beyond the picture

Palinopsia is one instrument with several rooms, each reached by a single key.

The Sonify page: the composite mirrored large with sound probes drawn on it, and the voice strips on the right.

SonifyS

The image itself synthesizes audio in real time, inside the app, no external software. Eleven voices (a scanning spectrogram, the frame as an oscillator, grain clouds off motion, struck edges, raster audification, SSTV, resonant filters, read heads that play the picture as data, a chord bank, a Collage's own films heard as a tuned sound collage through a Ring bank inspired by the S-4, and an Assemblage's own sound, cut with the picture) with a shared reverb/delay tail, an output EQ with presets, an effects sequencer, and a key sequencer that composes the key of the whole instrument over time. And every voice can take its place in the room : around a speaker dome, or as objects for SpatGRIS. Right-click the Sonify button to open the page in a window of its own.

The macro-form sequencer: tagged scenes across the top, a live monitor, and the transport column on the right.

SequencerQ

An auto-pilot over your scene bank. Tag each scene, then let it wander: weighted or climate-shaped selection, morph or cut transitions, and slow durational long-forms (Burial, Long-Take, Frame-Weave) that reshape the whole run over minutes. Right-click the Seq button to keep it in a window of its own, on another screen.

The modulation brain: eight modulators over the sixteen macro knobs and two XY pads.

Modulation brainD

Eight modulators (LFOs, envelopes, chaos, a step sequencer with conditional steps and swing, Euclidean and Turing patterns, audio and vision followers, a body follower) and sixteen macro knobs (their row shows with the MACRO button, and they play hidden too) write on top of your values every frame. Dial a value by hand, then let a shape move it. Shape a binding with ⌇ : combine it with other modulators, keep only the real hits with a threshold, or integrate it so each beat pushes the value a notch and leaves it there. An audio modulator can even listen to a film's own soundtrack, where its playhead is. Everything answers to MIDI Learn and OSC too.

The Mixer: a column per layer, with its A and B crossfader, the hue harmony and its swatches, the coupling to the sound with its meter, and the layer's faders.

MixerM

The home of A and B. Each layer's column shows how its two sources meet : the mode and a crossfader from A to B, a white line where the sound pushes it, the hue harmony (B takes A's colors, or their opposite) with swatches, and the coupling to the sound with a live meter, above opacity, speed and blend. Each column says whether its layer is active, and why not; one ≈ coupling switch pauses every layer's coupling at once.

The Output and mapping page: a keystone editor over a live mirror of the output, with resolution, flash safety and record controls.

Output & mappingO

Fullscreen to any display, projection-map with a keystone editor, and record the take in real time, DXV3 included (it keeps rolling when you leave the page). Send over NDI, Spout, Syphon or HIVE (and play any NDI source on the network as a layer), go under a fulldome with a 3D simulator, span a custom composition across several projectors, run it as a self-healing installation, and push the picture's color into the room over DMX / WLED, all behind a built-in flash-safety limiter. The page opens inside the app; right-click the Output button to open the output, or the whole page, in a window beside the controls.

The Source Editor: your shaders and every built-in in a list on the left, the ISF code in the middle, a live preview with the shader's controls on the right.

Source EditorAlt+E

Write your own generators and effects in ISF. Start from a template, from a copy of any built-in shader, or from an ISF file found anywhere. It compiles as you type into a live preview, the shader's controls right there to try it; the last version that worked keeps playing, and a mistake is marked on its line. Save it and it joins the source and effect menus under my shaders, like any built-in; save again while it plays and it changes live. Sessions carry the shaders they play, so they open the same on another computer.

Resolume mapperK

Open a Resolume composition and its layers, clips, effects and dashboard become columns of a pin board whose rows are Palinopsia's signals: modulators, Macro knobs, the audio, picture and body features, any OSC address. Click to connect, set an amount, smooth it, and recall scenes as Resolume columns. 8 snapshots, a lock, and a dice for happy accidents.

dataflou meshA

Turn on the dataflou section of the Connect tab and Palinopsia becomes a node of the mesh its sibling instruments speak. Nodes on the network find each other on their own, show what they publish and what they take, and wire any source to any destination, both ways. Palinopsia shares what it senses (sound, picture, body, modulators) and takes Macro knobs, layers, the feel macros, scenes and tempo.

Ableton LinkA

Enable Ableton Link in the Connect tab and Palinopsia joins Live, DJ software and every Link app on your network : one tempo that anyone can change and everyone follows, and one bar. Modulators synced to the BPM and Sonify's sequencers land on the same downbeat as the music, a LINK badge beside the BPM counts the apps linked, and a latency setting keeps the picture on the beat through a slow projector. With start / stop sync, Live's play starts Palinopsia's MIDI clock and sequencers on the bar, and Palinopsia's play starts everyone.

Agent (MCP)A

Turn on Agent (MCP) in the Connect tab and an AI agent on the same computer can read what is playing, look at the output, set sources, controls, effects and scenes, drive anything that has an OSC address, and write new shaders, seeing each one run before handing it to you. Every change it makes is one Ctrl+Z, your Inspector stays where you left it, it cannot touch the Flash safety, and only your own computer can connect. Off until you turn it on.

Under Layer 4, the Audio Layer plays sound : two slots of sound files, live inputs or NDI® sources, each with its own volume, pan and mute and a mix between them, through Sonify's output, Sonify on or off. World W sets the mood of the whole instrument (its atmosphere, its film character, how the layers couple to the sound), says what it will change before you apply it, and fades in and out with its World amount. Body B reads the room: turn a webcam on (opt-in) and MediaPipe reads your hands (down to each finger), pose, face and silhouette into the instrument. Route any tracked feature, any movement quality or the motion field into a modulator, or author gesture rules that fire actions and OSC: hold up a fist or a peace sign, cover a screen zone with your shadow, or trigger on presence when someone walks into frame. A rule can fire some 250 actions, from a layer's mute to the next master chain, a Generate theme or the key, and with Pinch = click each hand's pinch paints on the picture like the mouse. Assemble E is a concatenative video editor: point it at a folder of films and it edits a matching sequence live, as a layer source. And Collage is a source: a wall of films cut up like torn paper, every piece its own film, that you can modulate, run through effects and hear in Sonify.

The mental model

A few ideas that make everything else click into place.

  • The picture is a stack, built bottom to top: a Background, then Layer 1 to Layer 4. The Layers column reads in that order, top down, and ends with the Audio Layer, for sound. The layers either blend onto the Background (Layer 1 in its own blend mode) or sit over it as a group, letting it through their dark parts.
  • Each layer reads top to bottom in four steps, the way the picture goes through it : IN, its two sources (A and B), each with its own effects; MIX, how they meet; FX, the layer's own effects; and OUT, its blend mode onto the layers below, a spatial mask and its feedback. It has its own opacity and speed too. A source is a generator, one of your own shaders, an imported video or sound, a live capture, or a network stream.
  • Three stages master the whole picture, always last and always on: Vibe Palette (colour), Context (depth and atmosphere), and the Finalizer (final grade, grain, and output shape).
  • Anything you can reach, you can automate. The modulation brain and the macro knobs write on top of your values every frame, and the same targets answer to MIDI and OSC. You dial in a value by hand, then let a shape move it. And what you make Persistent stays put: scenes, Randomize and Generate move everything around it.

That is the instrument. The long list of sources, effects and nodes is vocabulary you learn over time. The shape of the thing does not change.

How do I…?

Get sound out of it?

Press S for Sonify. The image itself synthesizes audio in real time, inside the app, no external software. The probes you see drawn on the picture are the instrument.

Play a sound file or a live input under the layers?

In the layers tab, under Layer 4, sits the Audio Layer (AU). Each of its two slots, A and B, takes a sound file (drop one on it from your desktop), a live input (a microphone, or your interface's inputs, one channel or a stereo pair) or the sound of an NDI® source on the network. Each has its own volume, pan and mute, with a mix between them; the ▶ between A and B starts both files together. It plays through Sonify's output, Sonify on or off, so the output EQ, the recordings and Space have it. Pick Audio Layer as the Connect tab's input and everything that reacts to sound reacts to what it plays. A session never turns a microphone on by itself: a saved live input comes back with an open button.

Make a collage of my films?

Pick Collage as a layer source and open a folder in the Inspector: every piece plays its own film. Bind a modulator to cuts and the wall grows and shrinks a piece at a time; turn on FX before shapes to run the source's effects on the films while the seams and torn paper stay crisp; and turn on Sonify's Collage voice to hear them, tuned to your key.

Paint on the picture with the mouse?

Put Marbling on a layer and click the preview: a click drops paint right where you clicked, holding pours, dragging leaves a trail of drops, and the Inspector's click tool switches to a comb or a swirl. It lands where you click on the big preview too, through the keystone and on the dome. Each gesture is one undo and is kept with the session. On the Body page, Pinch = click lets each hand's pinch do the same, two hands at once.

Move an effect from a layer to the master?

Drag its chip onto the other rack (hold Ctrl to copy instead), or right-click it for Copy to Master FX / Copy to Layer N FX. Its modulation follows a move. A rack that can't host an effect says why.

Keep a master chain I like?

Right-click the Master FX strip, choose Save chain as preset… and give it a name. The chain as it plays is kept on this computer: every effect with its settings, which ones are on and how wet, and the Vibe and Context. It comes first in the chain presets… menu under my chains, in Ctrl+K and in the next / previous chain actions; the same right-click renames or deletes it.

Write my own shader?

Press Alt+E (or { } in the bottom bar) for the Source Editor. Start from a template (a generator, an effect, a feedback), from a copy of any built-in shader, or from an ISF file. It compiles as you type into a live preview with the shader's controls beside it; a mistake is marked on its line while the last version that worked keeps playing. Save with Ctrl+S and it joins the source and effect menus under my shaders, kept in a Shaders folder; save again while it plays and it changes live. A session carries the shaders it plays, so it opens the same on another computer.

Change scenes or sessions during a show without a jump?

Set the Morph time in the transport. Scene recalls, Randomize, the sequencer, loading a session, New and Generate all move into the next composition over that time, live: the same sources ease their every value, anything else crossfades layer by layer, and a new layer only fades in once it is ready. At Morph 0 a session holds the picture still while it compiles, then dissolves.

Build a set from sessions I already have?

Open ▾ → Add a session as scenes… (or right-click Load for the session picked in the list) brings another session into the one you are playing, as a scene named after it. If it has scenes of its own, Palinopsia asks whether to add them too, as Name_Scene1, Name_Scene2 and on. Your session keeps its own sound, pins, dome and settings; one undo takes it all back, and Save keeps it.

Find an effect, a preset or a control fast?

Press Ctrl+K (Cmd+K on a Mac) and type. One palette searches the effects, sources, presets, master chains, Generate themes, pages and commands, and every parameter of what is loaded; several words narrow it (mosh l2). Enter puts a source in the selected slot, an effect in the selected rack, a preset onto the unit playing its shader, or shows a parameter in the Inspector and flashes it. Each pick is one undo, Esc closes it, and your recent picks come first.

Keep a control the same in every scene?

Right-click it and choose Persistent. From then on no scene, Randomize, Variation, Generate, World or preset changes it, while everything around it moves, and its modulation stays with it. A thin gold bar marks it, and the scene bank lists everything persistent. Right-click a whole layer to make all of it persistent (a gold border marks it), an effect's chip to keep that effect at its place, a source card to keep its slot's source and effects, or a modulator card to keep its settings. To write what plays now into every scene instead, choose Set in every scene from the same menu; one undo brings the scenes back.

Use a MIDI controller?

Press L to arm MIDI Learn from anywhere, click a control (it pulses), then move a knob or hit a pad. It stays armed, so you can map the next control right away. For an action with no control on screen (a layer's mute, the next master chain, a Generate theme, a step sequencer's fill), pick it in the MIDI section's learn list, then hit the pad.

Sync it with Ableton Live?

Press A for the Connect tab and enable Ableton Link. Palinopsia joins every Link app on your network, Live and DJ software among them: the tempo is shared (anyone changes it, everyone follows), and so is the bar, so modulators synced to the BPM and the Sonify sequencers land on the same downbeat as the music. A LINK badge beside the BPM counts the apps linked. If a slow projector puts the picture behind the beat, raise the latency setting. To start and stop together, turn on start / stop sync here and Start Stop Sync in Live's Link/Tempo/MIDI preferences: Live's play then starts Palinopsia's MIDI clock and sequencers on the bar.

Play it with my body?

Press B for Body. Turn a webcam on (opt-in, off by default) and MediaPipe reads your hands, pose, face and silhouette: route any tracked feature into a modulator (each finger's curl and pinch, the hand's roll, how near it is), or author gesture rules that fire actions and OSC. Ten hand shapes fire rules, each hand on its own (fist, open, point, peace, thumb up, thumb down, ok, horns, call, gun); cover a screen zone with your shadow to trigger it, or fire on presence (someone walking into or out of frame) for an installation. A rule picks what it fires from some 250 actions in a searchable list. To keep the camera and the rules on another screen, right-click the Body button for Body in a window.

Drive it from another app?

Every parameter is an OSC endpoint (advertised over OSCQuery), so a companion brain like dataFLOU or hardware like Pandore can play the whole instrument. The picture also streams back out over OSC, so the image can answer the sound. The OSC monitor shows every message both ways, live.

Let an AI agent drive it?

Turn on Agent (MCP) in the Connect tab (A) and give your agent the address it shows (http://127.0.0.1:9311/mcp by default). An agent on the same computer can then read what is playing, look at the output, set sources, controls, effects and scenes, drive anything that has an OSC address, and write shaders, seeing each one run before handing it to you. Every change it makes is one Ctrl+Z, it cannot touch the Flash safety, and only your own computer can connect. It stays off until you turn it on, and the top bar's AGENT light shows when it is.

Wire it to my other instruments on the network?

Turn on the dataflou section in the Connect tab (pick a name and a universe). Every dataflou node on the network appears there with its parameters: wire one of theirs to Palinopsia, or Palinopsia's sound, picture or body features to one of theirs, and watch every connection on the mesh. Wires come back on their own when a node reappears.

Drive Resolume with it?

Press K for the Resolume mapper, open your composition (.avc), and pin Palinopsia's signals to Resolume's controls. Turn on OSC input in Resolume's preferences; the Resolume section of the Connect tab says when it is sending.

Project in a dome?

On the Output page, turn on Fulldome: Palinopsia renders a square domemaster (front at the bottom), fits a flat picture as full dome, panorama or screen, and shows it in a 3D dome simulator. Everything downstream (projector, NDI, Spout, Syphon, recording) gets the dome. Under full-dome fill, rotations turn around the zenith and falling things fall down the walls, and the Flash safety tightens while the dome is on.

Go fullscreen or record a take?

Press O for the Output page: pick a display, set the resolution, and record (DXV3 records in real time, even the 4096² dome master). The take keeps rolling if you leave the page, so you can tweak parameters mid-recording, and it carries the Sonify sound when it plays. The page opens inside the app; to keep it beside the instrument or on another screen, right-click the Output button and choose Output page in a window (its ⇲ puts it back). The same menu opens the output itself in a window beside the controls.

Open a session on another computer?

When a session opens and some of its films or sounds are gone, a banner names them: Relink… finds them by name in a folder you pick. Before you travel, Open ▾ → Session media… lists every file the session uses, and Collect into the session's folder copies them all beside it, so the session moves in one piece; save to keep. Your own shaders travel inside the session.

Undo a mistake, or calm a runaway feedback?

Ctrl+Z / Ctrl+Shift+Z undo up to 100 steps. Press 0 to flush every self-feeding buffer at once, or H to freeze the output on the current frame while you sort things out.


Where to go next

When you want the full vocabulary (47 sources, 56 effects, 28 native nodes, 125 Generate recipes, the modulation matrix, the sequencers, the 11 Sonify voices, the Audio Layer, Ableton Link, the Agent and the dataflou mesh), read the complete README, and the 1.3.1 release notes for what changed. To drive Palinopsia from any OSC brain, see the OSC reference. The whole instrument is reachable over OSC, MIDI or the interface, through one write path.


New in 1.3.1

Paint, hands and steps. A release for playing with your hands : paint floated on water that you drop with a click or a pinch, a camera that reads your fingers, and a step sequencer with conditions and swing.

The full list is in the release notes.

New in 1.3.0

The audio update. Sound gets a layer of its own under the four layers of picture, the tempo is shared with Live and every Ableton Link app, and the instrument opens up : write your own shaders, or let an AI agent on your computer play along.

The full list is in the release notes.

New in 1.2.10

The key moves on its own time. A small release for the key sequencer and Sonify's controls.

The full list is in the release notes.

New in 1.2.9

Clean sound, sharp projector. A release for long installations : nothing clicks, the wall stays crisp, and the picture holds a steady frame rate.

The full list is in the release notes.

New in 1.2.8

Sound in the dome. The voices leave the stereo pair and take their places in the room, the way the picture takes its place on the dome.

The full list is in the release notes.

New in 1.2.7

The whole frame. The finished picture played as one, a camera framed and mirrored, an iPhone by cable, a Collage that piles its films up, and an Inspector that explains every control.

The full list is in the release notes.

New in 1.2.6

Points and planes. Points in three dimensions in front of a moving camera, any layer laid on a plane that runs to the horizon, bars that lean and cross, and a fulldome you can play.

The full list is in the release notes.

New in 1.2.5

Data and rhythm. A source of machine-cut marks, a sound voice that reads the picture as data, a Vary for every layer, and the readout that used to stall the frame rate made free.

The full list is in the release notes.

New in 1.2

The dome and the grain. The biggest release yet: the picture goes under a dome and over the network, the camera reads movement, the sound gets a key of its own, and every change now morphs.

The full list is in the release notes.