From 8edaf905264149ab67cde4ed7412235800a0c142 Mon Sep 17 00:00:00 2001 From: Penwywern Date: Tue, 30 Sep 2025 00:17:13 +0200 Subject: [PATCH 1/2] plugins: List disabled plugins --- checks/plugins.py | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/checks/plugins.py b/checks/plugins.py index 68a26e5..00f1da5 100644 --- a/checks/plugins.py +++ b/checks/plugins.py @@ -27,12 +27,17 @@ def checkImports(lines): def checkPluginList(lines): - if (getLoadedModules(lines) and checkOperatingSystem(lines)): - commonPlugins = ['frontend-tools', 'vlc-video', 'obs-outputs', 'obs-vst', 'obs-ffmpeg', 'obs-browser', 'obs-transitions', 'decklink', 'decklink-captions', 'text-freetype2', 'decklink-output-ui', 'decklink-ouput-ui', 'aja', 'aja-output-ui', 'obs-x264', 'obs-websocket', 'obs-filters', 'image-source', 'rtmp-services', 'obs-webrtc', 'obs-nvenc', 'nv-filters', 'test-input'] - windowsPlugins = ['win-wasapi', 'win-mf', 'win-dshow', 'win-capture', 'obs-text', 'obs-qsv11', 'win-decklink', 'enc-amf', 'coreaudio-encoder'] - macPlugins = ['mac-virtualcam', 'mac-videotoolbox', 'mac-syphon', 'mac-capture', 'mac-avcapture', 'coreaudio-encoder', 'mac-avcapture-legacy'] - linuxPlugins = ['obs-libfdk', 'linux-v4l2', 'linux-pulseaudio', 'linux-pipewire', 'linux-jack', 'linux-capture', 'linux-alsa', 'obs-qsv11'] - pluginList = lines[(getLoadedModules(lines)[0] + 1):getPluginEnd(lines)] + moduleStart = getLoadedModules(lines)[0] + operatingSystem = checkOperatingSystem(lines) + if moduleStart and operatingSystem: + + # When adding to those lists, please follow alphabetical order. + commonPlugins = ['aja', 'aja-output-ui', 'decklink', 'decklink-captions', 'decklink-ouput-ui', 'decklink-output-ui', 'frontend-tools', 'image-source', 'nv-filters', 'obs-browser', 'obs-ffmpeg', 'obs-filters', 'obs-nvenc', 'obs-outputs', 'obs-transitions', 'obs-vst', 'obs-webrtc', 'obs-websocket', 'obs-x264', 'rtmp-services', 'test-input', 'text-freetype2', 'vlc-video'] + osPlugins = {"windows": ['coreaudio-encoder', 'enc-amf', 'obs-qsv11', 'obs-text', 'win-capture', 'win-decklink', 'win-dshow', 'win-mf', 'win-wasapi'], + "mac": ['coreaudio-encoder', 'mac-avcapture', 'mac-avcapture-legacy', 'mac-capture', 'mac-syphon', 'mac-videotoolbox', 'mac-virtualcam'], + "linux": ['linux-alsa', 'linux-capture', 'linux-jack', 'linux-pipewire', 'linux-pulseaudio', 'linux-v4l2', 'obs-libfdk', 'obs-qsv11'] + } + pluginList = lines[(moduleStart + 1):getPluginEnd(lines)] thirdPartyPlugins = [] for s in pluginList: @@ -42,21 +47,18 @@ def checkPluginList(lines): plugin = plugin.strip() thirdPartyPlugins.append(plugin) + disabledPlugins = search(", is disabled", lines[:moduleStart]) + for line in disabledPlugins: + thirdPartyPlugins.append(line.split("'")[1] + " (disabled)") + thirdPartyPlugins = set(thirdPartyPlugins).difference(commonPlugins) - if (checkOperatingSystem(lines) == "windows"): - thirdPartyPlugins = set(thirdPartyPlugins).difference(windowsPlugins) - elif (checkOperatingSystem(lines) == "mac"): - thirdPartyPlugins = set(thirdPartyPlugins).difference(macPlugins) - elif (checkOperatingSystem(lines) == "linux"): - thirdPartyPlugins = set(thirdPartyPlugins).difference(linuxPlugins) + if operatingSystem in osPlugins: + thirdPartyPlugins = set(thirdPartyPlugins).difference(osPlugins[operatingSystem]) else: thirdPartyPlugins = [] - pluginString = str(thirdPartyPlugins) - pluginString = pluginString.replace("', '", "
  • ") - pluginString = pluginString[2:] - pluginString = pluginString[:-2] + pluginString = "
  • ".join(str(plugin) for plugin in thirdPartyPlugins) - if (len(thirdPartyPlugins)): - return [LEVEL_INFO, "Third-Party Plugins (" + str(len(thirdPartyPlugins)) + ")", - """You have the following third-party plugins installed:
    "] + if thirdPartyPlugins: + return [LEVEL_INFO, f"Third-Party Plugins ({len(thirdPartyPlugins)})", + f"""You have the following third-party plugins installed:
    """] From d2a21a679e0f21fefa6c6c8a4f943cb2fce71d19 Mon Sep 17 00:00:00 2001 From: Penwywern Date: Tue, 30 Sep 2025 18:06:45 +0200 Subject: [PATCH 2/2] plugins: List not loaded plugins --- checks/plugins.py | 35 +++++++++++++++-------------------- 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/checks/plugins.py b/checks/plugins.py index 00f1da5..d91cd16 100644 --- a/checks/plugins.py +++ b/checks/plugins.py @@ -1,29 +1,24 @@ from .vars import * from .utils.utils import * from .core import * -import re - -import_re = re.compile(r""" - (?i) - \/ - (?P[^\/]+) - '\sdue\sto\spossible\simport\sconflicts - """, re.VERBOSE) +import os.path def checkImports(lines): - conflicts = search('due to possible import conflicts', lines) - if (len(conflicts) > 0): - append = "" - for p in conflicts: - c = import_re.search(p) - if c and c.group("plugin"): - append += "
  • " + c.group("plugin").replace('.dll', '') + "
  • " - - if append: - append = "

    Plugins affected:" - return [LEVEL_CRITICAL, "Outdated Plugins (" + str(len(conflicts)) + ")", - """Some plugins need to be manually updated, as they do not work with this version of OBS. Check our Plugin Compatibility Guide for known updates & download links.""" + append] + notLoaded = search("' not loaded", lines[:getLoadedModules(lines)[0]]) + notLoaded += search("' compiled with newer libobs", lines[:getLoadedModules(lines)[0]]) + notLoadedPlugins = [] + + for line in notLoaded: + plugin = os.path.split(os.path.splitext(line.split("'")[1])[0])[1] + if plugin: + notLoadedPlugins.append(plugin) + + pluginString = "
  • ".join(str(plugin) for plugin in notLoadedPlugins) + if notLoadedPlugins: + pluginString = f"

    Plugins affected:
    " + return [LEVEL_WARNING, f"Plugins Not Loaded ({len(notLoadedPlugins)})", + f"""Some plugins were not loaded. This can be the result of a version incompatibility between OBS and the plugin, or of a missing dependency.{pluginString}"""] def checkPluginList(lines):