github ossia/score v3.9.0

latest release: continuous
3 hours ago

Discord Open Collective backers and sponsors GitHub Sponsors

ossia score is a sequencer for audio-visual artists, designed to create interactive shows.

Sequence OSC, MIDI, DMX, sound, video and more, between multiple software and hardware. Create interactive and intermedia scores, script and live-code with JavaScript, ISF Shaders, Faust, PureData or C++. Leverage IoT protocols such as CoAP or MQTT, interact with joysticks, Wiimotes, Leapmotions, Web APIs and BLE sensors and integrate programs from a wealth of creative programming languages such as Structure Synth, Context-Free Art and Bytebeat. Load any kind of audio or video format and process visuals through Spout, Syphon, NDI, Shmdata or Sh4lt ; sonify large datasets with CSV and HDF5 support.

ossia score 3.9.0 is a large release: highlights are a complete 3D pipeline, new video capture, streaming and tracking devices, advances on custom user interfaces, a more customizable look, along with dozens of new protocols, synthesizers and objects.

Thanks to @edumeneses @bltzr @ogauthiersat @cbicari @samamou @darioriccio @thibaudk @aklevy for the major contributions!

Full Changelog: v3.8.2...v3.9.0

This release has been mainly developed thanks to projects happening at the Société des Arts Technologiques. It is part of the Suite SAT.
This release has benefited from a load-bearing sponsorship from Anthropic, granting free access to a Claude Max 20x plan during its development.

New features

  • 3d: a complete 3D scene pipeline. An Asset Loader reads glTF/GLB, FBX, STL, OFF and MagicaVoxel .vox (alongside OBJ and PLY) with their lights, cameras, glTF animations and skins, and FBX node animation. Scene-graph processes filter, tag, group, switch, duplicate and transform a scene, with material overrides driven from the device tree.
  • 3d: new objects include Camera, Camera Array, Camera Switch, Light, Environment, PBR Mesh, Material Override, Transform 3D, Instancer, Text to Mesh, Text to Texture, Cubemap Loader and Composer, Animation Player, and Scene Inspector, with point clouds and gaussian splats supported throughout.
  • about: the displayed version shows how many commits it is past the release and the branch, for example 3.8.2+42.
  • ai: librediffusion adds StreamV2V and Flux.2 Klein (with inpainting), multi-step SDXL, img2img-turbo, ControlNet, a runtime LoRA scale, and multi-step CUDA graphs with DMD2, NitroFusion and RIFE presets.
  • ai: onnx: the pose detector tracks several people, with smoothing, box modes, RTMO, YOLO-pose models and an OpenPose palette. Also new: generic nodes for any ONNX model, Vocos vocoders, separation into stems, MHR body meshes and InstantHMR, SmolVLM, Gemma 3 and more LLMs and VLMs, tokenizers read from tokenizer.json, and WebNN in the web build.
  • audio: a WASAPI driver through miniaudio, now the default on Windows and following the system's default devices. Thanks @ogauthiersat!
  • automation: points snap to the timeline's magnetism (the musical grid and the points of nearby processes) while dragged or created; Ctrl disables it.
  • avnd API: section, table and strip/detail layouts, envelope editors, folder ports, folder-backed or runtime-filled comboboxes (thanks @bltzr!), geometry auxiliary buffers and textures, per-instance semantics, keyed string lists, file and save-path pickers with host-expanded placeholders, xyzw spin boxes, cubemap and render-target texture ports, and tensor ports.
  • avnd: new objects: Point Tracker (2D and 3D), Beat Tracker, Entity To MIDI, Midi Humanize, Midi Envelope, Regex, Enumerator, Array Best Match, Color display, Control to CV, Switch, Rendezvous, Serialize and Deserialize (JSON, CBOR, text, binary), String tool, Split string, Join strings, String to and from Bytes, Read File, Read File Line, Write File, and the utilities Spigot, Repeat, Mux inlets, Demux outlets, Flip Flop, Bang and Button.
  • avnd: the LED view has an RGB01 mode, taking colours as floats between 0 and 1.
  • cables: feedback is now supported in all modes, through delayed connections in the same graph: a cable that closes a loop is made a delayed cable automatically, and graphics feedback cycles render one frame late instead of blanking the output. Only a cable from a node to itself is refused. A cable's type also shows in how it is drawn, and a cable can be dragged from a port's name.
  • can: new DBC-driven CAN device, browsing the .dbc databases of the library and enumerating the machine's real interfaces.
  • clap: plug-ins are also searched in CLAP_PATH, and a plug-in that marks its state dirty has it saved.
  • comment box: an Auto-reflow option wraps the text to the box's width instead of growing it sideways.
  • custom apps: generated launchers accept --debug (?debug on the web) to show the score editor next to the custom UI, and SCORE_VIDEO_DECODING_METHOD selects the video decoder.
  • devices: MIDI Controller devices build their tree from a device description, to be able to address knobs and faders directly instead of looking up MIDI CCs.
  • devices: new depth camera add-on: colour, infrared, depth and point clouds from Orbbec Femto, Gemini and Astra (also over Ethernet), Kinect v1 and v2, Azure Kinect, Intel RealSense and Luxonis OAK cameras, installable as one Depth cameras package from the package manager.
  • devices: new openzen device: LP-Research LPMS IMUs over serial and USB.
  • devices: new sysinfo device, exposing the local machine (CPU, GPU, memory, disks, battery, network, open file handles) as an ossia device with a settable refresh rate.
  • devices: new trackingprotocols add-on: OpenTrackIO, OpenXR, PosiStageNet, RTTrP and TUIO devices.
  • devices: new videoio add-on: one video input and output device for capture and playout cards, GPU-direct where the card allows it. AJA cards and V4L2 capture on Linux are built in; Blackmagic DeckLink, Magewell and NVIDIA Jetson cameras work when score is built with their respective SDKs. Deltacast, Bluefish444 will be supported later.
  • devices/processes: processes now have a "Scriptable" mode which makes their parameters accessible through custom addresses in the Local device.
  • embedded: yocto support with the new meta-ossia repo. Enjoy ossia score as PID1!
  • fx: new versions of LFO (phase and jitter in degrees, cycles that can lock to the bars), Arpeggiator, Midi quantify, Free metronome, Rate Limiter, ADSR, Flanger, Compressor and Limiter (a lookahead brickwall peak limiter), with times set by the time chooser and able to follow the tempo.
  • gfx: a script can render an exact number of frames, set the frame-step rate and grab frames to files, for repeatable headless renders.
  • gfx: a Sink process runs its input at a set rate without displaying it, so a chain whose result is data, such as an AI model's output, is computed.
  • gfx: cubemap render targets and multiview rendering.
  • gfx: for capture and SDI rigs: NVIDIA GPUDirect for Video, zero-copy Vulkan capture upload, high-bit-depth planar and packed GPU encoders and a V210 decoder, GPU demosaicing of Bayer sensors, cross-stream frame correlation, bt2020-10 colorimetry, and work towards genlock support.
  • gfx: new video devices: PipeWire video input and output with zero-copy DMA-BUF, window and screen capture, GStreamer pipelines as input or output (video and audio), and gphoto2 cameras when the library is installed. The FFmpeg device (formerly Libav Output) also reads streams (RTSP, SRT), files, image sequences, cameras and screen capture, records to MP4, MKV, ProRes, DNxHD, AV1, WAV and Opus, and comes with presets.
  • gfx: shader previews can be toggled at runtime from a new Graphics toolbar.
  • gfx: window devices expose the cursor position in GL coordinates, next to the scaled and absolute ones.
  • gfx: with vsync off, a Rate of 0 renders frames back to back as fast as the GPU allows.
  • js: a much larger API: cables, path lookup, process controls, document metadata, presets carrying a script's program and state, object colours and comments, undo stack and macros, device settings read-back, Score.select(), Score.Editor, a View object for automation and screenshots, and Util.listFiles, listDirectories, openFileDialog, saveFileDialog and removeFile.
  • js: QML scripts can read and write local files through XMLHttpRequest.
  • js: Score.Controls, Score.Triggers and Score.Conditions expose a document-wide namespace of controls, triggers and conditions, including those of child processes, also sent to remote control clients; states can address them.
  • js: Score.Editor gains hasProcessUI, showProcessUI and libraryEntries; createProcess resolves the : and : prefixes; a device's connected() can be called from QML.
  • js: scripts can build persistent, interactive QML interfaces from native score widgets and Canvas2D painting, with undoable state. Custom UIs can be docked, placed by script, or shown in a window, the side panel or the central view.
  • library: packages can ship native libraries that load on Linux, macOS and Windows.
  • midi: new MIDI display process.
  • osc: COBS framing, alongside the other framings found in the wild.
  • process: file and folder controls save : and : relative paths, and a Faust import folder is saved relative to the library or the project.
  • processes: new carto-tcp process, receiving the point clouds that Carto from the Suite SAT streams over TCP.
  • processes: new cv add-on: computer vision ported from traditional Max/MSP cv.jit, rewritten without OpenCV: GPU filters (threshold, morphology, chroma key, frame difference, optical flow) and analyses (centroid, moments, histogram, corners, Hough lines), and CPU objects for blobs, contours, homography and Kalman filtering.
  • processes: new lavfi add-on: a process running any FFmpeg filter graph on audio and video, with ports and controls taken from the graph, analyzer metadata as an output, live editing, presets, and filtering kept on the GPU when on the Vulkan backend.
  • processes: path generator gets its own UI drawing the trajectories and the playing position, more trajectories, and a choice of what its output carries.
  • processes: puara: Leaky Integrator and Avalanches objects.
  • project: collect a document's media into its own folder, find missing files with an exhaustive, cancellable search, archive a project to a zip, trim media and remove the files a project no longer uses; a document can declare the platforms it runs on.
  • protocols: QML protocols gain Bluetooth, NFC and serial bindings, sender information on received UDP messages so replies are possible, automatic deserialization of encodings such as base64, and the OSC type tags a script asks for.
  • protocols: QML scripts can talk to SocketCAN buses, classic and FD, with Protocols.can(), and list the interfaces with Protocols.canInterfaces() (Linux).
  • protocols: QML sockets and serial ports gain STX/ETX, 1-, 2- and 4-byte little- and big-endian size prefixes and fixed-length framings, and Protocols.http() takes a full request object.
  • remote control: an HTTP server, with configurable port, address and path, serving a WebAssembly remote. Thanks @thibaudk!
  • skin: more complete skinning support, with about thirty bundled skins: editor themes (Catppuccin, Dracula, Nord, Solarized, Gruvbox, Tokyo Night...), light, greyscale and high-contrast skins, colour-blind-safe skins and skins with beautiful tight pixel fonts. A skin carries its fonts and its widget palette.
  • sound: the Sound process plays the audio track of video files, and reads AIFC and CAF files.
  • synths: FoMo, an FM synthesizer, and Kaboom, an electronic drum machine.
  • synths: granola: polyphonic MIDI grain spawning, velocity-driven grain amplitude, a MIDI listening toggle and an active grain count output.
  • synths: the Deuterium drum machine becomes a multi-format sampler reading GIG, DLS, SF2, KORG KMP/KSF and plain audio files, with complete sampler control, trigger pads and keyboard, legato, a note-off mode and a MIDI channel filter.
  • ui: --vector-gui / --no-vector-gui for higher-quality rendering, a configurable base font size, and the Phosphor icon fonts shipped for custom UIs.
  • ui: a central view stack with a navigation bar per document, and reworked the address bar to be available in every view.
  • ui: code editors can now be docked or also used as central view.
  • ui: right-clicking the XY pad opens spin boxes, so a coordinate can be typed or pasted.
  • ui: scoring internal processes now behaves exactly like scoring device tree parameters, including support for tweening, etc. Simply drag a parameter to a state, etc.
  • wasm: the LTC, Granola, bendage, Airwindows, cv, ONNX and Deuterium add-ons are available in the web build.
  • wasm: the web build gets camera input (getUserMedia and WebCodecs), audio input, drag-and-drop media import, asynchronous Load and Save As, documents opened from the page URL, zip project archives, persisted settings and local-storage backups, and the start screen with its online examples.
  • windows: a Windows arm64 build.
  • ysfx: a JSFX in the library is described by its own header: description, author, tags and license.

Improvements

  • 3d: fulldome output offers the four fisheye projections: equidistant, equisolid, stereographic and orthographic.
  • bendage: the JPEG node uses libjpeg-turbo, about five times faster at 1080p; Airwindows plug-ins get proper parameter widgets.
  • jk: jk filters understand jq literals, arithmetic, comparisons, //, ? and the builtins, with jq's operator precedence.
  • ndi: NDI sends every format it can encode from the GPU without a copy. A source is chosen by name and previewed before connecting, with colour, receive format and deinterlacing settings; all eleven receive formats are decoded, including the alpha of UYVA and PA16.
  • ndi: the newest NDI runtime installed is loaded. It used to mistakenly be the oldest.
  • ai: onnx models load and run on a worker thread instead of the audio thread, a frame that fails no longer disables the node, and a model that cannot be built does not take the others down.
  • spat: SpatGRIS, SPAT and ADM-OSC devices take a source index offset.
  • leapmotion: one Leap Motion device per sensor.
  • data: large HDF5 and CSV columns are imported as one sampled curve segment.
  • lsl: LSL outlets are named after their UID.
  • GBAP: in Voronoi mode a node fades in at the edge of its zone, instead of a sharp jump.
  • synths: Synthimi and Kabang envelope times are time choosers, and Kabang's UI is redesigned with drum strips.
  • 3d: the Model Display light no longer moves with the transport, and models whose normals face away from the light are lit.
  • app: --script starts on a document with nothing modal in the way.
  • app: a redesigned start screen with templates, examples (including those published on the documentation site), project info, archives and an about page listing the license of every bundled component. It covers the main window, returns when the last document closes and is reachable from the Help menu.
  • audio: a sound file at a different rate than the device, or above 4GB, is streamed instead of decoded entirely into memory, and plays at the right pitch; a document's master volume is applied when it is opened.
  • audio: the audio engine stays alive across documents, which should reduce errors about audio devices, and a soundcard change while a document is loaded is survived.
  • audio: the PipeWire back-end adapts to graph quantum and rate changes instead of skipping cycles, and detects a graph that schedules nothing.
  • automation: resizing an interval with many automations no longer rebuilds every state on each mouse move (0.5 to 1.4 s per move before).
  • avnd: a Bang or a Button drives any toggle for one tick, and toggles accept numbers.
  • avnd: an enum control set by name or number from a state or a script takes that value, enum ports start at their declared default, and a name received by message stays a name.
  • avnd: every built-in object has a functional category and a description, and every port has a name.
  • avnd: Prompt Composer's keywords are a list, and each weight port follows its keyword when the list is reordered.
  • avnd: two-, three- and four-component and colour controls carry their unit (cart2D, cart3D, rgb).
  • dataflow: a single number sent to a vector or colour control is rescaled into the control's range.
  • devices: the device dialog is sorted, with Video in, Video out and Media categories, and joysticks plugged in while it is open appear.
  • explorer: large and small numbers are no longer shown in scientific notation.
  • flatpak: Wayland support.
  • gfx: ISF event inputs and Faust buttons fire on impulses from cables and messages.
  • gfx: resizing an output or inserting a node keeps feedback, simulations and persistent passes instead of restarting the graph.
  • gfx: selecting a shader in the library no longer freezes the GUI for about 200 ms.
  • gfx: shaders using names that HLSL, MSL or NVIDIA's GL compiler reserve (lerp, frac, new...) are renamed instead of refused.
  • joystick: game-controller triggers range from 0 to 1.
  • js: script durations accept flicks, 500ms, 2s, 1min and clock times; --script reads a path as a file and exits non-zero on errors.
  • icons: a new icon for the Synths process category. Thanks @aklevy !
  • library: a shader is credited to its own CREDIT, and a Faust DSP to its declared author.
  • library: the Add process dialog hides deprecated processes.
  • library: the out-of-date packages notice moved into the library panel, packages can be filtered by kind, and a failed install keeps the previous version.
  • linux: the startup check lists the packages to install, checks AVX2 and group membership, and can be dismissed on Wayland.
  • lv2: when a plug-in has several UIs, score picks an installed one, and refuses UIs built for another Qt version instead of crashing.
  • mapper: nodes start at zero instead of NaN, follow their sources without echoing values back, and show the script being edited.
  • media: a camera that cannot be started says so in the Messages panel; on Windows, DirectShow camera formats are named by codec and many more codecs are recognised.
  • multicursor: a cursor can be grabbed anywhere in its node.
  • nodal: a node dropped in the view stays where it was dropped without zooming, a node added outside the canvas brings everything into view, a node added to a chain goes next to its neighbour, and a node with only outlets draws them on its right edge.
  • nodal: a node with hundreds of controls pages through them; folded, it shows only its routing and the controls in use, and folding is saved and undoable. VST and LV2 controls use the control grid.
  • processes: Value delay takes any value, with feedback, mix, freeze and smoothing; the array combiner gains similarity, distance, arithmetic and comparison modes; the accumulator and counter choose when they send and get an Output bang; Buffer queue gets a manual output mode; Wavecycle glides between frequencies and plays chords; the shell command object takes an interpreter.
  • bitfocus: Companion modules run as they do in Companion: their saved configuration is kept, shared UDP sockets and binary payloads work, and a crashed module is restarted.
  • camera: each resolution offers its fastest rate, rather than dozens of slower duplicates.
  • clap: the song position is sent in the right unit, non-note MIDI and sysex reach plug-ins and come back out, parameter edits from the plug-in are picked up, automation is sample-accurate, and plug-ins share score's audio thread pool.
  • curve: edition scales to more than 100k points, with sampled segments and waveform rendering; segments can be dragged in the select tool.
  • custom apps: create-app packages for the web and Windows on ARM64, takes a per-OS environment overlay, and branded apps no longer carry ossia score's icon and branding.
  • dataflow: binding a control to an address no longer overwrites the control's own unit: a colour or a gain keeps converting correctly.
  • dataflow: port addresses are picked in an editable combo box that only lists the devices carrying the right kind; the cable drag line follows its port, scrolling continues past the view's edge, and port hit zones are circular.
  • devices: any device can be exported and imported, the device dialog has a preset view, and device lists have search boxes and follow the keyboard; the Artnet device is renamed DMX (thanks Maude-Antoine), as it also speaks sACN and DMX USB.
  • explorer: per-type value editors in the tree and in the address panel, with a form for every value type, multi-line strings, and lists and maps edited as lists and maps.
  • explorer: values of an unfolded node keep updating after a reconnect or refresh, and a device tree is no longer emptied by a failed exploration.
  • fx, gfx: expressions stop runaway loops instead of hanging the engine.
  • fx: the Looper's passthrough can be None, Record-only or Always, a change of mode carries on through the loop instead of rewinding, and quantized actions land on bar lines; Pulse to Midi schedules notes causally with minimum and maximum lengths.
  • gfx: colour pads open the colour dialog on right-click; D3D12 can use shader model 6, its compiler now shipping with the Windows build; shader includes are found in packages installed while score runs.
  • gfx: full-range video no longer comes out slightly too bright, high-bit-depth video is scaled exactly, and direct video playback applies the output's colour conversion.
  • gfx: multi-window rendering reworked around one texture feeding all windows, with finer mapping, border lock and off-origin outputs; the window's title is in the device tree, and the mapping grid shows coordinates.
  • graphics: knobs, sliders, spin boxes, the minimap and the note chooser scroll infinitely using the platform's relative motion APIs instead of a bespoke hack, and behave on multi-screen HiDPI setups.
  • jit: JIT-compiled add-ons on Windows get C++ exceptions, native TLS and a correct runtime; LLVM 22 and 23 are supported. JIT can finally be considered fully stable, after eight years!
  • js: a script taken from the library follows the library file instead of a copy frozen into the document, and the inspector offers to update it when the file has changed; scripts edited on disk are picked up.
  • library: greatly improved scan times, with much more of the scan moved off the main thread; hierarchic preset categories with an optional description; synthesizers have their own category; the package manager says what went wrong when a download fails.
  • linux: OpenGL prefers EGL over GLX on X11
  • SCORE_OPENGL_FORMAT=gl|gles picks desktop GL or GLES, and on Wayland rendering no longer stalls waiting for the compositor.
  • local device: its OSC and WebSocket ports can be set at launch with --local-osc-port and --local-ws-port, and score says when one is already taken. Thanks @bltzr!
  • lv2, vst, vst3: plug-ins get the real playhead position and also play when the timeline runs backwards; LV2 plug-ins hear transport start and stop, CV ports work as audio, atom ports get the buffer size they ask for, and control values are restored when a document is reopened.
  • media: more advanced probing reads semi-broken media, such as files with no duration in the header.
  • midi: device scans also list network MIDI ports, and hardware, software and network ports are grouped the same way on every back-end.
  • nodal: a cable's end can be dragged to another port, with every selected cable following; a node dropped on a cable is inserted into it; a new cable connects to the first port of a matching type.
  • nodal: rubber-band box selection and Ctrl+click multi-selection, with the zoom level and canvas position kept across navigation and reload.
  • piano roll: keyboard-coloured rows, Up and Down transpose the selection (Shift for an octave), and moving notes past the range grows it.
  • playback: running backwards now reaches MIDI (notes sound in reverse, transport resumes), video (frame-exact seeking, HAP and DXV included) and Faust.
  • plug-ins: VST, VST3, CLAP and LV2 scans no longer list a plug-in many times over or mark working ones invalid after false time-outs; LV2 is now scanned out of process too, and each format has its own settings.
  • quantification: quantized starts and metronome clicks land on the right beats: the subdivision grid restarts at every bar line, and positions are right when the timeline runs backwards.
  • scenario: a multi-selection of processes can be deleted, and Del removes a state message like Backspace.
  • scenario: a new document lasts eight bars by default (always configurable in the settings), a paste lands where the user is working, nested or not, and a document reopens at the zoom it was saved with.
  • scenario: a preset dropped on a state creates a box after it, and an Alt-drop of a sound, video, layer, preset or port into empty space makes a box that starts on play.
  • scenario: dragging inside a process snaps to the time syncs of the sibling processes, and in a child interval's full view the ruler, time signatures and magnetism count from the start of the score.
  • scenario: states are drawn above their intervals, and a double-click selects the state it creates.
  • scenario: the state editor uses the device explorer's per-type value editors.
  • shaders: compute shaders take general geometry, vertices and instances, with multipass at distinct local sizes; ISF gains DIMENSIONS, COPY_FROM, ISF_READ / ISF_WRITE, IMG_* accessors for raw rasters, ISF v1 persistent buffers, name_prev for persistent storage, and a Geometry mode and TRANSPARENCY block for raw rasters; draw counts can come from a GPU buffer.
  • skin: idle, running and failed intervals are no longer confusable, every skin's contrast is kept within reach of the default, and the last hardcoded colours are gone from the chrome.
  • sound: tempo-aligned drop-in on running intervals, seeking to where a running copy actually is.
  • state: a string containing quotes, backslashes or line breaks survives copy and paste and the address dialog.
  • step sequencer: several sequences, a Duration port, quantized switching, and the playing step is lit; the pattern sequencer gets ports to select the pattern and quantize the switch.
  • ui: a new knob design, a light on value displays when values arrive, a Pretty toggle on the Value display, a fixed range for Signal display, +/- buttons on integer spin boxes, and Shift to move a vector's components together.
  • ui: a port's description shows when hovering its label and its control, not only the port.
  • ui: enumerated device parameters (OSCQuery RANGE.VALS, DMX modes) get a combo box, which accepts typed values not in its list; long combo box lists in the scene scroll.
  • ui: file and folder pickers open next to the current file, else in the project folder.
  • ui: fonts are sized in pixels rather than points, so macOS matches everywhere else, and the whole widget UI uses score's font rather than the platform theme's.
  • ui: hitboxes and interaction areas are larger for core elements, and double-clicking a slider returns it to its default.
  • ui: selecting and dragging thousands of notes or objects stays fast.
  • ui: the time chooser is a compact time bar and a knob with a full division table, longer sync durations and a readout cycling free, straight, dotted and triplet; short times get most of the travel.
  • video: Auto playback picks the renderer from the file's keyframe layout rather than a codec flag and a 1080p cap.
  • video: direct-mode playback of long-GOP files is about 3x faster (4K H.264 goes from 22 to 72 fps), seeking backwards shows the right frame, and the last B-frames of a file are kept.
  • video: improvements on playback performance and H.265 support (thanks @darioriccio !!)
  • video: GPU decoding of DCI X'Y'Z' 12-bit, half-float planar RGB as in EXR files, and the other pixel formats that still went through swscale; raw elementary streams play. We're almost cinema-ready, with a good JPEG2000 decoder we can read DCPs!
  • video: ProRes and FFV1 no longer go to the Vulkan compute decoders, which got about 2% of every frame wrong.
  • video: thumbnails are decoded at the height of their slot.
  • vst3: CC, pitch bend and aftertouch are delivered to the plug-in; the VST3 SDK is updated to 3.8.1.
  • windows: file names and text with non-ASCII characters work on every build.
  • ysfx: presets starting with tags are categorized.

Bugfixes

  • granola: granola's trigger rate no longer depends on pitch, the interpolation setting takes effect, and output channels are filled when the source has a different channel count.
  • deuterium: Hydrogen kits whose instruments share a MIDI note are mapped by instrument order instead of stacking on one key.
  • kabang: Kabang's pitch envelope applies, a negative Vel->Pitch no longer pins the pitch, and Minibang no longer crashes on a note that arrives before its sample is loaded.
  • leapmotion: Leap Motion hands are cleared when tracking stops.
  • GBAP: a GBAP node can be grabbed anywhere on its circle.
  • synthimi: switching synthimi between poly and mono no longer leaves a stuck note.
  • bendage: the bendage nodes no longer read or write past their buffers on adversarial images.
  • airwindows: creating an airwindows process without a plug-in name no longer crashes.
  • 3d: a Splat process gained one extra inlet every time its document was reloaded.
  • analysis: the stereo pitch and onset objects analysed the left channel for the right one.
  • app: --help or --version left the next launch in failsafe mode, with OpenGL turned off.
  • audio: on ALSA, input and output card names were swapped, and a card that cannot record stopped the engine from starting even with no inputs.
  • automation: two automations of one address meeting at a state recursed until the stack overflowed, crashing the document on load.
  • avnd: Audio Particles in sync mode triggered at twice the chosen note value, and its position overflowed after about 12 hours.
  • avnd: event value ports re-read their value at every tick, so Repetition Filter saw repeats.
  • avnd: impulse buttons were pressed once when an object was created, so a Counter, Accumulator or Buffer queue in manual mode sent at start.
  • avnd: in objects that also have curve ports, a UI edit could reach the wrong control.
  • avnd: lists of named float structs arrived as zeros, Array Combiner's Median sorted NaN, and the Device Recorder's Timestamped toggle defaults to on.
  • avnd: reloading a file or sound file port left dangling data or freed memory on the audio thread, and control outputs nobody reads grew memory without bound.
  • avnd: the Lightness Sampler read past the image's edge, and the Lightness Computer crashed on Windows.
  • bitfocus: Companion module processes stop when score quits or is killed.
  • camera: removing a camera node did not close the device; a camera's compressed mode was ignored on Windows; DirectShow YV12 and YVU9 and V4L2 RGB32 cameras had red and blue swapped; an H.264 DirectShow camera was given the MJPEG decoder.
  • clap: a CLAP process with no plug-in chosen crashed.
  • clap: plug-ins without MIDI inputs receive parameter and transport events; event times are rebased and clamped to the tick's buffer span.
  • core: a second exit request no longer re-enters document teardown; restoring a backup after Save As no longer crashes, and the restored document shows its saved name.
  • core: plug-ins are torn down in reverse creation order when a document closes, and devices are disconnected before documents are destroyed.
  • core: quitting crashed when documents were destroyed after the main window, and on NVIDIA Linux drivers when the Vulkan instance was destroyed; a failing background task or a missing library folder aborted the application.
  • csv: the CSV player and recorder wrote the header twice or crashed on playback.
  • curve: an automation starting after zero keeps its first segment.
  • curve: power and easing segments not starting at 0 gave wrong values; the curve tool could stay stuck on the pen; Shift+Alt bends every selected segment.
  • curve: the crashes and corruptions of curve edition are fixed.
  • dataflow: a looping process at speed 0 still runs at its place in the loop.
  • dataflow: chaining after an audio outlet keeps its propagation setting, and removing a cable or undoing restores it.
  • dataflow: loading a preset now updates curve controls, so the next edit no longer reverts it.
  • dataflow: sample-accurate value outputs were moved to the start of the tick.
  • devices: a device refreshed after it disconnected no longer crashes, and cancelling a Learn no longer rebuilds the device and drops its MIDI cables.
  • devices: opening a document replayed phantom impulses into the explorer, the message recorder and remote control.
  • effects: resizing the control column left ports hidden and disabled.
  • engine: --no-gui runs, headless remote play, pause and stop, and --script runs aborted at the end.
  • execution: a crash lurking in execution cleanup since 2018 is fixed.
  • execution: play from here in a child interval moves that interval, and an interval played again afterwards starts from its beginning.
  • execution: pressing play before a large document finished loading crashed; editing a trigger, condition or quantization while a time sync was torn down could crash; closing a document whose triggers watch a destroyed device read freed memory.
  • execution: the timer that resets a stopped document no longer resets, or crashes on, another document.
  • execution: triggers and conditions on a missing device no longer hold, and an edit command that throws no longer aborts the application.
  • explorer: an OSCQuery device showed an empty tree when added; changing a device's camera, joystick or MIDI port kept the old name and broke references; audio gains were not editable in the tree.
  • expressions: the Expression Value Filter and Micromap used only the first element of x[1] and x[] vectors, and kept the variables of the previous expression.
  • faust: on Apple Silicon the JIT compiles for the host instead of for Linux.
  • ffmpeg: audio recorded by the FFmpeg output overran the frame or repeated stale samples.
  • fx: ADSR jumped back to the sustain level, hid envelopes shorter than a buffer, never settled at zero, and fired on load.
  • fx: in the Compressor and Limiter, a ratio of 0 divided by zero, and a lookahead of 0 or above 100 ms read the wrong sample.
  • fx: MathAudioFilter's x/px buffer swap corrupted odd samples.
  • fx: Midi scale stops every note it starts, and the free metronome ticks every period.
  • fx: the Envelope RMS was sqrt(sum)/N instead of sqrt(sum/N).
  • fx: the Limiter squashed everything to about plus or minus 0.02 around a DC offset at its default threshold; it is now a lookahead brickwall peak limiter.
  • fx: the Looper wrote the wrong span on every tick that did not start at zero, and looped, overdubbed and narrowed its channels out of bounds.
  • general: many memory leaks and data races found with LeakSanitizer and ThreadSanitizer are fixed.
  • gfx: a bang on a graphics node fired every frame, and Structure Synth regenerated every frame.
  • gfx: a colour arriving without its alpha was drawn invisible or black.
  • gfx: a mirrored vertex Y flipped the winding, so Direct3D culled the wrong faces.
  • gfx: a preset loaded during playback drew nothing; a .fs and .vs pair dropped together made two processes; compute, geometry-filter and VSA shaders could not be dragged from the library.
  • gfx: a render target the backend refuses, or a video device created from a script with incomplete settings, aborted the application.
  • gfx: an exception during a render no longer leaves the frame open for the rest of the session, and a lost Direct3D device is reported by every output.
  • gfx: an output window could stop drawing when moved to another screen, and a failed graphics backend creation left the output black without a word.
  • gfx: GPU objects' controls did not convert units and ranges, so an LFO on a Primitive's rotation did not make a full turn.
  • gfx: ISF shaders sampling a pass target crashed on Vulkan; gl_FragDepth, depth-less targets and six Vertex Shader Art presets failed on Metal; an ISF long input's DEFAULT was read as an index; persistent passes lagged one or two frames behind VVISF; audio FFT and histogram inputs were NaN at sizes that are not a power of two.
  • gfx: many crashes on document close, device loss and graph mutation during rendering.
  • gfx: multi-window output was flipped on Vulkan, its soft-edge blend left a bright fringe, cancelling its settings while playing crashed, and a full-screen output on Windows landed at an offset.
  • gfx: QSG_RHI_BACKEND is no longer set, as it broke VST plug-ins that also use Qt such as Kontakt 8.
  • gfx: Text node edges were too dark, and an unconfigured Text node was drawn off-screen.
  • gfx: the Images process did not show its image at start, and crashed when its list shrank during playback.
  • gfx: Vulkan Video zero-copy decoding works on Windows; an unknown pixel format rendered undefined content.
  • gfx: window outputs on macOS OpenGL could crash on present.
  • graph: a cycle of immediate edges is reported instead of silently running nothing.
  • graphics: an item deleted while it held the mouse grab is deleted later instead of corrupting the grab stack.
  • gstreamer: little-endian 10-bit 4:4:4 with alpha was decoded as big-endian in the GStreamer, Sh4lt and Shmdata inputs, and caps written without type annotations stayed black.
  • jit: --compile-node builds again.
  • js: a QML DeviceEnumerator hung startup on Windows; --script could not run .mjs modules; a GPU script lost its controls on resize, so rect-mapper shapes vanished; a document opened from the command line did not find the library's QML modules.
  • js: deleting a texture source from QML aborted the application.
  • js: lists in UI messages did not reach scripts as arrays; Windows file paths bound to QML url properties did not load; Qt.vector2d, vector3d, vector4d, quaternion and matrix4x4 returned empty values; removing a device from a script during playback crashed.
  • js: MIDI bytes were dropped, audio outlets were never cleared, and four calls aborted the application.
  • js: QML processes with a UI would only load the second time.
  • linux: the AppImage segfaulted at startup on hosts with a newer libxcb, and Wayland sessions without XWayland did not start.
  • media: a camera with no signal no longer hangs its own shutdown; v4l2 cameras reporting a rate range no longer come out at 1 fps.
  • media: a soundfile control opened the path the document stored rather than the file; drag-and-drop of audio files behind symlinks works.
  • media: sws_scale read a one-element destination plane array out of bounds.
  • media: video thumbnails had the wrong aspect ratio and garbage columns, and a mid-stream resolution change read past the frame.
  • midi: a MIDI input nobody reads grew memory without bound.
  • midi: a MIDI outlet addressed to a MIDI channel node sent nothing, or sent on the wrong channel.
  • midi: a missing ALSA sequencer no longer crashes, and the bytes of incoming messages are no longer trusted.
  • midi: computer keyboard input was broken on X11.
  • midi: note-offs were dropped for short and adjacent notes; a document naming a MIDI back-end this build lacks no longer aborts.
  • midi: on ALSA raw, opening an output port already in use hung instead of failing.
  • midi: on Windows (MME), Start, Stop, Continue, Tune Request and Reset messages were dropped, and closing an input could corrupt the heap.
  • midi: PipeWire MIDI ports could crash when created before being opened, and could not be reopened.
  • midi: the computer keyboard could produce notes above 127; in Patternist, HC is the hi conga (note 66).
  • model display: the projections read textures upside down on Vulkan, and an untextured mesh was not drawn white.
  • osc: an address first learned as a bang stayed a bang; an OSC receiver on port 0 crashed when stopped on macOS.
  • patternist: held notes are released when stopping, note-offs reach the output, and every step a tick covers is played.
  • pd: a Pd process with no patch read out of bounds.
  • piano roll: undoing a resize of notes did not redraw them.
  • process: a time chooser's declared default was read as quarter notes instead of seconds.
  • process: an unknown uuid no longer loses the process and its cables.
  • process: file chooser ports lost their file-type filter when a document was reopened.
  • process: rebuilding a drifted process's ports dropped every control value; saved ports are matched by name when a process changed.
  • protocols: in QML protocol scripts, line framing dropped all but the first line of a read, a remote close and onFail were ignored, inboundWS did not listen, the HTTP client dropped query strings, WebSocket callbacks ran off-thread, and Device.addNode and removeNode corrupted memory or left stale addresses.
  • protocols: removing a network device during a pending read used freed memory; the WebSocket device's host is filled from its script again; mapper devices no longer crash at teardown.
  • recording: playback started while a recording waits starts the recording.
  • scenario: dragging a brace snapped a duration as if it were a date.
  • scenario: going back from the nodal view kept a partial zoom, and the play bar could crash after entering and leaving a sub-interval while playing.
  • scenario: in an interval with a tempo but no time signature, Patternist and sound files followed different clocks.
  • scenario: jumping back while playing left finished intervals marked as ended, so they stopped as soon as they started.
  • scenario: pasting multiple processes into a scenario crashed or silently failed.
  • scenario: processes added while an interval is already executing are started, and process order survives a save and load round-trip.
  • scenario: resizing a playing interval reaches the engine.
  • scenario: the Shift lock and Ctrl scale modes could stay on after the key was released over another widget.
  • sdk: the published Windows and macOS SDKs, and run-time add-ons, can build and load add-ons again.
  • serial: a line delimiter longer than seven characters corrupted memory.
  • sound: an interval starting or ending in the middle of an audio buffer overwrote the next interval's samples and drifted; off-grid starts left a one-sample gap.
  • sound: changing the tempo during raw playback made the read position jump and click; the repitch mode padded small buffers with silence.
  • sound: dragging a sound before the start of the timeline crashed, and looping from a negative position read out of bounds.
  • sound: full-scale samples wrapped to the opposite polarity at 24 and 32 bits.
  • sound: RubberBand's start delay is trimmed, so stretched sounds are not late.
  • sound: seeking in a file decoded through FFmpeg went back to the start of the file.
  • sound: the waveform could stay blank after zooming or panning.
  • spout, syphon: Spout follows GL sender changes and registers D3D senders correctly; a Syphon texture survives its sender quitting.
  • startscreen: HiDPI rendering and cursor behaviour on Wayland.
  • startscreen: the initial network request could hang it on misconfigured Windows machines.
  • step sequencer: synced steps count from the start of the process; a pattern with a rejected lane no longer loses its length.
  • syphon: an input on Metal with no server advertised built the OpenGL decoder and dropped every draw.
  • ui: Value display dropped values when its log was longer than 1; on X11 HiDPI or with UI zoom the cursor was drawn offset from the pointer.
  • video: closing or seeking an image sequence no longer crashes.
  • video: playback of decoders without pkt_dts and of thread-sliced codecs in direct mode.
  • video: truncated files and files without a duration no longer spin or abort, and formats libswscale cannot handle are refused.
  • vst, vst3, clap, ysfx: MIDI landing in a tick shorter than one sample is sent with the next block.
  • vst: a document whose VST is not installed no longer segfaults when its UI is built.
  • vst: plug-in libraries are no longer unloaded, since many crash when unloaded.
  • wasm: gfx output windows recover from permanent black after hide and show, and no longer steal the keyboard.
  • wasm: OSC devices can be created, gamepads deliver values, and Web MIDI inputs no longer abort when closed and have correct timestamps.
  • widgets: range sliders did not drag unless their domain was 0 to 1; a momentary button press is one undo step; a second click on a file control opened a second dialog.
  • windows: an absolute path became a UNC share path.
  • ysfx: copy-paste and undo/redo are fixed.
  • ysfx: the tick offset was ignored, so a tick starting mid-buffer read and wrote at the wrong position.

Don't miss a new score release

NewReleases is sending notifications on new releases.