VST3 Support #5074
Replies: 26 comments 49 replies
-
Would this be ok if using a host library to do the heavy lifting? PS: Even though core parts of VST3 SDK are GPL-licensed, there are still legal issues with using it with other GPL software. I have been told Fedora legal team is investigating the matter. |
Beta Was this translation helpful? Give feedback.
-
I'm a long time user of OBS and Linux Audio (e.g. Jack & Carla), and I just want to say that I think falkTX is thinking the right way on this to use Carla's library to do the heavy lifting. The big plus to me is that Carla also supports LV2 plugin format as well as VST3 (and a few other LADSPA, DSSI, VST2, and AU), and there are tons of open-source LV2 plugins which have been made. So it would would work great if OBS used a framework like Carla's library which could support these different plugin formats, rather than only getting support for VST3. |
Beta Was this translation helpful? Give feedback.
-
I would like to try and do this. Since the request mandates the use of plugin bridges (so plugin crash does not crash OBS) I would skip the integration with Carla and just code directly the bridge support instead.
I can do a custom VST3 implementation in Carla so it does not require JUCE for that (which is in my plans anyway). I wouldn't go into the path of requiring Carla to be installed in order to use plugins, but rather copy over any code necessary for this. Or if allowed add carla as a submodule and add a special "make obs-plugin" kinda target for it. How does this sound? |
Beta Was this translation helpful? Give feedback.
-
Great, and yes I meant for having carla as submodule yes. tbh I havent even looked at the OBS code yet, but I kinda expect how it should work, this is basically "just another" OBS plugin. I do have other things planned already, so I would start the real work in the beginning of 2022. Is there an official developer oriented channel for OBS real-time chat? Hopefully something on IRC or Matrix. |
Beta Was this translation helpful? Give feedback.
-
As a reference, VST3 support in Ardour: |
Beta Was this translation helpful? Give feedback.
-
Hi. Just to give some little report on this. I have started a native/custom VST3 host implementation, though still on Carla side and not as OBS plugin just yet. Code is split into several parts.
The plugin bridging is something Carla already does, will need to integrate it into such OBS plugin later on. In order to learn the API properly, I have been implementing the plugin-side of it in DPF develop branch. This part is also still WIP, but already produces working plugins. VST3 is a LOT more complex than VST2. It is not strictly hard, just more complex due to how many little things it has. And sadly just like how it was with VST2, on VST3 not all hosts and plugins behave the same, some completely break out of spec.. Anyhow at the moment TODO list is:
|
Beta Was this translation helpful? Give feedback.
-
Hi! |
Beta Was this translation helpful? Give feedback.
-
using the vst3 sdk is a problem for having OBS in a few linux distributions, as previously mentioned before. and there is progress, I mentioned it just above. also, I have been reorganizing Carla's frontend code to be able to take its plugin list and other GUI tools (since it is also Qt based) in order to have it working standalone and then be integrated in OBS, WIP branch at https://github.com/falkTX/Carla/tree/reorganize the plugin discovery is a tough one, we want to have a cache/db of previously scanned files so we dont need to scan anew everytime we start OBS. but it also needs to happen on a separate process as to not crash OBS while the background scanning takes place (it is not unusual for plugin scanning to crash hosts, we want to avoid it at all costs). the kinda lack of news is due to me having to deal with employer bankrupcy leaving me in a tough position having to quickly find work hours to do elsewhere. |
Beta Was this translation helpful? Give feedback.
-
A small and quick update on this. As of yesterday I have a working setup where the existing Carla GUI is calling Qt + C++ compiled code, starting with a few dialogs for testing. For the curious ones, this is how the plugin list looks in Carla now: On a slightly related topic, CLAP hosting via Carla works now. |
Beta Was this translation helpful? Give feedback.
-
Any progress to perhaps alpha/beta test on OBS 29? |
Beta Was this translation helpful? Give feedback.
-
good news...? kinda. as work situation is still not the best at the moment, after speaking with my employer for April I am only doing half the work hours. |
Beta Was this translation helpful? Give feedback.
-
Finally with something that I can start showing. There are quite a few ways to go about this, but for a start I am hardcoding loading a specific local plugin and getting some integration going. The libobs API seems quite limited, but I am trying to target it anyhow without too many Qt hacks. I am placing my code at https://github.com/falkTX/Carla-OBS for the moment. Will share more as progress continues. |
Beta Was this translation helpful? Give feedback.
-
One thing I am not seeing how to handle... I have something similar to this for when such an event from the GUI side happens:
my OBS module update is called, but the OBS built-in GUI widgets are not updated. what am I supposed to use for this then? |
Beta Was this translation helpful? Give feedback.
-
Plugin list dialog is slowly being integrated. I have not dealt with the binary plugin discovery yet, but for the formats where it is not required (LV2 and JSFX) we already see it in action. Need to find a way for OBS to invalidate current properties and request new ones after changing the active plugin, for now closing the "filters" dialog and opening it back up does the trick. |
Beta Was this translation helpful? Give feedback.
-
Now changing active plugin 😎 obs-carla-2023-04-14_01.51.29.mp4Updating plugin sliders on OBS side updates the GUI, but so far not the other way around yet. |
Beta Was this translation helpful? Give feedback.
-
Lots of progress this weekend.. after getting to know the OBS APIs a bit more, I think I have a reliable way to reload the plugin properties (aka the generic sliders). the state is being saved and restored correctly now, plus audio processing without latency. I added a "input" plugin mode too, useful for having audio plugins working as source of audio input. plugin bridging is already working because Carla already supports it. I need to tweak the build so it generates the bridge binaries (for out of process we require to run external tools after all). I split the code in several parts, because I want to rework the way the plugin processing integration is done a bit later on. here is a short video demonstrating general things working: obs-carla-3-2023-04-17_03.15.04.mp4so in short, TODO remains:
|
Beta Was this translation helpful? Give feedback.
-
Time for an update, after weekend and 1st may "holiday". That said, to give an updated status report:
Both builds implement the API defined in Then the entry point that integrates that into an OBS plugin is done in I consider these 2 pieces to be done. The 1st carla-patchbay OBS plugin is basically taking this API and adapting to one of Carla. The carla-bridge OBS plugin, what this discussion/bounty is all about, is still in progress.
|
Beta Was this translation helpful? Give feedback.
-
Things are progressing, finally have a working CI setup so the generated binaries can be tested. This brings me to 2 questions for OBS developers/team:
|
Beta Was this translation helpful? Give feedback.
-
What's the status of native Apple Silicon (arm64/arm64e) and AU support? Last I checked Carla only supported 32-bit AUs which seemed quite out of date. 😅 Also when I tested your code on macOS 13, none of my VSTs (VST1 or VST3) or AUs were detected. |
Beta Was this translation helpful? Give feedback.
-
Another update: I think I got most things working now, still a bit in a hacky way so I need to do some cleanup. I have an implementation for auto-plugin-scanning now, though for now it rescans on every run (need to see how OBS plugins can save their own global settings and hook into that). With that in place I continued on the VST3 hosting, finally in a state where it starts to be usable. During the week I will try to open a PR for early review and comments, as to not waste time in case I am doing things incorrectly or wrong. Also because at this point I need confirmation regarding the bounty, but let's discuss things once I do a little bit of cleanup and hopefully also have it in some "early tryout but dont use in production" kinda build going. |
Beta Was this translation helpful? Give feedback.
-
Alright, the initial pull request is now at #8919 As I mentioned before, it is not meant to be merged as-is right now, but to be used for feedback regarding my approach to the plugin hosting details. Now I ask the OBS team for feedback. either on the PR side or on this discussion topic. I will fix any show-stopper bugs that might appear, but be on hold for now until some positive reply. |
Beta Was this translation helpful? Give feedback.
-
Bringing some news, but not all good. For those that have not been following the pull request, the entire thing pretty much works now besides a few minor points. Now I was hoping for a little more feedback and a faster response on OBS side. Initially my idea was to take some days to do this bounty, for which I could directly invoice OBS once that part was complete. But this requires the OBS folks to actually merge things to get it rolling, which did not happen (speaking about the obs-deps PR here, which is required to enable the plugin host feature) So I am now employed with a regular work contract, no longer able to send invoices as freelancer. |
Beta Was this translation helpful? Give feedback.
-
The Ubuntu PPA at https://launchpad.net/~falktx/+archive/ubuntu/carla+obs is updated to match the recently released OBS 29.1.3 This PPA is basically a repackage of the official OBS one from https://launchpad.net/~obsproject/+archive/ubuntu/obs-studio |
Beta Was this translation helpful? Give feedback.
This comment was marked as spam.
This comment was marked as spam.
-
As a note, this bounty is open again and we are accepting new proposals for VST3 support, if there is any interest in working on this. Further context can be found on the previous PR |
Beta Was this translation helpful? Give feedback.
-
What is/was wrong with the previous work?
…On Mon, 11 Nov 2024, 04:13 Joel Bethke, ***@***.***> wrote:
As a note, this bounty is open again and we are accepting new proposals
for VST3 support, if there is any interest in working on this.
Further context can be found on the previous PR
<#8919>
—
Reply to this email directly, view it on GitHub
<#5074 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AABFCG7KTNOGHIQP7CG4BS32AAHGPAVCNFSM5BUG7WF2U5DIOJSWCZC7NNSXTOSENFZWG5LTONUW63SDN5WW2ZLOOQ5TCMJSGA4TKOBQ>
.
You are receiving this because you commented.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
VST3 Support
Feature Summary
Allow users to use VST3 plugins as audio filters.
Motivation
OBS Studio currently supports VST2 plugins. At the time when VST2 support was added, the VST3 SDK was not GPL-compatible, so we did not invest any time into including VST3 support when the feature was developed. Since then, Steinberg has released a GPL-compatible SDK for VST3, which now allows us to add support for VST3 plugins in public builds. Some VST plugins are VST3-exclusive, and often users of plugins that have both VST2 and VST3 versions released prefer to use the VST3 version.
Request For Proposal
Submit a proposal explaining how you will implement this feature such that it meets the following requirements:
obs-vst3
that adds support for VST3 pluginsThe plugin should be implemented on Windows, macOS, and Linux*
The plugin should use the Steinberg VST3 SDK directly instead of an intermediate library such as JUCE
The plugin should run VST3 plugins in an external process to avoid OBS crashing due to a VST plugin misbehaving
Yabridge and lmms have some good code showing off how this would work:
https://github.com/robbert-vdh/yabridge
https://github.com/LMMS/lmms/blob/master/plugins/vst_base/VstPlugin.cpp
The plugin should search for VST3 plugins according to standard plugin location paths found in Steinberg documentation
The plugin only needs to support effects plugins, things like compressors, limiters, etc. instruments are outside the scope of this bounty
If it's possible to integrate with the same sidechain code path the exisitng OBS compressor plugin has then the plugin should support it. If it would require more codepaths, API calls, UX then sidechaining can be another project.
The plugin is not required to support midi, but it would be nice to have in the future.
The plugin should match the number of channels that OBS provides.
The plugin doesn't need additional UX for up/down mixing, VST3 should already have dynamic channel support.
* Multiple contributors may assist with implementation on different platforms and may split the bounty according to the level of contribution they made to the project.
Please read Tips for Writing a Good Proposal for guidance on how to author your proposal.
The OBS development team will consider all submitted proposals and select one submission to be implemented by the developer who submitted it. That developer will be eligible to collect the bounty upon completion of the project according to the criteria listed below.
Bounty
The bounty for implementing this feature is $3000.
You can learn more about the OBS Project Bounty Program here.
If you wish to contribute funds toward increasing the amount on this bounty, contribute to the OBS Project Bounty Fund and select the "VST3 Support" option (or just click here).
Completion Criteria
You may collect the bounty when the following are true:
master
branch of the appropriateobsproject
repositories.Additional Information
Related idea from the OBS Ideas Page:
Beta Was this translation helpful? Give feedback.
All reactions