HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
ossia
score
C++2017–2026
ossia / score

score

ossia score, an interactive sequencer for the intermedia arts

3Distinct people
39Mentions
1Explicit recommenders
2.1KGitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

ossia score, an interactive sequencer for the intermedia arts

GitHub

Where it is used

No documented product use has been verified yet.

What people are saying

95% of the RHI code is in there: https://github.com/OSSIA/score/tree/master/src/plugins/score... - Window: https://github.com/OSSIA/score/blob/master/src/plugins/score... -…

jcelerier used a recommendation phrase. One indexed comment matches. This is a phrase match, not a verdict.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

Mentioned in the same Hacker News threads. That is not proof they are substitutes.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 3:56:07 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year39 dated mentions

Observed mentions: 2017-10-03 09:12:58 UTC to 2026-10-16 16:36:03 UTC.

02468102017-01-01 00:00:00 UTC to 2018-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments20172018-01-01 00:00:00 UTC to 2019-01-01 00:00:00 UTC (exclusive): 2 mentions; 1 submissions, 1 comments2019-01-01 00:00:00 UTC to 2020-01-01 00:00:00 UTC (exclusive): 4 mentions; 1 submissions, 3 comments2020-01-01 00:00:00 UTC to 2021-01-01 00:00:00 UTC (exclusive): 10 mentions; 1 submissions, 9 comments2021-01-01 00:00:00 UTC to 2022-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments20212022-01-01 00:00:00 UTC to 2023-01-01 00:00:00 UTC (exclusive): 9 mentions; 2 submissions, 7 comments2023-01-01 00:00:00 UTC to 2024-01-01 00:00:00 UTC (exclusive): 3 mentions; 0 submissions, 3 comments2024-01-01 00:00:00 UTC to 2025-01-01 00:00:00 UTC (exclusive): 5 mentions; 0 submissions, 5 comments2025-01-01 00:00:00 UTC to 2026-01-01 00:00:00 UTC (exclusive): 2 mentions; 1 submissions, 1 comments2026-01-01 00:00:00 UTC to 2027-01-01 00:00:00 UTC (exclusive): 2 mentions; 1 submissions, 1 comments. Incomplete calendar period.2026*

* An incomplete calendar period is marked with an outlined bar. Its count is not directly comparable with a full period.

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20172017-01-01 00:00:00 UTC2018-01-01 00:00:00 UTC101
20182018-01-01 00:00:00 UTC2019-01-01 00:00:00 UTC211
20192019-01-01 00:00:00 UTC2020-01-01 00:00:00 UTC413
20202020-01-01 00:00:00 UTC2021-01-01 00:00:00 UTC1019
20212021-01-01 00:00:00 UTC2022-01-01 00:00:00 UTC101
20222022-01-01 00:00:00 UTC2023-01-01 00:00:00 UTC927
20232023-01-01 00:00:00 UTC2024-01-01 00:00:00 UTC303
20242024-01-01 00:00:00 UTC2025-01-01 00:00:00 UTC505
20252025-01-01 00:00:00 UTC2026-01-01 00:00:00 UTC211
2026 (partial)2026-01-01 00:00:00 UTC2027-01-01 00:00:00 UTC211

What Hacker News says

39 sources
- MilkDrop: I'd love a PR that adds support for ProjectM :D it would be fairly easy to make a custom plug-in that just blits the texture. Basic code for this would look like that: struct MilkdropIntegration { halp_meta(name, "ProjectM") halp_meta(c_name, "projectm") halp_meta(category, "Visuals") halp_meta(author, "ProjectM authors") halp_meta(description, " :) ") halp_meta(uuid, "417534da-3625-404a-b74f-91d003cb64b9") // By know you know the drill: define inputs, outputs... struct { struct : halp::lineedit<"Program", ""> { halp_meta(language, "eel2") } program; } inputs; struct { struct { halp_meta(name, "Out"); halp::rgba_texture texture; } image; } outputs;
Read the rest
halp::rgba_texture::uninitialized_bytes bytes; void operator()() { if(bytes.empty()) bytes = halp::rgba_texture::allocate(800, 600); // or whatever resolution you wanna set // Fill in bytes with your custom pixel data here outputs.image.texture.update(bytes.data(), 800, 600); } }; inside such a template: https://github.com/ossia-templates/score-avnd-simple-templat... - multi-projector mapping: ossia actually does it directly! it's in git master, will be released in the next version. It also supports a fair amount of features that MapMap does not have such as: * soft-edge blending * blend modes * custom polygons * a proper HDR passthrough as well as tonemapping, etc. * Metal, Vulkan, D3D11/12 support (mapmap is opengl-only) * Spout, Syphon, NDI, soon pipewire video. Mapmap only supports camera input. * HAP and DXV, both decoded on GPU. * Smooth grid distortion. Here's mapmap grid distortion: https://streamable.com/1nhwxg vs ossia with sufficiently high subdivisions: https://streamable.com/hmb1jm * And of course as mentioned here hw decoding (for some years already), the new feature adds zero-copy when for instance using vulkan video and the vulkan GPU backend. * In addition pretty much every YUV pixel format in existence is GPU-decoded (https://github.com/ossia/score/tree/master/src/plugins/score...). In contrast Mapmap does gstreamer -> Qt ; everything including the Yuv -> RGBA conversion goes through the CPU. - How to feed BespokeSynth audio and possibly someday video? Pipewire and e.g. Helvum? yes, pipewire (or jack or blackhole on windows and macOS). Although ossia also supports, VST, VST3, LV2, CLAP, JSFX, and Faust and comes with many audio effects built-in already.
In Video Encoding and Decoding with Vulkan Compute Shaders in FFmpeg
> preferably well abstracted from the underlying OS? you can't do that as soon as you start thinking about embedding non-code resources in your binaries, etc. #embed / std::embed is finally solving this though. You also usually have to think a lot about linking, symbol visibility & various other compiler-specific attributes in such files if you're doing non-trivial work. > Or is your concern about integration into the build system of any prebuild-events or similar logic that need to be run in addition to compiling and linking? This integration may require separate efforts for each platform. Exactly, and my experience is that it is always not worth it. For example I ported all my Qt code so that it doesn't use moc (external code generator) and uses instead verdigris (same thing with slightly more complex macros but no need for anything els
Read the rest
e than a c++ compiler for building my code) and that instantly solved so many problems it's not even funny - something that required maintenance multiple times a year (pretty much every time you want to use some new C++ feature and the code generator does not know yet how to parse a source file that contains this feature - I have issues open on the Qt bug tracker that are now well into their first decade) had its operational cost fall to 0. And moc is by far one of the most well-developed code generators I've had to use, so many others just fail on anything other than the "happiest path". The only vaguely tolerable experience I had was using CMake as a code generator as cmake works portably-enough on the platforms it supports (though there are oddities to take care of between MSYS2 CMake and MinGW CMake and MSVC CMake) but then there's a lot of people who will absolutely never ever want to touch this (https://github.com/ossia/score/blob/master/cmake/GenerateLic...) or this (https://github.com/ossia/score/blob/master/cmake/ScoreFuncti...) with a ten foot pole. If I could replace all this today with normal C++ code I absolutely would in a heartbeat, it would be an undebatable improvement even if it took three times as many LoC / tokens / cyclomatic complexity / whatever measure you want to use.
In Callbacks in C++ using template functors (1994)
I added LLVM JIT support to https://ossia.io a few years ago, it's not too bad, but a big issue is that the JIT does not support all the necessary features used by the frontend in terms of relocations, etc. So it happens relatively often that C++ code will compile to LLVM IR without issue, but then fail at the JIT step because some relocation is not supported by the JIT engine yet. Most of the code is here : https://github.com/ossia/score/tree/master/src/plugins/score... with the actual LLVM API interoperation contained there : https://github.com/ossia/score/tree/master/src/plugins/score... It's been used for fun projects, for instance for this paper about data sonification : https://www.researchgate.net/profile/Maxime_Poret/publicatio...
In ICPP – Run C++ anywhere like a script
That's also a big reason why I prefer appimages. ossia score's AppImage is 100 megabytes: https://github.com/ossia/score/releases/tag/v3.2.0 Inside, there's: - Qt 6 (core, widgets, gui, network, qml, qtquick, serial port, websockets and a few others) and all its dependencies excluding xcb (so freetype, harfbuzz, etc. which I build with fairly more recent versions than many distros provide) - ffmpeg 6 - libllvm & libclang - the faust compiler (https://faust.grame.fr) - many random protocol & hardware bindings / implementations and their dependencies (sdl) - portaudio - ysfx with Flatpak I'd be looking at telling my users to install a couple GB (which is not acceptable, I was already getting comments that "60 MB are too much" when it was 60 MB a few years ago).
In Debian KDE: Right Linux distribution for professional digital painting in 2024
https://ossia.io does some of it, I've been working on a new release that also supports the whole QtQuick stack in the node graph items but you can already combine videos & shader effects. There are also text and image nodes but i want to redo them, they were quick and dirty prototypes for an exhibition and don't support some of the use cases artists using the software then came up with, e.g. sifting through gigabytes of images more or less instantly. The underlying C++ part of this is kiiinda independent of the rest of the app, at least the graph part : https://github.com/ossia/score/tree/master/src/plugins/score... - I'm sure it wouldn't be too hard to extract this folder specifically. Shaders use the ISF specification (https://isf.video) and the backend is through Qt's RHI so things are then mapped to metal, vk, d3d or GL.
In Visual Node Graph with ImGui
Some comments on the issues mentioned at the beginning of the article as I had the same questions in https://ossia.io: - DAWs have a lot of toolbars and panels (browser panel, timeline panel, piano roll panel, fx rack panel, mixer panel, audio editor panel, automation editor panel, settings panel, etc.). for this Qt always performed brillantly for me. I went from QDockWidget to QSplitter-based layout though. - Some widgets like decibel meters and other visualizers are constantly being animated, meaning the GUI library needs to efficiently redraw the screen every frame. all the CPU-based toolkits will only redraw what changed though - In addition, visualizers can be expensive to render on the CPU (especially spectrograms/spectrometers). Ideally you should use custom shaders to render them on the GPU. fair, but then you may pay the cost of
Read the rest
a GPU -> CPU transfer which isn't always free - Clips on the timeline are notoriously expensive to render. There needs to be some way to cache the contents of clips into a texture (Either directly or by making use of the GUI library's "damage tracking" which I'll get into later.) Audio clips are the biggest culprit, because rendering waveforms requires the CPU to first do a linear search through the source material for peak values, and then render the waveform pixel-by-pixel (or even better use custom shaders to send commands to the GPU). AFAIK a lot of DAWs perform a full scan when the file is loaded and save the result in a database or in a file next to it (e.g. Reaper's .reapeaks, Ableton's .asd...) so that you don't need to perform a complete rescan. In ossia.io I use three different algorithms / display methods depending on the zoom level used: at "far away" zoom it uses the minmax of the audio slices, at intermediary zoom it draws lines and when getting closer, it starts drawing individual samples. https://github.com/ossia/score/blob/master/src/plugins/score... - Automation clips can contain a bunch of bezier curves, which are slow to render. Convert those to line segments with an approximation setting that looks good enough and it'll be ten times faster (keep the bezier for your data model of course). https://github.com/ossia/score/blob/master/src/plugins/score... https://github.com/ossia/score/blob/master/src/plugins/score... - Piano roll clips can contain lots of little rectangles in order to display a "minimap" of the MIDI notes inside of it. oh damn yes, I spent so much time on this and it still needs so much optimizing... if someone wants to give a shot at it :D https://github.com/ossia/score/blob/master/src/plugins/score... https://github.com/ossia/score/blob/master/src/plugins/score... - On top of all this, clips can contain text labels which can also be expensive to render. Yep, made myself a few "cached text" Qt items over time as the builtin cache wasn't satisfactory https://github.com/ossia/score/blob/master/src/lib/score/gra... - The fact that a timeline is zoom-able also makes it harder to cache the rendering of clips. If the timeline changed its zoom level, all visible clips pretty much have to redraw all of their contents. yep - Piano rolls can also be expensive to render if there is a bunch of MIDI notes, especially if there are text labels on the notes. yep - If the user clicks on a folder in a sample browser containing hundreds or even thousands of files, allocating a label widget for each file in the browser list will be very expensive. Something like the list factory in GTK is needed here. yep, Qt's also able to cache this. Though for instance for Qt's QFileSystemModel I carry a small patch to disable any kind of sorting when there's more than a few hundred thousand files (which happens for large media libraries): https://github.com/jcelerier/qtbase/commit/9909c3c7902cf7a2b... and also worked a bit with upstream Qt to get it to improve (for instance it was regenerating regexes ALL THE TIME when filtering for specific file extensions) - We want to reserve as much CPU as possible for the actual audio processing. Ideally the GUI shouldn't take up more than one or two CPU threads. - On some platforms, we also need to make sure there's actually enough CPU left for 3rd-party plugins to render their GUIs. yep
In Digital Audio Workstation Front End Development Struggles
Happy to introduce you to https://ossia.io there are a lots of tasks open! You can check the projects for the general development axes: https://github.com/ossia/score/projects?query=is%3Aopen ; e.g. Audio, Musicality, Integrations, JACK & Linux integration (some are in Classic projects mode) all have audio-related tasks, some easy, some hard. Creating new Avendish plug-ins (docs: https://celtera.github.io/avendish/) could also be fairly useful, here's a very basic example one: https://github.com/celtera/avendish/blob/main/examples/Advan...
In Ask HN: What audio/sound-related OSS projects can I contribute to?
not op, but i've done this a couple times both through the python API: https://github.com/jcelerier/dynalizer to automatically generate safe dlopen stubs for runtime dynamic library loading from header files and through the C++ one (this one is an extremely quick and dirty prototype): https://github.com/ossia/score/blob/master/src/plugins/score-plugin-avnd/SourcePar… to pre-instantiate get<N>(aggregate), for_each(aggregate, f) and other similar functions in https://github.com/celtera/avendish because of how slow it is when done through TMP (doing it that way removed literally dozens of megabytes from my .o and had a positive performance impact even with -O3) ; so I weep a lot when I read that people in the committee object to pack...[indexing]
In Soursop and Ponies in Kona: A C++ Committee Trip Report

Showing the 15 most recent of 39 sources. Enable JavaScript to search and browse every indexed mention.

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.