From 90a1298663d062fcdaaf2baf3d8dc2f408a5ad48 Mon Sep 17 00:00:00 2001 From: marcusbooker77 Date: Wed, 25 Feb 2026 16:56:59 -0600 Subject: [PATCH] Add Program Files plugin search path and module dedup check Add standard OBS Studio installation directory to plugin search paths so third-party plugins from Program Files are available in development builds. Add dedup check in load_all_callback() to prevent double-loading modules found in multiple search paths. Co-Authored-By: Claude Opus 4.6 --- frontend/widgets/OBSBasic.cpp | 22 ++++++++++++++++++++++ libobs/obs-module.c | 7 +++++++ 2 files changed, 29 insertions(+) diff --git a/frontend/widgets/OBSBasic.cpp b/frontend/widgets/OBSBasic.cpp index e3277eb5f445dc..2b89c7d32d759f 100644 --- a/frontend/widgets/OBSBasic.cpp +++ b/frontend/widgets/OBSBasic.cpp @@ -133,6 +133,24 @@ static void AddExtraModulePaths() #endif } +#if defined(_WIN32) + /* Search the standard OBS Studio installation directory so that + third-party plugins are available in development builds. */ + { + char pf[512]; + DWORD pf_len = GetEnvironmentVariableA("ProgramFiles", pf, + sizeof(pf)); + if (pf_len > 0 && pf_len < sizeof(pf)) { + string std_bin = + string(pf) + "/obs-studio/obs-plugins/64bit"; + string std_data = string(pf) + + "/obs-studio/data/obs-plugins/%module%"; + obs_add_module_path(std_bin.c_str(), + std_data.c_str()); + } + } +#endif + if (portable_mode) return; @@ -1407,6 +1425,8 @@ void OBSBasic::applicationShutdown() noexcept patronJsonThread->wait(); delete screenshotData; + delete previewProjector; + delete studioProgramProjector; delete previewProjectorSource; delete previewProjectorMain; delete sourceProjector; @@ -1419,6 +1439,8 @@ void OBSBasic::applicationShutdown() noexcept delete deinterlaceMenu; delete perSceneTransitionMenu; delete shortcutFilter; + delete trayIcon; + delete trayMenu; delete programOptions; delete program; diff --git a/libobs/obs-module.c b/libobs/obs-module.c index d623607be67d16..cf3d91dc2d2699 100644 --- a/libobs/obs-module.c +++ b/libobs/obs-module.c @@ -517,6 +517,13 @@ static void load_all_callback(void *param, const struct obs_module_info2 *info) return; } + /* Skip modules already loaded from a higher-priority path. */ + if (obs_get_module(info->name)) { + blog(LOG_DEBUG, "Skipping module '%s' (%s), already loaded", + info->name, info->bin_path); + return; + } + int code = obs_open_module(&module, info->bin_path, info->data_path); switch (code) { case MODULE_MISSING_EXPORTS: