5.9 KiB
OBS Replay Buffer for IT Support
IT support tool that runs OBS Studio's replay buffer silently on VDI sessions, giving users a system tray button to save the last N minutes of screen activity when an issue occurs. Clips are saved to a central UNC share organized by username.
How It Works
- DEM assigns this to targeted users at logon via App Volumes (OBS) + file transfer + logon task
- OBS launches hidden with the replay buffer running — users never see the OBS interface
- A system tray icon appears — right-click → Save Replay
- The clip saves to
\\server\ITCaptures\<username>\YYYY-MM-DD_HH-MM-SS.mkv
Architecture
| Component | Role |
|---|---|
| App Volumes AppStack | Delivers OBS Studio to targeted VDI sessions |
| DEM File Transfer | Drops OBS config files into %APPDATA%\obs-studio\ at logon |
| DEM Logon Task | Runs Start-OBSReplayBuffer.ps1 at logon |
config.psd1 |
Central config — UNC path, buffer duration, OBS executable path |
Start-OBSReplayBuffer.ps1 |
Creates user capture folder, writes OBS profile, launches OBS + tray icon |
Show-ReplayTray.ps1 |
WinForms system tray icon — right-click menu with Save Replay / Exit |
Invoke-ReplaySave.ps1 |
Sends SaveReplayBuffer to OBS via WebSocket v5 (built into OBS 28+) |
obs-config/ |
OBS profile, scene collection, and WebSocket config delivered by DEM |
Repository Structure
obs-replay-buffer/
├── config.psd1
├── scripts/
│ ├── Start-OBSReplayBuffer.ps1
│ ├── Show-ReplayTray.ps1
│ └── Invoke-ReplaySave.ps1
└── obs-config/
├── global.ini
├── profiles/
│ └── ITMonitor/
│ └── basic.ini
├── scenes/
│ └── ITMonitor.json
└── plugin_config/
└── obs-websocket/
└── config.json
Prerequisites
- OBS Studio 28+ packaged as an App Volumes AppStack (WebSocket v5 is built in — no plugin needed)
- VMware App Volumes to deliver OBS to targeted users
- VMware DEM to deliver config files and run the logon task
- A UNC share writable by VDI users for clip storage
- A network share to host this repo's files, accessible from all VDI machines
Configuration
Edit config.psd1 before deploying:
| Key | Description | Default |
|---|---|---|
UNCPath |
Base UNC path for clip storage — username subfolder created automatically | \\server\ITCaptures |
BufferSeconds |
Replay buffer duration in seconds | 120 |
WebSocketPort |
OBS WebSocket port — must match obs-config/plugin_config/obs-websocket/config.json |
4455 |
OBSExecutable |
Full path to obs64.exe on the VDI machine |
C:\Program Files\obs-studio\bin\64bit\obs64.exe |
ProfileName |
OBS profile name — must match the folder under obs-config/profiles/ |
ITMonitor |
SceneCollection |
OBS scene collection name — must match the filename under obs-config/scenes/ |
ITMonitor |
Deployment
Step 1 — Host the repo on a network share
Place this repo (or a copy of it) on a share accessible from all VDI machines, e.g.:
\\stcu-fs01\IT-Tools\OBS-Record\
Step 2 — DEM: File Transfer tasks
Create these file transfer tasks in DEM, scoped to the target user group. All run at logon.
| Source (on network share) | Destination (on VDI session) |
|---|---|
obs-config\profiles\ITMonitor\ |
%APPDATA%\obs-studio\basic\profiles\ITMonitor\ |
obs-config\scenes\ITMonitor.json |
%APPDATA%\obs-studio\basic\scenes\ITMonitor.json |
obs-config\plugin_config\obs-websocket\config.json |
%APPDATA%\obs-studio\plugin_config\obs-websocket\config.json |
obs-config\global.ini |
%APPDATA%\obs-studio\global.ini |
Note:
basic.iniis intentionally not delivered by DEM — it is written dynamically at logon byStart-OBSReplayBuffer.ps1so that the correct UNC path (including username) and primary monitor resolution are baked in per session.
Step 3 — DEM: Logon task
Create one logon task in DEM (scoped to the same target group). Set it to not wait for completion.
powershell.exe -ExecutionPolicy Bypass -NonInteractive -WindowStyle Hidden -File "\\stcu-fs01\IT-Tools\OBS-Record\scripts\Start-OBSReplayBuffer.ps1"
This script handles launching both OBS and the tray icon — no second task needed.
Step 4 — Assign App Volumes AppStack
Assign the OBS AppStack to the same user group in App Volumes. The logon task will exit cleanly if OBS is not present or already running.
User Experience
- A shield icon appears in the system tray at logon — no other UI is visible
- Right-click the icon → Save Replay to save the last
BufferSecondsof screen activity - A balloon notification confirms success or failure
- Clips appear at
\\server\ITCaptures\<username>\named by timestamp
Changing the Buffer Duration
Update BufferSeconds in config.psd1. The value is written into the OBS profile at each logon, so no repackaging of the App Volumes AppStack is needed.
Notes
Scene Collection JSON
The obs-config/scenes/ITMonitor.json file was generated to target monitor index 0 (primary display). If it does not capture correctly on first use:
- Launch OBS normally on a test machine with the AppStack assigned
- Manually configure a Display Capture source pointed at the primary monitor
- Save, then copy
%APPDATA%\obs-studio\basic\scenes\ITMonitor.jsonback into this repo
The basic.ini and WebSocket config are reliable and should not need adjustment.
OBS Tray Icon vs. IT Tray Icon
OBS itself also places a tray icon when minimized to tray. Users will see two icons — the OBS icon and the IT Screen Recorder shield icon. The OBS icon can be right-clicked to quit OBS, which would break the replay buffer. If this is a concern, a future enhancement could hide the OBS tray icon via a startup flag or OBS config setting.