Skip to content

fix: Install the plugin in the OBS 33 plugin location - #67

Merged
semnil merged 7 commits into
masterfrom
fix/obs33-plugin-location
Nov 1, 2026
Merged

semnil merged 7 commits into
masterfrom
fix/obs33-plugin-location

Conversation

@semnil

@semnil semnil commented Nov 1, 2026 •

Copy link
Copy Markdown
Owner

Problem

OBS Studio 33's Plugin Manager marks Mix Track to Source as Legacy (旧方式 in Japanese). The Windows installer puts the module in C:\ProgramData\obs-studio\plugins\mix-track-to-source\bin\64bit\, and the Ubuntu package puts it in /usr/lib/<arch>/obs-plugins/. OBS Studio 33.0.1 loads both through its legacy loader (loadLegacyPlugins in frontend/plugin-manager/PluginModuleLoader_Windows.cpp and PluginModuleLoader_Linux.cpp). OBS says that plugins in legacy locations will not be loaded in the future (Legacy Plugin Locations, Legacy Plugin Developer Info).

Fix

  • Windows: the module and its PDB are installed to mix-track-to-source/, next to mix-track-to-source/data/. OBS Studio 33 loads this as plugins/<name>/<name>.dll with plugins/<name>/data (loadPlugins in PluginModuleLoader_Windows.cpp). The rundir uses the same layout, so OBS_PLUGINS_PATH=<build>/rundir/<config> loads a local build.
  • Linux: the module is installed to <libdir>/obs-modules/plugins and its data to <datadir>/obs/obs-modules/plugins/<name>, the system plugin location of OBS Studio 33 (OBS_PLATFORM_PLUGIN_MODULE_PATH and OBS_PLATFORM_PLUGIN_DATA_PATH in frontend/cmake/feature-plugin-manager.cmake). The module and its data are also installed to <libdir>/obs-plugins and <datadir>/obs/obs-plugins/<name>, the location OBS Studio 32 and earlier search: the obsproject PPA publishes OBS Studio 32.2.0 for Ubuntu 24.04 (noble), 32.1.2 for questing and 33.0.0 for resolute and stonking (Launchpad getPublishedSources), and CI's Ubuntu 24.04 job installs obs-studio (32.2.0-0obsproject1~noble). OBS Studio 33 loads the copy in obs-modules/plugins first and skips the other. The rundir uses <name>/<name>.so with <name>/data.
  • Windows installer:
    • Before it copies files, it deletes the bin\64bit\mix-track-to-source.dll and .pdb that an earlier version installed, and removes bin\64bit and bin when they are empty. Other files in those folders are kept.
    • A task, checked by default, also copies the module and its PDB to bin\64bit. Under C:\ProgramData\obs-studio\plugins\<name>, that is the only folder OBS Studio 31.1.1 and 32.2.2 search (AddExtraModulePaths in frontend/widgets/OBSBasic.cpp). OBS Studio 33 loads the copy next to data first and skips the one in bin\64bit with Skipping legacy plugin ... already loaded from ... in the log. A reinstall starts with the choice made last time.
    • The task is described in English (Also install for OBS Studio 31.1.1 to 32 (legacy plugin location)) and Japanese (OBS Studio 31.1.1〜32 でも使えるようにする (旧方式の場所にも置く)). The script is UTF-8 without a BOM, which Inno Setup reads since 6.3.0 (its whatsnew.htm); the windows-2022 runner image lists InnoSetup 6.7.1.
  • macOS is unchanged. The package installs mix-track-to-source.plugin to ~/Library/Application Support/obs-studio/plugins (the current-user-home domain in cmake/macos/resources/distribution.in), which OBS Studio 33 loads as a plugin, not a legacy plugin (PluginModuleLoader_MacOS.mm).
  • README.md and README.ja.md state that OBS Studio 31.1.1 or later is required and that the plugin is installed in the plugin location used since OBS Studio 33. They also describe the installer task, the manual copy to bin\64bit for OBS Studio 31.1.1 to 32 when the archive is used, and that the Ubuntu package places the plugin in both locations.

Impact

Verification

  • Windows build of this head: cmake --preset windows-x64 -DCMAKE_COMPILE_WARNING_AS_ERROR=ON, cmake --build and cmake --install pass. The install tree and the rundir are mix-track-to-source/mix-track-to-source.dll, mix-track-to-source/mix-track-to-source.pdb and mix-track-to-source/data/locale/{en-US,ja-JP}.ini.

  • OBS Studio 33.0.1 on Windows, started with OBS_PLUGINS_PATH set to a rundir in this layout (a build that also contains the update check change on the feat/update-check branch), while the released 1.0.2 was installed in bin\64bit:

    • the log shows Skipping legacy plugin 'mix-track-to-source' at 'C:\ProgramData\obs-studio/plugins/mix-track-to-source/bin/64bit/mix-track-to-source.dll', already loaded from '<build>\rundir\RelWithDebInfo/mix-track-to-source/mix-track-to-source.dll'
    • the Plugin Manager shows the plugin without the Legacy label
  • Installer: iscc compiles this head's installer.iss the way Package-Windows.ps1 does. A copy of the script that only replaces AppId, DefaultDirName, the privileges and the uninstall registration was run silently against a scratch folder. In each case, the DLL and PDB it installed are byte-identical to the build.

    • upgrade from the old layout with the default task → both locations
    • upgrade with the task off → bin removed
    • upgrade with the task on → both locations
    • bin\64bit holding another file, task off → only the plugin's two files removed; the other file and the folders kept
    • fresh install with the task on → both locations
    • reinstall with the task off over the previous case → bin removed
    • the task description compiled for English and Japanese equals the source text
    • With [InstallDelete] removed, the upgrade with the task off keeps bin\64bit\mix-track-to-source.dll and .pdb.
    • With the uninstall registration under HKCU, a reinstall starts with the last choice, both after checking and after unchecking the task. Uninstalling removes the registration.
  • Linux install rules: a probe project that includes this head's cmake/linux/helpers.cmake (with CMAKE_INSTALL_LIBDIR set to lib/x86_64-linux-gnu) installs lib/x86_64-linux-gnu/obs-modules/plugins/<module>, lib/x86_64-linux-gnu/obs-plugins/<module>, and locale/{en-US,ja-JP}.ini under both share/obs/obs-modules/plugins/mix-track-to-source/ and share/obs/obs-plugins/mix-track-to-source/. The same probe with the helpers of the previous commit installs only the obs-modules copies.

  • gersemi 0.21.0 (the version in obsproject/tools) reports no changes for cmake/windows/helpers.cmake and cmake/linux/helpers.cmake.

  • CI on 1ea6d2a passes (Ubuntu, Windows and macOS builds and the format checks).

  • Ubuntu, checked after the merge on master at e95a844 (which contains this change) in Docker: ubuntu:24.04 with the obsproject PPA installs obs-studio 32.2.0-0obsproject1~noble, and ubuntu:26.04 installs obs-studio 33.0.0-0obsproject3~resolute. On both, the plugin is built and packaged with the options of .github/scripts/build-ubuntu and package-ubuntu (cmake --preset ubuntu-ci-x86_64 -G Ninja -DQT_VERSION=6 -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=/usr, cmake --build --preset ubuntu-ci-x86_64 --config RelWithDebInfo --parallel, cmake --build build_x86_64 --config RelWithDebInfo -t package). dpkg-deb -c lists mix-track-to-source.so under both /usr/lib/x86_64-linux-gnu/obs-modules/plugins/ and /usr/lib/x86_64-linux-gnu/obs-plugins/, and locale/{en-US,ja-JP}.ini under both /usr/share/obs/obs-modules/plugins/mix-track-to-source/ and /usr/share/obs/obs-plugins/mix-track-to-source/. After apt-get install ./<deb>, OBS was started under Xvfb with both copies and with one of them moved away:

    OBS Both copies obs-modules/plugins only obs-plugins only
    32.2.0 loaded not loaded loaded
    33.0.0 loaded from obs-modules/plugins, with Skipping legacy plugin 'mix-track-to-source' at '/usr/lib/x86_64-linux-gnu/obs-plugins/mix-track-to-source.so', already loaded from '/usr/lib/x86_64-linux-gnu/obs-modules/plugins/mix-track-to-source.so' loaded loaded

    Each start had no obs process left from the previous one, and none of the logs has OBS is already running.

  • Not verified: loading from bin\64bit in OBS Studio 31.1.1 to 32 on Windows.

🤖 Generated with Claude Code

semnil and others added 5 commits November 1, 2026 14:11
OBS Studio 33 flags a plugin whose module is in
plugins/<name>/bin/64bit as Legacy, and loads plugins/<name>/<name>.dll
with plugins/<name>/data first. Install the module and its PDB to
<name>/ next to <name>/data, and copy them to rundir/<config>/<name>
with the data in rundir/<config>/<name>/data.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Install the module to <libdir>/obs-modules/plugins and its data to
<datadir>/obs/obs-modules/plugins/<name>, the system plugin location
that OBS Studio 33 loads without the Legacy flag. Copy the module to
rundir/<config>/<name> with the data in rundir/<config>/<name>/data.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Before copying files, delete bin\64bit\<name>.dll and
bin\64bit\<name>.pdb from the install folder, then remove bin\64bit and
bin when they are empty. Other files in those folders are kept.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add an installer task, checked by default, that also copies the module
and its PDB to bin\64bit so that OBS Studio 31.1.1 to 32 can load the
plugin. The task has English and Japanese descriptions, and a reinstall
starts with the choice made last time.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
State that OBS Studio 31.1.1 or later is required and that the plugin is
installed in the plugin location used since OBS Studio 33. Describe the
installer's legacy-location task and the manual copy to bin\64bit for
OBS Studio 31.1.1 to 32, and state that the Ubuntu package needs OBS
Studio 33 or later.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@semnil
semnil force-pushed the fix/obs33-plugin-location branch from cf7bfea to a931f69 Compare November 1, 2026 05:12
semnil and others added 2 commits November 1, 2026 14:31
The obsproject PPA publishes OBS Studio 32.2.0 for Ubuntu 24.04, which
loads plugins only from <libdir>/obs-plugins. Install the module and
its data there as well as in obs-modules/plugins, from one list of
plugin folders. OBS Studio 33 loads the copy in obs-modules/plugins
and skips the other.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Replace the OBS Studio 33 requirement for the Ubuntu package with the
two locations it now installs to, so that OBS Studio 31.1.1 to 32 can
load the plugin.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@semnil
semnil merged commit cc0a3dd into master Nov 1, 2026
8 checks passed
@semnil
semnil deleted the fix/obs33-plugin-location branch November 1, 2026 05:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant