Native OBS audio filter for local DPDFNet speech enhancement.
obs-dpdfnet loads a streaming DPDFNet ONNX model, processes 10 ms mono voice
frames with ONNX Runtime, and returns the enhanced signal as a regular OBS
audio filter. It is tuned for a close dynamic microphone in a 48 kHz OBS setup.
Audio processing runs locally. The plugin does not make network requests at runtime.
This is an early, working OBS plugin. The Windows path is the primary tested
path right now, including the direct MSVC helper scripts in scripts/.
Current filter:
- OBS filter name:
DPDFNet Noise Suppression - Default model:
models/dpdfnet8_48khz_hr.onnx - Model input: streaming DPDFNet ONNX with metadata-backed state initialization
- Audio path: one selected mono input, blended back to the source channels
- Controls: model path, input channel, suppression limit, wet mix, output gain, bypass, reset state
From PowerShell in this directory:
.\scripts\bootstrap-windows.ps1
.\scripts\build-windows-msvc.ps1
.\scripts\install-windows.ps1 -BuildDir .\build\msvcRestart OBS, then add the filter here:
Audio Mixer -> mic gear -> Filters -> + -> DPDFNet Noise Suppression
The helper scripts download third-party build inputs into third_party/, build
outputs into build/, and install the plugin under OBS's per-machine plugin
folder:
%ProgramData%\obs-studio\plugins\obs-dpdfnet
For preserving an RE20-style close dynamic mic sound, start with:
Input channel:Input 1 / leftSuppression limit:24-30 dBWet mix:100%Output gain:0 dB- OBS sample rate:
48 kHz
Raise the suppression limit only when the room noise is still obvious while
speaking. 40 dB is aggressive, and 60 dB is mostly useful as a diagnostic or
extreme setting.
This is a single-channel speech enhancer. On stereo sources, choose the mic
input channel explicitly or use Mix all channels only when that is really what
you want. Use it on a microphone source, not on desktop audio or music.
If the loaded model sample rate does not match OBS's audio sample rate, the filter bypasses and logs a warning. The bundled models expect 48 kHz.
Requirements:
- OBS Studio development files with
libobsConfig.cmake - CMake 3.24+
- Visual Studio 2022 on Windows, or a C++17 compiler on Linux/macOS
- ONNX Runtime C/C++ package
- Network access during CMake configure, unless you provide KissFFT yourself
The official OBS installer may not include the development CMake package. If
CMake cannot find libobs, build against an OBS source/build tree or an OBS
plugin development package.
Example Windows configure:
.\scripts\bootstrap-windows.ps1
cmake -S . -B build -G "Visual Studio 17 2022" -A x64 `
-Dlibobs_DIR="C:\path\to\obs-studio\build_x64\libobs" `
-DONNXRUNTIME_ROOT="$PWD\third_party\onnxruntime"
cmake --build build --config Release
.\scripts\install-windows.ps1 -BuildDir .\buildOptional standalone model smoke test:
cmake -S . -B build-smoke -G "Visual Studio 17 2022" -A x64 `
-DDPDFNET_BUILD_MODEL_SMOKE=ON `
-Dlibobs_DIR="C:\path\to\obs-studio\build_x64\libobs" `
-DONNXRUNTIME_ROOT="$PWD\third_party\onnxruntime"
cmake --build build-smoke --config Release --target dpdfnet-model-smoke
.\build-smoke\Release\dpdfnet-model-smoke.exe .\models\dpdfnet8_48khz_hr.onnxThe models/ directory contains DPDFNet ONNX artifacts from
Ceva-IP/DPDFNet. models/manifest.json records the source revision, file
names, sizes, and SHA-256 hashes.
To refresh ONNX Runtime and the DPDFNet models with hash checks:
.\scripts\update-windows.ps1To refresh, rebuild, and install:
.\scripts\update-windows.ps1 -Build -InstallThe plugin source code is licensed under GPL-2.0-or-later. The bundled DPDFNet
model artifacts and downloaded build/runtime dependencies keep their upstream
licenses. See LICENSE, THIRD_PARTY.md, and LICENSES/.