StreamFX 0.12.0 Beta 299
Pre-release⚠️ Pre-Releases are not meant for Production usage!⚠️
These releases are offered to Supporters with (early-)access to releases, and are not meant for Production usage. They are offered with no warranty or guarantees and the StreamFX project and its maintainers explicitly reject any responsibilities for damages or unexpected changes resulting from the use of these releases. Additionally, the project and its maintainers are not interested in any bugs, crashes or freezes found by using these releases, as we have enough automated tests to cover most functionality. Please use the Stable production-ready release if you do not wish to encounter unusual problems.
Support the development of StreamFX!
Maintaining a project like StreamFX requires time and money, of which both are in short supply. If you use any feature of StreamFX, please consider supporting StreamFX via Patreon. Even as little as 1€ per month matters a lot, plus you get a number of benefits!
System Requirements
Please read the Installation Guide and System Requirements!
The installation of StreamFX requires that you follow certain instructions, as well as fulfill a minimum hardware and software requirement. Please ensure that you have read and verified both before asking for help, as many issues can be fixed by reading both of them in their entirety.
Windows |
Linux |
MacOS |
|
---|---|---|---|
OS | Windows 10 (21H2 or newer), Windows 11 | Ubuntu 20.04 (or equivalent) Ubuntu 22.04 (or equivalent) |
MacOS 10.15 (or newer) |
CPU |
Any x86-64-v3 compatible: AMD Excavator Series, Intel Haswell Series or better Required Instruction Sets: x86-64-v2, AVX, BMI1, BMI2, F16C, FMA, MOVBE |
||
Any ARM64-v8.5-A compatible: Apple M1 Series or better | |||
Memory (RAM) | 16 GiB (total) or more | ||
Video (GPU) | DirectX 11 / OpenGL 3 capable, Shader Model 4, 4 GiB VRAM (total) or more | ||
Disk Space | 4 GiB (free) | ||
OBS Studio Version | 29.1.1 | ||
Other | Microsoft Visual C/C++ Redistributable 2017-2022 |
Qt for obs-studio FFmpeg for obs-studio System Libraries must match chosen Ubuntu version! |
A working GPU |
What's Changed
New Release process: Alpha -> Beta -> Candidate -> Release!
The old two stage system didn't work out quite as I'd have hoped: It didn't communicate the dangers of Testing well, and did not differentiate between different stability levels. To solve this I've adopted a new release process now available in StreamFX, which follows the usual development cycle of Software itself: Alpha -> Beta -> Candidate -> Release. The further right you go in that graph, the more stable software is supposed to be, at the cost of new features and changes. The further left you go, the more up-to-date things will be, but you sacrifice stability and safety.
Unstable and Experimental features are no longer shipped with all Releases
As Experimental and Unstable features are causing the vast majority of stability issues, we've decided to split the releases by their actual stability. Stable releases will no longer contain Experimental or Unstable features, and Candidate releases will no longer contain Experimental features. This should hopefully speed up the process to a stable release significantly, as we no longer have to worry about the problematic features dragging us down.
🔧 Fixes
Shader Texture Inputs no longer corrupt Scene Collections
For quite some time, Shader Texture Inputs were haunted by ghosts from the past, also known as work-arounds and deprecated code. This resulted in Shader Texture Inputs keeping stale references around and requiring an OBS Studio restart to actually update. Several code modernization cycles later, this is now fixed and Shader Texture Inputs immediately update as expected - while also no longer keeping stale references around, so your Scene Collections are safe again.
Dynamic Mask no longer self-references and double-frees its Input mask
This should have gone up in flames way sooner than it did, and yet it was almost completely invisible until OBS Studio 27.1. The bug dates as far back as v0.7 and is pretty severe: The Dynamic Mask filter would increment their own reference count every frame if no Input was selected, and would double-free the Input without clearing the pointer to it. And somehow, this didn't explode until now.
Switching Scene Collections is safe again
As StreamFX was built on a lot of legacy code that gradually gets replaced with modern code, one modernization introduced a bug that was invisible during testing. StreamFX does not rely on OBS Studio to tell it what Sources and Scenes exist at any moment in time, but instead uses its own hash map to figure out what Sources and Scenes exist. This code was modernized, and incorrectly introduced an additional reference to each Source and Scene - making it impossible to delete anything, and leaking Scene Collections into other scene collections. The bug has been fixed, and should no longer occur.
Ubuntu binaries now link against the proper libraries
An oversight in the scripts that generate the binaries resulted in them incorrectly treating C++ code as C. While this didn't seem to cause any obvious problems, it still affected what is actually linked into the binaries, and may have caused completely compatible systems to be treated as incompatible. This has now been fixed, so Ubuntu users should have a better experience.
➕ Additions & improvements
Loadable Bundles on MacOS
With OBS Studio 28.0 came the introduction of Loadable Bundles, a variation of MacOS's Bundle format. This format offers a lot of advantages for almost no drawbacks, and StreamFX from now on uses this packaging format on MacOS. As a bonus, FFmpeg Encoders should now be available on MacOS too.
⚠ This change requires that you cleanly remove old versions of StreamFX first!
As the packaging and installation method has changed, please follow the Uninstallation guide to clean up any left over old files. Failure to do so will result in undefined behavior and may render OBS Studio entirely unusable. You have been warned!
Improved System-wide installation on Windows
Investigation into how OBS Studio actually loads plugins revealed a change that had gone under the radar entirely. Since OBS Studio v0.15.0 it is possible to load plugins from %ProgramData%\obs-studio\plugins
, which is a much safer option and now the only supported System-wide installation mode for StreamFX. This functionality has been so hidden that even the official obs-plugintemplate doesn't make use of it. An added bonus is that this should support Steam users of OBS Studio.
⚠ This change requires that you cleanly remove old versions of StreamFX first!
As the packaging and installation method has changed, please follow the Uninstallation guide to clean up any left over old files. Failure to do so will result in undefined behavior and may render OBS Studio entirely unusable. You have been warned!
User-only installation on Windows
StreamFX can now be installed for individual users, instead of installing for everyone on the system! This is possible thanks to a PR by @abcdw, which allows us to set two environment variable to install and load plugins from %LocalAppData%\Programs\Common\obs-studio\plugins
in addition to all the other locations. These installations will conflict with a System-wide install and as such can't coexist, but may still work with the Steam release of OBS Studio.
⚠ This change requires that you cleanly remove old versions of StreamFX first!
As the packaging and installation method has changed, please follow the Uninstallation guide to clean up any left over old files. Failure to do so will result in undefined behavior and may render OBS Studio entirely unusable. You have been warned!
New "Intermediate Codec" Encoders via FFmpeg
With the release of v0.12 StreamFX now supports three Intermediate Codecs for use by prosumers. These codecs should be significantly faster to decode than comparable non-intermediate codecs, and end up with much wider support by video editing software. To be exact, the following encoders are now available:
- Apple ProRES
- Avid DNxHR (thanks to work by @IceStormNG)
- GoPro CineForm Encoder
Split Framerate support for FFmpeg Encoders
All FFmpeg Encoders now support encoding a different framerate than OBS Studio itself is running at. This allows for streaming at 30 FPS while recording at 60 FPS, or even recording at 120 FPS, or other strange things. Note that this is quite literally breaking several specifications, so use at your own risk - if things break, be happy that at least they broke with a noticable impact!
Universal Binaries for x86 & ARM64 support on MacOS
Users on ARM64 devices can now enjoy native ARM64 binaries for less CPU usage, and as such more overall performance on CPU focused tasks. While StreamFX is mostly GPU workloads, some of the internal code does actually do very heavy lifting that benefits from this.
Initial sRGB and HDR support for Sources/Filters/Transitions
With HDR support in OBS Studio finally being available, it was necessary to finally tackle the issue of sRGB and HDR support once and for all. Many Sources/Filters/Transitions will get proper sRGB and HDR support over future releases to catch up with OBS Studio. You can check the Version Information on the wiki to see if a certain feature supports sRGB or HDR yet.
➖ Deprecations & Removals
Deprecation of the AMD AMF (via FFmpeg) encoders
With OBS Studio 28.0 the old obs-amd-encoder project is finally laid to rest and a new AMD AMF integration is provided. This AMD AMF integration is technically and functionally superior to both the old obs-amd-encoder and FFmpegs AMD AMF integration. All users are urged to migrate as soon as possible, as no guarantees are made for how long this deprecated encoder will remain. Additionally, users on Linux should put their focus on the open Pull Requests for Linux support (1, 2).
Removal of the AV1 (via AOM) Encoder
With OBS Studio 27.2.4, the SVT-AV1 and AOM-AV1 encoders were integrated into OBS Studio directly. This integration is functionally identical, and as such replaces the StreamFX provided AOM-AV1 encoder. All users are urged to migrate as soon as possible, as the encoder has already been removed from StreamFX.
Detailed Changelog
0.12.0b299
- cmake: Mark encoder::ffmpeg::nvenc as Stable by @Xaymar in #1051
- Migrate FFmpeg to link-time dynamic loader by @Xaymar in #1050
- Don't allow installations to continue in errornous situations by @Xaymar in #1052
- code: Remove audio encoder registration from FFmpeg Encoders by @Xaymar in #1054
- code: Don't crash if there is no encoder instance by @Xaymar in #1055
- Install to local Common Files directory, instead of local Program Files directory by @Xaymar in #1053
- Add GoPro CineForm for FFmpeg Encoders by @Xaymar in #1056
- templates: Pascal uses <> instead of != by @Xaymar in #1057
- templates: Fix the remaining uncommitted changes by @Xaymar in #1058
0.12.0b275
0.12.0b252
0.12.0b249
0.12.0b202
0.12.0b191
- code: Initialize worker count to 0 by @Xaymar in #1021
- project: Adjust clang-tidy configuration by @Xaymar in #1024
- obs/source-tracker: Fix occasional leaked source reference by @Xaymar in #1026
- ci: Remove build variants that will never be used by @Xaymar in #1028
- Speed up builds on CI by @Xaymar in #1029
- Clean up unused and duplicate files by @Xaymar in #1030
- project: Update README to match latest info by @Xaymar in #1031
- Fix license and copyright headers by @Xaymar in #1027
0.12.0a173
0.12.0a170
0.12.0b164
- plugin: Only initialize GLAD on OpenGL graphics backend by @Xaymar in #983
- project: Improve templates and UX by @Xaymar in #984
- Code Cleanup by @Xaymar in #985
- gfx/blur/box: Initialize streamfx::gfx::util by @Xaymar in #986
- #818 Don't self-reference when masking is enabled by @Xaymar in #987
- New Crowdin updates by @Xaymar in #959
- Fix CI and update Third Party code by @Xaymar in #988
0.12.0a151
- Implement dynamically scaled Thread Pool by @Xaymar in #933
- Save configuration after ~100ms have passed by @Xaymar in #934
- templates/windows/installer: Don't create Icons in Portable mode by @Xaymar in #936
- templates/windows/installer: Implement
/Portable
installer flag for CLI users by @Xaymar in #935- cmake, templates: Remove code signing integration by @Xaymar in #938
- Don't show path selection for System & User mode by @Xaymar in #937
- Fix some Use-After-Free issues with the D3D11 integration with FFmpeg by @Xaymar in #953
- encoder/ffmpeg: Remove usage of
avcodec_close
by @Xaymar in #952- New Crowdin updates by @Xaymar in #932
- Implement support for Color Spaces by @Xaymar in #968
- Dynamic Mask: Implement sRGB and HDR support, and fix #819 by @Xaymar in #967
0.12.0a134
- cmake: Require nlohmann-json when building the front-end by @rmnvgr in #914
- encoder/ffmpeg: Assume extra data and sei are present on first frame by @Xaymar in #919
- encoder/ffmpeg: Add split framerate with integer fractions by @Xaymar in #921
- encoder/ffmpeg: Improve software scaling quality by @Xaymar in #925
- Add support for HDR formats by @Xaymar in #922
- encoder/handler/prores_aw: Don't enable Key-Frame options by @Xaymar in #926
- encoder/handler/dnxhd: Use endian-independent formats by @Xaymar in #927
- New Crowdin updates by @Xaymar in #915
- Improve Windows installer with proper System install location, Current User install method, and better UI by @Xaymar in #930
- New Crowdin updates by @Xaymar in #928
0.12.0a117
0.12.0a106
- #881: Texture inputs to Shaders are unstable by @Xaymar in #884
- Deprecate AMD AMF encoders by @Xaymar in #885
- Deprecate AOM AV1 encoder by @Xaymar in #886
- Add missing deprecation notices by @Xaymar in #889
- New Crowdin updates by @Xaymar in #867
- cmake: Fix bad version strings by @Xaymar in #887
- project: Updating contributing guidelines by @Xaymar in #894
- New Crowdin updates by @Xaymar in #890
- project: Updating contributing guidelines by @Xaymar in #895
- Fix a huge number of warnings by @Xaymar in #893
- third-party: Update obs-studio to 28.0.0 by @Xaymar in #901
- code: Fix GCC warning diagnostic pragmas by @Xaymar in #902
- New Crowdin updates by @Xaymar in #897
0.12.0a77
- New Crowdin updates by @Xaymar in #817
- Improve GitHub integration by @Xaymar in #841
- project: Fix incorrect tabs in YAML by @Xaymar in #842
- Improve metadata generation by @Xaymar in #837
- cmake: Add support for Qt6 by @Xaymar in #866
- New Crowdin updates by @Xaymar in #832
- Further improve CI and Github integration by @Xaymar in #843
- ci: Remove Code Signing with self-signed certificate by @Xaymar in #873
- Fix compilation errors with Debug and/or Profiling by @Xaymar in #876
- Deduplicate CI build pipeline by @Xaymar in #874
- Remove Auto-Dependency System by @Xaymar in #870
- Working on source code [Refactor] by @GermanAizek in #836
- obs/gs/effect: Revert #836 by @Xaymar in #880
- Update libOBS to 28.0.0-rc1 by @Xaymar in #878
0.12.0a45
- Improve CMake build script(s) by @Xaymar in #813
- ci: Add GCC back to the build by @Xaymar in #820
- Add ClangCL, and update Windows SDK requirements by @Xaymar in #821
- ci: Allow failures for experimental CI tests by @Xaymar in #824
- ci: Use specific LLVM/Clang versions by @Xaymar in #825
- project: Add support for multi stage release cycles by @Xaymar in #823