Entry point for OBS Studio plugin development. Routes to specialized skills for audio plugins, video plugins, outputs, encoders, and services...
Entry point skill for the OBS Studio plugin development ecosystem. Routes to specialized skills based on plugin type and guides initial project setup.
| Task | Use Skill |
|---|---|
| Create audio filter | obs-audio-plugin-writing |
| Create audio source | obs-audio-plugin-writing |
| Review plugin code | obs-plugin-reviewing |
| Video plugins (future) | Check this skill for updates |
| Output plugins (future) | Check this skill for updates |
| Encoder plugins (future) | Check this skill for updates |
Sources render video and/or audio content. Three main types:
| Type | Flag | Purpose |
|---|---|---|
| INPUT | OBS_SOURCE_TYPE_INPUT |
Capture devices, generators |
| FILTER | OBS_SOURCE_TYPE_FILTER |
Process video/audio from parent |
| TRANSITION | OBS_SOURCE_TYPE_TRANSITION |
Animate between sources |
Output capability flags:
OBS_SOURCE_VIDEO - Renders videoOBS_SOURCE_AUDIO - Outputs audioOBS_SOURCE_ASYNC_VIDEO - Provides raw frames (RAM-based)OBS_SOURCE_COMPOSITE - Contains child sourcesHandle streaming and recording by receiving raw or encoded data.
Examples: RTMP streaming, file recording, FFmpeg muxing
Wrap codec implementations for video/audio compression.
Examples: x264, NVENC, QuickSync, AAC
Integrate with streaming platforms.
Examples: Twitch, YouTube, custom RTMP
Every OBS plugin requires this boilerplate:
#include <obs-module.h>
/* Required: Exports common module functions */
OBS_DECLARE_MODULE()
/* Optional: Load locale from data/locale/ */
OBS_MODULE_USE_DEFAULT_LOCALE("my-plugin", "en-US")
bool obs_module_load(void)
{
/* Register your plugin components here */
obs_register_source(&my_source);
// obs_register_output(&my_output);
// obs_register_encoder(&my_encoder);
// obs_register_service(&my_service);
return true; /* Must return true on success */
}
void obs_module_unload(void)
{
/* Optional: Cleanup on unload */
}
Clone and customize the official template:
# Clone template
git clone https://github.com/obsproject/obs-plugintemplate my-plugin
cd my-plugin
# Edit buildspec.json with your plugin info
# Edit src/plugin-main.c with your implementation
{
"name": "my-plugin",
"displayName": "My Plugin",
"version": "1.0.0",
"author": "Your Name",
"website": "https://example.com",
"email": "you@example.com"
}
cmake_minimum_required(VERSION 3.28...3.30)
project(my-plugin VERSION 1.0.0)
add_library(${CMAKE_PROJECT_NAME} MODULE)
find_package(libobs REQUIRED)
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE OBS::libobs)
target_sources(${CMAKE_PROJECT_NAME} PRIVATE src/plugin-main.c)
# Configure
cmake -B build -S .
# Build
cmake --build build
# Install (to OBS plugins directory)
cmake --install build
my-plugin/
├── CMakeLists.txt
├── buildspec.json
├── src/
│ ├── plugin-main.c # Module registration
│ ├── my-source.c # Source implementation
│ └── plugin-support.h # Helper macros
└── data/
└── locale/
└── en-US.ini # Localization strings
mcp__context7__get-library-docs
context7CompatibleLibraryID: "/obsproject/obs-studio"
topic: "plugin development"
Use obs-plugin-expert agent for: