Skip to content

Palinopsia v1.3.1 : paint, hands and steps

Latest

Choose a tag to compare

@github-actions github-actions released this 29 Oct 17:33
· 71 commits to master since this release

Palinopsia v1.3.1 : paint, hands and steps.

A release for playing with your hands. Marbling floats paint on water, and you play it by
clicking the preview or by pinching in front of the camera. The Body camera now reads
your fingers : ten hand shapes fire rules, and a rule can play almost anything in the
instrument. A new step sequencer brings conditional steps and swing to the modulators.
The points of Lattice, Ash and Particle Drift can turn into ink drops, seeds and torn
paper. Depth AI finally runs, offline, from inside the app, and Body, the Sequencer and
Sonify each open in a window of their own.

New

  • Marbling. A new source : drops of paint floating on water, flat colors with crisp
    edges, like marbled paper. Each new drop pushes the paint already there into rings and
    lobes, and the fuller the water, the smaller each new drop spreads. Evolve carries it
    all on slow currents, with a comb raked across now and then and a swirl drifting over
    it, so it moves like a film (at 0 the picture holds still). Drops can land by
    themselves, on the beat, or on the sound. Past a points budget the oldest, most
    stretched drops dissolve into the water, so it can run all night. Twelve presets, four
    new master chains (Marbled paper) and two Generate themes (Marbled Paper, Night Bath).
    It holds 60 fps at 1080p and 4K with 500 drops on the water.

  • Click the preview to play on it. With Marbling on the picture, a click on the
    preview drops paint right where you clicked, holding keeps pouring it, dragging leaves
    a trail of drops; switch the click tool to drag a stylus or a comb through the paint,
    or to swirl it. It works on the big preview, at any UI zoom, through the keystone and
    even on the dome. Each gesture is one undo step and is kept in the session, so the
    picture comes back the way you left it. An OSC message can drop paint at a place too.

  • Pinch to paint. On the Body page, Pinch = click turns each hand's pinch into a
    pointer : pinch to drop paint, hold the pinch to pour, move while pinching to trail or
    comb, open your fingers to let go. Both hands at once, mirrored with Mirror, with a ring
    on the preview showing where each hand points.

  • A step sequencer. A new modulator, steps, in the rhythms family : sixteen bars
    you draw with the mouse, played one after the other on the clock (free, or on a BPM
    division that keeps to Ableton Link's beat). A click turns a step into a rest.
    Right-click a step to choose when it plays : always, by chance (10 to 90 %), on some
    passes only (1:2 plays every other time through, 2:4 the second of every four...), only
    in a fill or only outside one, only the first time through or every time but the first.
    Hold FILL for a fill (Shift-click keeps it on, and a Body rule or a MIDI pad can
    switch it). SWG pushes every second step late for a looser groove, GLIDE slides
    from one value to the next, LEN sets how many of the sixteen steps play, and a step
    that does not play can hold its value or drop to 0. Little marks under the steps show
    their conditions. Recall a scene with another pattern and its passes count again from
    its next step 1. The dice and the stepped Generate themes use it too.

  • Points that are not pills. Lattice, Ash and Particle Drift have a new
    irregular control : at 0 the points are the round dots they always were, and as
    it rises each point becomes a shape of its own, no two alike : a soft wobble first,
    then ink drops, seeds and pollen with rounded lobes, scraps of torn paper with ragged
    edges and thin slivers, each turned its own way. evolve lets the shapes morph and
    tumble slowly (0 keeps them still). It works on every Lattice form; in Particle Drift
    the head takes the shape and its trail thins to a wisp behind it; Ash's flecks stay
    soft. Nine new presets show it (Seed
    floor, Pollen globe, Spore galaxy, Pollen, Ink in water, Paper scraps, Torn confetti,
    Ink drops, Seed fall), and the Orbit and Murmuration themes sometimes use it.

  • Every source and effect has at least ten presets. Silhouette gets its first
    (cutout, matte, shadow and hole, some leaving echoes), and Shatter, Crawl, Store Zoom,
    Cloud Study and 14 older pieces are filled up : Grown, Veins, Slime Mold, Fluid,
    Audio, Metamorph, Differential, Aperture, the Finalizer and the five recipe nodes
    (Remap, Luma Blur, Gooey, Matte, Lookup). Picking one Slime Mold, Veins or Fluid
    preset after another no longer keeps the last one's zoom or ground.

  • A body plays the whole instrument. A Body rule can now fire some 250
    actions, found in a searchable list : a layer's mute, solo, source, A↔B, blend, freeze
    and punch, the triggers of the effects you loaded (a Field Store's grab), the chains,
    scenes, Worlds and Generate themes, the Meta knobs, the modulators, the Feel, the tempo
    and the key, the Audio Layer and the output. A MIDI pad can learn any of them too (the
    MIDI section's learn list).

  • Hand shapes. The Body camera now reads each hand's fingers : a curl per finger,
    the thumb's pinch to each fingertip, the hand's roll as you see it, which way the
    palm faces and how big the hand looks (how near the camera it is), 24 new features
    in the monitor's HAND SHAPE group, for modulators and over OSC. And ten shapes to
    fire rules, each hand on its own : fist, open, point, peace, thumb up, thumb down,
    ok, horns, call and gun. A shape fires once when you make it and hold it a moment,
    and again only after you let it go. The camera preview names the shape each hand
    holds.

  • Body, the Sequencer and Sonify can each open in a window of their own, like the
    Output page : right-click their button, Body in a window, Sequencer in a
    window
    or Sonify in a window. Keep the camera and its rules, the auto-pilot, or
    the sound on another screen while you play. Closing the window closes the page, ⇲
    puts it back in the app, B, Q and S bring the window forward, and the next time
    the page opens in the app as usual.

  • Your own master chains. Right-click the Master FX strip and choose Save chain as
    preset…
    : give it a name, and the chain as it plays now is kept, every effect with
    its settings, plus the Vibe and Context. Your chains come first in the chain presets
    menu (my chains), in Ctrl+K and in the next / previous chain actions, and the menu
    shows the name while one plays. The same right-click renames or deletes them.

  • Add a session as scenes. 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 scenes : what it opens on becomes a scene named after it, and when it
    has scenes of its own, a question asks whether to add them too, as Name_Scene1,
    Name_Scene2 and so on. The session you are in stays as it is (its sound, its pins, its
    dome, its settings), one undo takes it all back, and Save keeps it. A set built from
    the pieces you already have.

Changed

  • Marbling's comb and swirl use far less of the computer. At 1080p the water now
    carries about half the points for the same picture (a 4K picture is unchanged), slivers
    combed thinner than half a pixel dissolve into the water, and the points budget really
    holds : at evolve 1 with comb and swirl the water used to run away (up to three times
    the budget) and move only a few times a second; now it stays near the budget and moves
    smoothly at 60 fps. With comb and swirl at full the work per frame is halved at 1080p.

  • A lone hand is on its own side. With one hand in view, a right hand is now R
    (it used to always be L), and it keeps its side while it stays in view. With two
    hands, nothing changes.

Fixed

  • The euclid card no longer shows a scrollbar when its clock is on a BPM division.

  • Depth AI works, and works offline. The header's depth: AI now runs a depth
    model that ships inside the app (the download grows by about 66 MB) : no internet
    needed, nothing downloaded, ever. It never started before (the app refused to fetch it
    from the internet). It reads the picture on the graphics card, on a thread of its own,
    so the picture keeps its 60 fps (measured with it on, on the RTX 4070 laptop). A new
    AI detail in the same menu sets how finely it reads the picture (252, 392 or 518
    px), and the depth map holds steady instead of brightening and darkening each time
    something enters the frame. Building from source : run npm run fetch:depth once.

  • Right-click menus open right against their button. The Output button's menu
    opened well above the button; it now opens just over it, lined up with it, and every
    right-click menu fits its window from its real size, at any UI zoom.

  • The A and B letters of a layer are centered in their buttons (and the
    background's BG, and the Audio Layer's A and B).

  • Small dropdowns in the Inspector show their whole choice. Luma Blur's Quality
    ("smooth"), Gooey's Key ("brightest channel"), Matte's, Corrode's, Toile's,
    Faultline's and Decimate's were cut; they are now as wide as their longest choice.

  • The Sequencer's resize edges follow the pointer at any UI zoom (the inspector
    column and the live monitor ran ahead of the hand at 125 %).

  • The Assemblage source's Inspector has proper margins. Its rows no longer touch
    the panel's edges.

  • The chain menu names the chain that plays. After a Body rule, a MIDI pad, a scene,
    a Generate or the dice changes the master chain, the Master FX menu shows that chain
    (or nothing, when the effects match no chain) instead of the last one picked by hand.

Opening an older session

Everything opens as before : irregular is 0, so Lattice, Ash and Particle Drift look
exactly as they did, and every modulator card stays what it was. Two things differ on
purpose :

  • A rule on a left-hand gesture (pinch L and the others) used to fire for any lone
    hand. Now a lone right hand fires the R gesture : add the R version to the rule if you
    want either hand.
  • If depth is set to AI, the depth effects (Parallax, Context's depth, the
    depth-aware effects) now get a real depth map, where before they got none.

Install

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

The downloads are about 66 MB larger than 1.3.0 : the depth model now ships inside.

Builds are unsigned :

  • Windows : SmartScreen may warn, click More info → Run anyway.
  • macOS (Apple Silicon) : not notarized. Drag Palinopsia into Applications first,
    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, npm run fetch:depth, then npm run build:mac.

For developers

  • The depth engine : npm run fetch:depth (scripts/fetch-depth.mjs) fetches the
    pinned Transformers.js, its onnxruntime-web build and Depth Anything V2 Small into
    resources/depth (never in git), checking each file's SHA-256; CI runs it, cached,
    before building. The model runs in workers/depthWorker.ts over opsia-asset://depth/
    with remote models off.
  • Clicking the preview : a native generator that implements pointer?(ev) receives
    the preview's pointer events (down / move / up in composition uv, a pointer id per mouse
    or hand). Routing : the selected slot if it takes the pointer, else the topmost visible
    layer that does, the Background last. Marbling (engine/MarbleSource.ts, the model in
    engine/marbleModel.ts, stepped in workers/marbleWorker.ts) is the first.
  • The steps modulator : the model and its sanitizer in engine/stepSeq.ts, the tick
    and the pass counters in engine/modulation.ts (restartRuns, restartRunsAt(beat)).
  • Hand shapes : engine/handShape.ts, pure and testable without a camera; its
    thresholds sit at its top.
  • Actions : actions.ts (act:* ids) and triggerCatalog.ts hold the vocabulary
    Body rules and MIDI learn share.
  • Page windows : PageWindow.tsx serves the Output, Body, Sequencer and Sonify
    windows; ContextMenu.tsx's placeMenu measures a menu before placing it.
  • Shared outlines : shaders/isf/lib/blob.glsl (the // @blob include) draws the
    organic point shapes in the ISF shaders and the native Lattice.