github ossia/score v3.8.0

10 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.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
arpeggiator
  • array tool: add a way to insert and erase values in the input array at a regular stride
arraytool
  • 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

code-search
  • console: implement completion, persistent history and readline-like shortcuts

console-search

  • 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

image image

  • 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.

goblet

  • 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-ui

  • 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.

gltf

  • 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!

swizzle mp4

  • 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.

sync mp4

  • 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.

textbox

  • 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
sdxl

SD Turbo 512x512: stable 96 fps
sdturbo

SDXS: above 600 fps
sdxs

  • new process: add an XWax-based DVS processor to control timelines with scratching. Thanks @mbncr for the testing!

timecode

  • 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

drop-cables

  • 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

ysfx

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

Don't miss a new score release

NewReleases is sending notifications on new releases.