Skip to content

Palinopsia v1.3.0 : the audio update

Choose a tag to compare

@github-actions github-actions released this 21 Oct 23:01
· 50 commits to master since this release

Palinopsia v1.3.0 : the audio update.

Palinopsia listens to more than a microphone now, and plays along with others. A new
Audio Layer plays sound files, live inputs and NDI® sources beside Sonify, a film's own soundtrack or
any sound file can drive the picture, Ableton Link keeps the picture on the music's
beat, and a new Assemblage voice sings your edits. Persistent controls, effects, sources
and modulators hold through every scene change, the Mixer becomes the home of A and B,
the layer strip is a third shorter, modulations can be shaped, Ctrl+K finds anything,
and you can write your own shaders, or let an AI agent play along. Two clouds painted in
oil, four new Lattice forms, a real codec datamosh and four effects that keep the
picture in a store join the sources and effects. From this version Palinopsia is free
software, under the GPL.

Fixed before release

Everything new in this version went through two full audits before release. Among the
fixes you may notice :

  • Coupling behaves. A cut on a held note no longer parks the layer on B, the gate's
    tightness hardens its edge as it says (and no longer flickers between A and B when the
    sound hovers on its threshold), the band feature listens to the band you pick, and a
    recalled scene no longer snaps a drifting layer's mix back. With a harmony set, B no
    longer flickers when its hue sits opposite the target.
  • The dome's alignment grid no longer comes back on its own. It starts off each time
    the app opens, opening a session never turns it on, and turning the dome off puts it
    away, so it can't end up burned into a show.
  • A session never turns a microphone on. A live input saved in a session comes back
    closed, with an open button; picking an input opens it, an installation opens its
    inputs at boot. An unplugged input says lost and comes back with its device, and one
    that fails to open while its device is there tries again by itself. Sonify's Filter
    line-in is the same : a session, a scene, a preset or an undo never opens it, and
    one saved on waits for one click on its button (a dim ring until then).
  • The BPM box changes the tempo when you press Enter or leave the box, and Escape puts
    the old one back : the tempo no longer dips to 20 while you type, and Live and the
    others never hear a half-typed one. A typed tempo is one undo step, undo works while
    linked (even while a linked app ramps the tempo), and peers coming and going no longer
    ask "Save changes?". Escape in any number box now cancels the edit, and so does
    leaving a box you emptied.
  • Ableton Link holds. With other apps linked, the modulators, the grain sync and Sonify
    stay on the shared tempo while the scene pad blends scenes saved at other tempos, and
    the MIDI clock out follows Link's beat, its Start waiting for the next Link bar, so
    your gear's bars line up with every linked app's. The Sonify sequencers no longer stall
    when a linked app re-counts its bars as it starts playing.
  • The Audio Layer : a film dropped on a slot plays its soundtrack, a file with loop
    off stops at its out point, New and Generate fade the layer out over the Morph time
    (an undo during the fade brings it back), undo covers it (never opening an input), and
    a file slot's volume goes to 200 %. Switching Sonify off while it plays no longer clicks.
  • Persistent holds against everything : the Meta dice, an effect's own dice, the
    Finishing dice and reset, Init background, the World amount and the World page leave a
    persistent control alone, and the rack dice and Randomize keep persistent effects in
    place and deal the others around them. The pos X/Y sliders, the small toggles and the
    Vibe palette's color stops can be made persistent too. Swapping a source by hand
    unpins that slot's controls.
  • The World amount fades only what the World changed : below 1 your sliders and
    modulators keep working, and 0 goes back to the mood you had. Switching Worlds no longer
    fades the layers out and back in. A broken World can no longer crash the app.
  • Morphs keep the sound. A layer playing the same sound in both scenes plays on
    through the morph, and other sounds fade with their pictures instead of being cut. A
    FLOW or STEP binding keeps its place through a scene change.
  • New and Vary on an Assemblage keep its effects, framing, speed and modulation, and
    an edit cut from the Inspector can be saved and exported.
  • The Source Editor no longer saves over the shader you were on when you open another
    one, and Ctrl+Z no longer brings that one's code back; deleting a shader that plays
    keeps it playing. Saving code with errors keeps the last good version playing, the
    preview survives a GPU reset, the editor tells you when your shader was changed
    elsewhere (reload / keep mine), and every version written over or deleted is kept in the
    Shaders folder's .history. A whole-number control with a wide range is a slider (a long
    menu could freeze the app). On a Mac it opens with Cmd+Option+E, so Option+E types
    accents again.
  • The agent changes only what it is asked (an effect's other controls stay where
    they are), its undo takes back only its own changes, never yours, it never writes over
    one of your shaders unless told to replace it, and turning it off closes every
    connection.
  • The Output. Right-click the Output button : Watch the Output in a window (it was
    "Open Output in a window") no longer pulls a fullscreen or spanned output off the
    projector; it says why instead. The Output page in its own window keeps Esc, Enter, the
    arrows and Delete to itself, stays live while the instrument is minimized, and its edits
    count as changes (leaving asks to save).
  • Clearer panels. Right-click menus are fully opaque and on top, even on a grayed-out
    control; a knob dragged to zero no longer sticks to the mouse; grabbing a modulated
    slider no longer makes it jump. Number boxes always fit their numbers, the layer's OUT
    tabs size to their words (normal · no mask · fb 0.85, the feedback amount never cut),
    and the Mixer's coupling takes two lines, the mode then the feature, so "transient" and
    "centroid" read in full.
  • Session media relinks only what is missing and never confuses two files of the same
    name or size; copies made on another computer can be made again.
  • The fulldome panorama's seam stays behind the audience whatever the rotation, and
    Space follows the fill offset exactly. The offset sliders have no dead travel, and a
    film covers the dome in the Inspector too (Reset clears its fit).
  • Dropping files : a file dropped on the output window no longer replaces the
    show, and a session file opens wherever it is dropped.
  • Oil Cloud and Cloud Study are picked by hand : Randomize and the Background dice no
    longer deal them. On the dome, Oil Cloud is traced at full height again (a wide frame was
    cut to about half, soft vertically), and both cost less for the same picture. Lattice's
    tunnel shows its far end again, and its galaxy and swell no longer jump after a long run.
    The Oil on Canvas, Warm and Cool, Codec Rot and Keyframe Hunger chains keep the scene's
    palette mix.
  • The gate hair is gone (the Finalizer's hair stuck on an edge of the frame) : its
    slider and the hair itself. Dust, scratches, the gauge, dirt and burst are as they were.
  • Codec Mosh no longer restarts, freezes or flashes an old frame; the Assemblage voice
    follows key glides and its cut accents ring on the new note; the Ring bank's top
    octave no longer whistles; a sound analysis cut short is made again at the next launch.

New

  • Search everything. Press Ctrl+K (Cmd+K on a Mac) and type : a palette finds any
    effect, source, preset, master chain, Generate theme, page or command, and every
    parameter of what is loaded. Enter picks : a source goes in the selected slot, an
    effect in the selected rack, a preset onto the unit playing its shader, and a
    parameter is shown in the Inspector and flashed so you can find it. Every pick is one
    Ctrl+Z, Esc closes it, several words narrow the search (mosh l2), and with the
    field empty your recent picks come first.

  • Field Store, a new node : a coarse copy of the picture that never fades, written
    only where a key lets it through (the bright parts, the edges, what moves, another
    layer, or the layer's own shape). A moving figure leaves hard stamps of itself instead
    of a soft trail. Eight modes : trail, color trail, ghost, catch-up, mosaic, reveal
    (the picture painted in by what moves), protect (a figure vanishes into what was
    there before) and acquire (the first arrivals kept). It captures every frame,
    every few frames, in bursts, on the beat or by hand, from 64 to 512 cells across and 2
    to 8 bits deep; its stamps can slide away in lattices, and it can hand its store to the
    next scene. Ten presets, three master chains (Hard Memory, Sixteen Levels, Strobe
    Ghost) and two Generate themes (Field Store, Revealed).

  • Shatter, Crawl and Store Zoom, three new effects. Shatter shows motion as
    texture : a still is grabbed again and again (at a rate, on the beat or on grab ▸) and
    a pattern (checker, lines, bricks, dither, cells, the picture's own darks…) switches
    between it and the live picture, so still areas look untouched and anything that
    moves breaks into the pattern, without ever flashing as a whole. Crawl colours
    each place by how long ago it last changed : motion leaves bands of colour behind it,
    and the palette turns slowly through them so the contours crawl. Store Zoom is a
    hardware frame store's zoom : one zoom that enlarges and cuts into uneven blocks at
    once (or only mosaics in place), tall or wide pixels, a scroll that wraps around the
    frame and a mirror that moves with it. Eight presets each, a new Frame Store group
    of master chains, and three Generate themes (Shatter, Trail Crawl, Store Zoom).

  • Clearer families in the pickers. The effects picker has new Frame Store,
    Analog, Codec, Optical and Film groups, so Glitch is half its old size
    and no group holds a single effect; the source pickers gain Painted (Oil Cloud,
    Cloud Study) and Geometry sections, and Silhouette its 👤. In Generate, the store
    looks are one Frame Store family.

  • The Feel macros are saved with each session. Density, Gesture ⇄ Texture, Coalesce,
    Tonicity, Drift and Flow come back with the session they belong to; New sets them
    neutral, and a Generate's Feel no longer follows you into every session after (a
    Density left low by a theme quietly faded the upper layers everywhere).

  • 50 add, a new blend mode just before add : fade a layer in and it is added on top of
    what is below at the middle, then the layers below fade out under it, the way a mixer
    fades clips. On the A/B mix, the same from A to B.

  • Persistent. Right-click any control, or a whole layer, and choose Persistent :
    from then on no scene, Randomize, Variation, Generate, World or preset changes it,
    while everything around it moves. Its modulation stays with it, and it never wavers in
    a crossfade. A thin gold bar marks a persistent control, a gold border a persistent
    layer, and the scene bank lists them all. The same menu has Set in every scene :
    what plays now goes into every scene at once (undo brings them back).
    Whole effects, sources and modulators hold too. Right-click an effect for
    Persistent effect : it stays in its rack at its place, settings and modulation and
    all. Right-click a source card A or B for Persistent source : the slot keeps its
    source (a film with its framing and transport) and its effects; swap the source by
    hand and the slot keeps the new one. Right-click a modulator card for Persistent
    modulator
    : its settings stay, while what it drives follows each scene (except
    persistent controls, which keep their modulator). A gold border or outline marks each.

  • A clearer, smaller layer strip. Each layer now reads top to bottom in the order the
    picture goes through it, its four steps named in the margin (IN, MIX, FX, OUT), each
    on a soft panel of its own color : its two sources side by side, the mix where they
    meet, the layer's effects, and how it lands on the layers below (blend, mask and
    feedback as tabs that show where each stands and open on a click). Speed and Vary share the last line, and FB sits in the layer header again,
    beside S and ⊘. A typical layer is about a third shorter. An effect's move arrows
    show when you hover it, so two effects share a line. A shape mask's place is now an
    X/Y pad. Each source's effects, and the layer's, have a power button that turns the
    whole chain off and on, and the A/B mix shows in percent, ready to type.

  • The Mixer, the home of A and B. Each layer's column now shows how its two sources
    meet: the mode and an A–B crossfader with what it means in that mode, a white line where
    the sound pushes it, the hue harmony with swatches of the colors, and the
    coupling to the sound with a live meter and two knobs, above opacity, speed and
    blend, and an active / inactive word that says whether the layer shows at all (and
    why not). A new ≈ coupling switch pauses every layer's coupling at once. Saved mixes
    now keep all of it. The layer strips get lighter: their MIX row says what its slider
    means, and a ≈ chip shows when the sound is moving it.
    The coupling now matches the sound's level (auto, in each column's coupling,
    on by default) : a quiet track moves the mix as far as a loud one, a loud one swings
    instead of sitting at the top, and silence or room noise leaves it still; the meter
    shows what it hears. A transient fires on the hits of whatever plays, not only the
    loud ones, so a World's cut on transient flashes more on a busy track. Click auto
    off for the raw response, as before.

  • Harmony means something now. It sets B's colors against A's: to the left B takes
    A's colors, to the right their opposite, and the middle leaves B alone. The weave
    mix follows it too. It can be modulated, MIDI-learned and played over OSC.

  • Oil Cloud, a new source : one billowing cloud floating in the dark, ray-traced and
    painted in oil, gold toward the light and blue in its folds, laid down in strokes that
    follow its forms. Grow, density, a second density for the small puffs, rotation, zoom
    and light shape it, swirl curls it like stirred paint, and it swells with the bass. Its
    ground can be transparent, to float it over your other layers. Crisp on the dome too.
    Ten presets, a Warm and Cool master chain and an Oil Cloud Generate theme.

  • Cloud Study, a new source : a sky of billowing cloud, ray-traced and lit by a low sun,
    then painted over in thick oil, the strokes following the forms, the paint catching
    the light, the canvas showing through the thin sky. The clouds drift and churn; the
    view runs from a wall of cloud overhead to a deck reaching the horizon. Nine presets,
    from Golden hour to Storm front and Nocturne, an Oil on Canvas master chain and an
    Oil Sky Generate theme.

  • Lattice has four more forms : a tunnel of dots to fly down forever (a warp
    tunnel with streak), and a sphere, a torus and a spiral galaxy the camera
    circles, which fly spins, rolls and wheels. On the full dome the Lattice keeps its
    proportions (a sphere stays round) and the shapes sit in the middle of the dome. With
    ten presets and two Generate themes, Warp Tunnel and Orbit. Perspective also keeps its
    proportions on the dome.

  • Right-click the Output button to Watch the Output in a window beside the controls
    (the domemaster on the dome), and tweak while you watch it, or to open the Output
    page in its own window
    : the whole page beside the instrument or on another screen,
    every control live while you play; your keys still play the instrument from there. ⇲
    back into the app puts it back. Otherwise the page opens in the app, as always.

  • The modulator types are sorted into families in their menu : waves, rhythms, random,
    gestures, and listening (the sound, the picture, your body).

  • Shape a modulation. Each binding has a new ⌇ button opening three tools between the
    modulator and the parameter : combine it with one or two other modulators (bass ×
    LFO swings only with the bass, LFO − kick ducks on the kick, max lets either one drive
    it), a threshold so only real hits move the picture, and integrate, which makes
    each hit push the value forward and keeps it there : the kick turns a rotation, a hue or
    a camera one notch per beat, and the picture stays where the music left it.

  • Let an AI agent play along. Palinopsia can now be an MCP server : turn on
    Agent (MCP) in the Connect tab and an agent on your computer (Claude Code, for
    one) 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.

  • Solid Color greys out the controls it is not using (the gradient's, or the flat
    color's).

  • Write your own shaders. The new Source Editor (Alt+E, Cmd+Option+E on a Mac,
    or { } in the bottom bar) is a page for writing generators and effects : start from a template, from a
    copy of any built-in one, or from an ISF file found anywhere. It compiles as you type
    into a live preview (the last version that worked keeps playing, and a mistake is
    marked on its line), with the shader's controls right there to try it. Save it and it
    is one of yours, in the source and effect menus like any built-in, saved in a Shaders
    folder; save again while it plays and it changes live. A control's "HINT" in the
    header is its hover help. Sessions carry the shaders they play, so they open the same
    on another computer.

  • Sonify hears your edits. A new Assemblage voice plays an Assemblage's own
    sound, cut with the picture : every cut is its clip's own sound from its in point, the
    clip's place on the Assemble map gives its note and pan (look-alike clips sing alike),
    a strike of the resonators marks each cut, and slowed clips sound slowed, like tape (or
    keep their pitch). The Collage's filters, compressor and Ring bank are there too. The
    Collage and Assemblage voices grey out while there is nothing for them to hear. (In
    Space, the FX return and the Collage pieces each move up one source.)

  • A better World page. It says what applying a World will change, morphs into it,
    lets you pick which layers it couples, edits its film character and more of the
    Context mood, reads a World from what is on screen, previews on your own layers and
    your live sound, marks built-ins you changed (save as mine, reset), steps through
    Worlds with the arrow keys, and never takes a modulator slot that is yours. And a
    World amount dial, playable by modulators, Meta knobs and OSC, fades the World's
    mood in and out live.

  • Codec Mosh, the real datamosh. A new effect sends the picture through an actual
    video encoder and decoder and withholds the keyframes between them, the way glitch
    artists break video files : at a cut, the new motion drags the old picture around
    until a clean frame returns. Repeat or drop motion frames for more damage, starve the
    quality into blocks, or let another layer's movement push this one around. With
    presets, two master chains (Codec Rot, Keyframe Hunger) and a Generate theme.

  • Ableton Link. Palinopsia now plays in time with Live, DJ software and every
    Link app on your network : enable it in the Connect tab and the tempo is shared
    (anyone changes it, everyone follows), and the bar too : modulators synced to the
    BPM and the Sonify sequencers land on the same downbeat as the music. A latency
    setting keeps the picture on the beat through a slow projector. Turn on start / stop
    sync
    (and Start Stop Sync in Live's Link/Tempo/MIDI preferences) and pressing play in
    Live starts Palinopsia on the bar : the MIDI clock's Start (the gear it drives starts
    with Live), the scene sequencer if the session uses it, and the Sonify
    sequencers; stop stops them. A PLAYING / STOPPED button plays or stops every linked
    app, and starting a sequencer or the MIDI clock here plays everyone. The Sonify
    sequencers join in once they have run : on the very first play they wait for you, after
    that a Link stop stops them and the next play brings them back. Turned on while Live
    already plays, it can take a few seconds to catch the play.

  • The Audio Layer. A new strip under Layer 4 in the layers tab, for the sound : two
    slots, A and B, each a sound file, a live audio input (a microphone, your interface's
    inputs, one channel or a stereo pair) or the sound of an NDI® source on the
    network, each with its own volume, pan and mute, a mix
    between them and the layer's own volume, with meters. A file has the Import audio
    transport and waveform. It plays through Sonify's output (the EQ, the limiter, the
    recordings and Space have it), Sonify on or off, so a live input or a soundtrack blends
    with Sonify's voices. Saved with the session, and on OSC (/opsia/audiolayer/…). A
    modulator can listen to its files too.

  • NDI® sound in. An Audio Layer slot can play another computer's sound over the
    network : a DAW's NDI audio plug-in, NDI Tools, OBS, picked from the same list as the
    NDI video input. A stereo pair or one channel, into the layer's mix, Sonify's output,
    the recordings and Space. It takes a few seconds to connect, then plays on a steady
    buffer of about 50 ms (the Inspector shows it); it says lost when the source leaves
    the network and plays again when it is back. Like a live input, a session never opens
    it by itself.

  • The Audio Layer can be modulated. Its volume and mix, each slot's volume and pan,
    and a sound file's speed, in and out and playhead have M chips like any control. A
    modulated playhead scrubs : a sample and hold cuts, a slow sweep grains, a fast one
    scratches, a held value just plays. Volumes glide (no clicks), mute still wins, and the
    Meta knobs reach them too.

  • Sound drives the picture from a film, or from any sound file. An audio modulator
    can now listen to a layer's clip instead of the audio input : the soundtrack of a film,
    or a sound file, read exactly where its playhead is. Reversed, scrubbed, at any speed
    or in grains, the modulator follows, even though the film plays silent. A stopped clip
    is silence.

  • Import audio. A new source plays a sound file in a layer like a film (play, loop,
    in and out points, speed, a playhead you can scrub or modulate) and shows its waveform :
    the whole file, the loop or a window scrolling past the playhead, filled, outlined or as
    bars, the part already played lit. It plays on Sonify's output device (for a sound in
    the recordings and in Space, put it on the Audio Layer). Presets, and three master
    chains made for it (Sound : Phosphor, Tape Floor, Relief).

  • A film's sound, seen and heard. The video transport has a small level meter : the
    clip's sound where the playhead is, with its RMS as a number, so you see whether there is
    sound right there. And a volume : off by default, as films always were, turned up the
    film plays its own sound (forward, at its own pace; not in the recordings).

  • Output EQ presets : save the whole EQ under a name (a room, a venue, headphones)
    and recall it from a little menu on the EQ, or over OSC. A preset keeps the glue too
    (on or off, its amount, its voice); flat leaves the glue as it plays.

  • Sonify's Filter voice can play the Audio Layer : pick AU as its source and the
    layer's sound goes through the image's filters. Mute the layer's own strip to hear it
    only that way.

  • The output EQ and the glue are now in the audio tab (Audio section), since they
    shape everything that leaves, Sonify and the Audio Layer; the Audio Layer's volume is
    there too, beside Sonify's. The Audio Layer stays out of Sonify's delay and reverb.

  • The Audio Layer can be the audio tab's input. Pick "Audio Layer" in the input menu
    and everything that reacts to sound (the coupling, the audio modulators) reacts to
    what the layer plays, a sound file or your interface's input, without opening the
    microphone.

  • Play both files together. A play button between the Audio Layer's A and B starts
    both sound files from their in points at the same moment, in sync; again pauses both.
    And a modulator can now listen to the Audio Layer's whole sound (AU all : both slots
    mixed, a live input too).

  • The audio section shows when sound is going on : its dot lights while Sonify or the
    Audio Layer plays, and says which.

  • Ignore global speed : a toggle in the transport so a clip, a sound above all,
    plays at its own speed while the whole composition's speed changes.

Changed

  • The Body page is shorter. Each section's name sits in the left margin in its
    color, as in the layer strip (TRACK, Hands, Pose, Face, Silhouette, Motion field,
    Movement qualities, Presence, NEW RULE, RULES), instead of a title line of its own.

  • On the full dome, things turn and fall the dome's way (fill) : Transform's rotate
    turns around the zenith, Feedback Zoom and the Feedback node nest their echoes in
    circles, and Ash, Optical Rain, Erosion, Streak, Light Trails, Murmuration's wind,
    Sync Loss and Tracking fall or flow outward from the zenith, down the walls. No frame
    corner swings into view, and at the front everything reads as it does flat. Flat
    output is unchanged.

  • Flash safety is tighter on the dome : left at mild (its default), it goes to strong
    while the Fulldome output is on, since a flash fills the whole view on a dome, and back
    to mild after; a level you set yourself stays.

  • The Ring bank opens all the way. Its cutoff (Collage and Assemblage) now reaches an
    octave above the bank's highest band, and the voices' range goes up to octave 9, so the
    bank can be fully open and bright.

  • Assemblage… in a layer's source menu plays right there : your latest edit lands
    on the slot and the Inspector shows how it plays (which edit, new, vary, the
    transport), with a button to the assemble tab when you want it.

  • The side tabs are reordered : layers, mixer, finishing, feel, connect,
    performance, assemble.

  • Palinopsia is now free software under the GPL (version 3 or later), so that
    Ableton Link can be built in. Versions up to 1.2.10 stay MIT.

  • The audio/midi/osc tab is now called Connect (still key A).

  • Drag files in from your desktop : a film, a sound or a folder of films onto a
    layer, a sound onto the Audio Layer, a session file onto the window.

  • Recent sessions under Open ▾.

  • Missing media, found again. When a session opens and some of its films or sounds
    are gone (another computer, a renamed drive), a banner names them : Relink… finds
    them by name in a folder you pick. Collect into the session's folder copies every
    file a session uses next to it, so the session travels between computers in one piece.
    Open ▾ → Session media… lists them all.

  • A bigger picture when you want it : drag the bar under the preview to size it,
    or press V for a big preview; the preview no longer gets squeezed to nothing by a
    tall Inspector.

  • The session buttons sit together in the top bar (the list, Load, New, Open, Save,
    Save As).

  • Vibe Palette and Context, clearer : each section's header says what it is doing
    (even folded), controls that do nothing right now are grayed with the reason (never
    while a modulator moves them), color rows are just their swatch and value, and the
    Vibe's palette is a single strip showing exactly the colors your picture goes through,
    a chord's included : click a stop to recolor it.

  • Stutter lost its fire button.

  • A tidier Master FX strip : its controls on one line (the chain presets and + fx menus
    the same size), the effects underneath across the whole width.

  • Meta knobs show their value : a live number under each knob, what it sends now
    through its curve, as you turn it, from MIDI or from a modulator.

Fixed

  • Better domes. The Satosphère button now also makes the composition square while
    the dome is on (your own size comes back when it goes off), so round things stay round
    on the dome (a 16:9 frame stretched them front to back). Context's depth and edge
    darkening stay round and keep the walls lit, CRT Screen no longer draws a black ring
    around the rim, films fill the dome, and the panorama's seam behind the audience
    blends instead of cutting. The Finalizer's film and digital grain is fine and round on
    the dome again (it came out blown up and oblong), and fine patterns no longer shimmer
    where the dome squeezes the picture.

  • The ADSR modulator's times are no longer cut off beside their sliders.

  • The dome stays perfectly round when you move the picture. In full-dome fill, an
    offset used to cut the dome into a pointed lens; now the picture's center moves and
    the whole dome stays covered.

  • The audio input could stay silent when the device chosen in the audio tab was no
    longer found (unplugged, or numbered differently by another version of the app) : the
    audio modulators then read nothing, even from a laptop's microphone. It now finds the
    device again by its name, or plays the default input and tells you so. Choosing
    another device while the input runs now switches to it right away.

  • Import audio plays AIFF files (and WMA, CAF) : they were refused.

Opening an older session

Everything opens as before : the Audio Layer is empty, films stay silent (their volume
at 0), nothing is persistent, every modulation goes straight to its parameter (no
shaping), and the Lattice keeps its form. A few things look or sound different on
purpose :

  • The Feel macros (Density and the others) open neutral : older sessions didn't carry
    them. Set them again and save once.
  • Harmony now sets B's colors against A's : a layer saved with a harmony above 0
    pushes B toward A's opposite colors. At 0, nothing changes.
  • On the full dome (fill), a session that turns with Transform, Feedback Zoom or the
    Feedback node, or uses Ash, Optical Rain, Erosion, Streak, Light Trails, Murmuration,
    Sync Loss or Tracking, now turns and falls the dome's way. Flat, nothing changes.
  • The coupling opens level-matched (auto on) : a coupled layer moves further on
    quiet material than it did (a lean on flux swings fully instead of a percent or two),
    and a cut on transient fires on more hits. Click auto off in the Mixer for the
    response it had.
  • The Ring bank's cutoff (Collage and Assemblage) reaches further : a saved cutoff
    below the top sits a few semitones higher.
  • Stutter's fire button is gone : a value saved for it is ignored, and a binding to it
    is cleaned up.
  • The gate hair is gone : a scene or session that had it opens without it, along with
    any modulation, Meta knob or persistent pin aimed at it.
  • Impasto : a session or preset saved with it opens with Cloud Study.
  • The dome's alignment grid is never restored by a session : it stays as this computer
    has it (off at launch), and a save writes it off.
  • A session saved without a tempo opens at 120 BPM.
  • Sonify's Filter line-in, saved on, comes back closed : one click on its line-in
    button opens it (an installation opens it at boot).
  • In Space, the FX return and the Collage pieces each move up one source (the
    Assemblage voice takes the place before them) : a SpatGRIS setup that expects them
    where they were needs renumbering.
  • Mixer presets saved before set what they always held; the A/B mix, mode, harmony
    and coupling, which they did not hold, stay as they are.
  • A World whose sound modulator sat on M8 in an older session is still recognized as
    the World's.

Install

Platform File
Windows Palinopsia-1.3.0-win-x64.exe (installer) or Palinopsia-1.3.0-portable.exe
macOS (Apple Silicon) Palinopsia-1.3.0-mac-arm64.dmg
Linux Palinopsia-1.3.0-linux-x86_64.AppImage or Palinopsia-1.3.0-linux-amd64.deb

Builds are unsigned :

  • Windows : SmartScreen may warn, click More info → Run anyway.
  • macOS (Apple Silicon) : not notarized. Drag Palinopsia into Applications first
    (run from the disk image or Downloads, macOS runs a hidden temporary copy), then run
    xattr -cr /Applications/Palinopsia.app once in Terminal, or open it and click Open
    Anyway
    in System Settings → Privacy & Security. The first launch asks for the local
    network, and for the camera and the microphone when you use them : accept, or OSC, NDI,
    Ableton Link and light output stay silent. Screen capture is the one permission macOS
    never prompts for : switch Palinopsia on under Privacy & Security → Screen & System
    Audio Recording, then start it again.
  • Linux : chmod +x the AppImage, then run it.

Intel Macs (x64) : this release ships Apple Silicon only. On an Intel Mac, build from
source (npm install, then npm run build:mac).

License : from this version Palinopsia is GPL-3.0-or-later (with an added permission
for the NDI® runtime, in LICENSE-EXCEPTIONS.md); every build carries its license and
third-party notices. Versions up to 1.2.10 stay MIT.

For developers

  • Persistent (persist.ts) : a pin is a key (a control's modTargetKey,
    lay:<i>:speed, layer:<i>), held in the store and saved with the session (pins).
    Every bulk write (a scene, Randomize, Generate, a World, a preset) goes through one
    gate, keepPersistent(incoming, live, pins), before its morph starts; a new bulk
    write must call it too.

  • Persistent, whole : fxunit:<rack>:<id> (an effect), src:<i>:<A|B> (a source
    slot) and mod:<n> (a modulator card) go through the same gate; a whole pin wins over
    the control pins inside it.

  • Shared GLSL at an include line : // @dome pastes lib/dome.glsl (rotations and
    "down" on the dome's disc under full-dome fill; a shader that turns or drops things
    should use it) and // @grain the Finalizer's grain (lib/finalGrain.glsl, which the
    dome stage also draws after the mapping). shaders/isf/index.ts does it for every
    shader; the native Feedback node takes dome.glsl too.

  • The tempo for ISF shaders : engine/tempoSignal.ts, read by a phase's integrand in
    phases.ts (Shatter's beat-synced grabs); it counts on the rack's own clock, like
    Decimate.

  • Field Store : engine/fieldStore.ts, a native node; its store can be parked across
    a scene change (keep), and Compositor.panic empties the parking.

  • Search everything : searchIndex.ts builds what Ctrl+K finds from the registries
    and the composition each time it opens; a control is found by the data-ctl on its
    PinZone.

  • Shaping a binding (engine/modShape.ts) : ModAssignment.shape (combine,
    threshold, integrate) runs between the modulator and depth; sanitizeModShape on
    load.

  • Your own shaders : ids are user-<slug> (shared/userShaderId.ts, shared by main
    and page), files in Shaders/ (main/userShaders.ts), registered by
    shaders/userShaders.ts; sessions carry the ones they play (Session.userShaders).
    Lint, compile and stills live in shaders/shaderCheck.ts, used by the Source Editor
    and the agent alike.

  • Agent (MCP) : main/mcp.ts (Streamable HTTP on 127.0.0.1, off by default), the
    tool list in shared/mcpTools.ts, run by renderer/src/mcp/tools.ts; every write is
    one undo step and never reaches strobeSafe.

  • Ableton Link : the Link SDK compiled into a small N-API addon (native/link),
    built by CI on all three platforms; main/link.ts polls it, renderer/src/link.ts
    extrapolates the beat. A deliberate tempo edit goes through tempoEvents.ts. Start /
    stop sync : the addon's startStopSync / setPlaying and state().playing; a clocked
    thing started or stopped on purpose calls playEdited (playEvents.ts), and a new one
    must too.

  • Coupling level-matching : engine/couplingMatch.ts (a peak and floor follower per
    layer, a shared silence gate), off per layer with LayerCoupling.auto === false.

  • The Audio Layer under modulation : ModTarget kind 'au' (shared/auMod.ts),
    written per frame by the modulation pass into engine/audioLayerMod.ts and applied by
    the audio engine, never through the store. NDI sound in : one audio-only receiver
    per slot in the preload (preload/ndi.ts), its samples sent over a MessageChannel
    straight to the slot's worklet (audio/ndiAudio.worklet.js, the jitter buffer).

  • Round on the dome : DOME_FILL (engine/domeSignal.ts) is a plain uniform any
    shader can read (the horizon's radius under fisheye + fill, else 0), and a pass size
    can read $DOME_FILL too (Oil Cloud traces at full size on the dome that way).

  • A/B harmony : engine/abHarmony.ts (HARMONY_GLSL on the GPU, harmonizeRgb for
    the Mixer's swatch), the sources' colors from a small means pass read back only while
    needed.

  • main/audioAnalysis.ts : a sound's analysis, once, cached (a copy of audioIn.ts's
    AnalyserNode maths at 60 frames a second + the peaks); engine/clipAudio.ts reads it at
    a slot's playhead (videoPlayheads + the slot's original file). Keep the two analysers
    identical : a modulator must react to a clip as it would to the same sound played live.

  • audio/audioLayer.ts : the Audio Layer's graph (no store import : App syncs it).
    It joins Sonify's worklet as input 2 (setExternalInput); setLayerWanted keeps the
    engine running with Sonify off (voices masked in pushConfig); onContext rebuilds it
    on a healed context. engine/clipPlayer.ts : the sound-file transport shared with
    AudioSource. Its slots key their playheads under layer -1 (AUDIO_LAYER).

  • engine/mediaSink.ts : every layer <audio> / <video> that may sound follows
    Sonify's output device (trackMediaSink).