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.8.0 is a major release introducing a lot of new features, UX improvements and back-end improvements.
Full Changelog: v3.7.1...v3.8.0
New features
- arpeggiator: add more controls, add a random mode
- array tool: add a way to insert and erase values in the input array at a regular stride
-
ci: add a manual workflow to enable triggering builds with custom CMake options, to enable building customized versions of score with only specific plug-ins
-
code editor: add built-insearch with Ctrl+F
- console: implement completion, persistent history and readline-like shortcuts
- core: add utility functions to detect MDM enrollment
- core: allow loading addons that have runtime dependencies in Documents/ossia/score/support/
- core: change process priority on startup on win32
- cuda: add utility function to check whether it is available
- custom ui: add support for QtWebView if available (needs a source build, we won't ship QtWebEngine as it requires a MSVC Qt build)
- custom ui: allow to override appname/domain/etc with env vars to simplify custom apps
- custom ui: greatly improve the capabilities for creating custom apps on top of ossia score: support QRC files, icons, etc. Add helper scripts and templates to allow people to create their own custom ossia score-based apps.
Examples of custom apps made with ossia: Koaia and LivePose
- custom ui: improve fonts and color palette
- device recorder: allow to set separator in generated CSV file
- devices: add support for QML protocols which require OAuth authentication with Ossia.OAuth (currently requires building from source with QtNetworkAuth support, will be available generally in next release).
- devices: enable adding some devices during execution (Camera, Window, etc.).
- devices: implement a new Default Device kind for cameras, MIDI devices and gamepads, that will select the default device on the user's system. Useful for examples, etc.
- exprtk: add useful math functions: bitwise_and, bitwise_or, bitwise_xor, bitwise_not, bitwise_shiftl, bitwise_shiftr, map, norm, step, lerp, smoothstep, smoothstep5
- ffmpeg: handle gpu decoding of 16-bit float single-channel textures, from e.g. depth cameras
- geometry: Add a raw Raster Pipeline object which allows to render using entirely custom shader, with only a small veneer of isf. e.g. this allows to define what are the vertex inputs / outputs with much greater control than classic ISF shaders. This also allow instanced rendering.
- geometry: Rework geometry in depth, allow geometry and buffer passing in every avnd objects, add support for instancing.
- geometry: allow to have both CPU and GPU buffer handles, automatically convert in-between depending on the needs of objects.
Example: loading geometry from a .obj, piping the positions to a compute shader which samples the geometry and generates random points.
- gfx: add support for Spout in the D3D11, D3D12 and Vulkan backends.
- gfx: add support for Syphon in the Metal backend.
- gfx: allow buffer ports to pass buffers around. White ports can now carry either buffers or textures.
- gfx: compute shader: render single-component textures as white instead of red.
- gfx: implement support of SSBOs as output of Compute Shader process
- icons: add icons for console_on/console_off in icons_16. Thanks @aklevy!
- images: add support for more image formats, including SVG.
- js: Add new API for storing and retrieving state of JS objects across restarts and communicating between UI and execution.
- js: Fully implement custom UI support.
- js: Make sure that engines respect import paths, and change presets to use a qmldir to import JS files, so that we do not hit QTBUG-107204
- js: Whenever possible, load QML files from disk to trigger the disk cache, which will enable much faster loading / reloading on the execution thread
- js: add Device.toValue function, to convert JS values to a simpler representation
- js: add Util.uuid()
- js: add a System object to retrieve general system info
- js: add support for Qt Quick 3D to create 3D UIs easily as well as give access to PBR materials, environment maps, etc.
- js: add support for downloading packages from the Library.* api
- js: allow to have both an execution script and a UI script.
- js: give access to transport object, to connect to play(), stop(), etc.
- js: gpu: allow using texture inlets
- js: major rework: Have a single engine per-thread with distinct QQmlContext instead of one engine per object
- js: more utility functions
- js: new APIs (Library, System, etc)
- js: new api functions: Score.device("foo"); Score.device("Window").window(); Score.save() / Score.load() / Score.saveAs(); Score.documentPlugin(), mainly useful to enable saving custom data from JS into a score.
- layouts: add new layouts displaying all ports vertically when an object is in folded mode.
- led view: add ability to set an explicit size
- library: Add a new Timing category for all the timing-related objects (metronome, MIDI Sync, LTC, etc.)
- lightness computer: add support for custom swizzle to handle uncommon LED formats. Thanks @cbicari for the request!
- mapper: allow to create dummy nodes just to store and retrieve data
- midi: add support for interpreting and / or sending Note ON with a value of 0 instead of note off. Needed for instance for some Novation Launchpad devices.
- midi: handle reloading a midi device across backends / OS through various heuristics
- new process: Add many geometry utilities: Geometry Info to get basic info about an input geometry, Extract attribute / buffer / etc., Create a mesh from multiple buffers, Pointcloud to mesh, Repack attributes to pack or multiple attributes of a geometry into a single buffer.
- new process: Array to Buffer and Buffer to Array, to go easily e.g. from an OSC message to a GPU buffer.
- new processes: add MIDI sync objects to generate and track MIDI Clock and Timecode.
- new process: LTC input.
- new process: Tempo synchronizer. This process will analyze incoming position and speed variations, obtained for instance from timecode, and turn them into real-time speed adjustments to keep smooth playback.
- new process: add a ArrayToTexture object
- new process: add a multi-choice object
- new process: add a node text box to leave comments around
- new process: add a queue object
- new process: add a value mixer object
- new process: add an audio splitter
- new process: add utilities for vec2f/3i/etc.
- new process: introduce StreamDiffusion support (real-time inference of GenAI image workflows), ported to C++ from StreamDiffusion Python code for absolute maximum performance. Requires CUDA.
On a RTX 5090:
SDXL Turbo 1024x1024: stable 26 fps
SD Turbo 512x512: stable 96 fps
- new process: add an XWax-based DVS processor to control timelines with scratching. Thanks @mbncr for the testing!
- node item: many improvements: display titles for all ports, enforce port names on construction
- package manager: allow to download packages without main ui
- ports: ports without a UI control will now display a label.
- processes: allow processes to have both a script editor and a custom UI by separating the concept of script-editable process.
- processes: allow to match multiple address groups in objects that can send / receive from/to multiple addresses
- qml/gfx: handle QSG_RHI_BACKEND. If set, it will override the chosen graphics backend.
- scenario: add zoom with scroll wheel, fix zoom +/- centering
- script editor: style update. Default font is now IBM Plex which is much more readable on Win32
- scrub: implement scrubbing on scenario
- sound: implement backwards audio playback ; Also add a limit on how low we can downsample as it seems that libsamplerate does not like very small tempos
- time ruler: double click becomes play from here
- ui: add a way for nodes to not have a background
- ui: add many new built-in fonts and update existing ones to last versions.
- ui: allow replacing a cable by dropping a new cable on an existing one
- ui: allow to set visual outputs as background
- ui: basic scrub with play tool
- ui: refactor more deeply script processes to allow processes to have separate scripting and UI.
- ui: support text OSC messages with line breaks and tabs
- ui: when dropping a video input device, create a passthrough
- utils: allow to replace %n in filenames in recorder processes by the current number
- widgets: add a folder chooser
- widgets: allow to drop library elements on top of file chooser widgets
- windows: enable gcodeview by default so that we can debug again
- windows: handle more video pixel format
- window device: add fps tracking
- ysfx: allow to use saike version, change official builds to use it
- ysfx: major improvements: support resizing, support menu, support cursor API
- ysfx: support livecoding of YSFX plugins
Improvements
- avnd: add support for more cases of texture inputs
- avnd: allow nodes to upload buffers to gpu directly
- avnd: allow to set line edit width
- avnd: minor improvement to mouse events
- avnd: work on updating texture sizes dynamically
- bitfocus: handle number fields without range
- bitfocus: implement some missing features
- ci: add the possibility to pass a custom cache file when triggering a workflow
- ci: boost 1.90, updates to every thirdparty library.
- core: add a much more precise timer implementation than Qt timerEvent. We go from roughly 5 ms of variation to less than 0.5 ms, which gives much more stable FPS for outputs such as with Spout, NDI, etc.
- core: improvements to floating-point environment handling to make sure we always are in a sane state.
- core: load app settings if using --ui mode
- core: rework InterfaceList to reduce build times
- csv recorder: better handle escaping when writing
- custom mesh: make it more tolerant of objects that havent finished building their geometry yet
- exec: more thread enforcement, move some things from audio thread to main thread
- execution: put all the initial cable creation into one single transaction
- execution: revert to spsc for execution queue, now with better threading guarantees
- expr: sin instead of cos for math generator
- flatpak: many fixes and upgrades to all the libraries. Update to 6.10 runtime and clang-21.
- freetype: rendering improvements
- geometry filter: put it in the gpu thread
- gfx: compute shader: limit buffer size to theoretical max for float[] as Qt RHI API supports 32-bit buffer sizes max (e.g. 2GB max per buffer).
- gl: Force nvidia offload on linux only if there is any non nvidia gpu
- gui: increase default ui update fps for VST, etc.
- hidpi: fix artefacts when dragging nodes around
- hidpi: improve rendering on non-integer ratios
- isf: add some logic to handle parameters with default value but not min or max
- js: improve default js script
- js_utilities: implement more type conversions Qt between ossia
- libraries: support FFMPEG 8
- libraries: update HDF5
- library: rework categories ; fix missing sorting on subcategories
- lv2: implement full midi 1 between 2 conversion to enable more plugins to work
- mqtt: upgrade to boost.mqtt5 when available
- process: improve inspector label
- sh4lt: update to sh4lt 0.2.0. Thanks @nicobou!
- spline: improve the positioning of the origin axes
- spout: direct gpu input instead of cpu copy
- spout: improve frame sync
- spout: update library to latest version
- syphon: update library to latest version
Bugfixes
- addons: fix off-by-one error which prevented addon loading bar to reset
- appimage: fix that appimage recipe did not account for the new libv4lconvert not matched by libv4l2*
- audio recorder: fix that the filename was not being sent anymore
- audio: fix audio device document reload not recreating custom nodes
- buffers: successful processing and passing around of gpu buffers
- c++: just disable modules altogether, clang-scan-deps is broken on too many platforms
- ci: add missing Qt SVG where needed
- ci: do not fail macOS if there are no certificates
- ci: fix longpath support on git clone on windows
- ci: macos: fix frameworks that do not have headers
- ci: simplify osx signing script
- ci: update to sdk35 for switch to ysfx from @JoepVanlier
- ci: wrong package name for fedora
- command: add missing CreateTimeSync_Event_State in the CreationMetaCommand. Thanks @thibaudk!
- command: fix #1879. Thanks @thibaudk!
- core: fix live-coding order of operations issues
- csf: handle differing input formats for input image
- devices: fix a disconnect order bug
- drive-by: fix vsts crashing if reloading on a computer that does not have said vst
- gfx: rework of the general timer and vsync mechanism
- gpu: large refactor and simplification of the gpu nodes
- images node: fix infinite loop when setting an OSC address with non-null images
- images: fix import of paths from library, fix scaling changing when preview was selected
- inspector: add missing script process button
- isf: fix events
- jit: fix for clang-21 api changes
- js: ensure the QJSValueList is destroyed in the same thread than the QQmlEngine
- js: fix dynamic TextureSource objects
- js: force clear color in TextureSource if we are not connected, to avoid artifacts
- js: gpu node: always recreate it on script change for now
- js: handle Qt versions that do not have QQuickRhiItem
- layout: fix a crash when pasting string in a lineedit
- lfo: fix pixmap sizes in hidpi
- library: SCORE_ADDITIONAL_SCRIPT_INCLUDE_PATHS now supported on windows
- library: skip .ui.qml files
- library: use org name / app name for default path instead of hardcoded ossia/score
- linux: fix appimage platform scripts
- lv2: fix duplicate paths which can cause issues when opening UIs
- macos: fix font bug due to QTBUG-143506
- mapper: add debounce on the roots computation so that we only ever use the last version
- metadata commands: handle cases where objects cannot be reloaded
- msvc: support building with clang-cl
- node item: prefer name to label
- opengl: only check once for the GL capabilities
- pipewire: handle cases where pw gives us more frames than requested
- plugins: add missing composer key plug-in. fixes #1899
- port source / port sink: also accept an inlet / outlet pointer directly
- portaudio, samplerate: update to version that support cmake greater 3.5
- presets: fix that values sometimes did not reload
- process: make sure that processes do not lose their icons in object item model
- qml: handle disconnection / reconnection of devices
- qt: minor fix to hash combine
- scenario: fix skin editor. Thanks @sophiepartoffranceinscotland for the report!
- scenario: fix that timebar was disappearing when jumping into a subscenario that did not have it
- serial: fix sending of OSC messages as bundles through Serial object
- structure synth: ignore empty requests to prevent redundant work
- thread pool: increase default priority
- thread: add finer-grained functions to detect current thread
- time_value: fix a logic error in addition.
- timers: set timerId to -1 when unset
- tools: fix developer.sh referencing an old, deleted function. Fixes #1909
- tools: update fetch-sdk.sh to use proper macOS archive name
- ui: add missing help tooltip to some items
- ui: allow to force native dialogs
- ui: do not try to restore
- ui: enforce double precision for spinbox range computation, fixes a graphical bug with undo and reloading
- ui: fix parsing of [] as ["[]"] and "" as [""] for list addresses
- ui: fix small issues with folder chooser
- ui: fix that time node look ugly when devicepixelratio between 1.5 and 2.
- ui: fix title missing update when save as
- ui: greatly improve performance of redraw of musical bars
- ui: improve useability of some UI widgets from JS ; add support for vulkan backend for QtQuick in JS
- ui: improvements to widget processes ; add a false-y check to impulse
- ui: minor hidpi adjustments
- ui: send interval updates even in --no-gui
- video: make more robust in the face of invalid video files
- vst3: skip hidden params
- vst: adjust name / label
- vst: fix that we have to do additional checks before unloading modules on mac
- widgets: fix wrong relayout calculations when the size of a child widget changes
- widgets: improve ComboBox mapping from avnd objects
- win32: add enumerateCameraDevices implementation
- win32: add vulkan sdk to github actions
- win32: always ship libwinpthread, and ship a recent version
- win32: fix loss of focus in library
- win32: fix support of cameras that only report one FPS
- win32: improve debug support
- window: fixes under linux for updating refresh rate dynamically












