StreamFX (for OBS Studio)

StreamFX (for OBS Studio) 0.8.0a1

Happy Holidays everyone! To celebrate the next week, a new StreamFX (renamed from Stream Effects) pre-release is in order.

First and most important is the rename from Stream Effects to StreamFX. Due to name collisions with Stream Elements and people unfortunately sending me support request for Stream Elements, I've decided to rename the plugin to StreamFX. Read more about it here. Additionally 32-Bit releases are deprecated and are no longer supported.

Next up is Color Grade, which has received a lot of love since 0.7.1. The UI was improved massively, and you can now control what Color Grade considers Shadow, Midtone and Highlights. Not only that, but it has also been moved from Experimental to Stable, which means it won't change drastically anymore and is now production ready.

Then we have lots of fixes and performance improvements. Large parts of it are just to gracefully fail instead of crashing, but that's still better than crashing. Some freezes were also fixes, while others are pending investigation to figure out a fix. The performance improvements should be immediately visible and result in around 10-15% less CPU and 2-5% less GPU usage.

And finally there is the one and only Custom Shaders integration. These have gone through many refactors, redesigns and at times even being marked for death and removal. But now they are back, and they are faster and have more features than ever before! The new implementation allows for a much more versatile shader system, including dynamic property updates when changing the technique in a shader, watching a shader file for changes, and more.

At the moment only Custom Shader sources are supported, but this will change once the underlying implementation is complete, upon which the work on filters will begin. Check out the roadmap to see upcoming planned changes and around when they will be done.

Changelog
This is a Pre-Release and not ready for production use.
  • Important: The plugin was renamed to StreamFX, users that manually installed this plugin (or manually built it) must ensure that the old obs-stream-effects files are removed before installing the new version.
  • Deprecated 32-Bit versions of the plugin. You don't have an excuse to be on 32-bit anymore, hardware has gotten dirt cheap thanks to AMD Ryzen. You can get a barebone modern PC for around 260 €, or upgrade your existing one for around 140 €.
  • Added additional options for Tint control to Color Grade, allowing fine tuning of what is Shadow, Midtone and Highlight.
  • Added GPU debug markers to most of the code which allow GPU debuggers like NVIDIA Nsight to show the exact time taken for each effect step.
  • Added a new example shader: Plasma. This effect simulates old school plasma effects and showcases some of the features of Custom Shaders.
  • Added a temporary workaround for a bug in OBS Studio to ensure that StreamFX does not crash or corrupt OBS Studio's memory. A fix to OBS Studio has already been submitted and is waiting on Review.
  • Updated translations from Crowdin: de-DE, es-Es, fr-FR, it-IT, ja-JP, nl-NL, pl-PL, ru-RU, sv-SE, zh-CN. Much thanks to all the contributors on Crowdin!
  • Improved Custom Shader Sources by adding support for automated file reloading, dynamic parameter updates, and various UI improvements.
  • Improved stability drastically by gracefully handling all unexpected exceptions and refactoring a lot of code.
  • Improved performance drastically by no longer always caching sources and ensuring that some code hotspots don't duplicate heap data on call.
  • Moved all examples from data/ to data/examples/.
  • Fixed a few crashes caused by the Graphics Subsystem Wrapper (GSW).
  • Fixed a freeze with Source Mirror when retrieving the size of a mirrored Source.
  • Fixed rescaling size in Source Mirror when "Use Original Size for Transform" is active.
  • Fixed filters messing with source sizes when they shouldn't be.
  • Fixed a freeze caused by Directional Gaussian Blur (#83, #85).
  • Removed Custom Shader Filters temporarily, they will return later.
  • Removed AppVeyor Continuous Integration in favor of GitHub Actions. You can now download bleeding edge builds from here by clicking on the commit, then clicking on Artifacts, and then selecting either windows-2016 (Windows 7) or windows-2019 (Windows 10 or up to date Windows 7).
  • Like
Reactions: Monsteer
This is a beta release. Bugs, Crashes, and incomplete changes should be expected. Don't complain if it's not up to your imaginary standards.
Changelog

  • Reduced the rate at which 3D Transform, Blur, Dynamic Mask, SDF Effects and Source Mirror crash OBS Studio.
  • Improved the UI/UX for some sources and filters.
  • Deprecated 32-bit builds, let's be honest if you still need 32-bit you're not in the targeted user group for this plugin.
  • Improved the performance drastically for various sources and filters.
  • The Color Grading filter now allows you to pick the Luma detection method and parameters, which allows further customization.
Tired of always using the same filters and sources? Why not just write your own using the brand new Custom Shaders! While still experimental, they will be fully working in a future update - if at all possible, that remains to be seen.

Or how about getting some professional Color Grading in your stream or recording? The new filter allows you to adjust Lift, Gain, Gamma, Offset, Tint, Hue Shift, Saturation, Lightness and Contrast live on air, and get some really cool new stuff working. Just take a look at this before and after to see what is possible with this!

As OBS Studio v24.0.0-rc2 seems to have finalized the dependency changes, this version only supports v24.0.0-rc2 and up now. It also fixes a lot of crashes that have been reported in the past few weeks, thanks to everyone that actually stayed and helped debug the crash and then test the fix. Wouldn't have been possible without you!

Changelog
  • Fixed a crash due to Dynamic Mask being unable to render one or more textures.
  • Fixed a crash due to Signed Distance Fields failing to update or render.
  • Fixed a crash when Displacment Map has no displacement texture path.
  • Fixed a crash when Shaders fail to load.
  • Updated libobs to v24.0.0-rc2.
  • Updated translations from CrowdIn.
  • Added the ability to change Source Mirrors alignment when rescaling.
Unstable, possibly broken changes
  • Added a new Color Grading filter which can be used to essentially gain access to a professional color grading tool.
  • Added Custom Shaders as Filters and Sources, though partially broken at this moment.
Step up your masking game because it is time for Dynamic Masks! With this filter you can use any other source as a mask for any other source, and decide just how that mask should be applied. Don't limit yourself with boring old Image Masking and just use literally any kind of video source to mask content!

Signed Distance Field Effects have also now gained the ability to render Glow and Outline, which can be used for making things glowy and outliney. Note that as OBS Studio does not support per-pixel blend operations, or any blend operations at all, the default Mix blend will be used with no way for me to change it. In addition to that, the effects will now look better than before, and should no longer have unexpected pixely outlines when using Inner Shadow or Inner Glow.

Various smaller fixes have also been applied, such as that the source tracking code now actually tracks renamed sources correctly instead of permanently showing the old name. Some properties will now have different hover text descriptions depending on the selected option, and the Displacement filter should no longer crash unexpectedly.
Changelog
Overall
  • Improved support for building and running the plugin on Mac and Linux.
  • Improved en-US base translations.
  • Fixed source tracking not updating when sources are renamed.
  • Fixed log spam when a source can no longer be found.
Blur Filter
  • The description for the Type and Subtype fields now update according to the selected Type and Subtype.
Displacement Filter
  • Fixed a crash when a zero-length filename was given.
  • Fixed a crash when the selected file could not be found.
Dynamic Mask Filter
  • A new filter that allows you to use any other source as a mask for the source you are filtering, and define how exactly the masking should happen and use the red, green, blue and alpha channel as individual masks.
Signed Distance Field Effects Filter
  • Added Glow and Outline as options, allowing you to add an outline and glow to any source you wish to have a glow or outline on.
  • Improved rendering quality of all Signed Distance Field Effects filters.
Source Mirror Source
  • The description for Bounds Type will now update according to the selected Bounds Type.
Transform Filter
  • Position, Rotation, Scale and Shear properties now have a proper description.
  • Like
Reactions: MacTartan
The big blur rework has finally reached an end, because today I present to you the new, more efficient, better Blur design! It comes with a new blur type called Dual Filtering, which can do the same work as Gaussian Area blur, but at much less cost.

Two new blur subtypes are also now available, called Rotational and Zoom blur, which can be used to simulate a rolling camera or a forward/backward moving camera. Clever uses of this can result in some really nice art for the background, especially if you have some sort of visualizer. The maximum blur size has also been increased from 25 to 127.

Next is Source Mirror, which has now gained the ability to mirror Scenes without requiring OBS Studio v23.x or newer, and no longer freezes OBS Studio when you open the filters dialog with audio mirroring enabled. It also stops rendering video if there is nothing to actually render, and will no longer cause audio stuttering or skipping if audio mirroring is enabled.
Changelog
Overall
  • Added new translations from CrowdIn. Huge thank you to all the contributors, you can take part in translating the project too if you have some spare time.
  • Reduced general plugin overhead by reducing the amount of events being listened to.
  • (Update 2) Updated translations from Crowdin.
  • (Update 3) Fixed source tracking not updating when sources are renamed.
  • (Update 3) Fixed log spam when a source can no longer be found.
Blur Filter
  • Completely redesigned the UI to allow new options without having to hardcode them.
  • Added Dual Filtering blur which is an approximation of Gaussian blur that uses around 98% less GPU resources and thus is capable of larger blur sizes.
  • Added Rotational blur, which can be used to simulate rolling a camera in place.
  • Added Zoom blur, which can be used to simulate moving a camera forward or backward.
  • Added an empty entry to the masking sources list.
  • Increased the maximum blur size for most Blur types to 127 from 25.
Displacement Filter
  • (Update 2) Fixed a crash when a zero-length filename was given.
  • (Update 2) Fixed a crash when the selected file could not be found.
Source Mirror Source
  • Added support for mirroring scenes as well as sources. This is a backwards compatible change and does not require the new libOBS v23.x API.
  • Fixed a freeze that happened with audio mirroring and opening the filters dialog for the Source Mirror source.
  • Fixed a freeze that happened with audio mirroring and opening the filters dialog for the mirrored source.
  • Fixed a bug that caused sources with no size or no video to still attempt to render.
  • Fixed audio stuttering and skipping with audio mirroring, which was caused by naively assuming that there is enough CPU time to do both capture and mirror in the same millisecond.
  • (Update 1) Fixed Source Mirror rendering offscreen since v0.6.0.
  • (Update 1) Fixed an at-exit crash due to the new audio mirroring code introduced in v0.6.0.
Transform Filter
  • (Update 2) Position, Rotation, Scale and Shear properties now have a proper description.
This is a hotfix release for v0.5.0, fixing a critical bug with source tracking for source lists.
Changelog
General
  • Fixed source tracking not updating names when sources are renamed.
This is a hotfix release for v0.5.0, fixing a bug and updating translations.
Changelog
General
  • Updated translations from Crowdin.
Displacement Filter
  • Fixed a crash when a zero-length filename was given.
  • Fixed a crash when the selected file could not be found.
Transform Filter
  • Position, Rotation, Scale and Shear properties now have a proper description.
It is finally time for Version 0.5.0 to be released to the general public after it has spent a month in Early Access on my Patreon! This version brings along a lot of needed fixes, performance improvements and new features. And most of this was done in the total work time of 3 months, in which the main task was fixing bugs, crashes and leaked sources.

After that, lots of time was spent optimizing Filters and Sources so they no longer cause top of the line GPUs to barely be able to render at 60 fps. This was mainly done with optimizations to the actual shader code and by caching the result of the render for each frame, instead of rendering it anew each time. This makes Studio mode, the Properties view and the Filter editor no longer cause a frame drop.

And finally, a few new Features have been added. Source Mirror now has Audio Mirroring and proper rescaling, Blur Filter supports masking and Directional Blur and 3D Transform now has mipmapping. And there is also a new kind of Filter: Signed Distance Field Effects! This Filter can be used to apply a shadow to a source, as long as there is any kind of transparency as it works by dynamically creating a Signed Distance Field which is faster than normal blur, and allows for a lot more effects.

Changelog
Source Mirror Source
  • Added Audio Mirroring which allows applying filters to an audio signal of a mirrored source.
  • Added support for Rescaling similar to that which OBS Studio supports.
  • Fixed various source leaks that caused issues, such as crashing or not allowing Video Capture Source to release the device.
  • Fixed various crashes due to missing references with Sources that only have Audio or Video.
  • Now supports cached results per frame to reduce GPU and CPU usage each frame.
Blur Filter
  • Added support for masking with various mask inputs, such as region, image, source, or scene. This can be used to create effects like this or this (by DTOX).
  • Added linear sampling versions of Box and Gaussian Blur which uses about 50% less GPU.
  • Added Directional Blur which can be used for something similar to Motion Blur.
  • Added Step Scaling which allows lower blur sizes to affect a larger area.
  • Fixed the Gaussian Blur kernel size not matching up with the actual range of the blur, resulting in a box effect instead of a smooth blur. Compare the old behavior with the new behavior for this sample image to get an idea of what it changes.
  • Optimized various shader invocations to use arrays instead of textures.
  • Now supports cached results per frame to reduce GPU and CPU usage each frame.
3D Transform Filter
  • Added Mip-Mapping to reduce aliasing and pixel flickering for angled, scaled, stretched, squished, sheared or otherwise transformed source. This option is only available for DirectX currently and still considered Experimental.
  • Fixed the squishing/scaling bug when the input Source unexpectedly changed.
  • Fixed various crashes due to lost references and invalid pointers.
  • Now supports cached results per frame to reduce GPU and CPU usage each frame.
Displacement Filter
  • Improved quality by no longer relying on bootleg versions of PS2.0 instructions.
Signed Distance Field Effects Filter
  • A new effect that allows for many types of effects, such as Shadows, Stroke/Outline, Glow and more. It uses a dynamically created Signed Distance Field which allows for much higher accuracy and quality, but is not able to quickly catch up to sudden changes at full resolution.
It's been over a year since the last full release for Stream Effects, and we're getting ever closer to another one. With this preview release a lot of bugs and crashes have been fixed, new features have been introduced and some even got a much needed upgrade. For example, the plugin now has an Installer like the one for the AMD Encoder!

The most important change is that Blur Filter will now take up to 99% less GPU to run, which means that you can go nuts with the effect even more than you could before - and maybe even go back to a 2-PC streaming setup if you switched from that to a 1-PC streaming setup. This is the result of lots of changes to the rendering system (see changelog). Additionally you can now use a Mask of various types (Region, Image, Source, Scene) that will restrict blur to only apply in the masked section.

Next up is 3D Transform which now supports mip-mapping, a technique used to smooth out pixel artifacts when the texture resolution is greater than the screen resolution, for example if you rotate, shear, scale or modify the source geometry by other means. For people using 3D Transform to place objects into a 3D-like scene, this means drastically improved image quality at the cost of some extra GPU memory and time. This is currently a Windows/DirectX11 only feature and will not have any effect on other platforms or renderers.

Then we have the all new Filter "Signed Distance Field Effects"! With this you can apply an Inner Shadow, Outer Shadow (aka Drop Shadow) and in the future Glow and Outline too. It is a cheaper alternative to blurring a source for a shadow or glow, but it does reduce the shadow/glow quality slightly.
Finally we have Source Mirror which can now finally mirror audio and has gotten some rendering and stability upgrades. It will now no longer cause sources to be endlessly active and has all new re-scaling options.

Changelog
Overall
  • The plugin now features a brand new Installer similar to the one present in the AMD Encoder for OBS Studio plugin. This should simplify installing the plugin a lot.
  • Backwards compatibility up to Version 21.x has been restored, which means that you can now use newer OBS Studio versions as well as old ones.
  • Translations can now be submitted via CrowdIn! Translate Stream Effects into your language today!
Blur Filter
  • Fixed support for various input Sources (Game Capture, Display Capture, ...).
  • Added support for masking the affected region, including feather around the region.
  • Added support for Image and Source masks, with an optional Color filter and multiplier.
  • Added Linear Sampling versions of Box and Gaussian Blur, which roughly halve the necessary GPU power for a similar effect.
  • Switched from Kernel Textures to a Kernel Array, which reduces GPU Usage by roughly 50%.
  • Added support for Scenes as masks.
  • Added support for Directional Blur (aka Motion Blur).
  • Added support for Step Scaling, allowing lower Blur Sizes to have an effect on a larger area.
  • Drastically reduced GPU Usage by only calculating the Blur once per video_tick instead of every video_render.
3D Transform Filter
  • Added MipMapping which can be enabled to reduce aliasing on an angled, scaled, stretched, squished, sheared or otherwise modified source.
  • Fixed a crash on exiting OBS Studio caused by invalid string references.
  • Drastically reduced GPU Usage by only rendering the transformed Source once per video_tick instead of every video_render.
Signed Distance Field Effects (previously Inner/Outer Shadow (SDF))
  • A new effect that allows rendering various effects based on a Signed Distance Field, for example a Drop Shadow.
  • Fixed a crash when adding this Filter to a Source.
  • Fixed a memory leak caused by never releasing the Filter memory.
  • Added support for Inverse (Min > Max) and Negative (Min or Max < 0) Gradients to Inner and Outer Shadow.
  • Added scaling option for the SDF Texture Size, allowing finer control over the output quality.
Displacement Filter
  • Improved image quality by not relying on bootleg versions of proper intrinsics in shaders.
Source Mirror
  • Added support for Audio mirroring, allowing for audio effects to be applied in addition to video effects.
  • Fixed recursion causing a crash or frozen OBS Studio.
  • Fixed a Source leak caused by never releasing the previously mirrored Source.
  • Fixed a Source leak caused by improper cleanup in recursion checking.
  • Fixed a crash with Audio-only or Async-Video sources.
  • Added support for various Rescaling methods (Stretch, Fit, Fill, Fill to Width, Fill to Height).
Plugin
  • Shipped files should now be actual images instead of broken images.
Source Mirror
  • Fixed a memory leak caused by not releasing the mirrored source.
  • Fixed a rendering slowdown caused by trying to render the source inside an effect loop.
  • Fixed 'Point' scaling not actually using the correct sampling.
  • Implemented an option for Source Mirror to keep the original size even if rescaling.
Top