Commit Graph
15752 Commits
Author SHA1 Message Date
FiniteSingularityandPatTheMav 11a8445aa4 frontend: Update app module loading behavior
With this change module loading in the application is managed by the
plugin manager and allows the application to explicitly load core
modules independantly from 3rd party (plugin) modules.

The implementation is split into separate files for different platforms
to allow for cleaner code handling the different possible locations and
path schemes used, including all possible legacy locations and plugin
bundle formats.

This change introduces new locations and directory formats for plugins:
* WINDOWS: Portable plugins need to be placed in a directory called
  "plugins" adjacent to the "bin" directory of an OBS Studio
  installation.
* WINDOWS: Plugins need to be packaged into their own directory
  "bundles", with the associated DLL in the root of the bundle and the
  associated "data" directory next to it.
* WINDOWS: The "obs-plugins" directory adjacent to the "bin" directory
  is deprecated and considered a legacy location for all plugins.
* MACOS: No changes in locations or formats.
* LINUX: Plugins distributed via system package managers now need to use
  the "obs-modules/plugins" directory in the system library directory
  for binaries, and the "obs/obs-modules/plugins" directory in the
  system data directory for resources.
* LINUX: The "obs-plugins" directories in the system library and system
  data directories are deprecated.
* LINUX: Plugins distributed outside of system packages need to use the
  same directory format as plugins for Windows (see above).
* LINUX: A "portable" plugin location like on Windows is not supported.
* LINUX: Proper XDG directory locations are scanned for plugins, using
  XDG_CONFIG_HOME for the legacy plugin format and XDG_DATA_HOME for the
  new plugin structure.
* LINUX: Changes Flatpak plugin loading to use the new plugin structure
  (while still supporting the legacy structure), and moves Flatpak
  specific plugin loading to its own source files.
* ALL PLATFORMS: A single environment variable "OBS_PLUGINS_PATH" can
  now be used to provide a highest-priority location from which to load
  plugins. This directory needs to contain plugin bundles per the new
  format. The one exception is Flatpak which does not support loading
  plugins from an env provided location.
* ALL PLATFORMS: A custom legacy plugin locations can still be provided
  via the "OBS_LEGACY_PLUGINS_PATH" and "OBS_LEGACY_PLUGINS_DATA_PATH"
  environment variables. These are only compatible with plugins using
  the legacy format and are considered deprecated. The one exception is
  Flatpak which does not support loading plugins from an env provided
  location.

Co-authored-by: PatTheMav <PatTheMav@users.noreply.github.com>
2026-09-23 18:53:19 -04:00
FiniteSingularityandPatTheMav 23bba4413b libobs: Add core module loading functionality
Adds a separate code path just for loading core modules based on the
list of modules created at build system generation. Paths to load core
modules from is platform-specific, but not changeable for users and is
thus not changeable by a caller.

Instead path discovery is implemented for each platform separately,
generating the necessary module loading package directly before handing
it over to the existing module load callback function.

Co-authored-by: PatTheMav <PatTheMav@users.noreply.github.com>
2026-09-23 18:53:19 -04:00
FiniteSingularityandPatTheMav f57b7083a5 cmake: Add OS_FLATPAK flag
This adds an ENABLE_FLATPAK option which sets an OS_FLATPAK variable
for linux builds, and causes any Flatpak-specific build logic to be
enabled at configure time.

Co-authored-by: PatTheMav <PatTheMav@users.noreply.github.com>
2026-09-23 18:53:19 -04:00
FiniteSingularityandPatTheMav 4ab64d00d0 cmake: Change name of core module output directory
Moves first-party runtime modules into the "core" directory rather than
the "obs-plugins" directory to better differentiate them from legacy
plugins as well as existing 3rd-party plugins.

This change also requires the existing plugin directory to be explicitly
added as a possible module search path by application logic, as libobs's
internal logic will not add this path anymore and thus third-party
plugins would not be discovered anymore.

Co-authored-by: PatTheMav <PatTheMav@users.noreply.github.com>
2026-09-23 18:53:19 -04:00
FiniteSingularityandPatTheMav cca82c7156 cmake: Add concept of "core" modules
Core modules are main OBS Studio functionality implemented as runtime
modules, but are conceptually considered mandatory and the application
is incomplete without them.

This change also introduces a configure-time dependency of core modules
on "libobs" (already a generation-time dependency) and produces a
library target with the names of all core modules available at build
system generation.

Co-authored-by: PatTheMav <PatTheMav@users.noreply.github.com>
2026-09-23 18:53:19 -04:00
FiniteSingularityandPatTheMav db8d9071b2 cmake: Add explicit target_enable function
This provides the counterpart to the existing "target_disable" function,
which also allows the functionality to be factored out of existing
helper code that might run this implicitly.

Co-authored-by: PatTheMav <PatTheMav@users.noreply.github.com>
2026-09-23 18:53:19 -04:00
tt2468 1c315c33f8 rtmp-services: Update IRLToolkit ingest list
- `ewr` is now `iad`
- Added `ord` and `icn`
2026-09-23 15:41:31 -04:00
Ramjivan Jangid 978fc690d8 rtmp-services: Update Streamway primary ingest
Update Streamway's primary ingest endpoint to secure RTMPS.
2026-09-23 14:47:42 -04:00
Warchamp7 0888aeafe1 frontend: Update default snap distance 2026-09-22 17:27:09 -04:00
Warchamp7 bb2e23e160 frontend: Improve preview source snapping 2026-09-22 17:27:09 -04:00
rch850 d654632c0f rtmp-services: Update Whowatch
Use Amazon IVS Realtime RTMP Ingest
2026-09-22 17:07:09 -04:00
R0teandRyan Foster 0820d804bc linux-alsa: Fix use-after-free crash when USB mic not plugged in
Co-authored-by: Ryan Foster <ryan@obsproject.com>
2026-09-22 15:02:52 -04:00
Warchamp7 13d5c007b0 frontend: Refactor ScreenshotObj options 2026-09-22 14:16:46 -04:00
Warchamp7andClayton Groeneveld 4044a1a142 frontend: Demangle ScreenshotObj and OBSBasic
Co-Authored-By: Clayton Groeneveld <19962531+cg2121@users.noreply.github.com>
2026-09-22 14:16:46 -04:00
Myeong Gyu Lee ea7536c49c rtmp-services: Add multitrack_video option to PandaTV | 팬더티비 Service 2026-09-21 19:13:24 -04:00
tom b31833b1ae rtmp-services: Add Spoon RTMP service 2026-09-21 17:18:01 -04:00
Warchamp7 b5bfb79093 frontend: Update tab bar styling 2026-09-18 18:22:32 -04:00
Wu Haoyu 1bb3a4ee73 libobs: Make sure all code paths leave context
Should always call `gs_leave_context` after `gs_enter_context` or it
might cause a lock leave.

This commit makes sure all code paths will call `gs_leave_context` if
it called `gs_enter_context`.
2026-09-18 18:03:26 -04:00
Richard Stanway cfc81c9ad4 libobs-d3d11: Avoid exceptions in shader cache file handling
We're still getting crash reports from this code and it seems like C++
file I/O with exceptions set is a minefield - even closing a file in an
exception handler can trigger further exceptions from buffer flushes for
example. Using std::filesystem to check the file exists before opening
it also introduces exceptions and is a pointless TOCTOU check anyway.

This commit removes the exception bits from the streams and relies on
ifstream operator bool and ofstream fail() instead, greatly reducing the
number of possible exception generating paths we need to worry about.
2026-09-18 16:58:06 -04:00
Penwywern 617f7ed707 frontend: Log item/filter visibility changes 2026-09-18 16:32:47 -04:00
Penwywern 38df7d30bb frontend: Log sceneitem and filter enabled state on load 2026-09-18 16:32:47 -04:00
Matt Gajownik a0aec482eb CI, build-aux: Update CEF from 127/6533 to 150/7871 2026-09-18 15:53:29 -04:00
Warchamp7 737625160c idian: Debounce widget repolishing
Uses Qt's QGlobalStatic macro to create a shared Utils singleton for
repolishing widgets. This means that multiple calls to the Utils'
styling class helpers only trigger a single repolish per widget during
a one tick of the Qt event loop.
2026-09-18 15:24:10 -04:00
Warchamp7 ab197847da idian: Remove Utils inheritance
Updates the idian widgets to no longer inherit from the Utils class.

The multi-inheritance approach was from an earlier iteration of the
utils prior to the static methods and served as a convenience factor.
With the addition of the static methods, many of them no longer need
an actual instance of the class.
2026-09-18 15:24:10 -04:00
Warchamp7 d129eeb303 frontend: Refactor Idian widgets
The idian widgets were built when we had a much lower
understanding of how Qt expects you to build custom
complex widgets and without a direct use-case.

They were also built far too rigid for what every attempted
use of them thus far has necessitated. These changes break
them into simpler 'pieces' and provide getters for internals
that are intended to be accessed.
2026-09-18 15:24:10 -04:00
Matt Gajownik cba17c1d81 obs-browser: Update to 2.27.0
obsproject/obs-browser@5d2aadb Update to C++20
obsproject/obs-browser@d7065f9 cmake: Update Info.plist generation for macOS
obsproject/obs-browser@bb9b32e Enable support for CEF 6613+ and Chrome Runtime
obsproject/obs-browser@77bad77 Use constexpr for disabled command line features
obsproject/obs-browser@1d24808 Disable global shortcuts portal integration
obsproject/obs-browser@f555da0 Update version to 2.27.0
obsproject/obs-browser@a162443 Allow WebSocket requests over the network
2026-09-17 13:05:56 -04:00
alvin1995 539064599d libobs-metal: Wrap blitSwapChains in autoreleasepool to fix mach port leak
The CVDisplayLink callback thread driving blitSwapChains() has no
implicit autorelease pool. CAMetalDrawable objects returned by
nextDrawable() are autoreleased and each holds an IOSurface backed
by an IOSurfaceSharedEventReference mach port.

Without an autoreleasepool, these drawables are never drained on the
display link thread, causing a new IOSurface (and port) to leak every
frame when a render target is set (e.g. cross-process preview via
CAContext/CALayerHost).

Fix by wrapping the full frame cycle (nextDrawable → blit → present
→ commit) in an autoreleasepool, so autoreleased drawables are
reclaimed each frame and returned to the maximumDrawableCount pool.
2026-09-17 12:43:38 -04:00
tytan652 caaa022340 build-aux: Add versions to Flatpak plugin extension point
- Enables access to stable branch (Flathub) plugin to Flathub Beta releases
- Strip away access to beta branch plugins (Flathub Beta), mostly unused
  by submitters
- Enables test Flatpak plugin from Flathub submissions to be tested
2026-09-11 14:38:57 -04:00
pkv 0e742b3ad7 nv-filters: Remove CUDA from audio loader
CUDA is no longer used in Audio FX, so we remove everything related to
it in the nvafx loader.

Signed-off-by: pkv <pkv@obsproject.com>
2026-09-10 14:12:37 -04:00
pkv 06e3fbcf73 nv-filters: Enable Video FX SDK 1.3.0 for ARM
This updates the video FX SDK to 1.3.0, which enables arm64 support.
Backwards compatibility with SDK 0.7.6 has been kept.

Signed-off-by: pkv <pkv@obsproject.com>
2026-09-10 14:12:37 -04:00
pkv 9a91114907 nv-filters: Do not display VAD for dereverb
Voice Activated Detection (VAD) does not work with the room echo removal
(dereverb) FX.
So we remove it from Properties.

Signed-off-by: pkv <pkv@obsproject.com>
2026-09-10 14:12:37 -04:00
pkv 250dd2ab47 nv-filters: Enable audio FX SDK 3.0.0 for ARM
SDK 3.0.0 brings compatibility with arm64. The DLL loading sequence has
been adjusted since the FX are now loaded in their own child DLL.
The DLL loader has been also cleaned up by removing unused symbols. This
allowed us to dodge a few ABI breaks from NVIDIA...

Signed-off-by: pkv <pkv@obsproject.com>
2026-09-10 14:12:37 -04:00
Warchamp7 8126df7cd0 libobs: Create unique groups when duplicating scene 2026-09-10 13:45:26 -04:00
Service Checker ed9b3cc19f rtmp-services: Remove defunct servers/services 2026-09-09 18:11:27 -04:00
Warchamp7 012c6c23c7 frontend: Fix group icon styling
This helper does not support multiple classes in a single line. Each
class must be added separately.
2026-09-08 17:14:40 -04:00
tytan652 6b3e550729 cmake: Remove MbedTLS custom finder
The CMake package provided by upstream was preferred but macOS build
were without it until recently.
2026-09-04 16:59:23 -04:00
Warchamp7 57bfcf10ac frontend: Minor Spinbox cleanup
Fixes some minor codestyle problems.
2026-09-03 14:11:24 -04:00
PatTheMav ecebe28a1e SQUASME: Address review comment 2026-09-02 14:32:55 -04:00
PatTheMav d90a26ecb5 Update codestyle document
Clarifies language around thread-safety of function-local static
variables. Since C++11 these variables are initialized in a thread-safe
way (no concurrent initialization), but this guarantee does not extend
to consecutive accesses to that object (which would still need to use
a thread-safe internal implementation if necessary).
2026-09-02 14:32:55 -04:00
PatTheMav 766a0faad2 Update contribution guidelines for PR reviews
Adds guidelines for pull request reviews particularly around requesting
reviews and how to handle review threads:

* Only project members are allowed to request reviews from specific
  users.
* Only reviewers are allowed to resolve review comment threads, only
  project members can unilaterally resolve them if reviewers are
  unresponsive.
* Reviewers should thus take care to check for updates and resolve
  their comments if they have been addressed.
* Pull requests authors should try to avoid force-pushes and rebasing
  their branches to a minimum to make it easier for reviewers to track
  changes during review.
2026-09-02 14:32:55 -04:00
Gol-D-Ace 42ea39628c win-capture: Add Roblox window class auto switch to WGC mode 2026-09-02 12:54:43 -04:00
kangunnie_soop a2400fe980 rtmp-services: Update SOOP ingests
- Update streaming URL
- Consolidate SOOP Korea and SOOP Global service entries
2026-09-01 22:48:27 -04:00
Penwywern 7525aa1c5c docs: Add precision on editable string lists 2026-09-01 17:55:58 -04:00
Warchamp7 e8c4e7181c frontend: Use styling for source items appearance
The icon and text label for items in the source list was previously
enabled/disabled based on scene item visibility state. As of Qt 6.11
Qt no longer triggers context menus when right clicking a disabled
QLabel. This means right-clicking a hidden scene item would not
show a context menu.

Updates SourceTreeItem to use styling classes via idian helpers
instead of changing the enabled state of these labels.
2026-09-01 16:15:04 -04:00
Warchamp7 49aff0cc87 frontend: Add icon coloring for labels
Updates idian utils to also support QLabel widgets for icon coloring.
2026-09-01 16:15:04 -04:00
Penwywern eee6a81ddc frontend: Register the replay buffer save hotkey in the frontend
Existing registering of the save hotkey in obs-ffmpeg makes it
impossible for it to trigger a frontend event, and is inconsistent with
other existing output hotkeys.

This registers the save hotkey in the frontend and removes the
registration in obs-ffmpeg, and adds a "due to hotkey" log message,
like other output hotkeys.
2026-09-01 15:44:00 -04:00
Penwywern 420f9e5490 frontend: Add replay buffer saving frontend event 2026-09-01 15:44:00 -04:00
Penwywern d1244016fc obs-ffmpeg: Add replay buffer saving output signal 2026-09-01 15:44:00 -04:00
tt2468 0fd12618e0 libobs: Only emit core signal handlers for public canvases
Amends behavior to match other notable object types like sources
2026-09-01 15:08:37 -04:00
tt2468 dbdcf562fb libobs: Change canvas signal param name to signal_canvas
Just a nitpick, as `signal_source` is a copy/paste from obs-source
2026-09-01 15:08:37 -04:00