Skip to content

About

OBS plugin core (SE.Live)

Resources

Stars

21 stars

Watchers

9 watching

Forks

Latest commit

 

History

1,459 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

obs-streamelements-core

Core SE.Live OBS plugin.

Documentation: Architecture — how the plugin is put together · JavaScript OBS API — the window.host surface a page sees. Both are published on GitHub Pages; links and detail in the two sections below.

JavaScript OBS API

The host API this plugin exposes to page JavaScript — 217 window.host calls, 104 window events and methods, and 70 data structures — is documented in docs/api/, accessible at https://streamelements.github.io/obs-streamelements-core/api/ currently at API version 6.6.

That tree is the source of truth. It replaces JavaScript OBS API Version 6.6.docx, which is not in version control; see tools/docx-to-markdown/ for how it was converted and verified.

Architecture

How the plugin itself is put together — lifecycle, the service container and the injection rules, the host API bridge, compositions, outputs, UI, threading, diagnostics, build and testing — is documented in docs/architecture/, published beside the API reference at https://streamelements.github.io/obs-streamelements-core/architecture/.

Start with the overview; it has a map of the chapters and a table of where to start by what you are doing.

Building locally

This plugin does not build on its own. It is built as part of an obs-studio tree, and it has a hard dependency on the obs-browser plugin being present as a sibling — SEBrowserWidget.cpp includes ../../obs-browser/panel/browser-panel.hpp by relative path.

Layout

obs-studio/
├── CMakeUserPresets.json          <- copy of this repo's CMakeUserPresets.json (Windows)
└── plugins/
    ├── CMakeLists.txt             <- must contain: add_core_module(obs-streamelements-core)
    ├── obs-browser/               <- required
    └── obs-streamelements-core/   <- this repo

Clone obs-studio with --recursive so obs-browser comes along. CI pins obs-studio to tag 33.0.1.

Register the plugin in the obs-studio tree by adding one line to plugins/CMakeLists.txt, before its trailing set_obs_core_modules():

add_core_module(obs-streamelements-core)

On OBS 32 and earlier the macro is spelled add_obs_plugin(...) and there is no set_obs_core_modules(); the rename landed in 33.0.0.

Windows

CMake reads CMakeUserPresets.json only from the top-level source directory, so the preset has to be copied up to the obs-studio root before configuring:

copy plugins\obs-streamelements-core\CMakeUserPresets.json CMakeUserPresets.json
cmake --preset=windows-x64-streamelements
msbuild build_x64\obs-studio.sln -p:Configuration=RelWithDebInfo

The windows-x64-streamelements preset just inherits obs-studio's own windows-x64 preset, so configuring with --preset=windows-x64 works too.

macOS

deps/BugSplat.xcframework.zip must be unpacked first or CMake stops with a fatal error:

(cd plugins/obs-streamelements-core/deps && unzip -o BugSplat.xcframework.zip)
cmake --preset=macos -DCMAKE_OSX_ARCHITECTURES=arm64 -B build_macos_arm64
cd build_macos_arm64 && xcodebuild -configuration RelWithDebInfo \
    -scheme obs-streamelements-core \
    -destination "generic/platform=macOS,name=Any Mac"

Notes

  • streamelements/Version.generated.hpp must define STREAMELEMENTS_PLUGIN_VERSION. A placeholder is committed so a fresh checkout compiles; CI overwrites it with the real build number. Don't edit it by hand.
  • Don't copy the -DENABLE_*=OFF flags out of .github/workflows/build.yml. CI turns off nearly every OBS feature — including -DENABLE_UI=OFF — because it only needs the plugin binary as an artifact. For local work you want the OBS UI built so there is something to run the plugin in.
  • There are no tests. Compiling is the only automated check, alongside CI/check-format.sh.
  • Format only what you changed: clang-format -i -style=file -fallback-style=none <file>. Do not run formatcode.sh — it has no exclusions and rewrites all of deps/ and streamelements/deps/.

Release channels status

Extended Status Page — every channel on both platforms, with build dates, promotion drift and release notes, read live from the CDN manifests. Source: docs/status.html.

Deployment

  1. Make sure RELEASE_NOTES.md reflects the release content of the plug-in since previous release to the public (latest release group).

  2. Once this repository is built, run the Release Signed Binaries action in github.

Proper deployment order

From Environment To Environment Predicate
signed qa none
qa beta passes internal and closed beta testing
beta latest 2 weeks without serious issues on beta
latest stable 2 weeks without stability issues on latest

About

OBS plugin core (SE.Live)

Resources

Stars

21 stars

Watchers

9 watching

Forks

Releases

Packages

Used by

Contributors

Languages