Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion BUILD.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,14 @@ The repository contains a self-contained Windows build helper for the currently
- Visual Studio 2026 (`18.x`) with **Desktop development with C++**
- Visual Studio bundled CMake `4.2+`
- Windows SDK `10.0.26100`
- OBS Studio source `32.2.2`
- OBS Studio SDK source `32.2.2` (pinned reproducible build baseline; OBS 33+ plugin layout)
- obs-deps `2026-07-15` x64
- Qt dependency archive from obs-deps `2026-07-15`

The build helper verifies downloaded archives by SHA-256 before use.

OBS 33+ packaging places `eb-recorder.dll` directly in the `eb-recorder` folder alongside `data/`. The pinned OBS 32 SDK is intentionally unchanged for this layout-only update: the encoder/output APIs used by the plugin did not change between OBS 32.2.2 and 33.0.0. Run a recording smoke test before release.

## Normal build

From the repository root:
Expand Down
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,15 @@
# Changelog

## [0.3.3](release-notes/v0.3.3.md)

OBS Studio 33+ installation compatibility.

- Updated the DLL location to the root of the plugin folder in ProgramData (OBS 33+ and future OBS versions).
- Migrates existing legacy `bin\64bit` installs with an atomic folder swap and rollback on failure.
- Updated CMake packaging, build checks, and Windows portable OBS installation instructions.
- No changes to encoder reuse, audio tracks, recording, or hotkeys. OBS 32.x users should stay on v0.3.2.


## [0.3.2](release-notes/v0.3.2.md)

Native OBS hotkeys.
Expand Down
8 changes: 4 additions & 4 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 4.2...4.3)

project(eb-recorder VERSION 0.3.2 LANGUAGES CXX)
project(eb-recorder VERSION 0.3.3 LANGUAGES CXX)

find_package(libobs CONFIG REQUIRED)
find_package(obs-frontend-api CONFIG REQUIRED)
Expand Down Expand Up @@ -32,9 +32,9 @@ set_target_properties(

install(
TARGETS eb-recorder
RUNTIME DESTINATION "eb-recorder/bin/64bit"
LIBRARY DESTINATION "eb-recorder/bin/64bit"
ARCHIVE DESTINATION "eb-recorder/bin/64bit"
RUNTIME DESTINATION "eb-recorder"
LIBRARY DESTINATION "eb-recorder"
ARCHIVE DESTINATION "eb-recorder"
)
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/data/" DESTINATION "eb-recorder/data")
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/VERSION.txt" DESTINATION "eb-recorder")
Expand Down
44 changes: 13 additions & 31 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ No extra video encoder is created by EB Recorder.

The current release has been tested with:

- OBS Studio `32.2.2` x64 on Windows
- OBS Studio `32.2.2` x64 on Windows (EB recording tested); OBS Studio `33.0.0` (new plugin layout and load verified, recording still to be retested)
- Twitch Enhanced Broadcasting / Multitrack Video
- NVIDIA NVENC
- TOP rendition: HEVC `2560x1440 60 fps`, approximately `9000 kbps`
Expand All @@ -60,51 +60,33 @@ Other Enhanced Broadcasting encoder combinations may work, but are not yet part
5. Run `INSTALL.cmd`.
6. Start OBS and open **Tools -> EB Recorder**.

The installer uses this isolated OBS plugin directory:
The installer uses the official OBS 33+ third-party plugin layout:

```text
C:\ProgramData\obs-studio\plugins\eb-recorder\
C:\ProgramData\obs-studio\plugins\eb-recorder\eb-recorder.dll
C:\ProgramData\obs-studio\plugins\eb-recorder\data\locale\en-US.ini
C:\ProgramData\obs-studio\plugins\eb-recorder\data\locale\ru-RU.ini
```

Older v0.3.2 installations under `bin\64bit` are replaced atomically (with rollback on failure). For OBS 32.x, keep using EB Recorder v0.3.2; OBS 32 does not load this new format.

It does not depend on the OBS installation folder, so regular OBS installations and Steam installations can be located on any drive.

It does not create registry entries, services, scheduled tasks or PATH changes.

To remove EB Recorder, close OBS and run `UNINSTALL.cmd` from the extracted release package.

### Portable OBS installation

`INSTALL.cmd` is intended for regular and Steam installations. If OBS is running in portable mode, install EB Recorder manually into the portable OBS folder.

From the extracted EB Recorder release package:

1. Copy `eb-recorder\bin\64bit\eb-recorder.dll` to:

```text
<OBS Portable>\obs-plugins\64bit\eb-recorder.dll
```

2. Create this folder if it does not already exist:

```text
<OBS Portable>\data\obs-plugins\eb-recorder\locale\
```

3. Copy `en-US.ini` and `ru-RU.ini` from `eb-recorder\data\locale\` into that `locale` folder.
4. Start the portable OBS build and open **Tools -> EB Recorder**.
### Portable OBS installation (OBS 33+)

The resulting portable layout should look like this:
For a portable OBS 33+ installation, copy the extracted release folder `eb-recorder` to `<OBS Portable>\plugins\`. The result must be:

```text
<OBS Portable>\
├─ bin\64bit\obs64.exe
├─ obs-plugins\64bit\eb-recorder.dll
└─ data\obs-plugins\eb-recorder\locale\
├─ en-US.ini
└─ ru-RU.ini
<OBS Portable>\plugins\eb-recorder\eb-recorder.dll
<OBS Portable>\plugins\eb-recorder\data\locale\en-US.ini
<OBS Portable>\plugins\eb-recorder\data\locale\ru-RU.ini
```

For portable installations, removal is also manual: close OBS and delete the EB Recorder DLL and its `data\obs-plugins\eb-recorder` folder.
The normal `INSTALL.cmd` targets ProgramData (not portable OBS). Removal in portable mode is manual: close OBS, then delete the `<OBS Portable>\plugins\eb-recorder` directory.

## Usage

Expand Down
44 changes: 13 additions & 31 deletions README_RU.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ EB Recorder находит уже активные EB-кодировщики OBS

Текущая версия протестирована с:

- OBS Studio `32.2.2` x64 на Windows
- OBS Studio `32.2.2` x64 на Windows (запись EB проверена); OBS Studio `33.0.0` (загрузка из нового расположения подтверждена, запись нужно проверить отдельно)
- Twitch Enhanced Broadcasting / Multitrack Video
- NVIDIA NVENC
- TOP-поток: HEVC `2560x1440 60 fps`, около `9000 кбит/с`
Expand All @@ -60,51 +60,33 @@ EB Recorder находит уже активные EB-кодировщики OBS
5. Запустите `INSTALL.cmd`.
6. Запустите OBS и откройте **Сервис -> EB Recorder**.

Плагин устанавливается изолированно в:
Установщик использует официальную структуру сторонних плагинов OBS 33+:

```text
C:\ProgramData\obs-studio\plugins\eb-recorder\
C:\ProgramData\obs-studio\plugins\eb-recorder\eb-recorder.dll
C:\ProgramData\obs-studio\plugins\eb-recorder\data\locale\en-US.ini
C:\ProgramData\obs-studio\plugins\eb-recorder\data\locale\ru-RU.ini
```

Старые установки 0.3.2 с DLL в `bin\64bit` заменяются атомарно с откатом при ошибке. Для OBS 32.x следует оставить EB Recorder 0.3.2: OBS 32 не поддерживает новую структуру.

Установщик не зависит от папки, в которой установлен OBS, поэтому обычную или Steam-версию OBS можно держать на любом диске.

Установщик не создаёт записей в реестре, служб, задач планировщика и не меняет PATH.

Для удаления закройте OBS и запустите `UNINSTALL.cmd` из распакованного release-архива.

### Установка в portable OBS

`INSTALL.cmd` рассчитан на обычную и Steam-установку OBS. Если OBS работает в portable-режиме, EB Recorder нужно установить вручную в папку portable OBS.

Из распакованного архива EB Recorder:

1. Скопируйте `eb-recorder\bin\64bit\eb-recorder.dll` сюда:

```text
<OBS Portable>\obs-plugins\64bit\eb-recorder.dll
```

2. Создайте эту папку, если её ещё нет:

```text
<OBS Portable>\data\obs-plugins\eb-recorder\locale\
```

3. Скопируйте `en-US.ini` и `ru-RU.ini` из `eb-recorder\data\locale\` в эту папку `locale`.
4. Запустите portable OBS и откройте **Сервис -> EB Recorder**.
### Установка в portable OBS (OBS 33+)

Итоговая структура должна выглядеть так:
Для переносной OBS 33+ скопируйте папку `eb-recorder` из архива релиза в `<OBS Portable>\plugins\`. Итог:

```text
<OBS Portable>\
├─ bin\64bit\obs64.exe
├─ obs-plugins\64bit\eb-recorder.dll
└─ data\obs-plugins\eb-recorder\locale\
├─ en-US.ini
└─ ru-RU.ini
<OBS Portable>\plugins\eb-recorder\eb-recorder.dll
<OBS Portable>\plugins\eb-recorder\data\locale\en-US.ini
<OBS Portable>\plugins\eb-recorder\data\locale\ru-RU.ini
```

Для portable-установки удаление тоже выполняется вручную. Закройте OBS, удалите `eb-recorder.dll` и папку `data\obs-plugins\eb-recorder`.
Обычный `INSTALL.cmd` устанавливает плагин в ProgramData, а не в portable OBS. Для удаления из portable OBS закройте программу и удалите папку `<OBS Portable>\plugins\eb-recorder`.

## Использование

Expand Down
2 changes: 1 addition & 1 deletion VERSION.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.3.2
0.3.3
4 changes: 2 additions & 2 deletions data/locale/en-US.ini
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
EBRecorder.ToolsMenu="EB Recorder"
EBRecorder.Title="EB Recorder 0.3.2"
EBRecorder.Intro="Version 0.3.2 records the active highest-resolution Enhanced Broadcasting rendition to crash-resilient Matroska (MKV) by reusing the existing EB video and selected Live/VOD audio encoders. Recording can be started manually or automatically together with the EB stream."
EBRecorder.Title="EB Recorder 0.3.3"
EBRecorder.Intro="Version 0.3.3 records the active highest-resolution Enhanced Broadcasting rendition to crash-resilient Matroska (MKV) by reusing the existing EB video and selected Live/VOD audio encoders. Recording can be started manually or automatically together with the EB stream."
EBRecorder.Status.None="No active Enhanced Broadcasting video encoders detected. Start an EB stream and refresh."
EBRecorder.Status.Found="Detected %1 active Enhanced Broadcasting video encoder(s)."
EBRecorder.Selected.None="Top EB stream: not available."
Expand Down
4 changes: 2 additions & 2 deletions data/locale/ru-RU.ini
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
EBRecorder.ToolsMenu="EB Recorder"
EBRecorder.Title="EB Recorder 0.3.2"
EBRecorder.Intro="Версия 0.3.2 записывает активный поток Enhanced Broadcasting с максимальным разрешением в устойчивый к аварийному завершению Matroska (MKV), повторно используя уже работающий EB-видеокодировщик и выбранные аудиодорожки Live/VOD. Запись можно запускать вручную или автоматически вместе с EB-трансляцией."
EBRecorder.Title="EB Recorder 0.3.3"
EBRecorder.Intro="Версия 0.3.3 записывает активный поток Enhanced Broadcasting с максимальным разрешением в устойчивый к аварийному завершению Matroska (MKV), повторно используя уже работающий EB-видеокодировщик и выбранные аудиодорожки Live/VOD. Запись можно запускать вручную или автоматически вместе с EB-трансляцией."
EBRecorder.Status.None="Активные видеокодировщики Enhanced Broadcasting не найдены. Запусти EB-трансляцию и обнови список."
EBRecorder.Status.Found="Обнаружено активных видеокодировщиков Enhanced Broadcasting: %1."
EBRecorder.Selected.None="Верхний EB-поток: недоступен."
Expand Down
26 changes: 26 additions & 0 deletions release-notes/v0.3.3.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# EB Recorder 0.3.3 — OBS Studio 33+ plugin installation

## Changes
- Updated the Windows release package to the official OBS Studio 33+ third-party plugin layout:
- `eb-recorder/eb-recorder.dll`
- `eb-recorder/data/locale/en-US.ini`
- `eb-recorder/data/locale/ru-RU.ini`
- Updated the installer to replace older `bin/64bit` installations using its existing staging, validation and rollback strategy. An existing plugin configuration is not changed.
- Updated CMake packaging, Windows build output validation, English and Russian documentation, and portable OBS instructions.
- Kept existing Enhanced Broadcasting encoder reuse, Live/VOD audio, Matroska recording, and hotkeys unchanged.

## Compatibility
- **Target:** OBS Studio 33.x and newer, Windows x64.
- **OBS 32.x:** continue using EB Recorder v0.3.2; this release's flat plugin layout is not recognized by OBS 32.
- The build stays pinned to the proven OBS 32.2.2 SDK baseline because the relevant libobs encoder/output APIs and Twitch multitrack encoder names are unchanged in OBS 33.0.0.

## Verification before release
- [ ] Windows CI builds the v0.3.3 ZIP and SHA256 successfully.
- [ ] New ZIP has exactly one `eb-recorder.dll` in the plugin root, no legacy copy.
- [ ] Installer clean install in OBS 33 and upgrade from v0.3.2 do not produce a Legacy badge.
- [ ] EB Recorder appears under OBS Tools.
- [ ] Twitch EB recording reuses the top video encoder and Live/VOD audio without additional encoding.
- [ ] Manual/automatic start-stop and hotkeys work.
- [ ] Uninstall removes plugin files from ProgramData.

No release should be published until the runtime smoke test is complete.
4 changes: 2 additions & 2 deletions scripts/build-windows.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -322,7 +322,7 @@ if (-not (Test-Path $ObsDepsPrefix)) {
$PrefixPath = "$ObsSdk;$ObsDepsPrefix;$QtPrefix"

Write-Host ''
Write-Host 'EB Recorder build package: r6.4 (production Release)' -ForegroundColor Cyan
Write-Host 'EB Recorder build package: r6.5 (production Release)' -ForegroundColor Cyan
Write-Host 'Configuring EB Recorder plugin...'
$PluginConfigureArgs = @(
'-S', $Root,
Expand All @@ -344,7 +344,7 @@ $PluginInstallArgs = @('--install', $PluginBuild, '--config', 'Release', '--pref
Invoke-CMake $PluginInstallArgs 'EB Recorder install failed.'

$PluginStaging = Join-Path $StagingDir 'eb-recorder'
$BuiltDll = Join-Path $PluginStaging 'bin\64bit\eb-recorder.dll'
$BuiltDll = Join-Path $PluginStaging 'eb-recorder.dll'
if (-not (Test-Path $BuiltDll)) {
throw "Built DLL was not found at '$BuiltDll'."
}
Expand Down
27 changes: 14 additions & 13 deletions scripts/install.ps1
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
$ErrorActionPreference = 'Stop'

$PluginVersion = '0.3.2'
$BuildRevision = 'r6.4'
$PluginVersion = '0.3.3'
$BuildRevision = 'r6.5'

if (Get-Process obs64 -ErrorAction SilentlyContinue) {
Write-Host 'OBS Studio is running. Close OBS and run the installer again.' -ForegroundColor Yellow
Expand All @@ -14,10 +14,11 @@ if (-not (Test-Path $Source -PathType Container)) {
throw "Plugin folder not found: $Source"
}

# Use the isolated ProgramData plugin layout validated with OBS Studio 32.2.2:
# %ProgramData%\obs-studio\plugins\eb-recorder\bin\64bit\eb-recorder.dll
# OBS Studio 33+ official third-party plugin layout (OBS 34 removes the legacy layout):
# %ProgramData%\obs-studio\plugins\eb-recorder\eb-recorder.dll
# %ProgramData%\obs-studio\plugins\eb-recorder\data\...
$SourceDll = Join-Path $Source 'bin\64bit\eb-recorder.dll'
# OBS 32 users should continue using EB Recorder v0.3.2.
$SourceDll = Join-Path $Source 'eb-recorder.dll'
$SourceData = Join-Path $Source 'data'
$SourceEnLocale = Join-Path $SourceData 'locale\en-US.ini'
$SourceRuLocale = Join-Path $SourceData 'locale\ru-RU.ini'
Expand Down Expand Up @@ -57,7 +58,7 @@ if (-not (Test-Path (Join-Path $NewTarget 'VERSION.txt') -PathType Leaf)) {
Set-Content -Path (Join-Path $NewTarget 'VERSION.txt') -Value $PluginVersion -Encoding ASCII
}

$InstalledDll = Join-Path $NewTarget 'bin\64bit\eb-recorder.dll'
$InstalledDll = Join-Path $NewTarget 'eb-recorder.dll'
$InstalledEnLocale = Join-Path $NewTarget 'data\locale\en-US.ini'
$InstalledRuLocale = Join-Path $NewTarget 'data\locale\ru-RU.ini'
foreach ($Required in @($InstalledDll, $InstalledEnLocale, $InstalledRuLocale)) {
Expand All @@ -75,7 +76,7 @@ try {
Move-Item $NewTarget $Target

# Validate the final paths before deleting the rollback copy.
$FinalDll = Join-Path $Target 'bin\64bit\eb-recorder.dll'
$FinalDll = Join-Path $Target 'eb-recorder.dll'
$FinalEnLocale = Join-Path $Target 'data\locale\en-US.ini'
$FinalRuLocale = Join-Path $Target 'data\locale\ru-RU.ini'
foreach ($Required in @($FinalDll, $FinalEnLocale, $FinalRuLocale)) {
Expand All @@ -84,10 +85,10 @@ try {
}
}

# A flat-layout DLL from r4.2/r4.2.1 must not exist in the new installation.
$UnexpectedFlatDll = Join-Path $Target 'eb-recorder.dll'
if (Test-Path $UnexpectedFlatDll -PathType Leaf) {
throw "Unexpected flat-layout DLL remained after installation: $UnexpectedFlatDll"
# No stale legacy DLL may remain after migrating from v0.3.2.
$UnexpectedLegacyDll = Join-Path $Target 'bin\64bit\eb-recorder.dll'
if (Test-Path $UnexpectedLegacyDll -PathType Leaf) {
throw "Legacy DLL remained after installation: $UnexpectedLegacyDll"
}

Remove-Item $BackupTarget -Recurse -Force -ErrorAction SilentlyContinue
Expand All @@ -109,9 +110,9 @@ if ($Updating) {
} else {
Write-Host "Installed EB Recorder $PluginVersion ($BuildRevision)" -ForegroundColor Green
}
Write-Host 'Layout: ProgramData plugin layout (bin\64bit)'
Write-Host 'Layout: OBS Studio 33+ ProgramData root DLL'
Write-Host "Plugin folder: $Target"
Write-Host "DLL: $(Join-Path $Target 'bin\64bit\eb-recorder.dll')"
Write-Host "DLL: $(Join-Path $Target 'eb-recorder.dll')"
Write-Host "Locale: $(Join-Path $Target 'data\locale')"
Write-Host 'The previous eb-recorder folder was replaced completely; no stale DLL from an older build remains.'
Write-Host 'Removal is simple: close OBS and run UNINSTALL.cmd. It removes the plugin and its small OBS plugin_config settings folder.'
Loading
Loading